4.6.1
BLEU 指標
まとめ
- BLEU は候補文と参照文の n-gram 一致度を使って翻訳品質を測る指標です。
- n-gram の重なりと brevity penalty を実装し、スコアの出方を確認します。
- 語順や同義語に弱い特性と複数参照で補う方法を整理します。
1. BLEU の考え方 #
- 1-gram〜n-gram(通常は 4-gram まで)について、候補文と参照文の一致度(modified precision)を計算する。
- 各 precision の対数平均を取り、幾何平均に変換する。
- 候補文が参照文より短い場合は brevity penalty を掛け、過度な省略を罰する。
BLEU スコアは 0〜1 の範囲を取り、値が大きいほど参照文に近い翻訳と見なされます。
2. 数学的定義 #
修正精度(Modified Precision) #
通常の精度は候補文の n-gram が参照文に出現する割合ですが、同じ n-gram を何度も繰り返す候補に対して不当に高くなります。修正精度は、参照文に出現する回数で上限を設けます:
$$p_n = \frac{\sum_{C \in \text{Candidates}} \sum_{\text{n-gram} \in C} \min\!\left(\text{Count}(\text{n-gram}),\; \text{MaxRef}(\text{n-gram})\right)}{\sum_{C \in \text{Candidates}} \sum_{\text{n-gram} \in C} \text{Count}(\text{n-gram})}$$BLEU スコアの計算 #
BLEU は $N$-gram(通常 $N=4$)までの修正精度の幾何平均に、brevity penalty を掛けた値です:
$$\text{BLEU} = \text{BP} \cdot \exp\!\left(\sum_{n=1}^{N} w_n \ln p_n\right)$$ここで $w_n = 1/N$(均等重み)です。
Brevity Penalty(BP) #
候補文が参照文より短い場合にペナルティを課します:
$$\text{BP} = \begin{cases} 1 & \text{if } c > r \\\\ e^{1 - r/c} & \text{if } c \leq r \end{cases}$$$c$ は候補文の長さ、$r$ は最も近い参照文の長さです。
計算例 #
候補文: “the cat is on the mat”(6 トークン) 参照文: “there is a cat on the mat”(7 トークン)
| n-gram レベル | 一致数 | 候補 n-gram 総数 | $p_n$ |
|---|---|---|---|
| 1 | 5 (“the”, “cat”, “is”, “on”, “the mat” → 重複修正で 5) | 6 | 5/6 |
| 2 | 3 (“the cat”, “on the”, “the mat”) | 5 | 3/5 |
| 3 | 1 (“on the mat”) | 4 | 1/4 |
| 4 | 1 (“on the mat” の延長なし) | 3 | 0/3 |
$p_4 = 0$ のため、この例では BLEU-4 = 0 になります。実務では smoothing を適用して 0 を回避します。
3. Python 3.13 での実装例 #
標準ライブラリのみで BLEU を実装し、候補文と参照文のサンプルに適用します。
| |
出力例:
BLEU = 0.638
3. 長所 #
- 実装が容易で高速。翻訳ベンチマークの比較指標として長く使われている。
- 参照文を複数用意すると、言い換えに対する耐性が上がる。
4. 注意点 #
- 同義語や語順の違いに弱く、意味が同じでもスコアが低く出ることがある。
- 長文要約では人手評価との相関が低くなる場合がある。
- 日本語など語境界が曖昧な言語では、分かち書きなどで適切にトークン化してから計算する。
まとめ #
- BLEU は n-gram 一致度と brevity penalty で翻訳の品質を推定する自動評価指標。
- Python 3.13 では標準ライブラリで容易に実装でき、型ヒント付きにしておくと再利用性が高まる。
- 語彙の多様性や語順の違いを評価したい場合は、ROUGE や METEOR などの指標も併用して総合的に判断しよう。