文本生成任务评估方法(一)

随着chatgpt的兴趣,目前大家对大模型已经不再陌生,许多公司内部也已经开始用大模型来落地,提升业务指标,其中应用比较直接也比较广泛的就是生成任务。随着技术的落地,越来越多人也开始关注一个问题: 如何评估模型生成的效果是符合预期的呢? 本文将从自动评估和业务评估两个角度来介绍评估方式。

自动评估方案大概可以分为三个大方面:

  • 基于统计的文本评测方法
    • 例如 blue、rouge、meteor、ter
  • 基于语言模型和向量语义计算的评测方法
  • 结构信息到文本的评测方法

基于统计的文本评测方法

BLEU

应用的评测任务

BLEU(Bilingual Evaluation Understudy) 是机器翻译任务中比较常见的一种评测指标,在之前的文章 生成模型(五):评价指标 BLEU 中,已经详细介绍过 bleu 的具体计算方法和改进的思路,因此这里只做简单的回顾,对指标感兴趣的同学可以移步之前的文章,详细了解。实际上下面介绍的几种方法大体思路和 BLEU也都类似。

基本思想

BLEU 指标的提出,是为了评估机器翻译任务中,模型生成的候选译文和参考的标准译文中 n-gram 片段的重合度。重合度越高,我们就认为翻译的质量越高。其中n-gram 中的 n,我们一般算 n在(1,4) 之间的重合度,取加权平均后的数作为最终结果。

  • 算generate 和 reference 句子的重合度 <math xmlns="http://www.w3.org/1998/Math/MathML"> p n p_n </math>pn

    • 思路: 算 generate 中 n-gram 片段,在 reference 中出现的比例

    • 弊端: 按照上面的说法,只要 generate 的句子是 reference 的子集,那么 <math xmlns="http://www.w3.org/1998/Math/MathML"> p n p_n </math>pn 就会比较大,因此还需要加上一个 长度惩罚因子

    • 划重点:0 < <math xmlns="http://www.w3.org/1998/Math/MathML"> p n p_n </math>pn < 1

  • 算长度惩罚因子 bp

    • 思路: 用指数函数,只要保证 generate 小于 reference 的长度时,乘以一个小于1的数字即可

    • 算法: <math xmlns="http://www.w3.org/1998/Math/MathML"> b p = e x p ( 1 − l r / l g ) , l g > l r bp = exp(1-l_r/l_g), l_g > l_r </math>bp=exp(1−lr/lg),lg>lr, 因此 bp的取值, 永远是小于1,大于0的,数据函数曲线图如下:

  • 算 bleu值
    • 最终的值,可以看做是 bp 和 <math xmlns="http://www.w3.org/1998/Math/MathML"> p n p_n </math>pn 的乘积, bleu 也是在 0-1 之间的数
    • 简化版本的计算公式为: <math xmlns="http://www.w3.org/1998/Math/MathML"> b l e u = b p ∗ l o g w n ∗ l o g p n bleu = bp * log w_n * logp_n </math>bleu=bp∗logwn∗logpn
    • 实际计算的时候,上述公式需要对 n在1-4之间求平均, wn 一般为 1/n

Rouge

应用的评测任务

rouge 也比较常见于机器翻译任务,但不是传统机器翻译任务,而是神经网络机器人任务;因为 rouge 主要计算的是召回率,而不是像bleu 一样关注精准率。此外,还被用在谣言检测、文本摘要等生成任务中做评测。

基本思想

因为神经网络出现之后,机器翻译任务的流畅度都比较高,但是有可能会出现漏召回的情况,导致翻译的译文和原始句子有很大的gap。所以 rogue的计算方式也衍生出很多种类型: rogue-n(n-gram)、rogue-l(将n-gram 优化为公关子序列) 、rogue-s(skip,n-gram可以跳词) 其中 rogue-n 跟 bleu 类似,只是不是计算精准度,而是计算召回,这里优先对 rogue-s的计算方法做介绍:

  • 思路:采用跳词的的方法,计算精度和召回率
  • skip n-gram计算: 例如 "i have a cat", skip-2-gram 就是(i,have),(i,a),(i, cat),(have,a),(have,cat),(a,cat)。

Meteor

应用的评测任务

Meteor 也是对 BLEU方法的一种改进,会同时关注 精准率和召回率,因此在各种生成任务中,都习惯于看 meteor 指标。

基本思想

Meteor 是 Lavir 在 2014 年提出的另一种衡量文本相似的指标,Lavir 的 研究结果表明,基于召回率的计算标准,要比基于精准度计算的标准(比如上 文介绍的 BLEU),和人工评测得到的结果相关性更高一些。Meteor 包含了一 些同义词匹配的功能,该功能基于给定的基于 WordNet 同义词库,进行校准。

  • 思路:计算对应的生成句子和参考译文之间,准确率和召回率的调和平均
  • 优化1:用 wordnet 做同义词匹配
  • 优化2: 引入 chunk 的概念评价流畅度,chunk就是通过 beam search的方法,得到的候选译文和参考译文能对齐的连续排列的单词,显然,我们比较希望 chunk的数量少一点,这样表明两者的语序比较一致。

其中, p和 R 和 bleu 的计算思路一致, <math xmlns="http://www.w3.org/1998/Math/MathML"> m m </math>m 表示 chunk 数目。

自动评测脚本

这个方法实现起来比较复杂,我在 github 上找到了一份可用的计算版本: github.com/cmu-mtlab/m...

Ter

应用的评测任务

TER 是一种通过编辑距离来判断两个句子是否相似的方法,常用于机器翻译、语音识别领域。

基本思想

TER 整体的思想比较简单,理解了编辑距离,ter 的度量也就比较容易理解了。

  • 思路: 计算译文到参考译文所需要的编辑距离,分母一般是参考译文的长度。
  • 计算方法: <math xmlns="http://www.w3.org/1998/Math/MathML"> s c o r e = e d i t ( g , r ) / l r score = edit(g, r) / l_r </math>score=edit(g,r)/lr

总结

由于篇幅原因,本文先介绍了基于统计的集中评测方法: BLEU、Rogue、Meteor、TER,其中 rogue 和 Meteor 都是基于 BLEU 的算法思想,提出的改进方案。BLEU 主要是算 precision, rogue 考虑的是 recall,而 meteor 则兼顾了 precision 和 recall,算的是调和平均 F1-score,并且还融入了wordnet 做语义相似度。 TER 是一种基于编辑距离的方法,在语音识别领域应用较多。

下一篇文章中,将继续介绍基于语义、结合业务任务做评估。

相关推荐
静静AI学堂2 分钟前
动态头部:利用注意力机制统一目标检测头部
人工智能·目标检测·计算机视觉
嵌入式小强工作室4 分钟前
stm32能跑人工智能么
人工智能·stm32·嵌入式硬件
像污秽一样29 分钟前
动手学深度学习-深度学习计算-1层和块
人工智能·深度学习
迪小莫学AI33 分钟前
精准识别花生豆:基于EfficientNetB0的深度学习检测与分类项目
人工智能·深度学习·分类
编程迪1 小时前
自研PHP版本AI口播数字人系统源码适配支持公众号H5小程序
人工智能·数字人系统源码·口播数字人·数字人小程序·数字人开源
Anna_Tong1 小时前
人工智能的视觉天赋:一文读懂卷积神经网络
人工智能·神经网络·cnn
ZHOU_WUYI1 小时前
adb 安装教程
人工智能·adb
weixin_443042652 小时前
信息系统管理师试题-转型升级
人工智能·信息系统项目管理师
CV-King2 小时前
旋转框目标检测自定义数据集训练测试流程
人工智能·目标检测·计算机视觉
无问社区2 小时前
无问社区-无问AI模型
人工智能·web安全·网络安全