用于句子相似性检测的BLEU分数实现

时间:2011-03-22 11:22:52

标签: java algorithm nlp text-processing machine-translation

我需要计算BLEU分数,以确定两个句子是否相似。我读过一些文章,主要是关于测量机器翻译准确度的BLEU分数。但是我需要一个BLEU分数来找出相似性在同一种语言的句子之间[英语]。(即)(两个句子都是英语)。感谢期待。

5 个答案:

答案 0 :(得分:25)

对于句子级别比较,请使用平滑的BLEU

用于机器翻译评估的标准BLEU分数(BLEU:4)仅在语料库级别真正有意义,因为任何没有至少一个4克匹配的句子将得到0分即可。

这种情况发生的原因是,BLEU的核心实际上只是n-gram精度的 geometric mean ,它通过简洁惩罚进行缩放,以防止使用来自某些匹配材料的非常短的句子获得不适当的高分。由于几何平均值是通过将要包含在平均值中的所有项相乘来计算的,因此对于任何n-gram计数都为零会导致整个得分为零。

如果您想将BLEU应用于单个句子,最好使用平滑的BLEU(Lin and Och 2004 - 参见第4节),在计算之前,您将每个n-gram计数加1 n-gram精度。这将防止任何n-gram精度为零,因此即使没有任何4-gram匹配也会导致非零值。

Java实施

您将在斯坦福机器翻译包 Phrasal 中找到BLEU和平滑BLEU的Java实现。

<强>替代

正如Andreas已经提到的,您可能希望使用替代评分指标,例如Levenstein's string edit distance。然而,使用传统的Levenstein字符串编辑距离来比较句子的一个问题是它没有明确地意识到单词边界。

其他替代方案包括:

  • Word Error Rate - 这实际上是应用于单词序列而不是字符序列的Levenstein距离。它被广泛用于评分语音识别系统。
  • Translation Edit Rate (TER) - 这类似于字错误率,但它允许对相邻的单词和短语进行额外的交换编辑操作。该度量标准在机器翻译社区中变得流行,因为它与诸如BLEU之类的其他句子相似性度量相比更好地与人类判断相关联。此指标的最新变体(称为 Translation Edit Rate Plus (TERp) )允许使用WordNet匹配同义词以及多字序列的释义(“死”〜=“踢了一桶”)。
  • METEOR - 此指标首先计算一个对齐,该对齐允许对要比较的两个句子中的单词进行任意重新排序。如果有多种可能的方法来对齐句子,METEOR会选择最小化交叉对齐边缘的方法。与TERp一样,METEOR允许匹配WordNet同义词和多字序列的释义。在对齐之后,度量使用匹配单词的数量来计算两个句子之间的相似度以计算F-α score,精确度和召回的平衡度量,然后通过对存在的词序加扰量的惩罚来缩放。在对齐中。

答案 1 :(得分:4)

答案 2 :(得分:3)

好吧,如果您只想计算BLEU分数,那就很简单了。将一个句子作为参考翻译,将另一个句子作为候选翻译。

答案 3 :(得分:1)

也许(Levenstein)编辑距离也是一个选项,或汉明距离。无论哪种方式,BLEU分数也适合这项工作;它测量一个句子与引用的相似性,这样只有当它们与您的问题使用相同的语言时才有意义。

答案 4 :(得分:0)

您可以使用Moses multi-bleu脚本,您也可以使用多个引用:https://github.com/moses-smt/mosesdecoder/blob/RELEASE-2.1.1/scripts/generic/multi-bleu.perl