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

7

我需要计算BLEU分数以确定两个句子是否相似。我已经阅读了一些文章,这些文章主要是关于用于测量机器翻译准确性的BLEU分数。但我需要使用BLEU分数来确定相同语言(英语)中句子之间的相似性。谢谢。

6个回答

27

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

用于机器翻译评估的标准BLEU分数(BLEU: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实现。

替代方法

如安德烈亚斯所提到的,您可能想使用其他评分指标,如Levenstein字符串编辑距离。然而,使用传统的Levenstein字符串编辑距离比较句子的一个问题是它没有明确意识到单词边界。

其他替代方法包括:

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

4

3

如果您只想计算BLEU分数,那么很简单。将一句话视为参考翻译,将另一句话视为候选翻译。


1
也许(Levenstein)编辑距离或汉明距离也是一个选择。无论哪种方式,BLEU分数也适用于此任务;它测量一句话与参考之间的相似度,因此只有在它们像您的问题一样处于同一语言时才有意义。

0

不鼓励您自己实现BLEU,SACREBLEU是标准实现。

from datasets import load_metric
metric = load_metric("sacrebleu")

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接