สวัสดีผู้อ่านทุกท่านครับ บทความนี้ผมจะพาผู้อ่านไปทำ Zero-shot classification ข้อความภาษาไทยง่าย ๆ ด้วย transformers + Python กันครับ
Zero-shot classification คืออะไร?
Zero-shot classification เป็นความสามารถในการตรวจจับประเภทโดยที่ไม่ผ่านการฝึกฝนแบบจำลองมาก่อน คล้ายกับมนุษย์ที่สามารถแยกประเภทสิงของที่แตกต่างกันได้โดยที่ไม่มีการสอนหรือเรียนมาก่อน [3]
ตัวอย่างเช่น
ประโยค: แมวกำลังเดินไปหาเจ้าของ
ประโยค: ใครเป็นคนรับผิดชอบเรื่องนี้
ประโยค: พวกเราไม่ได้ทำอะไรผิด
ประเภท: ประโยคบอกเล่า ประโยคคำถาม ประโยคปฎิเสธ
มนุษย์เราสามารถจำแนกประเภทประโยคเหล่านี้ได้ทันที เหมือนกับ Zero-shot classification ที่สามารถแบ่งประเภทได้โดยไม่ต้องนำข้อมูลประเภทงานที่ต้องการไปฝึกสอนกับแบบจำลองก่อน และไม่ต้องทำการถ่ายโอนความรู้ (Transfer Learning) โดยฝึกสอนเพียงแบบจำลองเดียวสำหรับ Zero-shot classification
การทำ Zero-shot classification ข้อความภาษาไทย
สำหรับการทำ Zero-shot classification ข้อความภาษาไทย ปัจจุบันเราสามารถทำ Zero-shot classification ได้ง่าย ๆ โดยใช้ชุดคำสั่ง transformers ซึ่งเป็นชุดคำสั่งด้านการประมวลผลภาษาธรรมชาติที่ได้รับความนิยมอย่างสูงในปัจจุบัน
สำหรับบทความนี้จะพาไปทำ Zero-shot classification ข้อความภาษาไทยด้วย แบบจำลอง xlm-roberta-large-xnli
แบบจำลอง xlm-roberta-large-xnli เป็นแบบจำลองที่ถูกฝึกฝนสำหรับงานด้าน zero-shot text classification ใช้แบบจำลอง xlm-roberta-large [2] ในการฝึกฝน โดยใช่ชุดข้อมูล XNLI: The Cross-Lingual NLI Corpus ซึ่งมีภาษาไทยอยู่ในชุดข้อมูลด้วย [1]
อ่านรายละเอียดเพิ่มเติมได้จากอ้างอิงข้างล่างบทความ
สำหรับการเขียนโปรแกรมภาษา Python เพื่อทำ Zero-shot classification ข้อความภาษาไทย นั้น
ก่อนอื่นให้ติดตั้งชุดคำสั่งที่ต้องใช้ผ่าน pypi ด้วยคำสั่ง
pip install transformers sentencepieceเมื่อติดตั้งเสร็จ ได้เวลาเขียนโปรแกรมทำ Zero-shot classification
from transformers import pipeline
classifier = pipeline("zero-shot-classification", model="joeddav/xlm-roberta-large-xnli")
text = "เราไม่ได้ทำ" #ประโยคที่ต้องการให้แยกประเภท ทดลอง: สินค้าชิ้นนี้ราคาเท่าไร,เรารักคุณ,ทำไมชีวิตต้องมาเจออะไรแบบนี้ แย่มาก ๆ, เราไม่ได้ทำ
candidate_labels = ["ประโยคคำถาม", "ประโยคบอกเล่า", "ประโยคปฏิเสธ"] # ประเภทที่เราต้องการให้แยกประเภท
print(classifier(text, candidate_labels))
ผลลัพธ์
{'labels': ['ประโยคปฏิเสธ', 'ประโยคบอกเล่า', 'ประโยคคำถาม'],
'scores': [0.8681947588920593, 0.08875910192728043, 0.04304611682891846],
'sequence': 'เราไม่ได้ทำ'}
จะเห็นได้ว่า Zero-shot classification สามารถแยกประเภทข้อความภาษาไทยได้ง่าย ๆ และมี scores ค่อนข้างดี
แนะนำก่อนนำไปใช้งานให้ทดลองกันใช้งานจริง และประเมินกับวิธีฝึกฝนแบบจำลองอื่น ๆ ด้วย
อ้างอิง
0 ความคิดเห็น:
แสดงความคิดเห็น
แสดงความคิดเห็นได้ครับ :)