Misspelling Oblivious (word) Embeddings | อีกหนึ่งขั้นของ FastText

Mr.P L
AIResearch.in.th
Published in
4 min readOct 4, 2019

การจัดการกับ OOV ก็เป็นอีกความท้าทายหนึ่งของงาน NLP

หนึ่งในปัญหาที่เจอบ่อยในงาน NLP คือการเจอคำที่ไม่เคยเห็นมาก่อนใน Training set (Out-of-Vocabulary (OOV)) และหนึ่งในประเภทของ OOV ที่เราเจอบ่อยในโลกแห่งความจริงก็คือคำที่พิมพ์ผิด หลายคนอาจสงสัยว่า อ้าวงั้นก็แค่เอาคำที่พิมพ์ผิดไปใส่ตอน train ก็น่าจะแก้ปัญหาได้สิ แต่ปัญหาคือมันมีคำผิดอยู่แบบหร็อมแหร็มและไม่ได้เจอแบบหลากหลาย และถึงแม้เราจะสร้างคำผิดมาเยอะๆ เราก็จะเจออีกปัญหานึงคือ ขนาดของ Training set ใหญ่เกินจน Train ไม่ไหว

จึงมีเปเปอร์เสนอวิธีการรองรับ OOV ในการ Embedding นั้นคือ

Misspelling Oblivious (word) Embeddings (MOE) by Facebook

Misspelling Oblivious (word) Embeddings (MOE) by Facebook

ซึ่งไอเดียหลักของมันก็คือการรวมโมเดล FastText เข้ากับการปรับให้ Embeddings ของคำผิดมีค่าใกล้เคียงคำถูกมากที่สุด

*Dataset คำผิดที่ถูก generate ขึ้นมา สามารถ download ได้ใน linkนี้

FastText

ในงานนี้เป็นการพัฒนางานต่อยอดจาก FastText โดยเป็นการต่อยอดของ method ที่เรียกว่า “Skip-gram with Negative Sampling” (SGNS) และยังเป็นส่วนขยายของ Word2Vec อีกด้วย ซึ่ง FastText ถูกปล่อยในปี 2016 โดย Facebook

โดยที่เรากำหนดให้ T ก็คือคำภายใน Text Corpus ที่เป็น Sequence ของคำจาก Vocaburary โดยคำแต่ละคำเราเรียกเป็น 𝓌ᵢ โดยที่ l ก็คือเซ็ตของ Hyperparameter และ 𝓌ᵢ คือ Vector ที่ถูก Embedding 1 มิติ (เรียกว่า Vᵢ) ซึ่งนำไปเทรนใน Feed Forward Neural Network และถูก Optimization ด้วยค่า Loss Function ดังรูป

Loss Function ของ FastText

อีกทั้งภายใน FastText ยังมีการเพิ่ม embed subword เข้าไป (คล้ายกับ character n-grams) และนำมาประกอบกับ 𝓌ᵢ ในขั้นตอนสุดท้าย

โดยมีพารามิเตอร์ m และ M กำหนดให้เป็น ค่าที่น้อยที่สุดและค่าที่มากที่สุด ของความยาว n-gram โดยที่ FastText จะ embeds ทุกๆตัวอักษรเป็น n-gram ที่มีขนาด m ≤ n ≤ M ยกตัวอย่างเช่น m=3, M=5 คำว่า Banana จะถูกแบ่งได้เป็น ban,ana,nan,bana,anan,nana,banan,anana โดยเซ็ตเหล่านี้คือ 𝓌ᵢ ที่อยู่ในเซ็ตของ V ซึ่งเรากำหนดให้เป็น G𝓌ᵢ โดยที่นำมาใช้กับ FastText Score Function สำหรับ 𝓌ᵢ และ Context (W𝒸) ดังรูป

FastText Score Function

The MOE Model

เราจะเห็นว่าโมเดล FastText ที่ n-gram สามารถ Representation ของคำให้มีจุดเด่นในหน่วยของคำ ซึ่งทำให้สามารถตั้งสมมุติฐานได้ว่า “FastText สามารถตรวจรูปแบบ คุณสมบัติ โครงสร้างของข้อความได้” ซึ่งอาจจะไม่สามารถใช้กับการสะกดผิดได้ ซึ่งสามารถเกิดขึ้นได้กับหน่วยคำที่เล็กที่สุดของภาษาที่มีความหมายก็เป็นได้ ทาง Facebook จึงได้นำเสนอ MOE หรือ Misspelling Oblivious (word) Embedding ขึ้นมานั้นเอง

Loss Function ของ MOE

เป็นการ Weighted sum ของ Loss function 2 ตัวได้แก่ : Lғᴛ และ Lsᴄ โดยที่ Lғᴛ ก็คือ Loss Function ของ FastText ซึ่งสามารถตรวจจับความหมายระหว่างคำได้ และ Lsᴄ ก็คือ Loss ของ Spell correction ที่สร้าง embedding ของคำที่ผิดให้ได้ใกล้เคียงกับคำถูกมากที่สุดในรูปแบบของ Vector space นั้นเอง ดังรูป

Loss Function ของ L(SC)

โดยที่ M คือเซ็ตของคู่คำ (Wₘ,Wₑ) โดย Wₑ ในเซ็ตของ V คือคำที่ถูกต้อง และ Wₘ คือคำที่ผิด Nᴍᴇ คือเซ็ตของ Random Negative Samples จาก V \ {Wₘ,Wₑ} โดยที่พจหลังคือต้องการให้ Word Vector อยู่ไกลจาก Negative Sample

ซึ่งฟังก์ชั่นสกอร์ของ Lsᴄ ได้ใช้ Logistic function เหมือนกับ FastText ซึ่งเปลี่ยนจาก G𝓌 มาเป็น G𝓌ₘ เท่านั้นเอง จึงได้เป็น (s(Wₘ,Wₑ)) ซึ่งทั้ง Wₘ และ Wₑ ได้ใช้ parameters set ตัวเดียวกัน เพราะฉนั้น Loss function แบบสมบูรณ์แบบจึงกลายเป็นรูปนี้นั้นเอง

จากนั้นเอา Loss ของทั้ง 2 อันมาประกอบกันเป็น Loss ของ MOE

ผลการทดลอง

ในเปเปอร์จะเป็นการทดลองกับงานนี้และ FastText เปรียบเทียบกันเรื่องการ Generate Embedding โดยจะเน้นไปที่ OOV เพื่อทดสอบว่าถ้าสะกดผิดจะเป็นอย่างไร โดยแต่ละโมเดลเลือก n-gram เป็น m=3 และ M=6 โดยโมเดล MOE จะมีค่า Coefficient ของ Loss ทั้ง 2 ตัว (Lғᴛ และ Lsᴄ) เป็น α ∈ {0.01, 0.05, 0.1, 0.5, 0.25, 0.5, 0.75, 0.95, 0.99} โดยที่ FastText เรากำหนดให้เป็น α = 0 และภายในเปเปอร์จะทดสอบทั้งสองโมเดลกับ Word Similarity, Word Analogy และ Neighborhood Validity จากนั้นจะทดสอบกับ POS Tagging ที่เป็นภาษาอังกฤษ โดยเราจะยกการทดลองที่เห็นภาพได้ชัดเจนและเข้าใจง่ายๆนั้นคือคือ Word Similarity และ POS Tagging

Dataset ในการทดสอบ โดยที่ r = ค่าความแปรปรวนภายใน Dataset ยิ่งมากก็จะยิ่งเกิด OOV มากยิ่งขึ้น

Word Similarity

ทดสอบว่า MOE สามารถตรวจจับความหมายระหว่างคำได้หรือไม่ โดยใช้ datasets WS353 กับ Rare Word เปรียบเทียบด้วยการกระจายตัว (Distribution) ของ Edit Distance (Levenshtein, 1966) คือ𝒹ₑ(wᵢ , mᵢ) กับ ความยาวของคำ len(wᵢ) (ยิ่งกราฟสูงยิ่งดี)

โดยที่ข้างบนคือ WS353 และข้างล่าคือ Rare Word

และจะเห็นได้ชัดกว่าเดิมมากถ้าเทียบกันด้วยวิธี Ranking ของ Spearman ดังรูปนี้

ทดสอบกับ WS353 และ RW

โดยที่ค่า α = 0 เราจะให้แทนด้วย FastText จะเห็นได้ว่าโมเดล MOE จะชนะ FastText ได้เมื่อมีคำ OOV เกิดขึ้นจำนวนมาก (แปรผันตามค่า r)

เมื่อมาเจอ dataset ที่มีความแปรปรวนจำนวนน้อยก็อาจจะแพ้ FastText ได้ ซึ่งความจริงแล้ว FastText ก็รองรับ OOV อยู่แล้วเพียงแค่ไม่ได้รองรับการสะกดผิดแบบ MOE จึงทำให้เมื่อเจอคำสะกดผิดคะแนนก็จะตกลง

เมื่อมี Variance น้อย Faster ยังทำได้ดี

POS Tagging

โดยขั้นตอนการแท็กจะเลือกใช้โมเดลที่เป็น state-of-the-art POS tagger (Ma and Hovy, 2016) โดยโมเดล MOE จะเทรนด้วยดาต้าเซ็ต 3 อย่าง 1. ดาต้าเซ็ตที่ไม่มีคำผิดเลย 2. ดาต้าเซ็ตที่มีคำผิด 10% 3. ดาต้าเซ็ตที่มีคำผิด 100% โดยจะ Evaluate ด้วย F1 Score

คะแนนของ FastText เทียบกับ MOE

จากตารางจะเห็นว่าในดาต้าเซ็ตที่ผิด MOE สามารถชนะ FastText ได้ตลอดเลยซึ่งทำได้ดีกว่า 2–3% แต่ในดาต้าเซ็ตที่ไม่มีคำผิดจะได้คะแนนไม่ต่างกันมากแต่ก็ยังชนะ FastText มาได้อยู่ดี

บทสรุป

โมเดล MOE สามารถทำงานได้ตามที่ต้องการคือการรองรับ OOV ที่เกิดขึ้นจากการสะกดผิดในประโยค โดยเมื่อเอาไปใช้งานจริง (POS Tagging) ก็ยังไม่ได้ลดประสิทธิภาพลงด้วย ซึ่งมันแสดงให้เห็นว่าถ้าเจอคำที่ผิด MOE ก็ยังให้ผลลัพธ์ที่ดีออกมาได้นั้นเอง

บทความนี้เป็นการร่วมมือระหว่าง:

--

--

Mr.P L
AIResearch.in.th

Lifestyle of Programmer & IoT (Node-RED|Blynk) & Data Science (ML,DL,NLP) and Whatever I want to do | cat can coding too | Ph.D. -> VISTEC -> IST