TF.Tekst metryki

Zobacz na TensorFlow.org Uruchom w Google Colab Zobacz na GitHub Pobierz notatnik

Przegląd

TensorFlow Text zapewnia zbiór klas i operacji związanych z metryką tekstową, gotowych do użycia z TensorFlow 2.0. Biblioteka zawiera implementacje metryk podobieństwa tekstu, takich jak ROUGE-L, wymaganych do automatycznej oceny modeli generowania tekstu.

Zaletą korzystania z tych operacji w ocenie modeli jest to, że są one zgodne z oceną TPU i dobrze współpracują z interfejsami API metryk przesyłania strumieniowego TF.

Ustawiać

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

ROUGE-L

Metryka Rouge-L to wynik od 0 do 1 wskazujący, jak podobne są dwie sekwencje, na podstawie długości najdłuższej wspólnej podsekwencji (LCS). W szczególności Rouge-L jest ważoną średnią harmoniczną (lub miarą f) łączącą precyzję LCS (procent sekwencji hipotezy objętej LCS) i przywołanie LCS (procent sekwencji referencyjnej objętej LCS).

Źródło: https://www.microsoft.com/en-us/research/publication/rouge-a-package-for-automatic-evaluation-of-summaries/

Implementacja TF.Text zwraca miarę F, precyzję i odwołanie dla każdej pary (hipoteza, referencja).

Rozważ następującą parę hipoteza/odniesienie:

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

Oczekuje się, że hipotezy i odwołania będą tf.RaggedTensors tokenów. Tokeny są wymagane zamiast surowych zdań, ponieważ żadna pojedyncza strategia tokenizacji nie pasuje do wszystkich zadań.

Teraz możemy wywołać text.metrics.rouge_l i odzyskać nasz wynik:

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 posiada dodatkowy hiperparametr alfa, który określa wagę średniej harmonicznej używanej do obliczania F-Measure. Wartości bliższe 0 traktują Recall jako ważniejsze, a wartości bliższe 1 traktują Precyzję jako ważniejszą. alfa domyślnie wynosi .5, co odpowiada równej wadze precyzji i przywołania.

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