AI翻訳の通知表?BLEUスコアと精度評価の仕組みをマスターしよう

こんにちは。ゆうせいです。

最近はDeepLやChatGPTなど、驚くほど自然な翻訳ができるツールが増えましたね。でも、AIが作った翻訳がどれくらい正しいのか、どうやって数値で判断しているか不思議に思ったことはありませんか。

今回は、機械翻訳の質を評価する代表的な指標であるBLEUについて、一緒に学んでいきましょう!

BLEUとは翻訳の「一致度」を測るもの

BLEUは、人間が書いたお手本(参照翻訳)と、機械が作った翻訳(機械翻訳)がどれくらい似ているかを計算するスコアです。

もし機械の翻訳がお手本と一言一句同じなら、そのスコアは満点になります。逆に、全く違う単語ばかりならゼロに近づきます。

専門用語:n-gram(エヌグラム)

ここで重要な専門用語を覚えましょう。n-gramとは、文章を「n個の単語の塊」で区切る手法のことです。

例えば「私は リンゴを 食べる」という文を考えてみてください。

nが1の場合(1-gram)、単語ひとつずつ「私は」「リンゴを」「食べる」に分けます。

nが2の場合(2-gram)、ふたつずつセットにして「私は リンゴを」「リンゴを 食べる」と分けます。

これは、パズルのピースを作る作業に似ています。ピースが大きければ大きいほど、文章の「流れ」や「意味」が正しく合っているかを厳しくチェックできるのです!

modified n-gram precisionの計算方法

精度を測るために使うのが、このmodified n-gram precision(修正n-gram適合率)です。

計算式は、機械翻訳の中に含まれるn-gramのうち、いくつがお手本の中にも存在したか、という割合で求めます。

\text{Precision} = \frac{\text{お手本と一致した単語セットの数}}{\text{機械翻訳に含まれる全単語セットの数}}

分母は機械が吐き出した単語の数なので、もし機械が同じ単語を何度も繰り返して文字数を稼ごうとしても、この式によって正しく評価が下げられる仕組みになっています。賢い設計だと思いませんか。

長さが足りないと減点!BP(brevity penalty)

機械翻訳がとても短い場合、たまたま単語が一致してスコアが高くなってしまうことがあります。それを防ぐのがBP(短縮ペナルティ)です。

冒頭の数式を思い出してください。

BP =

1 (もし c \geq r のとき)

\exp ( 1 - r / c ) (もし c < r のとき)

ここで c は機械翻訳の長さ、 r はお手本の長さです。

機械翻訳が短すぎると、この計算によって最終的なスコアがガクンと下げられます。宿題を数行で済ませようとしたら、先生に「中身が足りないよ!」と怒られるようなイメージですね!


練習問題に挑戦してみよう

では、提示された英文を使って、n=2のときのmodified n-gram precisionを計算してみましょう。

機械翻訳:

It is a guide to action which ensures that the military always obeys the commands of the party.

参照翻訳1:

It is a guide to action that ensures that the military will forever heed Party commands.

手順1:機械翻訳を2-gramに分ける

「It is」「is a」「a guide」「guide to」「to action」「action which」「which ensures」「ensures that」「that the」「the military」「military always」「always obeys」「obeys the」「the commands」「commands of」「of the」「the party」

全部で17個のペアができました。これが分母になります。

手順2:参照翻訳に含まれているかチェック

お手本の文章(参照翻訳1、2、3のいずれか)に含まれているペアを探します。

  1. It is (あり)
  2. is a (あり)
  3. a guide (あり)
  4. guide to (あり)
  5. to action (あり)
  6. action which (なし) ※お手本はaction thatなど
  7. which ensures (なし)
  8. ensures that (あり)
  9. that the (あり)
  10. the military (あり)
  11. military always (なし)
  12. always obeys (なし)
  13. obeys the (なし)
  14. the commands (なし)
  15. commands of (あり)
  16. of the (あり)
  17. the party (あり)

一致したのは、10個でした。

手順3:計算する

10 / 17 \approx 0.588

つまり、この機械翻訳の2-gramにおける精度は約59パーセントということになります。


BLEUのメリットとデメリット

この指標には、使いやすい点と注意すべき点があります。

メリット

  • 計算が速くて客観的:人間の主観に頼らず、一瞬でスコアが出せます。
  • コストが低い:大量の翻訳結果を評価するのに最適です。

デメリット

  • 意味の正しさは見ない:単語の並びだけを見るので、たとえ意味が真逆になっても単語さえ合っていれば高得点が出てしまいます。
  • 表現の豊かさに弱い:お手本と違う言葉を使っているだけで、たとえ素晴らしい意訳であっても減点されてしまいます。

これからの学習の指針

BLEUを理解できたら、次は以下のステップに進んでみるのがおすすめです。

  1. 他の指標(METEORやTER)を調べる:BLEUの弱点をどう克服しているか比較してみましょう。
  2. Pythonで計算してみる:NLTKというライブラリを使えば、自分でも簡単にスコアを算出できます。
  3. 最新の評価法を知る:最近はBERTScoreなど、AIそのものが翻訳を評価する手法も登場しています。

計算式に触れるのは少し大変かもしれませんが、一つずつ分解すれば意外とシンプルですよね。

次は、実際にプログラムを動かしてみましょう。

from nltk.translate.bleu_score import sentence_bleu, SmoothingFunction

# 参照翻訳(お手本)をリスト形式で用意します
# 単語ごとに分割(トークナイズ)しておく必要があります
references = [
    "It is a guide to action that ensures that the military will forever heed Party commands".split(),
    "It is the guiding principle which guarantees the military forces always being under the command of the Party".split(),
    "It is the practical guide for the army always to heed the directions of the party".split()
]

# 機械翻訳の結果
hypothesis = "It is a guide to action which ensures that the military always obeys the commands of the party".split()

# n-gramの重みを設定します
# 今回は n=2 (2-gram) までの精度を見たいので、(0.5, 0.5) と指定します
# 1つ目が1-gram、2つ目が2-gramの重みです
weights = (0.5, 0.5, 0, 0)

# スコアを計算(平滑化関数を使用して、一致ゼロによるエラーを防ぎます)
score = sentence_bleu(references, hypothesis, weights=weights)

print(f"n=2までのBLEUスコア: {score}")

セイ・コンサルティング・グループでは新人エンジニア研修のアシスタント講師を募集しています。

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。

学生時代は趣味と実益を兼ねてリゾートバイトにいそしむ。長野県白馬村に始まり、志賀高原でのスキーインストラクター、沖縄石垣島、北海道トマム。高じてオーストラリアのゴールドコーストでツアーガイドなど。現在は野菜作りにはまっている。