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

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

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

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

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

在自然语言处理(NLP)领域,文本生成任务的评价方法是衡量模型性能的关键指标。本文将详细介绍几种常用的评价方法,包括BLEU、ROUGE和BERTScore等,帮助读者理解这些指标的原理、计算方法和优缺点。

BLEU

BLEU的全称是Bilingual Evaluation Understudy,是一种基于n-gram重合度的评价指标。BLEU分数的取值范围是0到1,分数越接近1,说明翻译的质量越高。BLEU主要基于精确率(Precision)进行计算。

核心原理

BLEU的核心是比较候选译文和参考译文中的n-gram重合程度。具体来说:

  • unigram用于衡量单词翻译的准确性
  • 高阶n-gram用于衡量句子翻译的流畅性
  • 通常取N=1~4,再加权平均

下面是BLEU的整体公式:

其中:

  • Pn指n-gram的精确率
  • Wn指n-gram的权重,一般设为均匀权重
  • BP是惩罚因子,如果译文长度小于最短的参考译文,则BP小于1

n-gram精确率计算

假设机器翻译的译文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

惩罚因子

为了防止机器翻译结果过短而获得高分,BLEU引入了惩罚因子BP:

优点与缺点

  • 优点:易于计算且速度快;应用范围广泛
  • 缺点:不考虑语义和句子结构;不能很好地处理形态丰富的语句;偏向于较短的翻译结果

ROUGE

ROUGE(Recall-Oriented Understudy for Gisting Evaluation)专注于召回率而非精度。ROUGE主要包括以下几种变体:

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

ROUGE-N

ROUGE-N主要统计N-gram上的召回率。计算公式如下:

ROUGE-L

ROUGE-L使用机器译文C和参考译文S的最长公共子序列。计算公式如下:

ROUGE-W

ROUGE-W是ROUGE-L的改进版,考虑连续匹配的翻译。具体实现可以参考原论文《ROUGE: A Package for Automatic Evaluation of Summaries》。

ROUGE-S

ROUGE-S采用的N-gram允许"跳词(Skip)",即单词不需要连续出现。

其他评价方法

  • NIST:BLEU的变体,使用信息熵来加权匹配
  • GTM:考虑F1值作为评判,并为长匹配提供更高的权重
  • METEOR:同时考虑召回率以及同义词的影响

BERTScore

BERTScore是一种基于BERT的自然语言处理评估方法。它通过计算生成文本和参考文本之间的相似性矩阵,然后计算R(召回率)、P(精确度)和F1(F1 Score)。

安装与使用

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

评价指标

  • R(召回率 Recall):评估生成文本中有多少与参考文本相匹配的内容。
  • P(精确度 Precision):评估生成文本中与参考文本匹配的内容所占的比例。
  • F(F1 Score):是Precision和Recall的调和平均数,能够平衡精确度和召回率。

更多信息可以参考以下资源:

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号