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メジャー)です。
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)