当前位置:网站首页>详解机器翻译任务中的BLEU
详解机器翻译任务中的BLEU
2022-07-07 03:15:00 【aelum】
目录
一、 n n n 元语法(N-Gram)
n n n 元语法(n-gram)是指文本中连续出现的 n n n 个词元。当 n n n 分别为 1 , 2 , 3 1,2,3 1,2,3 时,n-gram 又叫作 unigram(一元语法)、bigram(二元语法)和 trigram(三元语法)。
n n n 元语法模型是基于 n − 1 n-1 n−1 阶马尔可夫链的一种概率语言模型(即只考虑前 n − 1 n-1 n−1 个词出现的情况下,后一个词出现的概率):
unigram: P ( w 1 , w 2 , ⋯ , w T ) = ∏ i = 1 T P ( w i ) bigram: P ( w 1 , w 2 , ⋯ , w T ) = P ( x 1 ) ∏ i = 1 T − 1 P ( w i + 1 ∣ w i ) trigram: P ( w 1 , w 2 , ⋯ , w T ) = P ( x 1 ) P ( x 2 ∣ x 1 ) ∏ i = 1 T − 2 P ( w i + 2 ∣ w i , w i + 1 ) \begin{aligned} \text{unigram:}\quad&P(w_1,w_2,\cdots,w_T)=\prod_{i=1}^T P(w_i) \\ \text{bigram:}\quad&P(w_1,w_2,\cdots,w_T)=P(x_1)\prod_{i=1}^{T-1} P(w_{i+1}|w_i) \\ \text{trigram:}\quad&P(w_1,w_2,\cdots,w_T)=P(x_1)P(x_2|x_1)\prod_{i=1}^{T-2} P(w_{i+2}|w_{i},w_{i+1}) \\ \end{aligned} unigram:bigram:trigram:P(w1,w2,⋯,wT)=i=1∏TP(wi)P(w1,w2,⋯,wT)=P(x1)i=1∏T−1P(wi+1∣wi)P(w1,w2,⋯,wT)=P(x1)P(x2∣x1)i=1∏T−2P(wi+2∣wi,wi+1)
二、BLEU(Bilingual Evaluation Understudy)
2.1 BLEU 定义
BLEU(发音与单词 blue 相同) 最早是用于评估机器翻译的结果, 但现在它已经被广泛用于评估许多应用的输出序列的质量。对于预测序列 pred
中的任意 n n n 元语法, BLEU 的评估都是这个 n n n 元语法是否出现在标签序列 label
中。
BLEU 定义如下:
BLEU = exp ( min ( 0 , 1 − len(label) len(pred) ) ) ∏ n = 1 k p n 1 / 2 n \text{BLEU}=\exp\left(\min\left(0,1-\frac{\text{len(label)}}{\text{len(pred)}}\right)\right)\prod_{n=1}^kp_n^{1/2^n} BLEU=exp(min(0,1−len(pred)len(label)))n=1∏kpn1/2n
其中 len(*) \text{len(*)} len(*) 代表序列 ∗ * ∗ 中的词元个数, k k k 用于匹配最长的 n n n 元语法(常取 4 4 4), p n p_n pn 表示 n n n 元语法的精确度。
具体而言,给定 label
: A , B , C , D , E , F A,B,C,D,E,F A,B,C,D,E,F 和 pred
: A , B , B , C , D A,B,B,C,D A,B,B,C,D,取 k = 3 k=3 k=3。
首先看 p 1 p_1 p1 如何计算。我们先将 pred
中的每个 unigram 都统计出来: ( A ) , ( B ) , ( B ) , ( C ) , ( D ) (A),(B),(B),(C),(D) (A),(B),(B),(C),(D),再将 label
中的每个 unigram 都统计出来: ( A ) , ( B ) , ( C ) , ( D ) , ( E ) , ( F ) (A),(B),(C),(D),(E),(F) (A),(B),(C),(D),(E),(F),然后看它们之间有多少匹配的(不可以重复匹配,即必须保持一一对应的关系)。可以看出一共有 4 4 4 个匹配的,而 pred
中一共有 5 5 5 个 unigram,于是 p 1 = 4 / 5 p_1=4/5 p1=4/5。
再来看 p 2 p_2 p2 如何计算。我们先将 pred
中的每个 bigram 都统计出来: ( A , B ) , ( B , B ) , ( B , C ) , ( C , D ) (A,B),(B,B),(B,C),(C,D) (A,B),(B,B),(B,C),(C,D),再将 label
中的每个 bigram 都统计出来: ( A , B ) , ( B , C ) , ( C , D ) , ( D , E ) , ( E , F ) (A,B),(B,C),(C,D),(D,E),(E,F) (A,B),(B,C),(C,D),(D,E),(E,F),然后看它们之间有多少匹配的。可以看出一共有 3 3 3 个匹配的,而 pred
中一共有 4 4 4 个 bigram,于是 p 2 = 3 / 4 p_2=3/4 p2=3/4。
最后看 p 3 p_3 p3 如何计算。我们先将 pred
中的每个 trigram 都统计出来: ( A , B , B ) , ( B , B , C ) , ( B , C , D ) (A,B,B),(B,B,C),(B,C,D) (A,B,B),(B,B,C),(B,C,D),再将 label
中的每个 trigram 都统计出来: ( A , B , C ) , ( B , C , D ) , ( C , D , E ) , ( D , E , F ) (A,B,C),(B,C,D),(C,D,E),(D,E,F) (A,B,C),(B,C,D),(C,D,E),(D,E,F),然后看它们之间有多少匹配的。可以看出只有 1 1 1 个匹配,而 pred
中一共有 3 3 3 个 trigram,于是 p 3 = 1 / 3 p_3=1/3 p3=1/3。
因此此例的 BLEU 分数为
BLEU = exp ( min ( 0 , 1 − 6 / 5 ) ) ⋅ p 1 1 / 2 ⋅ p 2 1 / 4 ⋅ p 3 1 / 8 = e − 0.2 ⋅ ( 4 5 ) 1 / 2 ⋅ ( 3 4 ) 1 / 4 ⋅ ( 1 3 ) 1 / 8 ≈ 0.5940 \begin{aligned} \text{BLEU}&=\exp(\min(0,1-6/5))\cdot p_1^{1/2}\cdot p_2^{1/4}\cdot p_3^{1/8} \\ &=e^{-0.2}\cdot \left(\frac45\right)^{1/2}\cdot \left(\frac34\right)^{1/4}\cdot\left(\frac13\right)^{1/8} \\ &\approx0.5940 \end{aligned} BLEU=exp(min(0,1−6/5))⋅p11/2⋅p21/4⋅p31/8=e−0.2⋅(54)1/2⋅(43)1/4⋅(31)1/8≈0.5940
2.2 BLEU 的探讨
根据 BLEU 的定义,当预测序列与标签序列完全相同时,BLEU 的值为 1 1 1。另一方面,由于 e x > 0 e^x>0 ex>0 且 p n ≥ 0 p_n\geq0 pn≥0,因此有
BLEU ∈ [ 0 , 1 ] \text{BLEU}\in[0,1] BLEU∈[0,1]
BLEU 的值越接近 1 1 1,则代表预测效果越好;BLEU 的值越接近 0 0 0,则代表预测效果越差。
此外,由于 n n n 元语法越长匹配难度越大, 所以 BLEU 为更长的 n n n 元语法的精确度分配更大的权重(固定 a ∈ ( 0 , 1 ) a\in(0,1) a∈(0,1),则 a 1 / 2 n a^{1/2^n} a1/2n 会随着 n n n 的增加而增加)。而且,由于预测序列越短获得的 p n p_n pn 值越高,所以系数 exp ( ⋅ ) \exp(\cdot) exp(⋅) 这一项用于惩罚较短的预测序列。
2.3 BLEU 的简单实现
import math
from collections import Counter
def bleu(label, pred, k=4):
# 我们假设输入的label和pred都已经进行了分词
score = math.exp(min(0, 1 - len(label) / len(pred)))
for n in range(1, k + 1):
# 使用哈希表用来存放label中所有的n-gram
hashtable = Counter([' '.join(label[i:i + n]) for i in range(len(label) - n + 1)])
# 匹配成功的个数
num_matches = 0
for i in range(len(pred) - n + 1):
ngram = ' '.join(pred[i:i + n])
if ngram in hashtable and hashtable[ngram] > 0:
num_matches += 1
hashtable[ngram] -= 1
score *= math.pow(num_matches / (len(pred) - n + 1), math.pow(0.5, n))
return score
例如:
label = 'A B C D E F'
pred = 'A B B C D'
for i in range(4):
print(bleu(label.split(), pred.split(), k=i + 1))
# 0.7322950476607851
# 0.6814773296495302
# 0.5940339360503315
# 0.0
References
边栏推荐
- Special behavior of main function in import statement
- 请问 flinksql对接cdc时 如何实现计算某个字段update前后的差异 ?
- Stack and queue-p79-9
- 数据资产管理与数据安全国内外最新趋势
- 【NOI模拟赛】区域划分(结论,构造)
- RuntimeError: CUDA error: CUBLAS_STATUS_ALLOC_FAILED when calling `cublasCreate(handle)`问题解决
- 请教一下,监听pgsql ,怎样可以监听多个schema和table
- MYSQL----导入导出&视图&索引&执行计划
- 常用函数detect_image/predict
- How can flinksql calculate the difference between a field before and after update when docking with CDC?
猜你喜欢
子组件传递给父组件
Answer to the second stage of the assignment of "information security management and evaluation" of the higher vocational group of the 2018 Jiangsu Vocational College skills competition
企業如何進行數據治理?分享數據治理4個方面的經驗總結
After the promotion, sales volume and flow are both. Is it really easy to relax?
Brand · consultation standardization
毕业设计游戏商城
[GNN] graphic gnn:a gender Introduction (including video)
ip地址那点事
Config distributed configuration center
如何给目标机器人建模并仿真【数学/控制意义】
随机推荐
Unity3d learning notes
场馆怎么做体育培训?
Composition API 前提
This article introduces you to the characteristics, purposes and basic function examples of static routing
2022年全国所有A级景区数据(13604条)
$refs:组件中获取元素对象或者子组件实例:
Jetpack compose is much more than a UI framework~
大促过后,销量与流量兼具,是否真的高枕无忧?
ip地址那点事
多个kubernetes集群如何实现共享同一个存储
栈题目:有效括号的嵌套深度
Brand · consultation standardization
.net core 访问不常见的静态文件类型(MIME 类型)
Matlab tips (29) polynomial fitting plotfit
A slow SQL drags the whole system down
LVS+Keepalived(DR模式)学习笔记
分布式id解决方案
MySQL的主从复制原理
How to share the same storage among multiple kubernetes clusters
Networkx绘图和常用库函数坐标绘图