TF.텍스트 메트릭

TensorFlow.org에서 보기 Google Colab에서 실행 GitHub에서 보기 노트북 다운로드

개요

TensorFlow Text는 TensorFlow 2.0에서 사용할 준비가 된 텍스트 메트릭 관련 클래스 및 작업 모음을 제공합니다. 라이브러리에는 텍스트 생성 모델의 자동 평가에 필요한 ROUGE-L과 같은 텍스트 유사성 메트릭의 구현이 포함되어 있습니다.

모델을 평가할 때 이러한 작업을 사용하면 TPU 평가와 호환되고 TF 스트리밍 메트릭 API와 잘 작동한다는 이점이 있습니다.

설정

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

루즈엘

Rouge-L 메트릭은 LCS(가장 긴 공통 부분 시퀀스)의 길이를 기준으로 두 시퀀스가 ​​얼마나 유사한지를 나타내는 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.RaggedTensor가 될 것으로 예상됩니다. 단일 토큰화 전략이 모든 작업에 적합하지 않기 때문에 원시 문장 대신 토큰이 필요합니다.

이제 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)