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

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

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

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

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

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

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

Java实现

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

备择方案

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

其他选择包括:

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

您可以在这里: http : //code.google.com/p/lingutil/

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

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