การวิเคราะห์และตีความโมเดล NLP ในยุค Deep Learning

Can Udomcharoenchaikit
AIResearch.in.th
Published in
3 min readJul 27, 2020

ติดตามข่าวสารและบทความ NLP ในภาษาไทยได้ที่ เพจ อ่าน #NLProc และ เพจ AIResearch.in.th

หนึ่งใน tutorial ในงาน ACL 2020 ก็คือ Interpretability and Analysis in Neural NLP โดย Yonatan Belinkov, Sebastian Gehrmann, and Ellie Pavlick ได้พูดถึงการพยายามวิเคราะห์และตีความของโมเดล NLP ในปัจจุบัน

ในยุคนี้เทคนิคในการเทรนโมเดล NLP มักจะทำแบบ end-to-end ที่ทุกส่วนของโมเดลจะถูกเทรนให้ทำหน้าที่เดียวกัน ไม่เหมือนเมื่อก่อนที่กว่าจะสร้างอะไรขึ้นมาอย่างนึงต้องใช้ส่วนประกอบหลายอย่างมาก เช่น machine translation ต้องมีส่วนประกอบหลาย ๆ อย่างเช่น language model, word alignment, phrase table, reordering model ถึงแม้วิธี end-to-end learning ไม่จำเป็นต้องใช้องค์ประกอบมากมายเหมือนเมื่อก่อน และยังมีประสิทธิภาพที่ดี แต่ปัญหาคือเราไม่ได้เข้าใจและอธิบายได้จริงๆ ว่ามันทำงานอย่างไร ว่าทำไมมันถึงตัดสินใจอย่างไร ทำให้การวิจัยสร้างโมเดลใหม่ ๆ ในปัจจุบันต้องทำแบบลองผิดลองถูก เป็น ลูปแบบ Design System → Measure Performance → Design System → …. ไปเรื่อย ๆ

เพราะฉะนั้นการที่เราสามารถเข้าใจว่าโมเดลทำงานอย่างไร และจุดอ่อนจุดแข็งของโมเดลได้ดีขึ้น ก็จะสามารถช่วยให้เราออกแบบระบบที่ดีขึ้นได้เช่นกัน ในเรื่องความรับผิดชอบต่อสังคมและความโปร่งใส การที่มีเราสามารถอธิบายโมเดลได้ก็สามารถสร้างระบบที่โปร่งใสและสามารถไว้ใจได้ นอกจากนี้การที่เราสามารถเข้าใจการทำงานของระบบNLPได้ดีขึ้นยังช่วยทำให้เราเข้าใจภาษามนุษย์ได้มากขึ้นอีกด้วย

ซึ่งใน Tutorial นี้จะแบ่งออกเป็นสามส่วน

  1. Structural analyses โดย Yonatan Belinkov เป็นส่วนที่พูดถึงว่าแต่ละส่วนของโมเดลเราเรียนรู้อะไรไปบ้าง

2. Behavioral analyses โดย Ellie Pavlick เป็นส่วนที่พูดถึงการวิเคราะห์โดยดูที่ผลลัพท์ของโมเดลว่าตอบสนองต่อตัวอย่างข้อมูลที่เราตั้งใจเลือก หรือสร้างมา

3. Interaction + Visualization โดย Sebastian Gehrmann พูดถึงการ Visualization/Interaction มาช่วยนักวิจัยในการตั้งสมมติฐานใหม่ ๆ เกี่ยวกับโมเดลของเรา

Structural Analyses

ถ้าเรามองว่าโมเดลของเราเป็นฟังชั่น f ที่ map input x ไป output y (f: x→y) ซึ่งโมเดลเป็น neural network ที่มีความซับซ้อนมีหลายชั้น layer หลายองค์ประกอบ เราก็อาจจะอยากรู้ว่าส่วนไหนของโมเดลทำหน้าที่อะไร มันประมวลผลข้อมูลแบบใดได้ดี องค์ประกอบหนึ่งของโมเดลสามารถเรียนรู้อะไรเกี่ยวกับคุณสมบัติทางภาษาที่เราอยากรู้ได้หรือไม่ หนึ่งวิธีที่นิยมในการตอบคำถามเหล่านี้ก็คือการทำ probing classifier

Probing classifier

การทำ Probing classifier จะแบ่งเป็นขั้นตอนได้ดังนี้:

  1. เริ่มจากต้องมีโมเดลที่เราอยากเอามาวิเคราะห์ก่อน f: x → y
  2. แล้วนำส่วนใดส่วนนึงของโมเดลนั้นมาสร้าง representation สำหรับ probing classifier g: f(x) → z ซึ่ง z คือ คุณสมบัติทางภาษาบางอย่าง ที่เราสนใจ
  3. เราสามารถมองว่าการเทรน g คือการ maximize mutual information ระหว่าง f(x) กับ z และสามารถเอาผลความแม่นยำของโมเดล g ที่ออกมา มาวิเคราะห์ได้

ถ้าเรามีข้อมูล (x) ที่มีเฉลยเป็นคุณสมบัติทางภาษาบางอย่าง (z) เราก็สามารถดึงส่วนนึงของโมเดล f มาทำ representation ของ x ได้ เช่นถ้าเราอยากรู้เกี่ยวกับ layer ที่สอง (f₂) เราก็สามารถใช้ layer ที่สองของโมเดล f มาสร้าง representation ของ x ได้ เช่น f₂(x) แล้วเราก็จะใช้ representation ที่ได้มาเอาไป train classifier (g) อีกอัน (g: f₂(x) → z ) เพื่อที่่จะ map f₂(x) ไปหา คุณสมบัติทางภาษา z เมื่อเราวัดผล classifier g แล้ว เราก็ใช้ผลที่ออกมาเหมือนเป็นตัวแทนในการประเมินคุณภาพที่มีต่อ คุณสมบัติทางภาษา z ของ representation จาก layer ที่สองของโมเดล (f₂)

เช่นในงาน Dissecting Contextual Word Embeddings: Architecture and Representation ของ Matthew Peters, Mark Neumann, Luke Zettlemoyer, Wen-tau Yih ก็ได้ใช้วิธี Probing classifier ในการทดสอบ ว่า layer ต่างๆ ในโมเดล มีผลต่อคุณสมบัติทางภาษาต่างๆ อย่างไร

ภาพจาก Dissecting Contextual Word Embeddings: Architecture and Representation

Behavioral Analyses

โดยปกติ ในการประเมินผลโมเดล ตัวอย่างที่นำมาสร้าง test set ก็มักจะเป็นตัวอย่างที่สุ่ม ๆ มาจากชุดข้อมูลของเรา ซึ่งวิธีประเมินแบบนี้ก็ไม่ได้ผิดอะไร เพราะมันทำให้เราพอจะเห็นได้ว่าในกรณีทั่วทั่วไป โมเดลของเราทำงานได้ดีแค่ไหน แต่ปัญหาก็คือการประเมินแบบนี้จะให้ค่ากับให้เคสที่พบได้บ่อย ๆ มากเกินไป และมันทำให้เรามองไม่เห็นว่าเรามีปัญหากับเคสที่ไม่ค่อยได้เจอ พวกเคสที่ไม่ค่อยได้เจอแต่ละเคสอาจจะมีไม่มาก แต่พอรวมๆเข้าหลายๆเคสก็อาจจะทำให้เกิดความแตกต่างได้

เฉพาะฉะนั้นเราจึงอยากจะหาวิธีที่ให้ค่ากับโมเดลที่ทำได้ดี บนเคสที่ไม่ค่อยได้เจอเหล่านี้ และถ้าโมเดลทำได้ไม่ดี เราก็อยากจะหาวิธีทำการเข้าใจอย่างเป็นระบบว่าทำไมมันล้มเหลว ไอเดียหลัก ๆ ของ behavioral analyses คือการออกแบบการทดลองที่ทดสอบบนชุดข้อมูลทดสอบที่ถูกตั้งใจคัดมาเพื่อครอบคลุมปรากฏการณ์ที่เราสนใจ ซึ่งเขาเรียกชุดข้อมูลทดสอบแบบนี้ว่า challenge set

เราอยากมั่นใจว่าโมเดลของเราตอบถูก เพราะได้เรียนสิ่งที่เราหวังว่ามันจะเรียน ไม่ใช่เพราะโชคช่วยหรือเพราะสหสัมพันธ์ปลอม (spurious correlation) หนึ่งในตัวอย่างที่เขายกมาก็คืองาน Visual Question Answering (VQA) ที่ input คือภาพและคำถาม ซึ่งจะเห็นได้ว่าเขาตั้งใจใช้ภาพที่กรวยจราจรเป็นสีเขียวแทนที่จะเป็นภาพกรวยจราจรสีส้มที่เห็นได้บ่อยใน training set เพื่อทดสอบว่าโมเดลสามารถเรียนรู้องค์ประกอบของภาพ เรียนรู้ว่าศัพท์เกี่ยวกับสีว่ามีคุณลักษณะอย่างไรได้หรือไม่

ภาพจาก Generalization “Opportunities” in Visual Question Answering

จะเห็นได้ว่าในตัวอย่าง VQA ถ้าเขาเลือกตัวอย่างที่ไม่ได้เห็นบ่อยใน training set มาทดสอบ ถ้าเกิดกรวยจราจรในภาพ test sample ยังเป็นสีส้มเหมือนเดิมอยู่ โมเดลที่ตอบว่าสีส้มทุกครั้งเวลาเจอคำว่ากรวยคงจะได้คะแนนสูง (ซึ่งตัวอย่างในภาพก็ตอบว่าสีส้มทั้ง ๆ ที่กรวยเป็นสีเขียว)

ข้อดีของการทำ behavioral analyses ก็มีหลายอย่างเช่น เราสามารถทำได้กับ representation ทุกแบบไม่ว่าจะเป็น neural, symbolic แถมยังสามารถนำงานไปเชื่อมกับนักภาษาศาสตร์ หรือคนจากหลายๆ แวดวงได้ง่าย เพราะว่าไม่จำเป็นที่จะเข้าใจเทคนิคการทำงานของโมเดลทั้งหมดเพื่อที่จะช่วยสร้าง challenge set หรือตั้งคำถามว่าโมเดลควรจะเข้าใจอะไร ข้อเสียคือถ้าโมเดลทำพลาดเราก็ตอบไม่ได้ว่าความผิดพลาดนั้นมันมาจากอะไร ทำไมถึงทำไม่ได้ และการทดลองก็อาจจะออกแบบได้ยากว่าจะคุมตัวแปรอะไรบ้าง

Interaction + Visualization

การทำ interaction และ visualization ก็เป็นเครื่องมือที่ดีสำหรับการช่วยทำความเข้าใจ อีกทั้งยังช่วยให้เราตั้งสมมุติฐานใหม่ ๆ ได้อย่างรวดเร็วขึ้นอีกด้วย ประโยชน์โดยตรงเลยก็คือมันสามารถลด exploration space ที่ใหญ่เกินไปลองนึกภาพการที่จะต้องอธิบายอะไรบางอย่างใน dimension เยอะๆ มันก็ทำได้ลำบากเมื่อเทียบกับภาพ 2–3 dimension ใน tutorial นี้ Sebastian Gehrmann ได้ยกตัวอย่างการเลือกโมเดล VAE ที่มีอยู่สามอัน สำหรับการ map เปปไทด์ไปยัง latent space ซึ่งค่า reconstruction loss ใกล้เคียงกันมากๆ แล้วเราควรจะเลือกโมเดลไหนดี ? เราก็สามารถใช้ t-SNE ลดจำนวน dimension ของ latent state มาเหลือ 2 dimension เพื่อที่จะ visualize ได้ แล้วก็ระบายแต่ละจุดด้วยสีตามคุณลักษณะที่เรารู้เช่น microbial ฯลฯ จะเห็นได้ว่าในภาพด้านล่าง โมเดลที่สองและสาม cluster คุณลักษณะเหล่านี้ได้ดีกว่าโมเดลอันที่หนึ่ง

Interactive Visual Exploration of Latent Space (IVELS) for peptide auto-encoder model selection

อีกหนึ่งตัวอย่างที่น่าสนใจในการใช้interaction และ visualizationช่วยตั้งสมมุติฐานเกี่ยยวกับโมเดลและชุดข้อมูล็คืองาน The What-If Tool: Interactive Probing of Machine Learning Models ในภาพด้านล่างคือการดูโมเดล toxic comment classification สองโมเดล ซึ่งแกนนอนคือโมเดลที่หนึ่ง และแกนตั้งคือโมเดลที่สอง ส่วนแต่ละจุดในกราฟคือคอมเม้น เราสามารถใช้ visualization มาดูจุดที่เป็น outlier ได้ เช่นจุดที่โมเดลที่หนึ่งได้คะแนนน้อย แต่โมเดลที่สองได้คะแนนเยอะ ว่ามันมาจาก text ที่มีหน้าตาแบบไหนโดยการคลิกที่จุดนั้นเพื่อดูข้อมูลต่าง ๆ ถ้าสนใจสามารถไปลองเล่นบน colab ได้ด้วย

https://colab.research.google.com/github/pair-code/what-if-tool/blob/master/WIT_Toxicity_Text_Model_Comparison.ipynb

อีกส่วนของ tutorial คือการพาเขียน code JS สำหรับทำ interaction/visualization สำหรับดูค่า attention ในแต่ละ head และ layer ของ transformer language model แบบ BERT และ GPT-2 ซี่งสามารถดู code ได้ที่นี้: https://github.com/SIDN-IAP/attnvis

ภาพจาก https://github.com/SIDN-IAP/attnvis

บทความนี้สนับสนุนโดย:

--

--