深度學習對話系統理論--資料集和評價指標介紹
對話系統常用評價指標
當前對話系統之所以還沒有取得突破性的進展,很大程度上是因為沒有一個可以準確表示回答效果好壞的評價標準。對話系統中大都使用機器翻譯、摘要生成領域提出來的評價指標,但是很明顯對話系統的場景和需求與他們是存在差別的,這也是當前模型效果不是很好的原因之一。從對話系統不同的層次角度來評價對話系統的效果時,每個層面會有不同的關注點,如下圖所示:
從上圖可以看出,黃色標識人類的主觀角度,而藍色表示系統的一些客觀評價指標,可以用來衡量主觀需求。對於某一輪對話而言,可以使用響應的適當性、流暢度、相關性;對於多輪對話而言,我們更關注流暢性、對話深度、多樣性、一致連貫性等指標;而對於整個對話系統,我們則希望他可以涵蓋更多的話題、回覆真實可信等等。這些都是我們想要對話系統所擁有的能力,但是往往在一個具體的任務中我們只能關注某一項或者幾項指標,這裡我們主要針對開放域生成式對話模型的評價指標進行總結。
首先感謝@徐阿衡回答的了我的這個問題:現在基於深度學習的對話系統常用的評價指標有哪些,分別有什麼優缺點和適用範圍?,讓我對當前對話系統的評價指標有了一個大致的認識,這裡主要關注於其提到的第二點也就是詞重疊評價指標(BLEU、ROUGE、METEOR)和詞向量評價指標(Greedy matching、Embedding Average、Vector Extrema),還有perplexity困惑度,會擴充套件的講一下每種指標的細節。這部分內容可以參考論文“How NOT To Evaluate Your Dialogue System: An Empirical Study of Unsupervised Evaluation Metrics for Dialogue Response Generation”,該論文詳細論述了非監督生成式對話系統的各種評價指標。
詞重疊評價指標
首先來看詞重疊評價指標,他們認為有效地回答應該和真實回答之間存在大量的詞重疊(但是對話系統的答案空間往往是發散的,也就是一個問題的答案可能是完全不同的兩句話,這種情況下該評價指標效果不好),也就是說這是一個非常強的假設。(以下環節中r表示真是響應,r^表示系統生成響應)
BLEU
該評價指標有IBM在2002年提出,參考論文“BLEU: a Method for Automatic Evaluation of Machine Translation”,常作為機器翻譯系統評價指標。其實就是統計生成響應和真實響應中的n-gram片語在整個訓練語料中出現次數。公式如下所示:
第一個公式Pn用於計算n-gram短語片語在整個資料集中的準確度。h(k,r)表示每個n-gram片語在真實響應中出現的次數(因為對於每個n而言都會存在很多個n-gram片語,所以要有一個求和符號)。所以上式就是每個n-gram片語在真實和生成響應中出現次數的較小值求和除以其在生成響應中出現次數求和,表徵了一種精確度度量。當然,我們需要考慮n的取值(一般取1-4),所以有了第二個公式,beta表示各個n-gram的權重(可以去均勻分佈),也就是對1-4進行加權求和,而b(r,r^)表示長度懲罰因子,即我們不想讓生成的答案長度太短,所以加一個懲罰因子來改善效果。
可以參考這篇文章,結合一個實際的例子和程式碼進行理解BLEU的原理:機器翻譯評價指標之BLEU
ROUGE
該指標常用於文字摘要領域,包含 ROUGE-N, ROUGE-L(最長公共子句, Fmeasure), ROUGE-W(帶權重的最長公共子句, Fmeasure), ROUGE-S(不連續二元組, Fmeasure) 四種。這裡以ROUGE-L為例進行介紹,更多可以參考“自動文件摘要評價方法—Edmundson和ROUGE”一文。
ROUGE-L,是計算最長公共子序列的長度,感覺像是在刷題一樣==。其實就是尋找真是響應和生成響應之間的最長公共子序列長度,然後計算其F-measure分數。其與BLEU相似,因為都可以反應詞語順序,但是ROUGE的詞可以不是連續的,而BLEU的n-gram要求詞語必須連續出現。比如兩句話“我喜歡吃西瓜”和“我剛才吃了一個西瓜”的最長公共子串為“我 吃 西 瓜”。
METEOR
METEOR是基於BLEU進行了一些改進,加入了生成響應和真實響應之間的對其關係。使用WordNet計算特定的序列匹配,同義詞,詞根和詞綴,釋義之間的匹配關係,改善了BLEU的效果,使其跟人工判別共更強的相關性。同樣也是使用F-measure的計算方法,如下圖所示,具體可以參考論文“ METEOR: An automatic metric for mt evaluation with improved correlation with human judgments”:
上面這三種評價指標在對話系統中使用的頻率貌似是BLEU比較高一點,剩下兩個都很少見到。
詞向量評價指標
上面的詞重疊評價指標基本上都是n-gram方式,去計算生成響應和真是響應之間的重合程度,共現程度等指標。而詞向量則是通過Word2Vec、Sent2Vec等方法將句子轉換為向量表示,這樣一個句子就被對映到一個低維空間,句向量在一定程度上表徵了其含義,在通過餘弦相似度等方法就可以計算兩個句子之間的相似程度。使用詞向量的好處是,可以一定程度上增加答案的多樣性,因為這裡大多采用詞語相似度進行表徵,相比詞重疊中要求出現完全相同的詞語,限制降低了很多。
Greedy Matching
如上圖所示,對於真實響應的每個詞,尋找其在生成響應中相似度最高的詞,並將其餘弦相似度相加並求平均。同樣再對生成響應再做一遍,並取二者的平均值。上面的相似度計算都是基於詞向量進行的,可以看出本方法主要關注兩句話之間最相似的那些詞語,即關鍵詞。
Embedding Average
這種方法直接使用句向量計算真實響應和生成響應之間的相似度,而句向量則是每個詞向量加權平均而來,如下圖所示。然後使用餘弦相似度來計算兩個句向量之間的相似度。
Vector Extrema
跟上面的方法類似,也是先通過詞向量計算出句向量,在使用句向量之間的餘弦相似度表示二者的相似度。不過句向量的計算方法略有不同,這裡採用向量極值法進行計算。
perplexity困惑度
perplexity是語言模型中的指標,用於評價語言模型的好壞,其實就是估算一句話出現的概率,看一句話是否通順。也經常會在對話系統中出現評價生成的響應是否符合語言規則,計算方法也很簡單,如下圖所示:
所以當我們使用tf.contrib.seq2seq.sequence_loss()函式計算模型loss的時候,perplexity的計算就顯得很簡單了,直接對計算出來的loss取個指數就行了,命令如下所示:
train_perp = math.exp(float(mean_loss)) if mean_loss < 300 else math.inf
現在我訓練的對話系統,一般都只是用了perplexity來評判模型的效果,最終perplexity可以降到20左右(越小越好,說明越接近於自然語言)。
人工指標
最後說一下人工評價,首先來講,上面說了這麼多的評價指標,並沒有一個可以很好的解決對話系統的問題,就像“How NOT To Evaluate Your Dialogue System”論文中說到的那樣,當下的這些評價指標都跟人工評價成弱相關或者完全沒有關係,相關程度跟具體的資料集有關。
以下摘自徐阿衡的回答:
- 在閒聊性質的資料集上,上述 metric 和人工判斷有一定微弱的關聯 (only a small positive correlation on chitchat oriented Twitter dataset)
- 在技術類的資料集上,上述 metric 和人工判斷完全沒有關聯(no correlation at all on the technical UDC)
- 當局限於一個特別具體的領域時,BLEU 會有不錯的表現
其實隨著16/17這兩年的發展,還逐漸有了一些別的評價方法,比如使用GAN網路來評價生成的回覆是否跟人類回覆相似等等,就等以後具體看到了再回來填坑吧。
對話系統常用資料集
這部分主要介紹一下當前使用比較廣泛的對話系統資料集的細節構成。也會稍微介紹一下公開的中文資料集。可以參考“A Survey of Available Corpora for Building Data-Driven Dialogue Systems”這篇論文,而且作者把所有的資料集按照不同類別進行分類總結,裡面涵蓋了很多資料集,這裡不會全部涉及,有興趣的同學可以看這個連結。
英文資料集
相關資料集的處理程式碼或者處理好的資料可以參見下面兩個github專案:
中文資料集
相關推薦
深度學習對話系統理論--資料集和評價指標介紹
對話系統常用評價指標 當前對話系統之所以還沒有取得突破性的進展,很大程度上是因為沒有一個可以準確表示回答效果好壞的評價標準。對話系統中大都使用機器翻譯、摘要生成領域提出來的評價指標,但是很明顯對話系統的場景和需求與他們是存在差別的,這也是當前模型效果不是很好的原因之一。從對
深度學習對話系統理論篇--資料集和評價指標介紹
對話系統常用評價指標 當前對話系統之所以還沒有取得突破性的進展,很大程度上是因為沒有一個可以準確表示回答效果好壞的評價標準。對話系統中大都使用機器翻譯、摘要生成領域提出來的評價指標,但是很明顯對話系統的場景和需求與他們是存在差別的,這也是當前模型效果不是很好的
目標檢測/分類常用資料集和評價指標小彙集
二:混淆矩陣 (Confusion Matrix) 三:召回率(Recall)、精確率(Precision) 四: P-R曲線、平均精度(Average-Precision,AP)、F指標 五:受試者工作特徵曲線(Receiver Operating
《Gluon 動手學深度學習》顯示影象資料集Fashion-MNIST
%matplotlib inline import sys sys.path.append('..') import gluonbook as gb from mxnet.gluon import data as gdata import time mnist_train=gdata.vision
深度學習圖片分類增強資料集的方法彙總
1.隨機切割,圖片翻轉,旋轉,等等很多手段都可以增加訓練集,提高泛化能力.2. Resampling 或者增加噪聲等等,人工合成更多的樣本.3.對小樣本資料進行仿射變換、切割、旋轉、加噪等各種處理,可以生成更多樣本.4.用GAN生成資料提供給資料集.5.找個Imagenet資
深度學習的分散式訓練--資料並行和模型並行
在深度學習這一領域經常涉及到模型的分散式訓練(包括一機多GPU的情況)。我自己在剛剛接觸到一機多卡,或者分散式訓練時曾對其中到底發生了什麼有過很多疑問,後來查看了很多資料,在這篇部落格裡對分散式的深度學習模型訓練做一個總結。 由於是我自己的總結,所以如果有
從頭實現一個深度學習對話系統--Seq-to-Seq模型詳解
上一篇文章已經介紹了幾篇關於Seq-to-Seq模型的論文和應用,這裡就主要從具體的模型細節、公式推導、結構圖以及變形等幾個方向詳細介紹一下Seq-to-Seq模型。這裡我們主要從下面幾個層次來進行介紹: Seq-to-Seq框架1 Seq-to-Seq框架
深度學習視覺領域常用資料集彙總
[導讀] “大資料時代”,資料為王!無論是資料探勘還是目前大熱的深度學習領域都離不開“大資料”。大公司們一般會有自己的資料,但對於創業公司或是高校老師、學生來說,“Where can I get large datasets open to the public?”是不得不面對的一個問題。 本文結合筆者
機器學習筆記3-拆分資料集和訓練集
拆分資料集和訓練集 from sklearn import cross_validation # for version 0.17 # For version 0.18 # from sklearn
11.何時需要改變資料集和衡量指標 翻譯自 吳恩達新書-Machine Learning Yearning
當開始一個新的專案時,我會快速的選擇開發和測試資料集,這樣可以給團隊定出明確的目標。 我一般會要求我的團隊在一週內,提出初始的開發/測試資料集和初始的衡量指標。一開始的想法不完美並沒關係,但是要快,千萬不能過度思考。但是這一做法不適合成熟的機器學習應用,比如反
# cs231n 深度學習與計算機視覺(資料彙總)--程式碼及說明 python3.x和python2.x的版本(每次更新完成的作業)
cs231n 深度學習與計算機視覺(資料彙總)–程式碼及說明 python3.x和python2.x的版本(每次更新完成的作業) 標籤(空格分隔): 神經網路 1.python2.x版本 程式碼、課程 2.python3.x版本 這個是2017
深度學習框架Caffe學習筆記(4)-MNIST資料集轉換成視覺化圖片
MNIST圖片檔案格式 train-images-idx3-ubyte 檔案偏移量 資料型別 值 描述 0000 32位整型 2051 魔數(大端儲存) 0004 32位整型 60000 檔案包
深度學習-目標檢測資料集以及評估指標
資料集和效能指標 目標檢測常用的資料集包括PASCAL VOC,ImageNet,MS COCO等資料集,這些資料集用於研究者測試演算法效能或者用於競賽。目標檢測的效能指標要考慮檢測物體的位置以及預測類別的準確性,下面我們會說到一些常用的效能評估指標。 資料集 PA
機器學習Tensorflow基於MNIST資料集識別自己的手寫數字(讀取和測試自己的模型)
更新: 以下為原博: 廢話不多說,先上效果圖 整體來看,效果是非常不錯的,模型的訓練,參照官方程式碼mnist_deep.py,準確率是高達99.2% 那麼,我是怎麼實現的呢? 一.讀懂卷積神經網路程式碼(至少得把程式跑通) 首先參照Tensorfl
【深度學習】【物聯網】深度解讀:深度學習在IoT大資料和流分析中的應用
作者|Natalie編輯|EmilyAI 前線導讀:在物聯網時代,大量的感知器每天都在收集併產生
深度學習與處理用於資料驅動的地球系統科學
開發十年,就只剩下這套架構體系了! >>>
深度學習綜述(LeCun、Bengio和Hinton)
想法 會有 區分 足夠 乘法 開發 訓練 repr 追蹤 原文摘要:深度學習可以讓那些擁有多個處理層的計算模型來學習具有多層次抽象的數據的表示。這些方法在很多方面都帶來了顯著的改善,包含最先進的語音識別、視覺對象識別、對象檢測和很多其他領域,比如藥物發現和基因組學等。深
Python學習筆記--系統相關模塊和操作
setuid val var 表達 package log 轉換 eval 最小 系統相關的信息模塊: import sys sys.argv 是一個 list,包含所有的命令行參數. sys.stdout sys.stdin sys.stderr 分別表示標準輸入
深度學習--說一說卷積和池化
hang .com image .html 特性 3*3 方法 pool 維度 卷積是神經網絡的基礎,算是大廈的地基,卷積實際上來說就是兩個數列之間的相互處理。池化的作用我感覺主要就是減小圖像或者說矩陣的大小,並且不同的池化方法選取不同的信息作為保存信息。 轉載:htt
深度學習之影象的資料增強方法彙總
參考:https://www.jianshu.com/p/99450dbdadcf 在深度學習專案中,尋找資料花費了相當多的時間。但在很多實際的專案中,我們難以找到充足的資料來完成任務。為了要保證完美地完成專案,有兩件事情需要做好:1、尋找更多的資料;2、資料增強。本篇主要描述資料增強。 有