การพัฒนาระบบหุ่นยนต์โต้ตอบสนทนาอัตโนมัติภาษาไทย (Chatbot) ด้วย Dialogflow

Kobkrit Viriyayudhakorn
Kobkrit
Published in
3 min readJul 17, 2018

--

การพัฒนาระบบหุ่นยนต์โต้ตอบสนทนาอัตโนมัติ (Chatbot Agent) นั้น, สามารถทำได้โดยการแปลงคำพูดของผู้ใช้ที่ใช้ภาษาธรรมชาติ อาทิเช่น ภาษาไทยหรือภาษาอังกฤษ (Query) ให้เป็นข้อมูลที่สามารถประมวลผลได้ (Intent). โดยที่การแปลงนี้ (Intent Classification) เกิดขึ้นเมื่อผู้ใช้ป้อนข้อมูล ที่ใกล้เคียงหรือตรงกับกับข้อมูลคำพูด (Training Phase) ของหนึ่งในเจตนา (Intent) ที่นักพัฒนาโปรแกรมกำหนดไว้. เจตนาเหล่านั้นเป็นหัวข้อที่ใช้ดำเนินการตามคำพูดของผู้ใช้.

หุ่นยนต์โต้ตอบอัตโนมัติสามารถออกแบบมาเพื่อจัดการการสนทนา ด้วยความช่วยเหลือจากข้อมูลบริบท (Context), ลำดับความสำคัญของเจตนา (Intent Priority), การดึงข้อมูลสำคัญจากคำพูดของผู้ใช้ (Action and Parameters). นอกจากนี้ยังเปิดให้นักพัฒนาเขียนโปรแกรม (Code) เสริมเพื่อการประมวลผลเพิ่มเติมได้ ผ่านช่องทางเชื่อมต่อต่างๆ อาทิเช่น Webhook หรือ Fulfillment. ซึ่งแผนภาพต่อไปนี้แสดงการจัดการคำขอของผู้ใช้เมื่อมีผู้ใช้ส่งคำพูดมายังระบบหุ่นยนต์โต้ตอบสนทนาอัตโนมัติ.

เมื่อผู้ใช้ส่งข้อความมาผ่านโปรแกรมสนทนา (Chat Messenger) หรือเสียงผ่านไมโครโฟน (Microphone) จากอุปกรณ์ต่างๆ ซึ่งเสียงจะถูกแปลงเป็นข้อความด้วยโปรแกรมรู้จำคำพูด (Speech Recognition) แล้วนั้น. ข้อความคำพูดของผู้ใช้เหล่านี้ (Query) ก็จะถูกแปลงเป็นหัวข้อเจตนา (Intent) โดยใช้เทคนิคทางปัญญาประดิษฐ์ที่ใช้คัดแยกเจตนาจากคำพูด (Intent Classification). โดยใช้ทำงานของโปรแกรมคัดแยกเจตนาจากคำพูดนั้น จะใช้หลักการเทียบความเหมือนกับความคล้ายของคำพูดของผู้ใช้ ว่าใกล้เคียงกับกลุ่มคำพูดตัวอย่างของเจตนานั้น (Training Phase) ซึ่งกำหนดไว้ล่วงหน้านั้นๆหรือไม่} โดยการพิจารณาหัวข้อเจตนา (Intent) ที่เหมาะสมนั้น เราสามารถใช้บริบท (Context) เป็นตัวกำหนดว่าเจตนาไหนจะถูกนำมาพิจารณาในการคัดเลือกบ้าง. โดยที่หากเจตนาไหนไม่ตรงกับบริบทที่กำหนดไว้ ก็จะไม่ถูกคัดเลือก ไม่ว่าจะมีกลุ่มคำพูดตัวอย่างใกล้เคียงกับคำพูดของผู้ใช้มากแค่ไหนก็ตาม.

หลังจากที่คัดเลือกเจตนาได้แล้ว, ระบบก็จะสามารถเลือกคำตอบที่เหมาะสม ซึ่งกำหนดไว้โดยนักพัฒนาระบบหุ่นยนต์โต้ตอบสนทนาอัตโนมัติ. ซึ่งอาจจะเป็นคำตอบตายตัว (Static Response) หรือ คำตอบแบบพลวัต (Dynamic Response) ที่สร้างจากการประมวลโปรแกรมเพิ่มเติม เขียนโดยนักพัฒนาเชื่อมต่อกับระบบหุ่นยนต์โต้ตอบสนทนาอัตโนมัติ (Chatbot Agent) ผ่านช่องทาง API (Fulfillment) ก็ได้. โดยนักพัฒนาระบบหุ่นยนต์โต้ตอบสนทนาอัตโนมัตินั้น สามารถเชื่อมหุ่นยนต์กับบริการ API ภายนอกอื่นๆ (External APIs). ซึ่งเป็นการเปิดช่องทางให้หุ่นยนต์ก็สามารถเชื่อมต่อกับระบบฐานข้อมูลภายนอกใดๆ (RDMS) ก็ได้. สามารถนำช่องทางนี้มาใช้การดึงหรือบันทึกข้อมูล ให้สามารถสร้างคำตอบข้อมูลแบบพลวัต ตรงตามความต้องการของผู้ใช้ได้อีกด้วย.

หลังจากนั้น, ข้อความตอบกลับของผู้ใช้ก็จะถูกส่งกลับไปยังโปรแกรมสนทนา หรือตอบกลับเป็นเสียงผ่านลำโพงผ่านโปรแกรมสังเคราะห์เสียง (Speech Synthesis) ไปยังอุปกรณ์ต่างๆได้อีกด้วย. ทำให้ครบองค์ประกอบการสนทนาระหว่างมนุษย์และหุ่นยนต์ ซึ่งขั้นตอนโดยสรุปนั้นก็คือ

  1. รับเข้าคำสนทนาจากมนุษย์ผ่านข้อความโดยตรง หรือข้อความรู้จำจากเสียงมนุษย์โดยใช้เทคโนโลยีรู้จำเสียงพูด (Speech Recognition)
  2. คัดแยกเจตนาจากคำพูด (Intent Classification) โดยพิจารณาจากกลุ่มคำพูดตัวอย่าง (Training Phase) และบริบท (Context)
  3. เมื่อเราได้เจตนาแล้วเราก็สามารถสร้างคำตอบที่เหมาะสมด้วยการไปดึงคำตอบที่กำหนดไว้ (Static Response) ของเจตนานั้นๆ. หรือ ส่งออกเป็นคำตอบแบบพลวัต (Dynamic Reponse) ซึ่งสร้างด้วยการประมวลผลโค้ด (Code) โดยสามารถไปดึงข้อมูลภายนอกที่ต้องการจะใช้จากฐานข้อมูลหรือบริการภายนอกต่างๆด้วยช่องทาง Fulfillment.
  4. ส่งคำตอบไปยังมนุษย์ โดยอาจจะเป็นข้อความหรือเป็นเสียงก็ได้ ผ่านเทคโนโลยีการสังเคราะห์เสียงจากข้อความ (Speech Synthesis)

เครื่องมือในการพัฒนาระบบหุ่นยนต์โต้ตอบสนทนาอัตโนมัติ

เครื่องมือในการพัฒนาระบบหุ่นยนต์โต้ตอบสนทนาอัตโนมัตินั้น มีอยู่หลายเจ้าในตลาด อาทิเช่น

  • IBM Watson
  • Google Dialogflow (API.AI)
  • Microsoft Luis
  • Snips.ai
  • Wit.ai
  • Recast.ai
  • Amazon.lex

ในการคัดเลือกเครื่องมือในการพัฒนาระบบหุ่นยนต์โต้ตอบสนทนาอัตโนมัติสำหรับภาษาไทยนั้น ทางทีมงานวิจัยได้คำนึงถึงเรื่องในหลายๆด้านดังนี้

ความแม่นยำในการทำคัดแยกเจตนาจากคำพูด (Intent Classification)

จากงานวิจัยประสิทธิภาพเครื่องมือในการพัฒนาระบบหุ่นยนต์โต้ตอบสนทนาอัตโนมัติโดย Konstantin Savenkov, co-Founder and CEO at Inten.to ในปีสิงหาคม 2017 นั้น [1] พบว่าเครื่องมือที่มีความแม่นยำในการทำคัดแยกเจตนาจากคำพูดสูงที่สุด 3 ลำดับแรกก็คือ (1) IBM Watson 0.997 (2) Google Dialogflow (API.AI) 0.996 และ (3) Microsoft Luis 0.992 โดยวัดจากค่า F1 Score เป็นหลัก

การสนับสนุนภาษาไทย

เมื่อเราเข้าไปดูในเรื่องการสนับสนุนภาษาไทย พบว่ามีเพียงเครื่องมือสร้างในการพัฒนาระบบหุ่นยนต์โต้ตอบสนทนาอัตโนมัติจาก Google Dialogflow เท่านั้นที่มีการสนับสนุนภาษาไทย

ความสามารถในการเชื่อมต่อกับ Messenging Platform ที่หลากหลาย

เมื่อเราเข้าไปดูในเรื่องความสามารถในการเชื่อมต่อกับ Messenging Platform ที่หลากหลาย เราก็พบว่า Google Dialogflow สามารถเชื่อมต่อกับเครือข่ายสังคม (Social Network) ต่างๆ มากที่สุดมากถึง 16 เจ้าด้วยกันดังภาพ ซึ่งรวมถึง Platform ยอดนิยมของคนไทยอย่าง Line และ Facebook Messenger อีกด้วย

ด้วยเหตุผลปัจจัยต่างๆข้างต้น ทางเราจึงได้เลือก Google Dialogflow เป็นเครื่องมือหลักในการพัฒนาระบบหุ่นยนต์โต้ตอบสนทนาอัตโนมัติ

วิธีการพัฒนา Chatbot ด้วย Dialogflow

วิธีการสร้างเอเจ้นท์ (Agent Creation)

เริ่มจากทางผู้พัฒนาได้ทำการเข้าเว็บไซด์ https://dialogflow.com เพื่อทำการสร้างหุ่นยนต์โต้ตอบสนทนาอัตโนมัติโดยทำตามขั้นตอนดังนี้

  1. เข้าเว็บไซด์ https://dialogflow.com/
  2. กดที่ “Go to Console” ที่มุมขวาบน
  1. เข้าสู่ระบบด้วย Account ของ Google
  2. กดสร้างบอทใหม่ด้วยกดที่ปุ่มลูกศรลง (v) แล้วกดที่ปุ่ม (+) Create new agent

3. ตั้งชื่อบอทที่พื้นที่สีแดงด้านบน (ในที่นี้คือ “ElderBot” ต้องเป็นภาษาอังกฤษเท่านั้น ภาษาไทยมันจะสร้างไม่ได้ ไม่ขึ้น Error ให้ด้วย =_=) เลือกภาษาให้เป็นภาษาไทยในพื้นที่สีน้ำเงิน (Thai) และกดสร้างในพื้นที่สีเขียว (Create) เพื่อเริ่มสร้างระบบหุ่นยนต์โต้ตอบสนทนาอัตโนมัติ

การกำหนดเจตนา Intent + ตัวอย่างคำพูด Training Phase + คำตอบกลับ Response

  1. กดที่เมนู Intents (เจตนา) ที่เมนูด้านซ้ายก็จะเห็นรายการหัวข้อเจตนาด้านขวา ซึ่งโดยเริ่มต้น มีเจตนาดังนี้
  • Default Fallback Intent เจตนารองรับข้อผิดพลาด

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

  • Default Welcome Intent เจตนาทักทายเริ่มต้น

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

2. กดที่ “Create Intent”

3. ใส่ชื่อ Intent ว่า “headache” สำหรับเจตนาสำหรับผู้สูงอายุปวดหัว

4. ที่ Training Phases เป็นคำพูดใดๆ ที่บ่งบอกว่าปวดหัว อาทิเช่น “ปวดหัว”, “มึนหัว” แล้วกด Enter

5. ที่ Response ใส่คำตอบของบอท ที่ตอบกลับเมื่อทราบว่า ผู้ใช้มีเจตนาว่าปวดหัว อาทิเช่น “หนูสมใจรับทราบแล้วค่ะ หนูสมใจจะเรียกพยาบาลมาหานะคะ”

6. กด “Save”

การทดสอบหุ่นยนต์สนทนา (Testing Chatbot)

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

  1. ลองพิมพ์ประโยคคำพูดง่ายๆ อาทิเช่น “ตอนนี้ปวดหัว” แล้วกด Enter
  2. ระบบก็จะทำการคัดเลือกเจตนาที่ใกล้เคียงที่สุด แล้วเลือกคำตอบที่กำหนดไว้ปรากฏขึ้นมา

Citation

  1. https://www.slideshare.net/KonstantinSavenkov/nlu-intent-detection-benchmark-by-intento-august-2017

หากใครสนใจอยากจะพัฒนาหรือต้องการที่ปรึกษาด้าน AI สามารถเข้าไปดูผลงานของบริษัทเรา iApp Technology ได้ที่ https://iapp.co.th และ https://ai.iapp.co.th หรือติดต่อได้ที่ kobkrit@iapp.co.th ได้เลยนะครับ #Ai #iApp

https://ai.iapp.co.th

ดูเพิ่มเติมได้ที่ https://iapp.co.th และ https://ai.iapp.co.th :D

--

--