1. 程式人生 > >深度學習對話系統理論篇--資料集和評價指標介紹

深度學習對話系統理論篇--資料集和評價指標介紹

對話系統常用評價指標

當前對話系統之所以還沒有取得突破性的進展,很大程度上是因為沒有一個可以準確表示回答效果好壞的評價標準。對話系統中大都使用機器翻譯、摘要生成領域提出來的評價指標,但是很明顯對話系統的場景和需求與他們是存在差別的,這也是當前模型效果不是很好的原因之一。從對話系統不同的層次角度來評價對話系統的效果時,每個層面會有不同的關注點,如下圖所示:

從上圖可以看出,黃色標識人類的主觀角度,而藍色表示系統的一些客觀評價指標,可以用來衡量主觀需求。對於某一輪對話而言,可以使用響應的適當性、流暢度、相關性;對於多輪對話而言,我們更關注流暢性、對話深度、多樣性、一致連貫性等指標;而對於整個對話系統,我們則希望他可以涵蓋更多的話題、回覆真實可信等等。這些都是我們想要對話系統所擁有的能力,但是往往在一個具體的任務中我們只能關注某一項或者幾項指標,這裡我們主要針對開放域生成式對話模型的評價指標進行總結。

首先感謝@徐阿衡回答的了我的這個問題:現在基於深度學習的對話系統常用的評價指標有哪些,分別有什麼優缺點和適用範圍?,讓我對當前對話系統的評價指標有了一個大致的認識,這裡主要關注於其提到的第二點也就是詞重疊評價指標(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專案:

中文資料集