以下是 BLEU Score (Bilingual Evaluation Understudy)和 ROUGE Score(Recall-Oriented Understudy for Gisting Evaluation) 的原生Python实现(不依赖第三方库),通过分步计算逻辑和示例详细说明。
一、BLEU Score 实现
核心逻辑
- n-gram匹配:计算候选文本和参考文本的n-gram匹配数(截断到参考文本中最大出现次数)。
- 精确度计算:各n-gram的匹配数除以候选文本n-gram总数。
- 几何平均:对1-gram到4-gram的精确度取几何平均。
- 长度惩罚:候选文本过短时施加惩罚。
代码实现
import math
def get_ngrams(text, n):
"""生成n-gram列表"""
return [tuple(text[i:i+n]) for i in range(len(text)-n+1)]
def bleu_score(candidate, reference, max_n=4):
"""计算BLEU分数(单参考文本简化版)"""
candidate = candidate.split()
reference = reference.split()
# 长度惩罚
c_len = len(candidate)
r_len = len(reference)
bp = 1.0 if c_len > r_len else math.exp(1 - r_len / c_len) if c_len !=0 else 0.0
# 计算各n-gram的精确度
precisions = []
for n in range(1, max_n+1):
# 生成候选和参考的n-gram
cand_ngrams = get_ngrams

最低0.47元/天 解锁文章
661

被折叠的 条评论
为什么被折叠?



