Transformers คืออะไร
Transfomers คือแบบจำลอง Deep Learning สำหรับเรียนรู้และประมวลผลข้อมูลเพื่องานด้าน AI โดยจุดเริ่มต้นงานนี้อ่านได้ในเอกสารงานวิจัยนี้ Attention is All You Need
สำหรับตัวอย่างสามารถดูและทำตามได้ใน Colab Notebook นี้ สามารถนำไปปรับเปลี่ยนเรียนรู้ได้เต็มที่ครับ
การใช้ Transformers สำหรับงานจำแนกประเภทรูปภาพ

เริ่มแรกนั้นจะต้องติดตั้งไลบรารี่ Transformers ก่อน เพื่อไว้เรียกใช้งานโมเดลและฟังก์ชันต่าง ๆ

ในขั้นตอนนี้จะใช้โมเดล Vision Transformers โดยมีการนำเข้าดังนี้
- ViTFeatureExtractor สำหรับสกัดเอาคุณลักษณะสำคัญจากรูปภาพออกมา
- ViTForImageClassification สำหรับให้โมเดล ViT รู้จักทำงานจำแนกประเภทภาพ
- Torch, PIL, requests, BytesIO ในที่นี้จะใช้สำหรับเตรียมข้อมูลก่อนนำเข้าโมเดล

ส่งโมเดลไปยัง GPU โดยใช้ฟังก์ชัน .to() ของ PyTorch เพื่อให้สามารถประมวลผลข้อมูลได้เร็วขึ้น

ส่วนนี้จะเป็นการรับ Input รูปภาพเป็นลิงก์ และแปลงเป็น RGB
(อ่านเพิ่มเติมเกี่ยวกับการโหลดข้อมูลภาพจากเน็ตได้ที่นี่)

การให้โมเดลจำแนกประเภทจะมีขั้นตอนดังนี้
- สกัดเอาคุณลักษณะของรูปภาพด้วย Feature Extractor ที่โหลดมาโดยผ่านข้อมูลรูปภาพ พร้อมกับระบุประเภทของ tensor ที่ต้องการให้ฟังก์ชันคืนค่ามา (ในที่นี้เอาเป็น torch)
- ส่งข้อมูลที่สกัดออกมานี้ไปอยู่บน GPU เดียวกันกับโมเดล
- เรียกใช้โมเดลให้โมเดลหา outputs
- ค่าที่เป็นคำตอบจะอยู่ในสิ่งที่เรียกว่า logits
- ทำ Postprocess เพื่อถอดรหัสจาก outputs ที่เป็นชุดตัวเลขให้เป็น Labels ที่มนุษย์เข้าใจได้ โดยคำตอบที่ได้จากรูปข้างต้นก็คือ Sport Car


หากต้องการทำนายผลพร้อมกันหลาย ๆ รูปภาพสามารถทำได้โดยการเตรียมข้อมูลภาพเอาไว้ก่อน (ในที่นี้ลองให้ดู 2 รูป)

สิ่งที่แตกต่างจากเดิมคือตัวสกัดคุณลักษณะของรูปภาพเราจะรับทีละ 2 รูป และโมเดลก็ทำการประมวลผลทีละ 2 ข้อมูลภาพเช่นกัน ด้วยวิธีการนี้เราสามารถทำ Batch Processing ได้ (เช่นทำพร้อมกันทีละ 100 รูป 1000 รูป เป็นต้น) จากนั้นก็ดูผลลัพธ์ด้วยวิธีการเดิม แต่ให้ระบุ Index เพิ่มด้วย (รูป 1 logits 0, รูป 2 logits 1 ไล่ไปเรื่อย ๆ)
โดยการใช้งานโมเดลเพื่อจำแนกรูปภาพนี้ก็สามารถทำงานได้ทันที สำหรับประโยชน์ของการแยกประเภทรูปได้นั้นมีมากมาย เช่นแจ้งเตือนเมื่อเห็นภาพอันตราย สัตว์ร้าย, จัดหมวดหมู่ หรือจะนำไปปรับกับงานเฉพาะอย่างก็ได้เช่นกัน
การใช้ Transformers สำหรับงานจำแนกข้อความ ด้าน Sentiment Analysis
งาน Sentiment Analysis คือการวิเคราะห์ความรู้สึกของประโยคหรือข้อความนั้น ๆ ว่าให้ความรู้สึกอย่างไร โดยการที่เรานำโมเดลมาทำนายผลส่วนนี้ได้ย่อมช่วยให้สามารถวิเคราะห์ได้หลายอย่างเช่น จัดกลุ่มความพึงพอใจลูกค้า, ระบบช่วยเหลือเร่งด่วนสำหรับลูกค้าที่ไม่พอใจ เป็นต้น

ในขั้นตอนนี้จะใช้โมเดล BERT โดยมีการนำเข้าดังนี้
- DistilBertTokenizer สำหรับแปลงคำเป็นชุดตัวเลขเพื่อให้โมเดลประมวลผลได้
- DistilBertForSequenceClassification สำหรับให้โมเดลทำงานจำแนกประเภทประโยค
- Torch ในที่นี้จะใช้สำหรับเตรียมข้อมูลก่อนนำเข้าโมเดล

ในการใช้งานนั้นมีกระบวนการดังนี้
- Inputs ในที่นี้เรารับเป็นชุดข้อความกี่ประโยคก็ได้ ในที่นี้ลองให้ดู 3 ประโยค โดยประโยคแรกจะเห็นชัดว่าเชิงบวก, ประโยคสองจะเห็นว่าเป็นเชิงลบ, และประโยคที่สามจะตัดสินใจยากขึ้นว่าบวกหรือลบ แต่โดยรวมแล้วมนุษย์ก็น่าจะตีความว่าเป็นประโยคเชิงบวก
- ทำการ Tokenizer แปลงประโยคเหล่านี้เป็นตัวเลข โดยปรับให้ความยาวประโยคเท่ากัน และคืนค่าเป็น Tensor Torch
- ทำการทำนายผล และแปลงเป็นภาษามนุษย์เหมือนเดิม
จะเห็นได้ว่าโมเดลเข้าใจว่าประโยคแรกนั้นเป็นเชิงบวกความหมายดี, ประโยคที่สองเป็นเชิงลบ, และประโยคที่สามที่ซับซ้อนขึ้นก็ยังเข้าใจว่าเป็นเชิงบวกได้