Métriques TF.Text

Voir sur TensorFlow.org Exécuter dans Google Colab Voir sur GitHub Télécharger le cahier

Aperçu

TensorFlow Text fournit une collection de classes et d'opérations liées aux métriques de texte prêtes à être utilisées avec TensorFlow 2.0. La bibliothèque contient des implémentations de métriques de similitude de texte telles que ROUGE-L, requises pour l'évaluation automatique des modèles de génération de texte.

L'avantage d'utiliser ces opérations pour évaluer vos modèles est qu'elles sont compatibles avec l'évaluation TPU et fonctionnent parfaitement avec les API de métrique de streaming TF.

Installer

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

ROUGE-L

La métrique Rouge-L est un score de 0 à 1 indiquant à quel point deux séquences sont similaires, en fonction de la longueur de la plus longue sous-séquence commune (LCS). En particulier, Rouge-L est la moyenne harmonique pondérée (ou f-mesure) combinant la précision LCS (le pourcentage de la séquence d'hypothèse couverte par la LCS) et le rappel LCS (le pourcentage de la séquence de référence couverte par la LCS).

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

L'implémentation TF.Text renvoie la mesure F, la précision et le rappel pour chaque paire (hypothèse, référence).

Considérons le couple hypothèse/référence suivant :

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

Les hypothèses et les références devraient être tf.RaggedTensors de jetons. Des jetons sont requis au lieu de phrases brutes, car aucune stratégie de tokenisation unique ne convient à toutes les tâches.

Nous pouvons maintenant appeler text.metrics.rouge_l et récupérer notre résultat :

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 a un hyperparamètre supplémentaire, alpha, qui détermine le poids de la moyenne harmonique utilisée pour calculer la F-Mesure. Les valeurs plus proches de 0 traitent le rappel comme plus important et les valeurs plus proches de 1 traitent la précision comme plus importante. alpha est par défaut de 0,5, ce qui correspond à un poids égal pour la précision et le rappel.

# 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)