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

上一篇文章 中,我们已经介绍了文本生成基于统计的集中评测方法:BLEU、Rouge、Meteor、TER 等方法。除了这些基于统计的自动评测方法,随着 word2vec 技术的兴起,各种基于语义表示的评测方法也逐渐被提出,接下来,我们就介绍一些基于语义表示的评测方法。

基于语言模型的评估方法: PPL

应用场景

PPL(困惑度)一般用于评价语言模型,算的是一个句子流畅度的概率。正常来说,我们在训练一个生成模型的时候,最后都能得到 ppl的值。

计算方法

PPL 给定句子 S,包含 了 N 个单词 w1,w2,...,wN,则语言模型判断产生第 i 单词的概率为 p(wi) = p(wi|w1, w2, ...wi−1),语言模型越好,产生句子的概率越大,本质上就是在计算一个马尔科夫链的概率。

  • 困惑度计算方法:

<math xmlns="http://www.w3.org/1998/Math/MathML"> P P L = P ( w 1 , w 2 , . . . w N ) ( − 1 / N ) PPL=P(w1,w2,...wN)^{(-1/N)} </math>PPL=P(w1,w2,...wN)(−1/N)

<math xmlns="http://www.w3.org/1998/Math/MathML"> P = ∏ i = 0 n p ( w i ∣ w k , 0 < = k < = i ) P = \prod \limits_{i=0}^{n} p(w_i|w_k,0<=k<=i) </math>P=i=0∏np(wi∣wk,0<=k<=i)

其中,P 代表 P(w1, w2, ...wN ) 的计算方法,P 表示当前词序列构成一个自然语言句子的概率,用每个位置对应词的采样概率之乘表示。其实,困惑度本质上是在算句子的平均交叉熵。

  • 离线评估方法
    • 需要先训练一个 indomain 的 language model
    • 利用训好的language model,做 inference 做模型概率评估

基于词向量表示

应用场景

词向量的表示评估方法,是计算句子中词向量的距离,评估是否相似。但实际应用中,比较少用这种方法来评估。因为一般训练模型的时候,我们已经能得到一个比较好的表示了,并且是 in-domain数据训练的表示,这会比直接用词向量表示效果更好。因此下面简单介绍一下这种方法,作为了解即可。

评估方法

基于词向量的表示,其实是在word2vec 技术兴起之后,被提出的一种评估方法。因为传统的统计指标,只能根据句子判断评估相似度,没有语义方面的度量。而 word2vec 将词从离散空间,表示到一个低维连续空间,用向量的方法表示词语,并且相似词语在空间中的距离更近。

embedding average

embedding average 方法是比较常见的一种方法,思路也比较简单,就是先算出句子中,每个词向量的加权平均,然后得到句子表示,再利用余弦相似度来计算两个句向量之间的相似度。

  • 计算方法

<math xmlns="http://www.w3.org/1998/Math/MathML"> e r = ∑ w e w / ∣ ∑ w e w / ∣ e_r = \sum_{w}e_w/|\sum_{w}e_w/| </math>er=∑wew/∣∑wew/∣

<math xmlns="http://www.w3.org/1998/Math/MathML"> c o s = e r ∗ e g cos = e_r * e_g </math>cos=er∗eg

  • 最终cos余弦计算句子相似度。e_r 一般用 word2vec 直接获取词向量。

基于bert表示的评估方法

应用场景

bert 的提出,是nlp发展史的一个里程碑。由于 bert 强大的表征能力,自然会想到利用 bert 来评估文本生成,希望 bert 利用强大的表征和理解能力,达到与人工评测接近的水平。可以用于各种生成、翻译的任务;但对image多模态下的评估任务表现比较差一点。

方法介绍

bertscore
  • 核心思路

    • 整体想法就是利用 bert 做表征提取,然后计算两个句子的相似矩阵,用相似矩阵做最大似然的加权平均得到相似度。这里权重引入了idl的方法。
  • 计算方法

    <math xmlns="http://www.w3.org/1998/Math/MathML"> G b = ∑ x i m a x X i ∗ X j T ∗ i d f ( x i ) / ∑ x i i d f ( x i ) G_{b} = \sum_{x_i} max X_i*Xj^T *idf(x_i)/\sum_{x_i}idf(x_i) </math>Gb=∑ximaxXi∗XjT∗idf(xi)/∑xiidf(xi)

    <math xmlns="http://www.w3.org/1998/Math/MathML"> i d f ( w ) = − l o g 1 / M ∗ ∑ ∏ [ w ∈ x i ] idf(w) = -log1/M *\sum \prod [w∈ x^{i}] </math>idf(w)=−log1/M∗∑∏[w∈xi]

    其实就是两个句子的点积,加上了一个 idf 的权重。

  • 应用

    • 安装:pip install bert-score
    • 还可以看相似度矩阵: plot_example(cands[0], refs[0], lang="en", rescale_with_baseline=True)
    • 计算 p、r、f1
arduino 复制代码
from bert_score import score


with open("hyps.txt") as f:
    cands = [line.strip() for line in f]

with open("refs.txt") as f:
    refs = [line.strip() for line in f]

P, R, F1 = score(cands, refs, lang='en', verbose=True)

除了 bertscore 之外,还有一些一些将 BLEU 和 bertscore 思路融合的方法, 例如 BlueRT,将bleu、rouge、meteor等信息作为预热信息加入到模型训练过程,可以更好的增强文本的鲁棒性,此外不是直接算乘积,而是将一个句子过一个线形层,再和另一个句子算相似度。

总结

本文介绍了三种不同于统计方法的文本评估思路,这三种思路其实也代表了 nlp 技术发展的历程: 从语言模型、基于 word2vec 的词向量表示、基于 bert 的句子表征。神经网络的兴起,是的评估任务不再只是关注流畅度和词片段,更加关心整个句子的含义,是否有被机器清晰表达出来。

然而在实际业务评测中,发现目前的句子表征,对相似但语义不同的句子,很难评估是否语义相近。因为模型还不能完全取代人类评估,对比较复杂的场景很难制定评测标准。因此还需要针对实际业务,做一些评估标准的制定,更好的对模型的能力、可用性做公正的判断。

在下一篇文章中,我将介绍一些在实际业务场景中,常用的评估方法。

相关推荐
宝贝儿好2 小时前
【强化学习实战】第十一章:Gymnasium库的介绍和使用(1)、出租车游戏代码详解(Sarsa & Q learning)
人工智能·python·深度学习·算法·游戏·机器学习
绝世这天下4 小时前
【在 DGX Spark 上运行 vLLM-Omni 用于 Qwen3-TTS(语音设计,语音克隆)】
人工智能
陈大鱼头5 小时前
[译]费尽心思来保障 OpenClaw ?那跟直接用 GPT 有什么区别?
人工智能
Fleshy数模5 小时前
玩转OpenCV:视频椒盐噪声处理与图像形态学操作实战
人工智能·opencv·音视频
幂律智能5 小时前
Agent × 流程引擎融合架构:从静态流程到智能流程编排
人工智能·架构·agent
无垠的广袤5 小时前
ChatECNU 大语言模型与 PicoClaw 部署
人工智能·语言模型·自然语言处理·嵌入式·树莓派
weixin_458872615 小时前
东华复试OJ二刷复盘2
算法
Charlie_lll5 小时前
力扣解题-637. 二叉树的层平均值
算法·leetcode
爱淋雨的男人5 小时前
自动驾驶感知相关算法
人工智能·算法·自动驾驶
互联网科技看点5 小时前
AI算力爆发叠加数据资产风口,铂拉锐科技布局去中心化数字生态
人工智能·科技·去中心化