机器翻译和文本生成评估指标:BLEU 计算公式
📌 BLEU 计算公式
BLEU 主要由**n-gram精确匹配率(Precision)和长度惩罚(Brevity Penalty, BP)**组成。
1️⃣ n-gram 精确匹配率
计算不同长度的 n-gram(1-gram, 2-gram, ..., n-gram)在生成文本和参考文本中匹配的比例:
Pn=∑匹配的 n-gram 计数∑生成文本的 n-gram 计数P_n = \frac{\sum_{\text{匹配的 } n\text{-gram 计数}}}{\sum_{\text{生成文本的 } n\text{-gram 计数}}}Pn=∑生成文本的 n-gram 计数∑匹配的 n-gram 计数
其中:
-
分子:生成文本的 n-gram 在参考文本中出现的次数
-
分母:生成文本的 n-gram 总数
-
通常计算 1-gram, 2-gram, 3-gram, 4-gram
2️⃣ 长度惩罚(Brevity Penalty, BP)
防止模型只生成短句(短句更容易匹配参考文本)。BP 计算公式如下:
BP={1,如果 c>re(1−rc),如果 c≤rBP = \begin{cases} 1, & \text{如果 } c > r \\ e^{(1 - \frac{r}{c})}, & \text{如果 } c \leq r \end{cases}BP={1,e(1−cr),如果 c>r如果 c≤r
其中:
-
c 是生成文本的长度
-
r 是参考文本的长度
如果生成文本比参考文本短,惩罚因子 BP<1BP < 1BP<1 使 BLEU 分数变小。
3️⃣ 最终 BLEU 计算
BLEU=BP×exp(∑n=1NwnlogPn)BLEU = BP \times \exp \left( \sum_{n=1}^{N} w_n \log P_n \right)BLEU=BP×exp(n=1∑NwnlogPn)
其中:
-
PnP_nPn 是不同 n-gram 的精确率
-
wnw_nwn 是 n-gram 的权重(通常均匀分配,如 1-gram, 2-gram, 3-gram, 4-gram 各 25%)
-
BPBPBP 是长度惩罚
🔹 示例
假设:
-
参考句子(Reference):"The cat is on the mat."
-
生成句子(Hypothesis):"The cat is mat."
计算 1-gram 和 2-gram:
-
1-gram 匹配("The", "cat", "is", "mat"):4/4 = 1.0
-
2-gram 匹配("The cat", "cat is", "is mat"):2/3 ≈ 0.67
-
长度惩罚:
-
生成句子长度 c=4c = 4c=4
-
参考句子长度 r=6r = 6r=6
-
BP=e(1−6/4)=e−0.5≈0.606BP = e^{(1 - 6/4)} = e^{-0.5} \approx 0.606BP=e(1−6/4)=e−0.5≈0.606
-
最终:
BLEU=0.606×e(0.5×log1.0+0.5×log0.67)BLEU = 0.606 \times e^{(0.5 \times \log 1.0 + 0.5 \times \log 0.67)}BLEU=0.606×e(0.5×log1.0+0.5×log0.67)
🔥 Python 实现
可以用 nltk
或 sacrebleu
计算 BLEU:
1️⃣ 使用 nltk
计算 BLEU
📌 总结
-
BLEU 计算核心:n-gram 精确率 + 长度惩罚
-
适用于:机器翻译、文本生成评估
-
局限性:
-
不能捕捉语义信息(只计算 n-gram 匹配)
-
过度偏向短句
-
中文 BLEU 计算前需分词
-
我们来详细拆解 1-gram 和 2-gram 匹配的计算过程。
📌 计算 1-gram 匹配
定义:
1-gram(unigram)是指单个词,比如 "The"
, "cat"
, "is"
。
参考句子(Reference):
["The","cat","is","on","the","mat"]["The", "cat", "is", "on", "the", "mat"]["The","cat","is","on","the","mat"]
生成句子(Hypothesis):
["The","cat","is","mat"]["The", "cat", "is", "mat"]["The","cat","is","mat"]
计算 1-gram 精确率:
-
统计 生成句子 中的单词,并计算它们出现在参考句子中的次数:
-
"The"
✅(参考中有) -
"cat"
✅(参考中有) -
"is"
✅(参考中有) -
"mat"
✅(参考中有)
-
-
计算 1-gram 精确率(Precision):
P1=匹配的 1-gram 个数生成句子的 1-gram 总数P_1 = \frac{\text{匹配的 1-gram 个数}}{\text{生成句子的 1-gram 总数}}P1=生成句子的 1-gram 总数匹配的 1-gram 个数 P1=44=1.0P_1 = \frac{4}{4} = 1.0P1=44=1.0
📌 计算 2-gram 匹配
定义:
2-gram(bigram)是指连续的两个单词,比如 "The cat"
, "cat is"
。
2-gram 列表:
-
参考句子的 2-gram(滑动窗口取 2 个词):
["Thecat","catis","ison","onthe","themat"]["The cat", "cat is", "is on", "on the", "the mat"]["Thecat","catis","ison","onthe","themat"] -
生成句子的 2-gram:
["Thecat","catis","ismat"]["The cat", "cat is", "is mat"]["Thecat","catis","ismat"]
计算 2-gram 精确率:
-
"The cat"
✅(参考中有) -
"cat is"
✅(参考中有) -
"is mat"
❌(参考中没有"is mat"
)
匹配的 2-gram = 2
生成的 2-gram = 3
P2=23≈0.67P_2 = \frac{2}{3} \approx 0.67P2=32≈0.67
🔹 总结
-
1-gram:P1=4/4=1.0P_1 = 4/4 = 1.0P1=4/4=1.0
-
2-gram:P2=2/3≈0.67P_2 = 2/3 \approx 0.67P2=2/3≈0.67
-
计算方法就是:
-
找出 n-gram 片段
-
看生成的 n-gram 里有多少个出现在参考文本中
-
用匹配的 n-gram 个数 ÷ 生成的 n-gram 总数
-