27 กุมภาพันธ์ 2564

Published กุมภาพันธ์ 27, 2564 by with 0 comment

ทำ Zero-shot classification ข้อความภาษาไทยง่าย ๆ ด้วย transformers + Python

สวัสดีผู้อ่านทุกท่านครับ บทความนี้ผมจะพาผู้อ่านไปทำ 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 ค่อนข้างดี

แนะนำก่อนนำไปใช้งานให้ทดลองกันใช้งานจริง และประเมินกับวิธีฝึกฝนแบบจำลองอื่น ๆ ด้วย

อ้างอิง

1.
joeddav/xlm-roberta-large-xnli · Hugging Face [Internet]. [cited 2021 Feb 27]. Available from: https://huggingface.co/joeddav/xlm-roberta-large-xnli
2.
Conneau A, Khandelwal K, Goyal N, Chaudhary V, Wenzek G, Guzmán F, et al. Unsupervised Cross-lingual Representation Learning at Scale. arXiv:191102116 [cs] [Internet]. 2020 Apr 7 [cited 2021 Feb 27]; Available from: http://arxiv.org/abs/1911.02116
3.
Chaudhary A. Zero Shot Learning for Text Classification [Internet]. Amit Chaudhary. 2020 [cited 2021 Feb 27]. Available from: https://amitness.com/2020/05/zero-shot-text-classification/


0 ความคิดเห็น:

โพสต์ความคิดเห็น

แสดงความคิดเห็นได้ครับ :)