我需要计算BLEU分数以确定两个句子是否相似。我已经阅读了一些文章,这些文章主要是关于用于测量机器翻译准确性的BLEU分数。但我需要使用BLEU分数来确定相同语言(英语)中句子之间的相似性。谢谢。
我需要计算BLEU分数以确定两个句子是否相似。我已经阅读了一些文章,这些文章主要是关于用于测量机器翻译准确性的BLEU分数。但我需要使用BLEU分数来确定相同语言(英语)中句子之间的相似性。谢谢。
对于句子级别的比较,请使用平滑后的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字符串编辑距离比较句子的一个问题是它没有明确意识到单词边界。
其他替代方法包括:
如果您只想计算BLEU分数,那么很简单。将一句话视为参考翻译,将另一句话视为候选翻译。
不鼓励您自己实现BLEU,SACREBLEU是标准实现。
from datasets import load_metric
metric = load_metric("sacrebleu")
您可以使用Moses的多蓝度(multi-bleu)脚本,同时还可以使用多个参考文本: https://github.com/moses-smt/mosesdecoder/blob/RELEASE-2.1.1/scripts/generic/multi-bleu.perl