Classification Transformer Model?

สำหรับ Transformer Model มันคือรากฐานของ Large Language Model (LLM) ในปัจจุบัน โดยตัวโมเดลนี้หลัก ๆ แล้วถูกสร้างขึ้นมาเพื่อให้สามารถทำความเข้าใจบริบทและความหมายของภาษาได้ มากกว่าการดูเพียงแค่ความน่าจะเป็นหรือรูปแบบโครงสร้างทางภาษาแบบเดิม ๆ เพียงอย่างเดียว ซึ่งในปัญหาแรก ๆ ที่โมเดล Transformers ถูกหยิบมาใช้มักจะเป็นโจทย์ Classification ที่เกี่ยวข้องกับงานด้านภาษา (NLP) เช่น ต้องการจำแนกว่าข้อความนี้เป็น Spam หรือไม่, คอมเม้นท์นี้มีความหมายเชิง Toxic หรือไม่, รีวิวนี้ดีหรือไม่ดี และอื่น ๆ อีกมากมาย เป็นต้น โดยในบทความนี้จะขอพูดถึงในเชิงเทคนิคว่าถ้าเรามี Transformers Model อยู่ 2 ตัวเราจะเพิ่มประสิทธิภาพการทำ Classification ได้อย่างไร ด้วยวิธีการที่ง่ายและไม่ซับซ้อน

เกริ่นเล็กน้อยเกี่ยวกับโมเดลและข้อมูลที่ทดสอบ

ข้อมูลสำหรับ Train และ Validation

ในการทดสอบนี้จะใช้ข้อมูลใน Kaggle (Getting Started Competition) ซึ่งเกี่ยวกับข้อความในทวิตเตอร์ที่ทวีตถึงเรื่องภัยพิบัติ (ข้อมูลตั้งแต่สมัยยังเป็น Twitter อยู่) โดยเราจะต้องทำการจำแนกว่าข้อความใหม่ ๆ ที่ถูกทวีตเข้ามาในระบบนั้นเป็นเรื่องเกี่ยวกับภัยพิบัติจริงหรือไม่ และโมเดลที่นำมาทดสอบนี้ได้แก่

  1. FacebookAI/roberta-large โดยจะใช้วิธี Fine-Tuning แบบ rsLoRA (อ่านเพิ่มเติมได้ที่นี่)
  2. google-bert/bert-base-uncased จะใช้การ Fine-Tuning แบบปกติ

คะแนนที่ได้ของแต่ละโมเดล

หากทำ Classification โดยใช้เฉพาะโมเดลที่หนึ่ง (rsLoRA Roberta Large) จะได้คะแนนบนชุดทดสอบที่ 83.941%

และถ้าใช้เฉพาะโมเดลที่สองเพียงอย่างเดียวจะได้คะแนนบนชุดทดสอบที่ 83.481%

จะเห็นว่าทั้งสองโมเดลมีคะแนนที่ไม่ได้แตกต่างกันมากนัก แต่ถ้าใช้วิธีการ Weighted Average ระหว่างคำตอบของทั้งสองโมเดลนี้จะช่วยให้คะแนนเพิ่มขึ้นได้เป็น 84.216%

การทำ Weighted Average?

สำหรับงาน Classification นั้นสุดท้ายแล้วคำตอบที่ได้จากโมเดลไม่ว่าจะ Machine Learning หรือ Deep Learning ก็ตามในขั้นตอนสุดท้ายมันจะดูจากความน่าจะเป็นว่าสิ่งที่โมเดลได้คิดมาทั้งหมดนั้นควรจะเป็นคลาสใด (ในที่นี้ก็คือโอกาสที่จะเป็นทวีตภัยพิบัติ หรือ ทวีตที่ไม่เกี่ยวกับภัยพิบัติ) ฉะนั้นแล้วเราสามารถนำคะแนนของแต่ละคลาสตรงนี้มาถ่วงน้ำหนักกันได้ระหว่างโมเดลหลาย ๆ ตัว กล่าวแบบสั้น ๆ คือแทนที่จะเชื่อโมเดลตัวเดียว เราเชื่อในการให้โมเดลหลาย ๆ ตัวช่วยกันเลือกมากกว่าโดยที่กำหนดว่าให้น้ำหนักกับโมเดลไหนมากน้อยได้ ด้วยวิธีนี้จะช่วยให้โมเดลลดปัญหา Overfitting บนคลาสใดคลาสหนึ่งได้เพราะนำโมเดลตัวอื่นมาร่วมคิดด้วย และรองรับกับการเจอข้อมูลใหม่ ๆ มากขึ้น (แต่ข้อเสียคือเราต้องรันทั้ง 2 โมเดล ซึ่งหากเป็นงานประเภท Application หรือ Platform ที่คนใช้เยอะ ๆ อาจไม่คุ้มค่าเปลืองเวลาและทรัพยากรอาจจะต้องหาวิธีในการรันส่วนนี้เพิ่มเติม) โดยวิธีการทำง่าย ๆ ดังนี้

1. โหลดโมเดลตัวที่หนึ่งที่เราได้ทำการ Fine-Tuning เรียบร้อยแล้ว

2. โหลดโมเดลตัวที่สองที่ Fine-Tuning แล้วเช่นกัน

3. นำโมเดลแต่ละตัวมาทำ Classification บนชุดข้อมูลทดสอบ (ที่ต้องแยกข้อมูลทดสอบเป็น 2 ชุดเพราะ โมเดลสองตัวนี้ใช้ Tokenizer แตกต่างกัน) โดยขั้นตอนนี้เราจะเอา Logits ที่ได้จากการคิดคำตอบของโมเดลมาเข้าฟังก์ชัน Softmax เพื่อแปลงค่าให้อยู่ในช่วง 0-1 หรือก็คือการแปลงค่าให้อยู่ในรูปแบบ Probability Distribution จากนั้นเก็บค่าความน่าจะเป็นของคำตอบของแต่ละโมเดลไว้

4. ความน่าจะเป็นของคำตอบที่เราเก็บไว้นั้นจะอยู่ใน List และแต่ละตัวจะเป็น Array อยู่ เพื่อความสะดวกในการคิดทีเดียวทั้งก้อน เราจึงนำมา Concatenate กันก่อนเพื่อให้ทั้งหมดรวมอยู่ในก้อนเดียวกัน จากนั้นทำ Weighted Average โดยการรวมความน่าจะเป็นของคำตอบระหว่างโมเดลที่หนึ่งและสองเข้าด้วยกัน (ก็คือจับมาบวกกันตรง ๆ) โดยที่บอกว่านำคะแนนจากโมเดลที่หนึ่งมาใช้ที่ 55% (0.55) และจากโมเดลที่สอง 45% (0.45) รวมเป็น 100% พอดี และทำการเลือกคำตอบจากคลาสที่มีคะแนนเยอะที่สุดเหมือนเดิม

Conclusion

การทำ Weighted Average สั้น ๆ คือการนำความน่าจะเป็นของคำตอบในแต่ละคลาสของโมเดลตั้งแต่ 2 ตัวขึ้นไปมาบวกรวมกัน โดยกำหนดว่าจะเอาจากโมเดลตัวไหนมาคิดมากน้อยอย่างไร ข้อดีคือส่วนใหญ่ช่วยให้โมเดลได้คำตอบที่ถูกต้องมากขึ้น ลด Overfitting ได้จากการที่ไม่ได้เชื่อแค่โมเดลตัวเดียว ข้อเสียคือจะต้องมีโมเดลหลายตัวและถ้าโมเดลแต่ละตัวไม่ได้มีข้อดีอะไรที่จะช่วยกันได้ก็อาจไม่ได้ทำให้ประสิทธิภาพดีขึ้นขนาดนั้น และข้อควรระวังที่ไม่ควรทำคือการพยายามหา Weighted ที่ดีที่สุดระหว่างโมเดลที่นำมารวมกัน เพราะเราไม่รู้ว่าสุดท้ายแล้วชุด Test หรือ Unseen Data เป็นอย่างไรการที่พยายามหา Weighted ที่ดีสุดบนชุดทดสอบเล็ก ๆ ของเราเพียงอย่างเดียวอาจทำให้ทำงานได้ไม่ดีเวลาเจอกับข้อมูลใหม่ ๆ ได้

anh-nguyen-kcA-c3f_3FE-unsplash

Food – AI & Life

ของเหลือในตู้เย็นมักถูกทิ้งหรือเก็บไว้จนเสียทิ้งหรือไม่รู้จะนำไป ทำเมนูอะไรดี Hellmann จึงนำเสนอ AI ที่จะช่วยคิดสูตรอาหารจากของเหลือที่มี
MYnb-Post-5-Pic1

Extract Audio from Video – Data

วิธีการดึงเสียงออกจากวิดีโอด้วย Python โดยประมวลผลแบบ In-Memory ไม่ต้องบันทึกไฟล์ลงเครื่องเพื่อความสะดวกในการใช้งานกับระบบ
CheckList_DepartmentStore

Modern Trade Check List – SBC

จะขายในห้าง (Modern Trade) หรือนอกห้าง แบบไหนจะดีกว่ากัน? สิ่งที่ต้องเช็คและเปรียบเทียบใน การนำสินค้าเข้าห้าง

ติดตาม SUBBRAIN ได้ที่นี่

Categories: Data&IT