logo

NLP – ニューラル機械翻訳を評価するための BLEU スコア – Python

ニューラル機械翻訳 (NMT) の標準タスクです NLP これには、テキストをソース言語からターゲット言語に翻訳することが含まれます。 BLEU (バイリンガル評価アンダースタディ) 機械翻訳者による翻訳を評価するために使用されるスコアです。この記事では、BLEU スコアの背後にある数学と Python でのその実装について説明します。

目次



BLEUスコアとは何ですか?

上で述べたように、BLEU スコアは機械翻訳タスクの評価指標です。を比較して計算されます。 Nグラム 機械翻訳された文を人間が翻訳した文の N グラムに変換します。通常、文の長さが長くなると、BLEU スコアが低下することが観察されています。ただし、これは翻訳に使用されるモデルによって異なる場合があります。以下は、文の長さによる BLEU スコアの変化を示すグラフです。

BLEU スコアの数学的表現

数学的には、BLEU スコアは次のように与えられます。

BLEU Score = BP * exp(sum_{i=1}^{N}(w_i * ln(p_i))



Javaのリストとセット

ここ、

  • 血圧 を意味する 簡潔さのペナルティ
  • w_i 次数 i の n グラム精度の重みです (通常、重みはすべての i で等しい)
  • p_i次数 i の n グラム修正精度スコアです。
  • N は考慮すべき最大の n グラム次数です (通常は最大 4)

修正された N グラム精度 (p_i)

変更された精度p_i確かに、次の数間の比率として計算されます。 n - 完全に一致する翻訳候補内のグラム n - 参照翻訳のグラム数でクリップされます。 n 翻訳候補の -grams。

p_i = frac{ ext{Count Clip}(matches_i, ext{max-ref-count}_i)}{ ext{candidate-n-grams}_i}



ここ、

  • Count Clips は、一致した n-gram の数をクリップする関数です (matches_i)すべての参照翻訳にわたる N グラムの最大数による ( ext{max-ref-count}_i
  • matches_i一致する次数 i の n グラムの数です その通り 候補翻訳といずれかの参照翻訳の間。
  • ext{max-ref-count}_i単一の参照翻訳で見つかった次数 i の特定の n グラムの最大出現数です。
  • ext{candidate-n-grams}_iは、翻訳候補に存在する次数 i の n グラムの総数です。

簡潔さのペナルティ (BP)

簡潔さのペナルティ 参照翻訳よりも短い翻訳にペナルティを与えます。の数学的表現 簡潔さのペナルティ は次のように与えられます。

BP = exp(1- frac{r}{c})

ここ、

  • r は翻訳候補の長さです
  • c は、参照翻訳の平均長です。

BLEU スコアを計算するにはどうすればよいですか?

BLEU スコアの計算をよりよく理解するために、例を見てみましょう。以下はフランス語から英語への翻訳の例です。

  • 原文(フランス語) : この画像は私がクリックしました
  • 機械翻訳されたテキスト : 写真は私が撮ったものです
  • 参考テキスト-1 : この写真は私がクリックしました
  • 参考テキスト-2 : その写真は私がクリックしました

機械による翻訳が正確ではないことがはっきりとわかります。翻訳の BLEU スコアを計算してみましょう。

ユニグラム修正精度

のために n = 1、 計算してみます ユニグラム修正精度:

ユニグラム機械翻訳におけるカウント

Ref の最大数

クリップされた数 =
min (MT のカウント、Ref の最大カウント)
2

1

SQLの主キーと複合キー
1
写真2

1

1
による1

1

1
自分1

1

1

ここで、ユニグラム (the、picture、by、me) は機械翻訳されたテキストから取得されています。 Count はすべての機械翻訳テキストにおける n-gram の頻度を指し、Clipped Count は参照テキスト全体における unigram の頻度を指します。

P_1 = frac{ ext{Clipped Count}}{ ext{Count in MT}} = frac{1+1+1+1}{2+2+1+1} =frac{4}{6} = frac{2}{3}

バイグラム修正精度

のために n = 2 を計算します。 バイグラム修正精度 :

バイグラムMT でのカウント

Ref の最大数

クリップされた数 =
min (MT のカウント、Ref の最大カウント)
2

1

1
をイメージしてください1

0

0
による写真1

0

0
私によって1

1

1

P_2 = frac{ ext{Clip Count}}{ ext{Count in MT}} = frac{2}{5}

トリグラム修正精度

のために n = 3 を計算します。 トリグラム修正精度:

Javaで設定したパス
トリグラムMTでカウント

Ref の最大数

クリップされた数 =
min (MT のカウント、Ref の最大カウント)
写真は1

0

0
絵を描く1

0

0
の写真1

0

0
私が撮った写真1

0

0

P_3 = frac{0+0+0+0}{1+1+1+1} =0.0

4グラム修正精度

のために n =4 を計算します。 4 グラム修正精度:

4グラムカウント

Ref の最大数

クリップされた数 =
min (MT のカウント、Ref の最大カウント)
写真、写真1

0

0
絵を描く1

0

0
私が撮った写真1

0

0

P_4 = frac{0+0+0}{1+1+1} =0.0

簡潔さのペナルティの計算

すべての精度スコアを計算したので、翻訳の簡潔さのペナルティを見つけてみましょう。

Brevity Penalty = min(1, frac{Machine,Translation,Output,Length}{Maximum,Reference,Output,Length})

  • 機械翻訳の出力長 = 6 (機械翻訳されたテキスト: 写真は私によるもの)
  • 最大リファレンス出力長 = 6 (参考テキスト-2: 画像は私がクリックしました)

Brevity Penalty (BP) = min(1, frac{6}{6}) = 1

BLEU スコアの計算

最後に、上記の翻訳の BLEU スコアは次の式で与えられます。

BLEU Score = BP * exp(sum_{n=1}^{4} w_i * log(p_i))

アルファベットから数字へ

値を代入すると、次のようになります。

ext{BLEU Score} = 1 * exp(0.25*ln(2/3) + 0.25*ln(2/5) + 0*ln(0) + 0*ln(0))

ext{BLEU Score} = 0.718

最後に、指定された翻訳の BLEU スコアを計算しました。

Python での BLEU スコアの実装

BLEU スコアを手動で計算したので、BLEU スコアの数学的操作にはもう慣れています。ただし、Python の NLTK BLEU スコア計算用の組み込みモジュールを提供します。上記と同じ翻訳例の BLEU スコアを計算してみますが、今回は NLTK を使用します。

コード:

Python3

from> nltk.translate.bleu_score>import> sentence_bleu> # Define your desired weights (example: higher weight for bi-grams)> weights>=> (>0.25>,>0.25>,>0>,>0>)># Weights for uni-gram, bi-gram, tri-gram, and 4-gram> # Reference and predicted texts (same as before)> reference>=> [[>'the'>,>'picture'>,>'is'>,>'clicked'>,>'by'>,>'me'>],> >[>'this'>,>'picture'>,>'was'>,>'clicked'>,>'by'>,>'me'>]]> predictions>=> [>'the'>,>'picture'>,>'the'>,>'picture'>,>'by'>,>'me'>]> # Calculate BLEU score with weights> score>=> sentence_bleu(reference, predictions, weights>=>weights)> print>(score)>
     Output:   0.7186082239261684 We can see that the BLEU score computed using Python is the same as the one computed manually. Thus, we have successfully calculated the BLEU score and understood the mathematics behind it.>