ทำความรู้จัก Dependency Parser กับภาษาไทย

Borirat Khampingyot
Super AI Engineer
Published in
3 min readMar 31, 2021
SimSimi แอปฯ Chatbot ในตำนาน…ที่ยังมีชีวิต

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

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

ในบทความนี้ เราจะพาคุณไปทำความรู้จักส่วนหนึ่งของภาษา นั่นก็คือ Dependency Parser ซึ่งอยู่ในด้าน NLP (Natural Language Processing) ที่จะเป็นตัวช่วยให้ AI (Artificial Intelligence) หรือ Chatbot สามารถเข้าใจภาษามนุษย์ได้เพิ่มมากขึ้น โดยบทความนี้เขียนขึ้นเพื่อจุดประสงค์ให้ทุกคนรู้จักกับ AI มากขึ้นภายใต้โครงการ Super AI Engineer 2020 รหัส 22p21n0072

ก่อนจะไปทำความรู้จักกับ Dependency Parser เรามาทำความรู้จักกับ Deep Learning และ NLP กันก่อนแบบคร่าว ๆ ว่ามันคืออะไร

Deep Learning

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

NLP

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

“NLP ไทยง่ายนิดเดียว ที่เหลือคือแม่งยากถึงยากมาก”

ความโหดร้ายในการทำ NLP ภาษาไทย เปรียบเสมือนพีระมิดกลับด้านเอายอดมาไว้ที่พื้นแล้วแผ่ขยายออกไปไม่มีที่สิ้นสุด เพราะธรรมชาติของภาษาไทยที่ดูเหมือนจะง่ายแต่มันก็ยากในตัวของมัน มีทั้งคำกำกวม มีคำใหม่เกิดขึ้นเรียกได้ว่าแทบจะทุกวัน เอ๊ะ!!หรือทุกวินาที เอาเป็นว่าภาษาใหม่เหล่านี้มักเกิดขึ้นในโลกโซเชียล แล้วถูกแชร์ส่งต่อกันหลายหมื่นหลายล้านคน บางคนรับสารแล้วดัดแปลง บางคนสารขาดหาย คล้าย ๆ เกมกระซิบส่งสาร ประมาณนั้นเลย แค่นี้คนยังหนักใจ แล้ว AI จะเหลือเหรอ 😂 และไม่ว่าเราจะมีภาษาที่ง่ายหรือยากแค่ไหน แต่ถ้าเราไม่มีคลังข้อมูล ไม่มีประโยค ที่จะนำมาสอนเจ้าตัว AI ไม่มีเกณฑ์การกำกับข้อมูลที่ถูกต้องตามหลักสากล ไม่สามารถเผยแพร่หรือจำหน่ายจ่ายแจกข้อมูล เพราะกลัวฟ้องร้องผิดกฎหมาย และมีอีกหลายอย่างมากมายที่จะบอกว่า ทำไม NLP ภาษาไทยไม่ไปไหนสักที สามารถตามไปอ่านได้จากบทความของพี่อาร์ม ปรัชญาบุญขวัญ ได้เลย

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

ในทาง NLP นั้นก็จะมีกระบวนการประมวลผลภาษาของเราแบ่งออกไปตามแต่ละระดับ เริ่มตั้งแต่

  • ระดับที่ 1 Lexical analysis คือ การวิเคราะห์ระดับพยางค์และคำ
  • ระดับที่ 2 Syntactic Analysis เป็นส่วนของโครงสร้างทางไวยากรณ์ (Gramma) และการหาความสัมพันธ์ระหว่างคำในประโยค

ส่วนระดับตั้งแต่ 3 ขึ้นไปก็จะมีความซับซ้อนในการประมวลผลที่ลงลึกขึ้นไปอีก ซึ่งเราจะอธิบายให้พอเข้าใจ นั่นก็คือ

  • ระดับที่ 3 Semantic Analysis เป็นการตรวจสอบความถูกต้องในเชิงความหมายของประโยค ซึ่งในบางครั้ง ประโยคที่กำลังพิจารณาอาจจะเขียนถูกต้องตามหลักไวยากรณ์ แต่มีความหมายกำกวมหรือเป็นความหมายที่เป็นไปไม่ได้ หรือไม่ให้ความหมายอะไรเลย เช่น หม้อหุงข้าว ถูกต้องตามหลักไวยากรณ์ ประธาน-กริยา-กรรม แต่บางทีก็เป็นได้แค่ นาม ตัวเดียว
  • ระดับที่ 4 Discourse Analysis เป็นการวิเคราะห์ที่ใหญ่กว่าระดับประโยค หรือการวิเคราะห์หาความหมายของทั้งประโยคที่ขึ้นอยู่กับประโยคก่อนหน้าเป็นหลัก
  • ระดับที่ 5 Pragmatic analysis จะเป็นส่วนของการหาความหมายที่แท้จริงที่ขึ้นอยู่กับบริบท (context) หรือ ตีความตามสถานการณ์ที่เกิดขึ้น โดยที่ทั้งผู้ส่งข่าวสารและผู้รับข่าวสารจะต้องอยู่ในสถานการณ์เดียวกัน

ซึ่งหัวข้อ Dependency Parser ที่เราจะไปทำความรู้จักนั้นจะอยู่ในระดับที่ 2 นั่นเอง

Dependency Parser คืออะไร?

Dependency Parser หรือเรียกอีกอย่างว่า Dependency Parsing คือ การวิเคราะห์ความสัมพันธ์ของแต่ละคำในประโยคตามหลักภาษา ไวยากรณ์ ยกตัวอย่างเช่นประโยคนี้ “Job ตั้ง บริษัท Apple”

พอเราอ่าน เราก็รู้ได้ทันทีว่า ใคร กำลังทำอะไร ซึ่งตามการวิเคราะห์ เราจะเห็นว่า Job เป็น nsubj. ของ verb หรือกริยาหลักของประโยค คือคำว่า ตั้ง แล้วนอกนั้นก็คือ obj. เพราะฉะนั้นเราจะรู้แล้วว่า อะไรเป็น ประธาน (subj) อะไรเป็น กรรม (obj) ของประโยค แบบนี้เป็นการวิเคราะห์โครงสร้างประโยคแบบง่าย ๆ ดูแล้วมันอาจจะไม่ยากอะไร แต่ว่าความเป็นจริงรูปประโยคนั้นมันมี pattern อยู่มากมาย อย่างตัวอย่างถัดมา

จะเห็นว่าประโยคเริ่มมีความซับซ้อนมากขึ้น การที่จะหาความสัมพันธ์ ของ nsubj. ก็จะยากขึ้น และแตกต่างไปจากตัวอย่างแรก

หลักการใช้ความสัมพันธ์

การกำกับความสัมพันธ์ระหว่างคำ

ความสัมพันธ์แบบพึ่งพา (Dependency relation) จะกำกับระหว่าง Head โยงไปหา Dependent ​โดย Head จะเป็นตัวกำหนดว่า dependent ต้องเป็นคำชนิดไหน อยู่ในรูปไหน​ มีความสัมพันธ์กันอย่างไร​

สำหรับแต่ละ Dependent นั้น ต้องมี Head ได้ตัวเดียวเท่านั้น

Dependency Parser ไปใช้ประโยชน์อะไรได้บ้าง?

  1. อย่างแรกเลย คือ สามารถนำความสัมพันธ์เหล่านี้ ไปเขียนโค้ด และจัดทำข้อมูลการหาความสัมพันธ์ให้ AI เรียนรู้จดจำโครงสร้างประโยค ให้เข้าใจประโยคได้มากยิ่งขึ้น
  2. ช่วยให้การทำ Text Generation หรือการสร้างคำให้ดูเป็นธรรมชาติมากขึ้น เพราะ AI เข้าใจโครงสร้างประโยค และไวยากรณ์
  3. ใช้เป็นเครื่องมือตรวจสอบ Grammar ตรวจสอบไวยากรณ์ ของประโยคได้ จะทำให้รู้ว่าคำไหนในประโยคถูกหรือผิดหลักภาษา
  4. Question Answering หรือ Chatbot นั่นเอง จะทำให้เรื่องในการถามตอบ ตรงประเด็นมากขึ้น รู้ความหมายของประโยคคำถาม และตอบได้ตรงกับสิ่งที่ถาม
  5. สุดท้าย Text Summarize หรือ การสรุปใจความสำคัญของประโยคหลาย ๆ ประโยคในบทความยาว ๆ ให้สามารถสั้นลงได้ เพราะการรู้ความสัมพันธ์ของประโยคสามารถ ละคำ โดยไม่สูญเสียความหมายได้ เช่น ประโยคที่ 2 ดังตัวอย่าง สามารถ ละคำ คำว่า “กำลังเริ่มทำการจัดตั้ง” ได้

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

--

--