Метрики TF.Text

Посмотреть на TensorFlow.org Запускаем в Google Colab Посмотреть на GitHub Скачать блокнот

Обзор

TensorFlow Text предоставляет набор классов и операций, связанных с текстовыми метриками, готовых к использованию с TensorFlow 2.0. Библиотека содержит реализации метрик подобия текста, таких как ROUGE-L, необходимых для автоматической оценки моделей генерации текста.

Преимущество использования этих операций при оценке ваших моделей заключается в том, что они совместимы с оценкой TPU и хорошо работают с API метрик потоковой передачи TF.

Настраивать

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

РУЖ-Л

Метрика Rouge-L - это оценка от 0 до 1, показывающая, насколько похожи две последовательности, на основе длины самой длинной общей подпоследовательности (LCS). В частности, Rouge-L представляет собой взвешенное гармоническое среднее (или f-меру), объединяющее точность LCS (процент последовательности гипотез, охватываемый LCS) и отзыв LCS (процент эталонной последовательности, охватываемой LCS).

Источник: https://www.microsoft.com/en-us/research/publication/rouge-a-package-for-automatic-evaluation-of-summaries/

Реализация 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.RaggedTensors токенов. Токены требуются вместо сырых предложений, потому что ни одна стратегия токенизации не подходит для всех задач.

Теперь мы можем вызвать 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-меры. Значения, близкие к 0, рассматривают Напоминание как более важное значение, а значения, близкие к 1, рассматривают Точность как более важную. альфа по умолчанию - 0,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)