0


详解机器翻译任务中的BLEU

目录

一、

  1. n
  2. n
  3. n 元语法(N-Gram
  4. n
  5. n
  6. n 元语法(n-gram)是指文本中**连续**出现的
  7. n
  8. n
  9. n 个**词元**。当
  10. n
  11. n
  12. n 分别为
  13. 1
  14. ,
  15. 2
  16. ,
  17. 3
  18. 1,2,3
  19. 1,2,3 时,n-gram 又叫作 unigram(一元语法)、bigram(二元语法)和 trigram(三元语法)。
  20. n
  21. n
  22. n 元语法模型是基于
  23. n
  24. 1
  25. n-1
  26. n1 阶马尔可夫链的一种概率语言模型(即只考虑前
  27. n
  28. 1
  29. n-1
  30. n1 个词出现的情况下,后一个词出现的概率):
  31. unigram:
  32. P
  33. (
  34. w
  35. 1
  36. ,
  37. w
  38. 2
  39. ,
  40. ,
  41. w
  42. T
  43. )
  44. =
  45. i
  46. =
  47. 1
  48. T
  49. P
  50. (
  51. w
  52. i
  53. )
  54. bigram:
  55. P
  56. (
  57. w
  58. 1
  59. ,
  60. w
  61. 2
  62. ,
  63. ,
  64. w
  65. T
  66. )
  67. =
  68. P
  69. (
  70. x
  71. 1
  72. )
  73. i
  74. =
  75. 1
  76. T
  77. 1
  78. P
  79. (
  80. w
  81. i
  82. +
  83. 1
  84. w
  85. i
  86. )
  87. trigram:
  88. P
  89. (
  90. w
  91. 1
  92. ,
  93. w
  94. 2
  95. ,
  96. ,
  97. w
  98. T
  99. )
  100. =
  101. P
  102. (
  103. x
  104. 1
  105. )
  106. P
  107. (
  108. x
  109. 2
  110. x
  111. 1
  112. )
  113. i
  114. =
  115. 1
  116. T
  117. 2
  118. P
  119. (
  120. w
  121. i
  122. +
  123. 2
  124. w
  125. i
  126. ,
  127. w
  128. i
  129. +
  130. 1
  131. )
  132. \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}
  133. unigram:bigram:trigram:​P(w1​,w2​,⋯,wT​)=i=1TP(wi​)P(w1​,w2​,⋯,wT​)=P(x1​)i=1T1P(wi+1​∣wi​)P(w1​,w2​,⋯,wT​)=P(x1​)P(x2​∣x1​)i=1T2P(wi+2​∣wi​,wi+1​)​

二、BLEU(Bilingual Evaluation Understudy)

2.1 BLEU 定义

BLEU(发音与单词 blue 相同) 最早是用于评估机器翻译的结果, 但现在它已经被广泛用于评估许多应用的输出序列的质量。对于预测序列

  1. pred

中的任意

  1. n
  2. n
  3. n 元语法, BLEU 的评估都是这个
  4. n
  5. n
  6. n 元语法是否出现在标签序列
  1. label

中。

BLEU 定义如下:

  1. BLEU
  2. =
  3. exp
  4. (
  5. min
  6. (
  7. 0
  8. ,
  9. 1
  10. len(label)
  11. len(pred)
  12. )
  13. )
  14. n
  15. =
  16. 1
  17. k
  18. p
  19. n
  20. 1
  21. /
  22. 2
  23. n
  24. \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}
  25. BLEU=exp(min(0,1len(pred)len(label)​))n=1kpn1/2n

其中

  1. len(*)
  2. \text{len(*)}
  3. len(*) 代表序列
  4. *
  5. 中的词元个数,
  6. k
  7. k
  8. k 用于匹配最长的
  9. n
  10. n
  11. n 元语法(常取
  12. 4
  13. 4
  14. 4),
  15. p
  16. n
  17. p_n
  18. pn 表示
  19. n
  20. n
  21. n 元语法的精确度。

具体而言,给定

  1. label

  1. A
  2. ,
  3. B
  4. ,
  5. C
  6. ,
  7. D
  8. ,
  9. E
  10. ,
  11. F
  12. A,B,C,D,E,F
  13. A,B,C,D,E,F
  1. pred

  1. A
  2. ,
  3. B
  4. ,
  5. B
  6. ,
  7. C
  8. ,
  9. D
  10. A,B,B,C,D
  11. A,B,B,C,D,取
  12. k
  13. =
  14. 3
  15. k=3
  16. k=3

首先看

  1. p
  2. 1
  3. p_1
  4. p1 如何计算。我们先将
  1. pred

中的每个 unigram 都统计出来:

  1. (
  2. A
  3. )
  4. ,
  5. (
  6. B
  7. )
  8. ,
  9. (
  10. B
  11. )
  12. ,
  13. (
  14. C
  15. )
  16. ,
  17. (
  18. D
  19. )
  20. (A),(B),(B),(C),(D)
  21. (A),(B),(B),(C),(D),再将
  1. label

中的每个 unigram 都统计出来:

  1. (
  2. A
  3. )
  4. ,
  5. (
  6. B
  7. )
  8. ,
  9. (
  10. C
  11. )
  12. ,
  13. (
  14. D
  15. )
  16. ,
  17. (
  18. E
  19. )
  20. ,
  21. (
  22. F
  23. )
  24. (A),(B),(C),(D),(E),(F)
  25. (A),(B),(C),(D),(E),(F),然后看它们之间有多少匹配的(**不可以重复匹配,即必须保持一一对应的关系**)。可以看出一共有
  26. 4
  27. 4
  28. 4 个匹配的,而
  1. pred

中一共有

  1. 5
  2. 5
  3. 5 unigram,于是
  4. p
  5. 1
  6. =
  7. 4
  8. /
  9. 5
  10. p_1=4/5
  11. p1​=4/5

再来看

  1. p
  2. 2
  3. p_2
  4. p2 如何计算。我们先将
  1. pred

中的每个 bigram 都统计出来:

  1. (
  2. A
  3. ,
  4. B
  5. )
  6. ,
  7. (
  8. B
  9. ,
  10. B
  11. )
  12. ,
  13. (
  14. B
  15. ,
  16. C
  17. )
  18. ,
  19. (
  20. C
  21. ,
  22. D
  23. )
  24. (A,B),(B,B),(B,C),(C,D)
  25. (A,B),(B,B),(B,C),(C,D),再将
  1. label

中的每个 bigram 都统计出来:

  1. (
  2. A
  3. ,
  4. B
  5. )
  6. ,
  7. (
  8. B
  9. ,
  10. C
  11. )
  12. ,
  13. (
  14. C
  15. ,
  16. D
  17. )
  18. ,
  19. (
  20. D
  21. ,
  22. E
  23. )
  24. ,
  25. (
  26. E
  27. ,
  28. F
  29. )
  30. (A,B),(B,C),(C,D),(D,E),(E,F)
  31. (A,B),(B,C),(C,D),(D,E),(E,F),然后看它们之间有多少匹配的。可以看出一共有
  32. 3
  33. 3
  34. 3 个匹配的,而
  1. pred

中一共有

  1. 4
  2. 4
  3. 4 bigram,于是
  4. p
  5. 2
  6. =
  7. 3
  8. /
  9. 4
  10. p_2=3/4
  11. p2​=3/4

最后看

  1. p
  2. 3
  3. p_3
  4. p3 如何计算。我们先将
  1. pred

中的每个 trigram 都统计出来:

  1. (
  2. A
  3. ,
  4. B
  5. ,
  6. B
  7. )
  8. ,
  9. (
  10. B
  11. ,
  12. B
  13. ,
  14. C
  15. )
  16. ,
  17. (
  18. B
  19. ,
  20. C
  21. ,
  22. D
  23. )
  24. (A,B,B),(B,B,C),(B,C,D)
  25. (A,B,B),(B,B,C),(B,C,D),再将
  1. label

中的每个 trigram 都统计出来:

  1. (
  2. A
  3. ,
  4. B
  5. ,
  6. C
  7. )
  8. ,
  9. (
  10. B
  11. ,
  12. C
  13. ,
  14. D
  15. )
  16. ,
  17. (
  18. C
  19. ,
  20. D
  21. ,
  22. E
  23. )
  24. ,
  25. (
  26. D
  27. ,
  28. E
  29. ,
  30. F
  31. )
  32. (A,B,C),(B,C,D),(C,D,E),(D,E,F)
  33. (A,B,C),(B,C,D),(C,D,E),(D,E,F),然后看它们之间有多少匹配的。可以看出只有
  34. 1
  35. 1
  36. 1 个匹配,而
  1. pred

中一共有

  1. 3
  2. 3
  3. 3 trigram,于是
  4. p
  5. 3
  6. =
  7. 1
  8. /
  9. 3
  10. p_3=1/3
  11. p3​=1/3

因此此例的 BLEU 分数为

  1. BLEU
  2. =
  3. exp
  4. (
  5. min
  6. (
  7. 0
  8. ,
  9. 1
  10. 6
  11. /
  12. 5
  13. )
  14. )
  15. p
  16. 1
  17. 1
  18. /
  19. 2
  20. p
  21. 2
  22. 1
  23. /
  24. 4
  25. p
  26. 3
  27. 1
  28. /
  29. 8
  30. =
  31. e
  32. 0.2
  33. (
  34. 4
  35. 5
  36. )
  37. 1
  38. /
  39. 2
  40. (
  41. 3
  42. 4
  43. )
  44. 1
  45. /
  46. 4
  47. (
  48. 1
  49. 3
  50. )
  51. 1
  52. /
  53. 8
  54. 0.5940
  55. \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}
  56. BLEU​=exp(min(0,16/5))⋅p11/2​⋅p21/4​⋅p31/8​=e0.2⋅(54​)1/2⋅(43​)1/4⋅(31​)1/80.5940

2.2 BLEU 的探讨

根据 BLEU 的定义,当预测序列与标签序列完全相同时,BLEU 的值为

  1. 1
  2. 1
  3. 1。另一方面,由于
  4. e
  5. x
  6. >
  7. 0
  8. e^x>0
  9. ex>0
  10. p
  11. n
  12. 0
  13. p_n\geq0
  14. pn​≥0,因此有
  15. BLEU
  16. [
  17. 0
  18. ,
  19. 1
  20. ]
  21. \text{BLEU}\in[0,1]
  22. BLEU∈[0,1]

BLEU 的值越接近

  1. 1
  2. 1
  3. 1,则代表预测效果越好;BLEU 的值越接近
  4. 0
  5. 0
  6. 0,则代表预测效果越差。

此外,由于

  1. n
  2. n
  3. n 元语法越长匹配难度越大, 所以 BLEU 为更长的
  4. n
  5. n
  6. n 元语法的精确度分配更大的权重(固定
  7. a
  8. (
  9. 0
  10. ,
  11. 1
  12. )
  13. a\in(0,1)
  14. a∈(0,1),则
  15. a
  16. 1
  17. /
  18. 2
  19. n
  20. a^{1/2^n}
  21. a1/2n 会随着
  22. n
  23. n
  24. n 的增加而增加)。而且,由于预测序列越短获得的
  25. p
  26. n
  27. p_n
  28. pn 值越高,所以系数
  29. exp
  30. (
  31. )
  32. \exp(\cdot)
  33. exp(⋅) 这一项用于惩罚较短的预测序列。

2.3 BLEU 的简单实现

  1. import math
  2. from collections import Counter
  3. defbleu(label, pred, k=4):# 我们假设输入的labelpred都已经进行了分词
  4. score = math.exp(min(0,1-len(label)/len(pred)))for n inrange(1, k +1):# 使用哈希表用来存放label中所有的n-gram
  5. hashtable = Counter([' '.join(label[i:i + n])for i inrange(len(label)- n +1)])# 匹配成功的个数
  6. num_matches =0for i inrange(len(pred)- n +1):
  7. ngram =' '.join(pred[i:i + n])if ngram in hashtable and hashtable[ngram]>0:
  8. num_matches +=1
  9. hashtable[ngram]-=1
  10. score *= math.pow(num_matches /(len(pred)- n +1), math.pow(0.5, n))return score

例如:

  1. label ='A B C D E F'
  2. pred ='A B B C D'for i inrange(4):print(bleu(label.split(), pred.split(), k=i +1))# 0.7322950476607851# 0.6814773296495302# 0.5940339360503315# 0.0

References

[1] d2l. Sequence to Sequence Learning


本文转载自: https://blog.csdn.net/raelum/article/details/125632699
版权归原作者 aelum 所有, 如有侵权,请联系我们删除。

“详解机器翻译任务中的BLEU”的评论:

还没有评论