1. 程式人生 > >對話系統評價指標

對話系統評價指標

概述

對話系統的指標分為兩大類:客觀評價指標和主觀評價指標

其中客觀評價指標分為詞重疊評價指標和詞向量評價指標。

【詞重疊評價指標】

根據生成語句與參考答案語句之間的詞重疊率來進行評價

【詞向量評價指標】

通過了解每一個詞的意思來判斷回覆的相關性,詞向量是實現這種評價方法的基礎。

  1. 給每個詞分配一個詞向量
  2. 所有詞的詞向量矩陣通過拼接成為表示一個句子的句向量,得到生成語句和參考答案語句的句向量
  3. 通過餘弦距離得到兩者相似度進行比較。

    • 客觀評價指標
    • 詞重疊評價指標
    • BLEU
    • ROUGE
    • METEOR
    • 詞向量評價指標
    • Greedy matching(貪婪匹配)
    • Embedding Average(向量均值法)
    • Vector Extrema(向量極值法)
    • 困惑度(perplexity)
    • 主觀評價指標
    • 流暢度
    • 相關性
    • 多樣性

BLEU

【思想】

BLEU就是比較模型的生成語句和參考答案語句中的n-gram片語在整個訓練語料中共現次數。

該方法認為如果共現次數越多,則越準確,效果越好。

一般採用BLEU-4

【原理】

Pn(r,r^)=kmin(h(k,r),h(k,ri))kh(k,ri)BLEU=BPe
xp(n=1NwnlogPn)BP={1if c>re1r/celse

其中
  • Pn(r,r^)計算n-gram的短語片語在整個資料集中的準確度

    注:此處n-gram的值為1,2,3,….,n

    • h(k,r)表示每個n-gram片語在參考答案語句中出現的次數(因為對於每個n而言都會存在很多個n-gram片語,所以要有一個求和符號)。
    • Pn其實就是每個n-gram片語在參考答案語句和生成語句中出現次數的較小值求和除以其在生成語句中出現次數的求和。
  • w表示各個n-gram的權重。

  • BP是長度過短懲罰因子,由BP的公式可知取值範圍是(0,1],候選句子越短,越接近0。我們不想讓生成的答案長度太短,所以加一個懲罰因子來改善效果。

【特點】

僅在詞向量基礎上比較生成語句和參考答案語句的相似性,很難捕捉長距離的語義。

Greedy Matching

【原理】

mark

  • 將生成語句r和參考答案語句r^的每個詞轉換為詞向量ew,ew^
  • 將得出的生成語句的詞向量ew與參考答案語句的每個詞向量計算餘弦相似度,並取最大值。
  • 同樣流程反過來對生成語句再進行一次,最後結果取二者均值。

【特點】

僅在詞向量基礎上比較生成語句和參考答案語句的相似性,很難捕捉長距離的語義。

Embedding Average

【思想】

該方法使用句向量計算生成語句和參考答案語句之間相似度。

【原理】

  • 語句的句向量:通過語句中每個詞的詞向量求均值來計算

    e¯=wrew|wrew|
    e¯表示句子r中所有片語的詞向量均值。
  • 分別計算出生成語句和參考答案語句的句向量,再計算二者餘弦相似度進行比較。

困惑度

【語言模型】

給出一句話的前k個詞,希望它可以預測第k+1個詞是什麼,即給出一個第k+1 個詞可能出現的概率的分佈p(x_{k+1}|x_1,x_2,…,x_k)

【思想】

困惑度(Perplexity)是衡量語言模型好壞的指標,估算一句話看該句子是否通順。

它主要是根據每個詞來估計一句話出現的概率,並用句子長度作normalize。

【原理】

  • S代表句子,N代表句子長度
  • p(w_i)是第i個詞的概率。第一個詞是p(w_1|w_0),w_0是START,代表句子的起始,是個佔位符

困惑度越小,p(w_i)越大,期望的句子sentence出現的概率就越高。

【另一種表示】

PP(S)=21Nlog(P(wi))

從表示式上看和前面的意義是一樣的,只不過w_i不再是單個詞,它表示第i個bigram或其他單位量。

【用法】

當使用tf.contrib.seq2seq.sequence_loss()計算模型loss時,困惑度直接將計算出的loss取指數。

train_prep=math.exp(float(mean_loss)) if mean_loss < 300 else math.inf

【影響因素】

  • 訓練資料集大小。資料集越大,困惑度越小。
  • 資料中標點對困惑度影響很大。
  • 資料中的“的,了”等詞對困惑度影響很大。可能“我借你的書”比“我借你書”的指標值小几十,但從語義上分析有沒有這些停用詞並不能完全代表句子生成的好壞。