调用NLTK计算bleu
计算语料的bleu值
import nltk
from nltk.translate.bleu_score import corpus_bleu, SmoothingFunction
def compute_bleu(reference=None, translation=None):
if reference and translation:
reference = reference.split('\n')
translation = translation.split('\n')
inf_tok = [[nltk.tokenize.word_tokenize(i)] for i in reference]
tra_tok = [nltk.tokenize.word_tokenize(t) for t in translation]
chencherry = SmoothingFunction()
return corpus_bleu(inf_tok, tra_tok, smoothing_function=chencherry.method7)
else:
return "文件内容为空!"
SmoothingFunction:nltk计算bleu默认n-gram为4,当匹配度不存在大于等于4的时候,不加这个参数就会计算出一个极小值,无法表示相似度,加上这个平滑参数后,会计算一个相对合理的bleu值。
sentence_bleu:计算句子级别的bleu时,可用 sentence_bleu,方法一致
计算结果:即使计算同一个文档也经常出现bleu不等于1的情况,原因可能是部分语句长度小于4。
tensor2tendor 计算bleu
调用命令:
-
t2t-bleu --reference=file1 --translation=file2
计算结果:普遍高于nltk,同一文档计算bleu为1