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

上一篇文章 中,我们已经介绍了文本生成基于统计的集中评测方法: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 的句子表征。神经网络的兴起,是的评估任务不再只是关注流畅度和词片段,更加关心整个句子的含义,是否有被机器清晰表达出来。

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

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

相关推荐
聚客AI11 分钟前
PyTorch玩转CNN:卷积操作可视化+五大经典网络复现+分类项目
人工智能·pytorch·神经网络
BUG收容所所长14 分钟前
栈的奇妙世界:从冰棒到算法的华丽转身
前端·javascript·算法
程序员岳焱14 分钟前
深度剖析:Spring AI 与 LangChain4j,谁才是 Java 程序员的 AI 开发利器?
java·人工智能·后端
柠檬味拥抱16 分钟前
AI智能体在金融决策系统中的自主学习与行为建模方法探讨
人工智能
XRZaaa19 分钟前
常见排序算法详解与C语言实现
c语言·算法·排序算法
@我漫长的孤独流浪23 分钟前
数据结构测试模拟题(4)
数据结构·c++·算法
智驱力人工智能26 分钟前
智慧零售管理中的客流统计与属性分析
人工智能·算法·边缘计算·零售·智慧零售·聚众识别·人员计数
workflower1 小时前
以光量子为例,详解量子获取方式
数据仓库·人工智能·软件工程·需求分析·量子计算·软件需求
壹氿1 小时前
Supersonic 新一代AI数据分析平台
人工智能·数据挖掘·数据分析
张较瘦_1 小时前
[论文阅读] 人工智能 | 搜索增强LLMs的用户偏好与性能分析
论文阅读·人工智能