有一个测试句和一个参考句.如何编写一个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相似.
您可能想使用 python 包Sacr\xc3\xa9BLEU(仅限 Python 3):
\n\n\n\n\nSacr\xc3\xa9BLEU 提供可共享、可比较和可重现的 BLEU 分数的轻松计算。\n 受到 Rico Sennrich\ 的启发
\n\nmulti-bleu-detok.perl,它生成官方 WMT 分数,但可以使用纯文本。\n 它还知道所有标准测试集并为您处理下载、处理和标记化。为什么使用这个版本的BLEU?
\n\n\n
\n- 它自动下载常见的 WMT 测试集并将其处理为纯文本
\n- 它生成一个短版本字符串,便于跨论文比较
\n- 它使用 WMT(机器翻译会议)正确计算去标记化输出的分数)标准标记化
\n- 它产生与官方脚本相同的值(
\nmteval-v13a.pl它产生与 WMT 使用的- 它输出不带逗号的 BLEU 分数,因此您不必使用
\nsed(Looking at you,multi-bleu.perl)删除它
安装:pip install sacrebleu