在Python中计算BLEU分数

Ala*_*ila 11 python nltk

有一个测试句和一个参考句.如何编写一个Python脚本,以自动机器翻译评估中使用的BLEU度量标准来衡量这两个句子之间的相似性?

ccy*_*ccy 14

BLEU分数由两部分组成,修正精度和简洁惩罚.细节可以在论文中看到.您可以使用nltk.align.bleu_scoreNLTK内的模块.一个代码示例如下所示:

import nltk

hypothesis = ['It', 'is', 'a', 'cat', 'at', 'room']
reference = ['It', 'is', 'a', 'cat', 'inside', 'the', 'room']
#there may be several references
BLEUscore = nltk.translate.bleu_score.sentence_bleu([reference], hypothesis)
print BLEUscore
Run Code Online (Sandbox Code Playgroud)

请注意,默认的BLEU分数使用n = 4,其中包括4克的unigrams.如果您的句子小于4,则需要重置N值,否则ZeroDivisionError: Fraction(0, 0)将返回错误.所以,你应该像这样重置重量:

import nltk

hypothesis = ["open", "the", "file"]
reference = ["open", "file"]
#the maximum is bigram, so assign the weight into 2 half.
BLEUscore = nltk.translate.bleu_score.sentence_bleu([reference], hypothesis, weights = (0.5, 0.5))
print BLEUscore
Run Code Online (Sandbox Code Playgroud)


Sem*_*glu 10

你其实要求件事.我将尝试阐明每个问题.

第一部分:计算BLEU分数

您可以使用下面的BLEU模块计算BLEU分数nltk.看到这里.

从那里,您可以轻松计算候选和参考句子之间的对齐分数.

第二部分:计算相似性

如果您的目标是根据参考句子测量相似性,我建议不要将BLEU分数用作第一候选人和第二候选人之间的相似性度量.

现在,让我详细说明一下.如果您根据参考计算候选人的BLEU分数,那么这个分数只会帮助您理解另一个Canditate的BLEU分数与参考句子之间的相似性,即使参考句子保持不变.

如果你想测量两个句子之间的相似性,word2vec将是一个更好的方法.您可以计算两个句子向量之间的角余弦距离,以了解它们的相似性.

对于一个什么样的透彻理解BLEU指标呢,我建议你阅读word2vec相似.


Fra*_*urt 5

您可能想使用 python 包Sacr\xc3\xa9BLEU(仅限 Python 3):

\n\n
\n

Sacr\xc3\xa9BLEU 提供可共享、可比较和可重现的 BLEU 分数的轻松计算。\n 受到 Rico Sennrich\ 的启发multi-bleu-detok.perl,它生成官方 WMT 分数,但可以使用纯文本。\n 它还知道所有标准测试集并为您处理下载、处理和标记化。

\n\n

为什么使用这个版本的BLEU?

\n\n
    \n
  • 它自动下载常见的 WMT 测试集并将其处理为纯文本
  • \n
  • 它生成一个短版本字符串,便于跨论文比较
  • \n
  • 它使用 WMT(机器翻译会议)正确计算去标记化输出的分数)标准标记化
  • \n
  • 它产生与官方脚本相同的值(mteval-v13a.pl它产生与 WMT 使用的
  • \n
  • 它输出不带逗号的 BLEU 分数,因此您不必使用sed(Looking at you, multi-bleu.perl)删除它
  • \n
\n
\n\n

安装:pip install sacrebleu

\n