Metriche TF.Text

Visualizza su TensorFlow.org Esegui in Google Colab Visualizza su GitHub Scarica taccuino

Panoramica

TensorFlow Text fornisce una raccolta di classi e operazioni relative alla metrica del testo pronte per l'uso con TensorFlow 2.0. La libreria contiene implementazioni di metriche di somiglianza del testo come ROUGE-L, necessarie per la valutazione automatica dei modelli di generazione del testo.

Il vantaggio dell'utilizzo di queste operazioni nella valutazione dei modelli è che sono compatibili con la valutazione TPU e funzionano bene con le API delle metriche di streaming TF.

Impostare

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

ROUGE-L

La metrica Rouge-L è un punteggio da 0 a 1 che indica quanto siano simili due sequenze, in base alla lunghezza della sottosequenza comune (LCS) più lunga. In particolare, Rouge-L è la media armonica pesata (o f-measure) che combina la precisione LCS (la percentuale della sequenza di ipotesi coperta dall'LCS) e il richiamo dell'LCS (la percentuale della sequenza di riferimento coperta dall'LCS).

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

L'implementazione TF.Text restituisce la misura F, la precisione e il richiamo per ciascuna coppia (ipotesi, riferimento).

Considera la seguente coppia ipotesi/riferimento:

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

Le ipotesi e i riferimenti dovrebbero essere tf.RaggedTensors di token. I token sono necessari al posto delle frasi grezze perché nessuna singola strategia di tokenizzazione si adatta a tutte le attività.

Ora possiamo chiamare text.metrics.rouge_l e recuperare il nostro risultato:

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 ha un iperparametro aggiuntivo, alfa, che determina il peso della media armonica utilizzata per calcolare la misura F. I valori più vicini a 0 considerano il richiamo come più importante ei valori più vicini a 1 considerano la precisione come più importante. l'impostazione predefinita di alfa è 0,5, che corrisponde allo stesso peso per Precisione e Richiamo.

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