Ver en TensorFlow.org | Ejecutar en Google Colab | Ver en GitHub | Descargar cuaderno |
Descripción general
TensorFlow Text proporciona una colección de clases y operaciones relacionadas con métricas de texto listas para usar con TensorFlow 2.0. La biblioteca contiene implementaciones de métricas de similitud de texto como ROUGE-L, necesarias para la evaluación automática de modelos de generación de texto.
El beneficio de usar estas operaciones para evaluar sus modelos es que son compatibles con la evaluación de TPU y funcionan bien con las API de métricas de transmisión TF.
Configuración
pip install -q tensorflow-text
import tensorflow as tf
import tensorflow_text as text
ROUGE-L
La métrica de Rouge-L es una puntuación de 0 a 1 que indica qué tan similares son dos secuencias, según la longitud de la subsecuencia común más larga (LCS). En particular, Rouge-L es la media armónica ponderada (o medida f) que combina la precisión de LCS (el porcentaje de la secuencia de hipótesis cubierta por la LCS) y la recuperación de LCS (el porcentaje de la secuencia de referencia cubierta por la LCS).
La implementación de TF.Text devuelve la medida F, la precisión y la recuperación para cada par (hipótesis, referencia).
Considere el siguiente par de hipótesis / referencia:
hypotheses = tf.ragged.constant([['captain', 'of', 'the', 'delta', 'flight'],
['the', '1990', 'transcript']])
references = tf.ragged.constant([['delta', 'air', 'lines', 'flight'],
['this', 'concludes', 'the', 'transcript']])
Se espera que las hipótesis y referencias sean tf.RaggedTensors de tokens. Se requieren tokens en lugar de oraciones sin formato porque no hay una única estrategia de tokenización que se adapte a todas las tareas.
Ahora podemos llamar a text.metrics.rouge_l y recuperar nuestro resultado:
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 tiene un hiperparámetro adicional, alfa, que determina el peso de la media armónica utilizada para calcular la F-Measure. Los valores más cercanos a 0 tratan la recuperación como más importante y los valores más cercanos a 1 tratan la precisión como más importante. alfa tiene un valor predeterminado de .5, que corresponde a la misma ponderación para Precisión y Recuperación.
# 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)