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-측정값)입니다.
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)