TF.Textメトリック

TensorFlow.orgで表示GoogleColabで実行GitHubで表示 ノートブックをダウンロード

概要

TensorFlow Textは、TensorFlow2.0ですぐに使用できるテキストメトリクス関連のクラスとオペレーションのコレクションを提供します。ライブラリには、テキスト生成モデルの自動評価に必要なROUGE-Lなどのテキスト類似性メトリックの実装が含まれています。

モデルの評価にこれらの操作を使用する利点は、TPU評価と互換性があり、TFストリーミングメトリックAPIとうまく連携することです。

設定

pip install -q tensorflow-text
import tensorflow as tf
import tensorflow_text as text

ROUGE-L

Rouge-Lメトリックは、最長共通部分列(LCS)の長さに基づいて、2つのシーケンスがどれほど類似しているかを示す0から1までのスコアです。特に、Rouge-Lは、LCS精度(LCSでカバーされる仮説シーケンスのパーセンテージ)とLCSリコール(LCSでカバーされる参照シーケンスのパーセンテージ)を組み合わせた加重調和平均(またはfメジャー)です。

出典: https://www.microsoft.com/en-us/research/publication/rouge-a-package-for-automatic-evaluation-of-summaries/

TF.Text実装は、各(仮説、参照)ペアのFメジャー、適合率、再現率を返します。

次の仮説/参照ペアを検討してください。

hypotheses = tf.ragged.constant([['captain', 'of', 'the', 'delta', 'flight'],
                                 ['the', '1990', 'transcript']])
references = tf.ragged.constant([['delta', 'air', 'lines', 'flight'],
                                 ['this', 'concludes', 'the', 'transcript']])

仮説と参照は、トークンのtf.RaggedTensorsであることが期待されます。単一のトークン化戦略がすべてのタスクに適合するわけではないため、生の文の代わりにトークンが必要です。

これで、text.metrics.rouge_lを呼び出して、結果を取り戻すことができます。

result = text.metrics.rouge_l(hypotheses, references)
print('F-Measure: %s' % result.f_measure)
print('P-Measure: %s' % result.p_measure)
print('R-Measure: %s' % result.r_measure)
F-Measure: tf.Tensor([0.44444448 0.57142854], shape=(2,), dtype=float32)
P-Measure: tf.Tensor([0.4       0.6666667], shape=(2,), dtype=float32)
R-Measure: tf.Tensor([0.5 0.5], shape=(2,), dtype=float32)

ROUGE-Lには、F-Measureの計算に使用される調和平均の重みを決定する追加のハイパーパラメーターalphaがあります。 0に近い値はリコールをより重要として扱い、1に近い値は精度をより重要として扱います。 alphaのデフォルトは.5で、これは適合率と再現率の等しい重みに対応します。

# Compute ROUGE-L with alpha=0
result = text.metrics.rouge_l(hypotheses, references, alpha=0)
print('F-Measure (alpha=0): %s' % result.f_measure)
print('P-Measure (alpha=0): %s' % result.p_measure)
print('R-Measure (alpha=0): %s' % result.r_measure)
F-Measure (alpha=0): tf.Tensor([0.5 0.5], shape=(2,), dtype=float32)
P-Measure (alpha=0): tf.Tensor([0.4       0.6666667], shape=(2,), dtype=float32)
R-Measure (alpha=0): tf.Tensor([0.5 0.5], shape=(2,), dtype=float32)
# Compute ROUGE-L with alpha=1
result = text.metrics.rouge_l(hypotheses, references, alpha=1)
print('F-Measure (alpha=1): %s' % result.f_measure)
print('P-Measure (alpha=1): %s' % result.p_measure)
print('R-Measure (alpha=1): %s' % result.r_measure)
F-Measure (alpha=1): tf.Tensor([0.4       0.6666667], shape=(2,), dtype=float32)
P-Measure (alpha=1): tf.Tensor([0.4       0.6666667], shape=(2,), dtype=float32)
R-Measure (alpha=1): tf.Tensor([0.5 0.5], shape=(2,), dtype=float32)