对话系统评价指标

概述

对话系统的指标分为两大类:客观评价指标和主观评价指标

其中客观评价指标分为词重叠评价指标和词向量评价指标。

【词重叠评价指标】

根据生成语句与参考答案语句之间的词重叠率来进行评价

【词向量评价指标】

通过了解每一个词的意思来判断回复的相关性,词向量是实现这种评价方法的基础。

  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=BPexp(n=1NwnlogPn)BP={1e1r/cif c>relse P n ( r , r ^ ) = ∑ k min ( h ( k , r ) , h ( k , r i ) ) ∑ k h ( k , r i ) B L E U = B P ∙ e x p ( ∑ n = 1 N w n log ⁡ P n ) B P = { 1 if c>r e 1 − r / c else

其中

  • Pn(r,r^) P n ( r , r ^ ) 计算n-gram的短语词组在整个数据集中的准确度

    注:此处n-gram的值为1,2,3,….,n

    • h(k,r) h ( k , r ) 表示每个n-gram词组在参考答案语句中出现的次数(因为对于每个n而言都会存在很多个n-gram词组,所以要有一个求和符号)。
    • Pn P n 其实就是每个n-gram词组在参考答案语句和生成语句中出现次数的较小值求和除以其在生成语句中出现次数的求和。
  • w w 表示各个n-gram的权重。

  • BP是长度过短惩罚因子,由BP的公式可知取值范围是(0,1],候选句子越短,越接近0。我们不想让生成的答案长度太短,所以加一个惩罚因子来改善效果。

【特点】

仅在词向量基础上比较生成语句和参考答案语句的相似性,很难捕捉长距离的语义。

Greedy Matching

【原理】

  • 将生成语句 r r 和参考答案语句 r^ r ^ 的每个词转换为词向量 ew,ew^ e w , e w ^
  • 将得出的生成语句的词向量 ew e w 与参考答案语句的每个词向量计算余弦相似度,并取最大值。
  • 同样流程反过来对生成语句再进行一次,最后结果取二者均值。

【特点】

仅在词向量基础上比较生成语句和参考答案语句的相似性,很难捕捉长距离的语义。

Embedding Average

【思想】

该方法使用句向量计算生成语句和参考答案语句之间相似度。

【原理】

  • 语句的句向量:通过语句中每个词的词向量求均值来计算

    e¯=wrew|wrew| e ¯ = ∑ w ∈ r e w | ∑ w ′ ∈ r e w ′ |

    e¯ 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)) P P ( S ) = 2 − 1 N ∑ log ⁡ ( P ( w i ) )

从表达式上看和前面的意义是一样的,只不过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

【影响因素】

  • 训练数据集大小。数据集越大,困惑度越小。
  • 数据中标点对困惑度影响很大。
  • 数据中的“的,了”等词对困惑度影响很大。可能“我借你的书”比“我借你书”的指标值小几十,但从语义上分析有没有这些停用词并不能完全代表句子生成的好坏。

你可能感兴趣的:(NLP)