文本生成评价指标

基于词重叠率的评价指标

目前用来评估生成文本质量的指标, 主要就是基于词重叠率的评价指标. 主要是计算生成文本与参考文本之间的词重叠率来作为模型质量的评估标准. 下面介绍一些常用的经典指标.

一般会将生成的文本与参考文本都拆解成n-gram粒度, 也有拆分成字粒度, 然后再评价重叠的程度.

BLEU

BLEU(Bilingual Evaluation Understudy, 双语评估辅助工具)在提出时使用在机器翻译任务中. 指标的出发点是如果翻译的质量比较好, 那么翻译出来的文本应该与人工给定的参考翻译有比较多的重叠之处, 因此通过计算生成文本和参考文本中贡献的n-gram, 来计算两者的相似度.

计算N-gram精确度

例如我们生成的译文C和参考译文S1分别为:

C: a cat is on the table S: there is a cat on the table

计算2-gram的重叠时, 生成译文中包含的2-gram有:

(a, cat), (cat, is), (is, on), (on, the), (the, table)

参考译文S中包含的2-gram有:

(there, is), (is, a), (a, cat), (cat, on), (on, the), (the, table)

在两者中共现的2-gram有:

(a, cat), (on, the), (the, table)

即3个共现2-gram, 生成译文C共包含5个2-gram, 因此此时的2-gram为: 3 / 5 = 0.6, 记为pnp_n

简短惩罚

假设生成的内容非常简短, 由于精确率的分母是生成文本中n-gram的数量, 在参考答案较长时, 此时计算得到的n-gram精确度往往很高. 但这种高精确度并不能体现生成质量高. 如生成样本和参考答案分别为:

C: of the S: It is the guiding principle which guarantees the military forces always being under the command of the Party

由于of the在S中出现过, 此时的精确率为1. 但明显生成结果是完全不可用的. 因此在计算BLEU指数时, 需要考虑生成文本和参考文本之间长度的差异, 在生成样本相对较短时, 应对精确度予以惩罚, 惩罚公式为:

BP={1 if c>re(1r/c) if cr\mathrm{BP}=\left\{\begin{array}{ll} 1 & \text { if } c>r \\ e^{(1-r / c)} & \text { if } c \leq r \end{array}\right.
  • cc: 生成文本的长度

  • rr: 参考答案文本的长度

BLEU计算公式

计算BLEU指标时, 需要比较多个n-gram下的精确度, 然后将所有n-gram下求得的精确度求加权平均, 得到整体的精确度衡量.

  • 1-gram的精确度表示译文忠于原文的程度

  • n-gram的精确度衡量翻译的流畅程度, N的上限取得越高, 指标对流畅程度的要求越严格

BLEU=BPexp(n=1Nwnlogpn)\mathrm{BLEU}=\mathrm{BP} \cdot \exp \left(\sum_{n=1}^{N} w_{n} \log p_{n}\right)
  • NN: 计算n-gram中n的上限, 如计算BLEU-3指标, 就是分别计算1-gram, 2-gram, 3-gram的精确度, 然后加权平均, 这时的N=3N=3

  • wnw_n: n-gram精确度的加权权重, 一般是简单的求平均, 即对所有nn, 都有wn=1Nw_n=\frac{1}{N}

  • pnp_n: n-gram的精确度, 计算方法在上面

随着n的增大, 对应的精确度肯定也是会下降的, 因此如果直接将较大的n与较小的n对应的精确度加权平均, 这样较大n的贡献度会较小, 弱化了流畅度的评价. 因此对精确度取对数后再加权平均, 拉近数值之间的差距.

修正n-gram精确度

考虑下面这种生成结果:

C: there there there there there S: there is a cat on the table

明显生成的结果是很低质的. 但在计算1-gram的精确度时, 由于只有there一种1-gram, 而参考答案里也有这个1-gram, 因此精确度为1. 可以看出这样计算出的指标, 与真正的生成质量有很大的差距.

因此BLEU中, 使用一种修正后的计算n-gram精确度的方式:

Pn=iCn-grammin(hi(C),maxjmhi(Sj))iCn-gramhi(C)P_{n}=\frac{\sum_{i \in C_{\text{n-gram}}} \min \left(h_{i}(C), \max _{j \in m} h_{i}\left(S_{j}\right)\right)}{\sum_{i \in C_{\text{n-gram}}} h_{i}(C)}
  • iCn-grami \in C_{\text{n-gram}}: 遍历生成结果中的每一个n-gram, 对于第ii个n-gram

  • hi(C)h_{i}(C): 第ii个n-gram在生成结果中出现的次数

  • hi(Sj)h_{i}(S_j): 对于第jj个参考答案, 第ii个n-gram在其中出现的次数. 这里假定有mm个参考答案

优化后的n-gram精确度计算时, 会考虑参考文本中出现的次数, 相当于结合了精确和召回, 得到一个比较综合评价结果. 在上面的案例中, 计算得到的结果就会变成1/5, 得分合理了很多.

ROUGE

BLEU只考虑了精确率而没有考虑召回率, 而ROUGE主要是从召回率的角度计算生成文本与参考文本之间的相似性, 比较适用于文本摘要任务.

ROUGE指标在论文ROUGE: a Package for Automatic Evaluation of Summaries中被提出, 有四个版本:

  • ROUGE-N

  • ROUGE-L

  • ROUGE-W

  • ROUGE-S

ROUGE-N

计算ROUGE-N, 考虑出现在参考文本中的n-gram次数总和, 与参考文本中所有n-gram出现总次数之比:

 ROUGE-N =S{ Referemce Summaries }gram nS Count match (gramn)S{ Referemce Summaries }gram nS Count ( gram n)\text { ROUGE-N }=\frac{\sum_{S \in\{\text { Referemce Summaries }\}} \sum_{\text {gram }_{n} \in S} \text { Count }_{\text {match }}\left(\operatorname{gram}_{n}\right)}{\sum_{S \in\{\text { Referemce Summaries }\}} \sum_{\text {gram }_{n} \in S} \text { Count }\left(\text { gram }_{n}\right)}

其中SS代表参考集中的一条, gramngram_n代表SS中的一个gram. 因此计算的就是n-gram粒度的召回率.

ROUGE-N中的N指的是使用N-gram, 如使用unigram计算出的ROUGE-N记为ROUGE-1, 使用bigram计算出的记为ROUGE-2, 以此类推.

ROUGE-L

L指的是最长公共子序列(longest common subsequence, LCS). 因此ROUGE-L计算的是生成本文与参考答案之间的最长公共子序列与生成文本和参考答案的长度之间的关系.

Rlcs=LCS(C,S)len(S)Plcs=LCS(C,S)len(C)Flcs=(1+β2)RlcsPlcsRlcs+β2Plcs\begin{aligned} &R_{l c s}=\frac{L C S(C, S)}{\text{len}(S)} \\ &P_{l c s}=\frac{L C S(C, S)}{\text{len}(C)} \\ &F_{l c s}=\frac{\left(1+\beta^{2}\right) R_{l c s} P_{l c s}}{R_{l c s}+\beta^{2} P_{l c s}} \end{aligned}

ROUGE-L指的是FlcsF_{l c s}. 可以看到ROUGE-L在公共子序列上, 即考虑了召回, 又考虑了精确, 并通过超参β\beta来调节偏重方向, β\beta越大越偏重召回.

ROUGE-W

ROUGE-L在计算最长公共子序列时, 子序列的连续性没有限制, 两个词汇之间可以有任意长度的代沟. 对于下面的案例:

  • R1: [A B C D E F G]

  • C1: [A B C D H I K]

  • C2: [A H B K C I D]

参考答案R1与生成结果C1和C2的ROUGE-L指标值是一样的, 但直觉上C1这种匹配连续的文本, 代表的生成质量应该更高. 作为改进版, ROUGE-W在ROUGE-L的基础上对连续性添加一个权重:

Rwlcs=f1(WLCS(X,Y)f(m))Pwlcs=f1(WLCS(X,Y)f(n))Fwlcs=(1+β2)RwlcsPwlcsRwlcs+β2Pwlcs\begin{aligned} &R_{w l c s}=f^{-1}\left(\frac{W L C S(X, Y)}{f(m)}\right) \\ &P_{w l c s}=f^{-1}\left(\frac{W L C S(X, Y)}{f(n)}\right) \\ &F_{w l c s}=\frac{\left(1+\beta^{2}\right) R_{w l c s} P_{w l c s}}{R_{w l c s}+\beta^{2} P_{w l c s}} \end{aligned}

一般使用加权函数f(k)=kα, α>1f(k) = k^{\alpha}, \ \alpha>1, 一般使用alpha=2alpha=2. 函数WLCS\text{WLCS}的计算比较复杂, 参考论文.

ROUGE-S

ROUGE-S回到对n-gram进行统计, 但允许n-gram通过跳词(Skip)得到, 即对skip gram进行统计. 即对于句子I have a cat, 可以得到(I, have), (I, a), (I, cat), (have, a), (have, cat), (a, cat)这些2-gram.

计算方法与ROUGE-L类似, 需要计算精确率和召回率, 然后计算加权的F1作为ROUGE-S的结果. 在计算精确率和召回率时, 分子分母分别为匹配的n-gram的数量, 以及句子中n-gram的总数量.

基于语言模型的方法

PPL

混淆度(Perplexity)可以用来衡量生成模型的收敛情况. 低困惑度的概率模型能更好地预测样本. PPL的计算公式如下:

PPL(W)=P(w1w2wN)1N=1P(w1w2wN)NP P L(W)=P\left(w_{1} w_{2} \ldots w_{N}\right)^{-\frac{1}{N}}=\sqrt[N]{\frac{1}{P\left(w_{1} w_{2} \ldots w_{N}\right)}}
  • NN: 句子中词的数量, 句子长度

  • wiw_i: 第ii个词

使用PPL指标评价模型, 是对测试集中的句子, 通过模型输出的条件概率的链式累乘, 得到整个句子在当期模型下的概率, 考虑到句子长短的问题, 引入句子长度NN做平衡. 根据公式可以看到, 整体的概率越大, PPL的值就越小.

不同任务之间的PPL值没有比较的意义. 但在同一个任务中使用不同模型, 就可以使用PPL评价不同模型的发散程度.

参考资料

最后更新于

这有帮助吗?