因为最近需要使用BLEU指标来衡量结果,所以在此总结一下。
BLEU的全称是Bilingual Evaluation Understudy(双语评估研究)。通常是在机器翻译领域,是用来评判生成的文本翻译和参考翻译(reference translation也是ground truth)之间的度量方式。
尽管是在机器翻译领域衍生出来的,但是它也能够适应于一套自然语言处理的任务。例如
- Language generation.
- Image caption generation.
- Text summarization.
- Speech recognition.
在python中,有nltk包已经帮助我们能够实现这个功能,让我们来看看如何去实现。
其中有个sentence BLEU score的函数是用来是评估一个生成的句子和一个或多个参考翻译之间的衡量标准
from nltk.translate.bleu_score import sentence_bleu
reference = [['this', 'is', 'a', 'test'], ['this', 'is' 'test']]
candidate = ['this','is','a','test']
score = sentence_bleu(reference, candidate)
print(score)
这里有个要求就是reference和candidate之间都是需要以list的方式传入
BLEU其实就是在算n-gram,算生成的翻译和参考翻译之间匹配的n-grams。
那么上面的BLEU为1是怎么计算出来的呢?
因为我们生成的这个candidate 完全匹配了reference中的第一个翻译,所以结果为1
除了上述提到的方法,nltk包还提供了一个用来计算语料BLEU的方法,该方法是用来计算多个句子例如段落或者文章的BLEU分数。
参考的语料(references)应该被组织成多篇document的形式。
corpus = [doument1, document2,document3......]
而在每个document中又由多个句子构成。
document =[[sentence1],[sentence2],.....]
所以在使用这个函数时,应该构建好这样的结构。
# two references for one document
from nltk.translate.bleu_score import corpus_bleu
references = [[['this', 'is', 'a', 'test'], ['this', 'is' 'test']]]
candidates = [['this', 'is', 'a', 'test']]
score = corpus_bleu(references, candidates)
print(score)
示例代码如下图所示
以上就是常用的两个用来计算BLEU值的函数及其用法,后续将补充其与ROUGE的区别。