Machine Learning Engineer in Thai NLP ปัญหาและวิธีแก้ ในโปรเจค Natural Language Processing ภาษาไทย

ปัญหาและวิธีแก้ปัญหา ML Engineer บนโปรเจกต์ Machine Learning มีอะไรบ้าง? เล่าประสบการณ์จริงด้าน Natural Language Processing ภาษาไทย

ปัจจุบันในโลกของการทำงาน ข้อมูลที่ได้รับมาไม่เคยสวยหรู ยิ่งกับประเทศไทยที่ยังต้องมีการพัฒนา ในเรื่องของการเก็บของมูลขนาดใหญ่ (Big Data) ทั้งจากภาครัฐและเอกชน การจะนำไปต่อยอดเพื่อส่งต่อให้ทีมอื่น ๆ ได้ใช้งาน จึงเป็นโจทย์ที่สร้างอุปสรรคมาก

NLP ย่อมาจาก Natural Language Processing มันคืออีกศาสตร์หนึ่งของ Computer science ที่ว่าด้วยการทำให้คอมพิวเตอร์นั้นมีความสามารถในการเข้าใจภาษาจากข้อความหรือคำพูด เฉกเช่นเดียวกันกับที่มนุษย์เข้าใจ 

จากประสบการณ์ที่ไหมทำงานเป็น Machine Learning Engineer ในโปรเจคด้าน NLP มา บทความนี้เลยจะมาเล่าถึง ประสบการณ์ (ความยากลำบาก) ที่พบเจอมาในแต่ละโปรเจกต์ NLP ที่ขึ้นอยู่กับโจทย์ กับปัญหาเรื่องของการ clean ข้อมูล

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

ปัญหาด้าน ML Engineer ที่พบบ่อยของโปรเจกต์ Machine Learning ด้าน NLP

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

  • ความพลิกแพลงของภาษา – เช่น ภาษากระเทย ภาษาชายแท้ ที่ความหมายของภาษานั้นเหมือนกัน แต่คำที่ใช้ในการสื่อสารนั้นแตกต่างกัน และขึ้นอยู่กับบริบทและผู้สื่อสารอีกต่างหาก 
  • วิธีการพิมพ์เพื่อสื่ออารมณ์ – ในภาษาอังกฤษ มีการใช้ตัวอักษรพิมพ์ใหญ่เพื่อสื่อถึงการตะโกน การเน้นเสียง ภาษาไทยก็มีเช่นกัน โดยการใช้เว้นวรรคระหว่างตัวอักษร จึงเกิดความท้าทายให้การ clean ข้อความ เพื่อให้สามารถนำไปใช้ต่อได้ นอกจากนี้การพิมพ์ตัวอักษรซ้ำก็เป็นการลากเสียงอีกต่างหาก แล้วการ clean ข้อมูลต้องแยกให้ออกระหว่าง ข้อความนั้นเป็นการลากเสียง หรือ ตัวอักษรนั้นมีการสะกดด้วยตัวอักษรซ้ำอยู่แล้ว อีก
  • ภาษาเอเลี่ยน – ปัญหานี้เกิดจาก Save File ผิด Format ทำให้ภาษาบางภาษาไม่สามารถแสดงผลได้ แต่ปัญหานี้แก้ได้ไม่ยาก ถ้าเรารู้ว่ามันสามารถใช้ Format ไหนได้ถูกต้อง

นอกจากนี้ ยังมีปัญหาของการตัดคำ การตัดประโยค ของภาษาไทยที่อยู่ในกระบวนการการเตรียมความพร้อมของข้อมูล ที่มีความซับซ้อนมากกว่าภาษาอังกฤษที่สามารถใช้การเว้นวรรค และเครื่องหมายจุดเพื่อจบประโยค ทำให้โจทย์ปัญหานี้กลายเป็นเรื่องที่ใช้เวลานานมาก ๆ กว่าจะได้ข้อมูลที่สามารถนำไปใช้ต่อได้

วิธีแก้ปัญหาสำหรับโปรเจกต์ Natural Language Processing (NLP)

เนื่องจากปัญหาของทำความสะอาดข้อมูลที่เป็น NLP จะขึ้นอยู่กับภาษา ดังนั้นในบทความนี้จะขอเจาะจงไปที่การแก้ปัญหาของภาษาไทย

วิธีแก้ปัญหาความซับซ้อนและการพลิกแพลงของภาษาไทย ในโปรเจกต์ NLP

data engineer nlp twitter issue
ปัญหา Machine Learning ในการหาความหมายของคำว่า “นกฟ้า”

สำหรับปัญหาแบบนี้ การแก้ไขสามารถจัดการได้ตั้งแต่ การ scope context ของโจทย์

หากโจทย์นั้น ๆ ทำอยู่บนบริบทของการแพทย์ คำที่เกี่ยวข้องเราสามารถตีกรอบได้ว่าความหมายของมันจะมีความหมายทางการแพทย์เท่านั้น

หรือ หากคำนั้นเป็นคำที่มาจาก social media ก็มักจะมีบริบทที่เกี่ยวกับเรื่องนั้น ๆ เช่นคำว่า “นกฟ้า” สามารถแปลได้หลายความหมาย

  • ถ้าคำนี้อยู่ในบริบทของสิ่งมีชีวิต เราอาจจะได้ความหมายว่า นกที่มีสีฟ้า
  • แต่หากบริบทนั้นคือ social media นกฟ้าจะสื่อถึง “ทวิตเตอร์” (Twitter) ซึ่งนกสีฟ้าเป็นไอคอนของ social media ชื่อดังนั่นเอง

จริง ๆ แล้วปัญหาที่สามารถเกิดได้อีก คือ การพัฒนาของคำบางคำที่เปลี่ยนความหมายไปตามกาลเวลา ทำให้มีความหมายที่ไม่เหมือนแต่ก่อน เช่น “ฉีดยา”หากคำนี้อยู่ในบริบทของการสนทนาของ LGBT+ เราอาจจะได้ความหมายอีกแบบ ที่เกิดจากการพัฒนาทางภาษา

วิธีแก้ปัญหาการสื่ออารมณ์ผ่านทางข้อความ ในโปรเจกต์ NLP

data engineer thai language nlp problem
ปัญหาภาษาไทยที่พอเว้นวรรคจะทำให้ดูเน้นคำมากขึ้น แต่พอ Computer อ่านก็จะงง

การทำความสะอาดคำเหล่านี้ สามารถเกิดบนภาษาไทยได้จากการเว้นวรรคตัวอักษร เช่น “ห อ ม” หรือ “คุ ณ ภ า พ”

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

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

ตัวอย่างเช่น “พอเห็นแล้วรู้สึก เ ก เ ร ต่อพรี่ ๆ ห้ามใจตัวเองไม่ให้รักเธอ แต่ทำไมใจมันไม่ฟัง” เป็นต้น จากตัวอย่างจะเห็นได้ว่า หากเลือกตัดประโยคโดยใช้การเว้นวรรค เราจะเสียคำว่า “เกเร” แต่ถ้าเราไม่ใช้การเว้นวรรคในการตัดประโยค ก็จะทำให้ไม่สามารถกำหนดประโยคหนึ่งประโยคได้

ซึ่งจากตัวอย่างข้างต้น วิธีการแก้เราอาจจะต้องทบทวนโจทย์หลักดี ๆ ว่าโจทย์ของเรานั้นคือการตัดประโยคหรือการตัดคำ หรือทั้งสองอย่าง รวมถึง Business Logic และปลายทางของคำตอบที่ต้องการเป็นเช่นไร

หากปลายทางคือการตัดคำ การลบตัวเว้นวรรคก็ไม่ใช่ปัญหา แต่หากปลายทางเป็นการตัดประโยค คำว่า “เ ก เ ร” ก็อาจจะหายไปได้

หรือจริง ๆ เราสามารถใช้ Regex ในการพิจารณา Pattern ที่เกิดขึ้นแล้วทำความสะอาดก่อนก็ได้เช่นกัน แต่อย่าลืมที่จะพิจารณาเรื่องของเวลาที่เราใช้ในการทำความสะอาดกันด้วยนะคะ ดังนั้นการทบทวนโจทย์จึงเป็นสิ่งสำคัญที่ต้องมาพร้อมกับการแก้ปัญหาค่ะ

วิธีแก้ปัญหาภาษาเอเลี่ยน ในโปรเจกต์ NLP

data engineer nlp thai issue machine learning
ปัญหาภาษาเอเลี่ยน (Encoding) พบได้ทั่วไปเวลาเราเปิดข้อมูลที่มาจากระบบอื่น ๆ เช่น ฐานข้อมูล

ภาษาเอเลี่ยนหลัก ๆ จะมีปัญหากับภาษาไทย เมื่อเรา import หรือ export โดยไม่สนใจ การ encoding ของมัน บางคนอาจจะเคยตัวอักษรของเรานั้นกลายเป็น Unicode ทำให้ต้องมีการ decode เพื่อให้กลายเป็นตัวอักษรภาษาไทย 

นอกจากนี้ บางทีบางไฟล์อาจจะมีการใช้ตัว encode อื่น ๆ (ดูเพิ่มเติมได้ที่ เว็บไซต์ของ Python) ที่ขึ้นอยู่กับภาษา แต่ถ้าโดยปกติแล้วก็จะใช้ UTF-8 ซึ่งหากเราบันทึกเป็นแบบนี้อยู่แล้วส่วนมากก็จะไม่มีปัญหาค่ะ

สรุป วิธีแก้ปัญหาด้าน Machine Learning Engineer ในโปรเจกต์ NLP

ในบทความนี้ ไหมอธิบายวิธีการแก้ปัญหาด้าน ML Engineer กับภาษาไทย ในโปรเจกต์ NLP กันไปแล้ว สามารถนำไปใช้แก้ปัญหาในโปรเจกต์​ NLP ของคุณได้เลย

หรือถ้าใครสนใจจะเริ่มทำโปรเจกต์ด้าน NLP ภาษาไทย อย่าลืมเอาวิธีต่าง ๆ เหล่านี้ไปใช้ เพื่อป้องกันไม่ให้เกิดปัญหานะคะ
ถ้าชอบเนื้อหาแนวนี้ ช่วยแชร์กันได้นะคะ ไหมจะได้มาเขียนเล่าบ่อย ๆ ค่ะติดตามบทความดี ๆ ด้าน Data และวีดิโอสนุก ๆ ดูชิล ๆ แล้วได้ความรู้กันได้ที่ Facebook Page: DataTH และ Youtube Channel: Data Science ชิลชิล แล้วเจอกันค่ะ