מדדי טקסט

הצג באתר TensorFlow.org הפעל בגוגל קולאב הצג ב-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

המדד 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-measure, Precision, ו-Recall עבור כל זוג (השערה, התייחסות).

שקול את צמד ההשערות/הפניות הבאות:

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 of tokens. נדרשים אסימונים במקום משפטים גולמיים מכיוון שאסטרטגיית אסימון אחת לא מתאימה לכל המשימות.

כעת נוכל לקרוא ל-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-Measure. ערכים קרובים יותר ל-0 מתייחסים להיזכר כחשוב יותר וערכים קרובים יותר ל-1 מתייחסים לדיוק כחשוב יותר. ברירת המחדל של alpha היא .5, המתאים למשקל שווה עבור Precision ו-Recall.

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