问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

文本生成任务的评价方法:BLEU、ROUGE和BERTScore

创作时间:
作者:
@小白创作中心

文本生成任务的评价方法:BLEU、ROUGE和BERTScore

引用
CSDN
1.
https://blog.csdn.net/philosophyatmath/article/details/138006190

在自然语言处理领域,如何评价机器生成的文本质量是一个重要问题。本文将介绍几种常用的文本生成评价方法,包括BLEU、ROUGE和BERTScore等指标。这些指标各有优缺点,适用于不同的场景。

BLEU

BLEU(Bilingual evaluation understudy)是2002年提出的,分数取值范围是0~1,分数越接近1,说明翻译的质量越高。BLEU主要是基于精确率(Precision)的。

  • 核心:比较候选译文和参考译文里的n-gram的重合程度,重合程度越高就认为译文质量越高。
  • unigram用于衡量单词翻译的准确性,高阶n-gram用于衡量句子翻译的流畅性。
  • 通常取N=1~4,再加权平均。下面是BLEU的整体公式。
  • BLEU需要计算译文1-gram,2-gram,…,N-gram的精确率,一般N设置为4即可,公式中的Pn指n-gram的精确率。
  • Wn指n-gram的权重,一般设为均匀权重,即对于任意n都有Wn = 1/N。
  • BP是惩罚因子,如果译文的长度小于最短的参考译文,则BP小于1。
  • BLEU的1-gram精确率表示译文忠于原文的程度,而其他n-gram表示翻译的流畅程度。

n-gram精确率计算

使用机器学习的方法生成文本的翻译之后,需要评价模型翻译的性能,一般用C表示机器翻译的译文,另外还需要提供m个参考的翻译S1,S2,…,Sm。评价指标就可以衡量机器翻译的C和参考翻译S1,S2,…,Sm的匹配程度。

假设机器翻译的译文C和一个参考翻译S1如下:

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

则可以计算出1-gram,2-gram,…的精确率:

  1. p1计算a cat is on the table分别都在参考翻译S1中所以p1 = 1
  2. p2 (a, cat)在, (cat is)没在, (is on)没在, (on the)在, (the table)在所以p2 = 3/5
  3. p3 (a cat is)不在, (cat is on)不在, (is on the)不在, (on the table)在所以p3 = 1/4

上面的在或者不在,说的都是当前词组有没有在参考翻译中,直接这样子计算Precision会存在一些问题,例如:

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

这时候机器翻译的结果明显是不正确的,但是其1-gram的Precision为1,因此BLEU一般会使用修正的方法。给定参考译文S1,S2,…,Sm,可以计算C里面n元组的Precision,计算公式如下:

针对上面的例子p1 = 1/5。

惩罚因子

上面介绍了BLEU计算n-gram精确率的方法,但是仍然存在一些问题,当机器翻译的长度比较短时,BLEU得分也会比较高,但是这个翻译是会损失很多信息的,例如:

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

因此需要在BLEU分数乘上惩罚因子

优点

  • 它的易于计算且速度快,特别是与人工翻译模型的输出对比;
  • 它应用范围广泛,这可以让你很轻松将模型与相同任务的基准作对比。

缺点

  • 它不考虑语义,句子结构
  • 不能很好地处理形态丰富的语句(BLEU原文建议大家配备4条翻译参考译文)
  • BLEU指标偏向于较短的翻译结果(brevity penalty没有想象中那么强)

ROUGE

ROUGE(Recall-Oriented Understudy for Gisting Evaluation)专注于召回率(关注有多少个参考译句中的n-gram出现在了输出之中)而非精度(候选译文中的n-gram有没有在参考译文中出现过)。

  1. ROUGE-N:在N-gram上计算召回率
  2. ROUGE-L:考虑了机器译文和参考译文之间的最长公共子序列
  3. ROUGE-W:改进了ROUGE-L,用加权的方法计算最长公共子序列
  4. ROUGE-S允许n-gram出现跳词(skip)

ROUGE用作机器翻译评价指标的初衷是这样的:在SMT(统计机器翻译)时代,机器翻译效果稀烂,需要同时评价翻译的准确度和流畅度;等到NMT(神经网络机器翻译)出来以后,神经网络脑补能力极强,翻译出的结果都是通顺的,但是有时候容易瞎翻译。

ROUGE的出现很大程度上是为了解决NMT的漏翻问题(低召回率)。所以ROUGE只适合评价NMT,而不适用于SMT,因为它不管候选译文流不流畅

ROUGE-N

ROUGE-N主要统计N-gram上的召回率,对于N-gram,可以计算得到ROUGE-N分数,计算公式如下:

公式的分母是统计在参考译文中N-gram的个数,而分子是统计参考译文与机器译文共有的N-gram个数。

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

上面例子的ROUGE-1和ROUGE-2分数如下:

如果给定多个参考译文Si,Chin-Yew Lin也给出了一种计算方法,假设有M个译文S1,...,SM。ROUGE-N会分别计算机器译文和这些参考译文的ROUGE-N分数,并取其最大值,公式如下。这个方法也可以用于ROUGE-L,ROUGE-W和ROUGE-S。

ROUGE-L

ROUGE-L中的L指最长公共子序列(longest common subsequence, LCS),ROUGE-L计算的时候使用了机器译文C和参考译文S的最长公共子序列,计算公式如下:

公式中的RLCS表示召回率,而PLCS表示精确率,FLCS就是ROUGE-L。一般beta会设置为很大的数,因此FLCS几乎只考虑了RLCS(即召回率)。注意这里beta大,则F会更加关注R,而不是P,可以看下面的公式。如果beta很大,则PLCS那一项可以忽略不计。

ROUGE-W

ROUGE-W是ROUGE-L的改进版,考虑下面的例子,X表示参考译文,而Y1,Y2表示两种机器译文。

在这个例子中,明显Y1的翻译质量更高,因为Y1有更多连续匹配的翻译。但是采用ROUGE-L计算得到的分数确实一样的,即ROUGE-L(X,Y1)=ROUGE-L(X,Y2)。因此作者提出了一种加权最长公共子序列方法(WLCS),给连续翻译正确的更高的分数,具体做法可以阅读原论文《ROUGE: A Package for Automatic Evaluation of Summaries》。

ROUGE-S

ROUGE-S也是对N-gram进行统计,但是其采用的N-gram允许"跳词(Skip)",即单词不需要连续出现。例如句子"I have a cat"的Skip 2-gram包括(I, have),(I, a),(I, cat),(have, a),(have, cat),(a, cat)。

NIST

NIST:此方法可被视为是BLEU的一种变体,使用信息熵来加权匹配。为平凡的词组分配较少的权重,以此来降低对常用词的偏好。

GTM

GTM(General Text Matcher):考虑了F1值作为评判,而非单一的准确率或者召回率,并且为长匹配提供更高的权重。

METEOR

METEOR(Metric for Evaluation of Translation with Explicit Ordering):相较于BLEU同时考虑了召回率以及同义词的影响。具体的,考虑了词级、词干、同义词以及重述匹配。在实现时,仅考虑了unigram

BERTScore

BERTScore是一种自然语言处理的评估方法,通常用于评估生成文本(例如机器翻译或文本生成)的质量。即对两个生成句和参考句(word piece进行tokenize)分别用bert提取特征,然后对2个句子的每一个词分别计算内积,可以得到一个相似性矩阵。基于这个矩阵,我们可以分别对参考句和生成句做一个最大相似性得分的累加然后归一化,得到bertscore的precision,recall和F1:以下是R、P、F各项所代表的内容:

  • R(召回率 Recall):
    评估生成文本中有多少与参考文本相匹配的内容。
    召回率越高,说明生成文本覆盖了更多的参考文本内容。
  • P(精确度 Precision):
    评估生成文本中与参考文本匹配的内容所占的比例。
    精确度越高,说明生成文本中的内容与参考文本的匹配度越高。
  • F(F1 Score):
    是Precision和Recall的调和平均数。
    F1 Score能够平衡精确度和召回率,提供单一的性能衡量指标。

在BERTScore中,这三个值都是在[0,1]范围内,其中1表示完美匹配,0表示完全不匹配。在计算这三个分数时,BERTScore将生成文本和参考文本的embeddings比较,计算它们之间的cosine similarity,并利用这个similarity来计算R、P和F。

pip install bert-score

from bert_score import score
cands = ['我们都曾经年轻过,虽然我们都年少,但还是懂事的','我们都曾经年轻过,虽然我们都年少,但还是懂事的']
refs = ['虽然我们都年少,但还是懂事的','我们都曾经年轻过,虽然我们都年少,但还是懂事的']
P, R, F1 = score(cands, refs,model_type="bert-base-chinese",lang="zh", verbose=True)
print(F1)
print(f"System level F1 score: {F1.mean():.3f}")
# cands 和refs一一对应
# tensor([0.9148, 1.0000])
# System level F1 score: 0.957
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号