
大多数 NLP 应用程序(例如机器翻译、聊天机器人、文本摘要和语言模型)都会生成一些文本作为输出。此外,图像字幕或自动语音识别(即语音转文本)等应用程序也会输出文本,尽管它们可能不被视为纯 NLP 应用程序。
预测的输出有多好?
在训练这些应用程序时常见的问题是我们如何判断输出有多“好”?
对于图像分类等应用,可以将预测类别与目标类别进行明确比较,以决定输出是否正确。然而,对于输出为句子的应用,问题就复杂得多。
在这种情况下,我们并不总是有一个普遍正确的答案——我们可能有很多正确答案。例如,在翻译一个句子时,两个不同的人可能会得出两个略有不同的答案,但这两个答案都是完全正确的。
例如,“The ball is blue” and “The ball has a blue color”.。
对于图像字幕或文本摘要等应用来说,问题变得更加困难,因为可接受的答案范围甚至更大。

为了评估模型的性能,我们需要一个定量指标来衡量其预测的质量。
在本文中,将介绍两个主要的 NLP 指标,您可能会在 NLP 模型中经常使用它们。
NLP 指标
多年来,人们开发了许多不同的 NLP 指标来解决这一问题。其中最流行的指标之一就是 Bleu Score。
它远非完美,而且有很多缺点。但它计算和理解起来很简单,而且有几个引人注目的优点。尽管它有很多替代方案,但它仍然是最常用的指标之一。
它基于这样的思想:预测的句子越接近人类生成的目标句子就越好。
Bleu 分数介于 0 到 1 之间,0.6 或 0.7 的分数被认为是您能达到的最好分数。即使是两个人也可能对同一个问题想出不同的答案,并且很少能实现完美匹配。因此,在实践中,接近 1 的分数是不切实际的,应该提醒您模型过度拟合了。
在我们了解如何计算 Bleu 分数之前,让我们先了解两个概念,即 N-gram 和准确率。
N 元语法
“n-gram” 实际上是常规文本处理中广泛使用的概念,并非特定于 NLP 或 Bleu Score。它只是描述“句子中一组连续的‘n’个单词”的一种花哨方式。
例如,在句子“球是蓝色的”中,我们可以有如下 n-gram:
- 1-gram(一元语法):“The”, “ball”, “is”, “blue”
- 2-gram(二元语法):“The ball”, “ball is”, “is blue”
- 3-gram(三元语法):“The ball is”, “ball is blue”
- 4-gram:“The ball is blue”
请注意,n-gram 中的单词是按顺序排列的,因此 “blue is The ball” 不是有效的 4-gram。
精度
该指标衡量预测句子中同时出现在目标句子中的单词数量。
假设我们有:
- 目标句子:He eats an apple
- 预测句子:He ate an apple
我们通常使用以下公式计算精度:
精度 = 预测正确的单词数 / 预测的单词总数
精度 = 3/4
但这样使用精度还不够好,我们还需要处理两种情况。
重复
第一个问题是,这个公式允许我们作弊。我们可以预测一个句子:
- 目标句子:He eats an apple
- 预测句子:He He He
并获得完美的 精度 = 3 / 3 = 1
多个目标句子
其次,正如我们已经讨论过的,表达同一句话有很多种正确的方法。在许多 NLP 模型中,我们可能会得到多个可接受的目标句子,以捕捉这些不同的变化。
我们使用修改后的精度公式来解释这两种情况,我们称之为“裁剪精度”。
裁剪精度
让我们通过一个例子来了解它是如何工作的。
假设我们有以下句子:
- 目标句 1:He eats a sweet apple
- 目标句 2:He is eating a tasty apple
- 预测句子:He He He eats tasty fruit
我们现在做了两件不同的事情:
- 将预测句子中的每个单词与所有目标句子进行比较,如果单词与任何目标句子匹配,则认为它是正确的。
- 将每个正确单词的计数限制为该单词在目标句子中出现的最大次数,这有助于避免重复问题。

例如,“He”这个词在每个目标句子中只出现一次。因此,即使“He”在预测句子中出现了三次,我们也会将计数“削减”为 1,因为这是任何目标句子中的最大计数。
裁剪精度 = 裁剪的正确预测词数 / 总预测词数
裁剪精度 = 3 / 6
注意:在本文的其余部分,我们将仅使用“精度”来表示“裁剪精度”。
我们现在准备继续计算 Bleu 分数。
Bleu 分数是如何计算的?
假设我们有一个 NLP 模型,它会产生如下所示的预测句子。为简单起见,我们只取一个目标句子,但如上例所示,多个目标句子的过程非常相似。
- 目标句子:The guard arrived late because it was raining
- 预测句子:The guard arrived late because of the rain
第一步是计算 1-gram 到 4-gram 的精度。
精度 1-gram
使用刚刚讨论过的裁剪精度方法。
精度 1-gram = 预测正确的 1-gram 数量 / 预测的 1-gram 总数

因此,精度 1-gram(p₁)= 5 / 8
精度 2-gram
精度 2-gram = 预测正确的 2-gram 数量 / 预测的 2-gram 总数
让我们看看预测句子中的所有 2-gram:

因此,精度 2-gram ( p₂ ) = 4 / 7
精度 3-gram
类似地,精度 3-gram(p₃)= 3 / 6

精度 4-gram
并且,精度 4-gram(p₄)= 2 / 5

几何平均精度
接下来,我们使用以下公式将这些精度得分结合起来。这可以根据不同的 N 值和不同的权重值来计算。通常,我们使用N = 4和均匀权重wₙ = N / 4

简洁惩罚
第三步是计算“简洁惩罚”。
如果您注意到精度是如何计算的,我们可以输出一个由单个单词组成的预测句子,例如“The”或“late”。为此,1-gram 精度将是 1/1 = 1,表示满分。这显然具有误导性,因为它鼓励模型输出更少的单词并获得高分。
为了抵消这一点,“简洁惩罚”会对太短的句子进行惩罚。

- c 是预测长度 = 预测句子中的单词数,
- r 是目标长度 = 目标句子中的单词数
这样可以确保简洁惩罚不会大于 1,即使预测的句子比目标长得多。而且,如果你预测的单词很少,这个值就会很小。
在此示例中,c = 8,r = 8,这意味着简洁性惩罚 = 1
Bleu 分数
最后,为了计算 Bleu 分数,我们将简洁性惩罚与精确度分数的几何平均值相乘。

可以根据不同的 N 值计算 Bleu 分数。通常,我们使用 N = 4。
- BLEU-1 使用一元精度分数
- BLEU-2 使用一元词和二元词精度的几何平均值
- BLEU-3 使用一元组、二元组和三元组精度的几何平均值
- 等等。
如果你查看互联网上的不同资源,你可能还会遇到稍微不同的编写 Bleu 分数公式的方法,但这在数学上是等效的。

使用 Python 实现 Bleu 评分
实际上,你很少需要自己实现 Bleu Score 算法。nltk 库是一个非常有用的 NLP 功能库,它提供了 Bleu Score 的实现。
from nltk.translate.bleu_score import corpus_bleu references = [[['my', 'first', 'correct', 'sentence'], ['my', 'second', 'valid', 'sentence']]] candidates = [['my', 'sentence']] score = corpus_bleu(references, candidates)
现在我们知道了 Bleu Score 的工作原理,还有几点我们需要注意。
Bleu 分数是根据语料库而不是单个句子计算的
虽然我们使用了匹配单句的示例,但 Bleu 分数是通过将整个预测语料库的文本作为一个整体来计算的。
因此,你不能对语料库中的每个句子分别计算 Bleu 分数,然后以某种方式计算这些分数的平均数。
Bleu Score 的优势
Bleu Score 如此受欢迎的原因在于它有几个优势:
- 计算快捷,易于理解
- 它与人类评价同一文本的方式相对应
- 它与语言无关,因此可以直接应用于你的 NLP 模型
- 当你有多个基本事实句子时,就可以使用它
- 它的用途非常广泛,这使得将你的结果与其他工作进行比较变得更容易
Bleu Score 的缺点
尽管 Bleu Score 很受欢迎,但它也因一些缺陷而受到批评:
- 它不考虑单词的含义。人类完全可以接受使用具有相同含义的不同单词,例如使用“watchman”而不是“guard”。但 Bleu Score 认为这是一个不正确的单词。
- 它只查找精确匹配的单词。有时可以使用同一个单词的不同变体,例如“rain”和“raining”,但 Bleu Score 会将其视为错误。
- 它忽略了单词的重要性。使用 Bleu Score 时,与句子相关性较低的错误单词(如“to”或“an”)的惩罚与对句子意义有重大贡献的单词的惩罚一样严重。
- 它不考虑单词的顺序,例如,句子“The guard arrived late because of the rain”和“The rain arrived late because of the guard”会得到相同的(单词)Bleu 分数,尽管后者完全不同。
语音转文本应用程序使用WER,而不是 Bleu 分数
虽然自动语音识别模型也会输出文本,但目标句子没有歧义,通常不需要解释。在这种情况下,Bleu Score 并不是理想的指标。
这些应用程序通常使用的指标是单词错误率 (WER) 或其同类指标字符错误率 (CER)。它逐字(或逐字符)比较预测输出和目标转录本,以找出它们之间的差异数量。
差异可能是成绩单中存在但在预测中缺失的单词(算作删除),成绩单中没有但已添加到预测中的单词(插入),或者预测和成绩单之间发生改变的单词(替换)。

度量公式相当简单,它是差异占单词总数的百分比。

WER 计算基于 Levenstein 距离,它测量两个单词之间的差异。
尽管 WER 是语音识别中最广泛使用的指标,但它也有一些缺点:
- 它没有区分对于句子含义重要的词语和不太相关的词语。
- 在比较单词时,它不会考虑两个单词是否只有一个字符不同,或者完全不同。
结论
希望这能让你了解 NLP 的两个最重要的指标及其优缺点。