TF. เมตริกข้อความ

ดูบน 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

เมตริก 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 ของโทเค็น ต้องใช้โทเค็นแทนประโยคดิบเนื่องจากไม่มีกลยุทธ์การสร้างโทเค็นเดียวที่เหมาะกับงานทั้งหมด

ตอนนี้เราสามารถเรียก 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 มีไฮเปอร์พารามิเตอร์เพิ่มเติมคือ alpha ซึ่งกำหนดน้ำหนักของค่าเฉลี่ยฮาร์มอนิกที่ใช้สำหรับการคำนวณ F-Measure ค่าที่ใกล้ 0 ถือว่า Recall สำคัญกว่า และค่าที่ใกล้ 1 ถือว่า Precision สำคัญกว่า ค่าเริ่มต้นอัลฟ่าเป็น .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)