写在前面
本着如无必要,勿增实体的原则,本文主要基于wiki百科及huggface搬运&翻译(非机翻),少部分加入自己的理解,英文阅读能力较好且拥有魔法者可直接阅读全文,最后一部分记录笔者的代码实践。
- wiki链接:en.wikipedia.org/wiki/METEOR
- huggface链接:huggingface.co/spaces/eval…
论文链接
概述
由于前文介绍的BLEU、ROUGE仅统计单词&短语级别的命中,对于近义词、词与词之间的语义关系完全没有考虑。例如:
- “我很开心。”和“我很不高兴”
- “今天阳光明媚,万里无云。”和“今天是个好天气。”
从语义来讲相似度前一组是完全相反的意思,后一组相似度很高。但是用前者的指标它们的得分会与预期产生较大差距。因此METOR(Metric for Evaluation of Translation with Explicit ORdering)的提出旨在解决上述问题,以及对词序的关注。
METEOR是一个带显式排序的机器翻译评估指标,基于一元词准确率和召回率的调和平均值,召回率的权重高于准确率。与其他指标相比,METOR的特色在于在标准的精确词匹配以外,还进行了词干提取和同义词匹配。与BLEU更关注单词&短语级别的匹配相比,METOR指标更关注句子或句段级别与人类判断更加一致。 根据论文的结果表明,在单词级别,与人类判断的相似度高达0.964,BLEU在同一数据集上的相似度为0.817。在句子级别,METEOR与人类判断的最大相似度为0.403。
基本原理
METOR指标的得出分为对齐和计算两个过程。
对齐(alignment)
首先在两个句子,生成翻译和参考翻译之间创建某种“对齐”。对齐是一组单元之间的映射。映射可以被认为是一个字符串中的单元和另一个字符串中的单元之间的一条线。
对齐方式存在一定的规则:
- 候选翻译中的每个单元映射到参考翻译中最多一个单元,如果没有则不映射。
- 选择映射最多的对齐。
- 如果有两个具有相同映射数量的对齐,则选择交叉最少的对齐,在上图中上方的映射为最优解。
- 对齐过程是由三种映射模式由简单到复杂逐步产生的。
- 精准映射:两个单词完全相同,即最基本的映射。
- 波特词干映射:使用波特词干提取器提取两个词的词干,如果两个词干相同,则映射。
- 同义词映射:根据一个同义词库(如WordNet),如果两个词被视为同义词,则映射。
三种模式是按序执行的,每个阶段只会将前一阶段中未匹配的单元添加到映射中。
计算
对齐后首先计算单元精确率P和召回率R,也就是BLEU和ROUGE的unigram部分:
然后进行调和平均,类似F1-score:
为了进一步考虑在参考翻译和候选翻译中更大片段的一致,METEOR选择对更碎片化的匹配进程惩罚:参考翻译和候选翻译不相邻的映射越多,惩罚越严厉。为了计算这个惩罚因子的值,引入“chunk”的概念:候选翻译和参考参考之间连续匹配的一“块”。换句话说,chunk是候选翻译和参考翻译中不打断的连续匹配单词序列。METEOR通过统计chunk的数量和长度来评估翻译质量,少量且较长的 chunk表示生成翻译的词序更接近参考翻译:
在这里c即为chunk的数量,0.5和3都可以被设为超参数,并不是固定的。进一步的举个例子:
- Candidate: the president spoke to the audience.
- Reference: the president then spoke to the audience.
这里可以分成两个chunk:“the president"和"spoke to the audience”,"the president spoke to the audience"为什么不能成为一个chunk呢?因为reference中多了一个then,使得"president"和"spoke"不再相邻。
最终我们获得METOR分数:
总结
优点
- 词形变化(Lemmatization) :考虑了词的不同形式,例如动词的不同时态、名词的单复数等。这使得它在处理语言变体时更加灵活和准确。
- 同义词匹配:通过使用同义词词典,METEOR 可以识别语义上相似但词形不同的词汇匹配。
- 词序敏感性:通过chunk概念评估词序的连续性,能够更好地反映句子结构的流畅性。
- 平衡精确度和召回率:同时考虑了翻译的精确度(Precision)和召回率(Recall),通过调和平均数(F1-score)的方式进行综合评估。这使得它在评估翻译质量时更加全面,而不仅仅是关注匹配词汇的比例。
缺点
- 计算复杂度高:相较于BLEU和ROUGE等指标,METEOR的计算过程更复杂,需要进行词形变化处理、同义词匹配和chunk分析。这可能导致计算速度较慢,尤其是在大规模数据集上。
- 对外部库的依赖:METEOR依赖于外部库(如词干提取器和同义词词典),如何选取合适准确的外部库呢?
- 权重&超参数选择:从公式可以看出,指标计算需要选择一些权重和超参数,这些值的可能会对评估结果产生显著影响。
代码实现
这里仅展示demo使用,使用默认自带的外部库
import jieba
from nltk.translate.meteor_score import meteor_score
reference = "on the mat sat the cat"
candidate = "the cat sat on the mat"
reference_tokens = list(jieba.cut(reference))
candidate_tokens = list(jieba.cut(candidate))
meteor = meteor_score([reference_tokens], candidate_tokens)
print(meteor) # 0.7261457550713748