จากใน ep ที่แล้ว เราได้ใช้งาน PyThaiNLP ตัดคำภาษาไทย ตัดข้อความยาว ๆ Tokenization ออกมาเป็น Token เรียบร้อยแล้ว ใน ep นี้ เราจะมาดูว่า แต่ละ Token นั่นสะกดถูกหรือไหม Spellchecker รวมไปถึงแนะนำ และแก้ไขให้ถูกต้อง Spelling Correction ก่อนที่จะนำไปป้อนให้โมเดลในงานวิเคราะห์ทางด้าน NLP ต่อไป
ในงาน NLP การใช้งานจริง เช่น การรับ Input จาก User สิ่งที่เราจะได้พบเจออยู่ตลอด คือ User กรอกข้อมูลผิด ยิ่งข้อมูลที่ไม่ใช่ข้อมูลที่มีโครงสร้าง Structure Data, ไม่มี Data Type ตัวเลข หรือวันเวลา ที่มีรูปแบบแน่นอน แต่เป็นข้อความ Free Text ที่มีคำสะกดผิดปนอยู่ ทำให้การ Validate ข้อมูล อาจจะทำได้ยาก
Spellchecker คืออะไร
Spell checker คือ โปรแกรมตรวจการสะกด ตรวจคำผิด ว่าข้อความ คำที่ User กรอกเข้ามามีปรากฎอยู่ใน Dictionary หรือไม่ โดยอาจจะแนะนำคำใกล้เคียง ที่น่าจะเป็นคำที่ถูกต้องให้ User เลือก หรือแม้กระทั่งเลือกให้โดยอัตโนมัติ เรียกว่า Spelling Correction
ในเคสของภาษาไทย โดย Default แล้ว Spellchecker ของ PyThaiNLP จะใช้อัลกอริทึม ของ Peter Norvig ที่จะหารายการคำใกล้เคียงจาก Dictionary โดยใช้จำนวนอักษรที่ผิด 1, 2, … ตัวอักษร ผสมกับความน่าจะเป็น จากความถี่ของคำนั้นที่ปรากฎใน Corpus ดัง Source Code ตัวอย่าง ภาษา Python ด้านล่าง
โดยอัลกอริทึม ของ Peter Norvig ไม่ได้ใช้ Context หรือคำแวดล้อมที่มาก่อนหน้า หรือต่อจากนั้น และไม่ได้ใช้ตำแหน่งปุ่มใกล้เคียง บน Keyboard มาคำนวนความน่าจะเป็น
NorvigSpellChecker
เราสามารถเลือก กำหนด parameter ของ Dictionary ของ Spellchecker ได้ตามต้องการ ดังนี้
- custom_dict (str) – list of tuple (คำศัพท์, ความถี่) สำหรับสร้าง Dictionary ที่จะใช้ใน Spellchecker (Default คือ Thai National Corpus TNC ที่ตามเงื่อนไข Default ด้านล่าง แล้วจะมีคำศัพท์ประมาณ 40,000 คำ)
- min_freq (int) – ความถี่น้อยที่สุดจะเอาไว้ ใน Dictionary (default = 2)
- min_len (int) – ความยาวน้อยที่สุดที่จะเอาไว้ ใน Dictionary (เป็นตัวอักษร) (default = 2)
- max_len (int) – ความยาวสูงสุดของคำที่จะเอาไว้ ใน Dictionary (default = 40)
- dict_filter (func) – ฟังก์ชันที่จะกรอง Dictionary โดย Default แล้วจะลบคำที่มีตัวเลข และคำที่ไม่ใช่ภาษาไทยทิ้งไป จาก Dictionary ถ้าไม่ต้องการใช้ Filter ให้ใส่ None
Spelling Correction
ส่วน Spelling Correction คือการเลือกคำที่มีความน่าจะเป็นสูงสุด ในที่นี้ คือ คำแรกของ List รายการที่ได้จาก Spellchecker ด้านบน