ROUGE ผลลัพธ์ NLP ของคุณ!

Nov 27 2022
เมตริกถัดไปที่จะกล่าวถึงในโพสต์ชุดนี้เกี่ยวกับเมตริกที่ใช้ในการประมวลผลภาษาธรรมชาติคือ Recall-Oriented Understudy for Gisting Evaluation (ROUGE) ROUGE เป็นเมตริกการประเมินผลที่ใช้ในการประเมินคุณภาพของงาน NLP เช่น การสรุปข้อความและการแปลด้วยคอมพิวเตอร์

เมตริกถัดไปที่จะกล่าวถึงในโพสต์ชุดนี้เกี่ยวกับเมตริกที่ใช้ในการประมวลผลภาษาธรรมชาติคือ Recall-Oriented Understudy for Gisting Evaluation (ROUGE)

ROUGE เป็นเมตริกการประเมินผลที่ใช้ในการประเมินคุณภาพของงาน NLP เช่น การสรุปข้อความและการแปลด้วยคอมพิวเตอร์ ซึ่งแตกต่างจากBLEUตรงที่ ROUGE ใช้ทั้งการเรียกคืนและความแม่นยำในการเปรียบเทียบการสรุปแบบจำลองที่สร้างซึ่งเรียกว่าตัวเลือก กับชุดการสรุปที่มนุษย์สร้างขึ้นซึ่งเรียกว่าการอ้างอิง วัดจำนวน n-grams ในการอ้างอิงที่อยู่ในตัวเลือกที่คาดการณ์ไว้

ขั้นแรก ให้เราคำนวณการเรียกคืน = True Positives/(True Positives + False Negatives) ที่นี่ True Positives คือ n-grams ที่ตรงกันระหว่าง References และ Candidates False Negatives สามารถคิดได้ว่าเป็น n-grams ที่อยู่ในประโยคจริง (อ้างอิง) แต่ไม่ได้อยู่ในผู้สมัคร False Positives คือ n-grams ที่มีอยู่ใน Candidate แต่ไม่ได้อยู่ใน References ลองดูโพสต์บล็อกนี้ การเรียกคืน ความแม่นยำ คะแนน F1หากคุณต้องการทบทวนแนวคิดต่างๆ เช่น True Positives, False Positives, Recall และ Precision เป็นต้น

ดังนั้นจึงสามารถรับการเรียกคืนและความแม่นยำได้ดังที่แสดงด้านล่าง:

การเรียกคืนและความแม่นยำสามารถเสริมกันได้ในบางครั้ง ดังนั้นจึงจำเป็นต้องรวมทั้งสองอย่างเข้าด้วยกันเพื่อให้เกิดความสมดุล ด้วยเหตุนี้ ROUGE จึงคำนวณเป็นคะแนน F1 ใน Python ค่าอยู่ในช่วงตั้งแต่ 0 ถึง 1 และยิ่งค่าเข้าใกล้ 1 มากเท่าใด คุณภาพของการคาดคะเนก็จะยิ่งดีขึ้นเท่านั้น

ROUGE-N

ให้เราใช้โมดูลการประเมินจากแพ็คเกจ "ประเมิน" ของ Huggingface และตรวจสอบการคำนวณทีละขั้นตอน สมมติว่าคลังข้อมูลต่อไปนี้ที่มีการอ้างอิง 2 รายการสำหรับผู้สมัครแต่ละคนได้รับจากผลลัพธ์ของแบบจำลองการสรุป

!pip install evaluate
!pip install rouge-score
import evaluate
rouge = evaluate.load('rouge')
predictions = ["Transformers Transformers are fast plus efficient", 
               "Good Morning", "I am waiting for new Transformers"]
references = [
              ["HuggingFace Transformers are fast efficient plus awesome", 
               "Transformers are awesome because they are fast to execute"], 
              ["Good Morning Transformers", "Morning Transformers"], 
              ["People are eagerly waiting for new Transformer models", 
               "People are very excited about new Transformers"]

]
results = rouge.compute(predictions=predictions, references=references)
print(results)

{'rouge1': 0.6659340659340659, 'rouge2': 0.45454545454545453, 
'rougeL': 0.6146520146520146, 'rougeLsum': 0.6146520146520146}

Candidate 1: Transformers Transformers are fast plus efficient
Reference 1: HuggingFace Transformers are fast efficient plus awesome
Reference 2: Transformers are awesome because they are fast to execute

Recall = 5/7 = 0.7142857
Precision = 5/6 = 0.8333333
F1-Score =  2 * (0.7142857) * (0.8333333)/(0.7142857 + 0.8333333) = 0.7692307

Candidate 2 and the respective Reference 1: 0.8
Candidate 3 and the respective Reference 1: 0.4285714
Mean F1-Score = (0.7692307 + 0.8 + 0.4285714)/3 = 0.665934

รูจ-แอล

L ย่อมาจาก Longest Common Subsequence (LCS) LCS ถูกกำหนดให้เป็นลำดับย่อยที่ยาวที่สุดที่เกิดขึ้นทั้งในข้อมูลอ้างอิงและตัวเลือก ผลที่ตามมาที่นี่ไม่จำเป็นต้องต่อเนื่องกัน แทนที่จะนับจำนวนของ n-gram ที่ตรงกัน เราวัดความยาวของ LCS ที่นี่ ข้อได้เปรียบของวิธีนี้คือลำดับคำในประโยคได้รับการพิจารณาแทนที่จะมองหาเฉพาะ n-grams ที่ตรงกันซึ่งอาจปรากฏในลำดับใดก็ได้ นอกจากนี้ เรายังไม่จำเป็นต้องระบุลำดับ (n) ของ n-กรัมเพื่อใช้ในการคำนวณ

สูตร ROUGE-L จากกระดาษ ROUGE

ในสูตรข้างต้น X และ Y เป็นข้อมูลอ้างอิงและตัวเลือกที่มีความยาว m และ n ตามลำดับ เบต้าใช้เพื่อควบคุมสิ่งที่สำคัญกว่า - การเรียกคืนหรือความแม่นยำ เมื่อเป็น 1 F_lcs เป็นเพียงค่าเฉลี่ยฮาร์มอนิกของ Recall(R_lcs) และ Precision(P_lcs) บางครั้ง เราอาจต้องการจัดลำดับความสำคัญของการเรียกคืน กล่าวคือ มีความสำคัญมากกว่าสำหรับ n-grams ส่วนใหญ่ในการอ้างอิงที่จะนำเสนอในผู้สมัคร ซึ่งสามารถทำได้โดยการเพิ่มค่าเบต้าเป็นค่า > 1

ตอนนี้ให้เราดูสูตรนี้ในการดำเนินการ LCS สำหรับชุดข้อมูลอ้างอิงผู้สมัครแต่ละชุดแสดงอยู่ด้านล่าง:

C1-R1: Transformers are fast plus 
C1-R2: Transformers are fast

C2-R1: Good Morning
C2-R2: Morning

C3-R1: waiting for new
C3-R2: new Transformers

เช่นเดียวกับใน ROUGE-N เราพิจารณาการอ้างอิงด้วยความยาวสูงสุดระหว่างการอ้างอิงทั้งสองสำหรับผู้สมัครแต่ละคน ดังนั้นเราจึงคำนวณคะแนน F1 สำหรับคู่ C1-R1 ด้วยความยาว LCS 4 คะแนนสำหรับผู้สมัคร 2 และ 3 จะเหมือนกับ ROUGE-1 นี่เป็นเพราะความยาวของ LCS ระหว่างการอ้างอิงนั้นเท่ากันกับจำนวนยูนิแกรมที่ตรงกันสำหรับ 2 และ 3 การคำนวณทั้งหมดจะสรุปเป็น:

C1-R1:
Recall = 4/7
Precision = 4/6
ROUGE-L F1 = 2 * (4/7) * (4/6)/((4/6) + (4/7)) = 0.6153846

C2-R1 ROUGE-L F1 = 0.8
C3-R1 ROUGE-L F1 = 0.4285714

Final ROUGE-L F1 = (0.6153846 + 0.8 + 0.4285714)/3 = 0.614652

ข้อดี

  1. ง่ายต่อการคำนวณและทำความเข้าใจ และมักใช้ในการประเมินระบบการสรุปข้อความ
  2. ROUGE และรูปแบบต่าง ๆ ทำงานได้ดีสำหรับการสรุปเอกสารเดี่ยวและข้อความสั้น ๆ
  1. ROUGE มีปัญหาเช่นเดียวกับ BLEU เกี่ยวกับคำพ้องความหมาย ไม่พิจารณาความหมายของ n-grams ดังนั้น "เร็ว" และ "รวดเร็ว" จะไม่ถือว่าคล้ายกัน
  2. คะแนนขึ้นอยู่กับการเลือกใช้คำและโครงสร้างของการอ้างอิงที่เลือกสำหรับการประเมินเป็นอย่างมาก

อ้างอิง

ฉันเป็นนักศึกษาปริญญาโทสาขา Data Science @ TU Dortmund อย่าลังเลที่จะติดต่อกับฉันบนLinkedInสำหรับข้อเสนอแนะใด ๆ เกี่ยวกับโพสต์ของฉันหรือการสื่อสารระดับมืออาชีพ