ดูบน 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)
การใช้ 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)