สร้าง Chatbot อย่างง่าย: ตอบคำถามทั่วไปเกี่ยวกับสภาพอากาศ
ในบทความนี้ เราจะมาสร้าง Chatbot แบบง่ายๆ ที่สามารถตอบคำถามทั่วไปเกี่ยวกับสภาพอากาศในประเทศไทยได้ โดยจะใช้ความรู้จากบทที่แล้วเกี่ยวกับการใช้งาน PyThaiNLP และสร้างกฎเกณฑ์ง่ายๆ ในการจับคู่คำถามกับคำตอบ Chatbot ตัวนี้จะเป็นจุดเริ่มต้นที่ดีสำหรับผู้ที่ต้องการเรียนรู้การสร้าง Chatbot ภาษาไทย และสามารถนำไปต่อยอดพัฒนาให้มีความสามารถที่ซับซ้อนมากยิ่งขึ้นได้
1. การสร้างชุดข้อมูลคำถาม-คำตอบเกี่ยวกับสภาพอากาศ
ก่อนที่เราจะเริ่มสร้าง Chatbot ได้ เราต้องมีชุดข้อมูลคำถาม-คำตอบ (Question-Answer pairs) เกี่ยวกับสภาพอากาศเสียก่อน ชุดข้อมูลนี้จะเป็นตัวกำหนดว่า Chatbot ของเราสามารถตอบคำถามอะไรได้บ้าง ในขั้นต้น เราจะสร้างชุดข้อมูลที่เรียบง่าย โดยเน้นคำถามที่พบบ่อยเกี่ยวกับสภาพอากาศ
ตัวอย่างชุดข้อมูล:
weather_data = {
"วันนี้อากาศเป็นอย่างไร": "วันนี้อากาศแจ่มใส มีแดด",
"พรุ่งนี้ฝนจะตกไหม": "ยังไม่มีรายงานว่าพรุ่งนี้ฝนจะตก",
"อุณหภูมิวันนี้เท่าไหร่": "อุณหภูมิวันนี้ประมาณ 32 องศาเซลเซียส",
"อากาศร้อนไหม": "วันนี้อากาศค่อนข้างร้อน",
"วันนี้มีเมฆมากไหม": "วันนี้มีเมฆเล็กน้อย"
}
ในตัวอย่างนี้ เรามี dictionary ที่เก็บคู่คำถาม (key) และคำตอบ (value) ไว้ คำถามเป็นภาษาไทย และคำตอบก็เป็นภาษาไทยเช่นกัน เราสามารถเพิ่มคำถามและคำตอบในชุดข้อมูลนี้ได้ตามต้องการ
ข้อควรระวัง: การสร้างชุดข้อมูลที่ดีเป็นสิ่งสำคัญมากสำหรับประสิทธิภาพของ Chatbot หากชุดข้อมูลไม่ครอบคลุมหรือไม่ถูกต้อง Chatbot ก็จะไม่สามารถตอบคำถามได้อย่างถูกต้อง
2. การจับคู่คำถามกับคำตอบโดยใช้ Keyword Matching
เมื่อเรามีชุดข้อมูลแล้ว ขั้นตอนต่อไปคือการสร้างกลไกในการจับคู่คำถามที่ผู้ใช้ป้อนเข้ามา กับคำตอบที่อยู่ในชุดข้อมูลของเรา วิธีที่ง่ายที่สุดคือการใช้ Keyword Matching ซึ่งเป็นการค้นหาคำสำคัญ (Keywords) ในคำถามของผู้ใช้ และนำไปเทียบกับคำสำคัญในคำถามที่อยู่ในชุดข้อมูล หากพบคำสำคัญที่ตรงกัน เราจะตอบด้วยคำตอบที่เกี่ยวข้อง
ตัวอย่างโค้ด:
from pythainlp.tokenize import word_tokenize
def get_weather_response(user_input, weather_data):
"""
จับคู่คำถามของผู้ใช้กับคำตอบในชุดข้อมูลสภาพอากาศโดยใช้ keyword matching
"""
user_tokens = word_tokenize(user_input, engine="newmm") # ใช้ word_tokenize จาก PyThaiNLP
for question, answer in weather_data.items():
question_tokens = word_tokenize(question, engine="newmm")
# ตรวจสอบว่ามีคำสำคัญจากคำถามของผู้ใช้อยู่ในคำถามในชุดข้อมูลหรือไม่
if any(token in question_tokens for token in user_tokens):
return answer
return "ไม่พบข้อมูลสภาพอากาศที่เกี่ยวข้อง" # กรณีไม่พบคำตอบที่ตรงกัน
# ตัวอย่างการใช้งาน
user_input = "วันนี้อากาศเป็นอย่างไรบ้าง"
response = get_weather_response(user_input, weather_data)
print(response) # Output: วันนี้อากาศแจ่มใส มีแดด
คำอธิบายโค้ด:
- เราใช้ฟังก์ชัน
word_tokenizeจาก PyThaiNLP เพื่อตัดคำในคำถามของผู้ใช้และคำถามในชุดข้อมูล - เราวนลูปผ่านชุดข้อมูล
weather_dataและตรวจสอบว่ามีคำใดๆ จากคำถามของผู้ใช้อยู่ในคำถามในชุดข้อมูลหรือไม่ - หากพบคำสำคัญที่ตรงกัน เราจะคืนค่าคำตอบที่เกี่ยวข้อง
- หากไม่พบคำตอบที่ตรงกัน เราจะคืนค่าข้อความ "ไม่พบข้อมูลสภาพอากาศที่เกี่ยวข้อง"
ข้อผิดพลาดที่พบบ่อย:
- การสะกดคำผิด: หากผู้ใช้สะกดคำผิด Chatbot อาจไม่สามารถจับคู่คำถามได้
- คำพ้องความหมาย: Chatbot อาจไม่สามารถเข้าใจคำพ้องความหมายได้ เช่น "อากาศดี" กับ "อากาศแจ่มใส"
3. การแสดงผลคำตอบเป็นภาษาไทย
เมื่อเราได้คำตอบแล้ว เราก็สามารถแสดงผลคำตอบเป็นภาษาไทยให้ผู้ใช้ได้เห็น ตัวอย่างเช่น:
# (จากโค้ดก่อนหน้า)
print(response)
ผลลัพธ์ที่ได้จะเป็นข้อความภาษาไทยที่ตอบคำถามเกี่ยวกับสภาพอากาศ ตัวอย่างเช่น "วันนี้อากาศแจ่มใส มีแดด"
4. การสร้าง Loop สำหรับการสนทนา
เพื่อให้ Chatbot สามารถสนทนากับผู้ใช้ได้อย่างต่อเนื่อง เราสามารถสร้าง loop เพื่อรับคำถามจากผู้ใช้ และตอบคำถามนั้นๆ ได้เรื่อยๆ จนกว่าผู้ใช้จะต้องการออกจากโปรแกรม
# (รวมโค้ดจากส่วนก่อนหน้า)
# สร้าง loop สำหรับการสนทนา
while True:
user_input = input("คุณ: ")
if user_input.lower() == "ออก":
break # ออกจาก loop เมื่อผู้ใช้พิมพ์ "ออก"
response = get_weather_response(user_input, weather_data)
print("Chatbot:", response)
คำอธิบายโค้ด:
- เราใช้
while Trueเพื่อสร้าง loop ที่ทำงานตลอดเวลา - เราใช้
input()เพื่อรับคำถามจากผู้ใช้ - เราตรวจสอบว่าผู้ใช้พิมพ์ "ออก" หรือไม่ หากใช่ เราจะออกจาก loop
- เราเรียกใช้ฟังก์ชัน
get_weather_response()เพื่อหาคำตอบ - เราแสดงผลคำตอบให้ผู้ใช้เห็น
5. ตัวอย่างโค้ดทั้งหมด
นี่คือตัวอย่างโค้ดทั้งหมดที่เราได้สร้างขึ้นในบทความนี้:
from pythainlp.tokenize import word_tokenize
weather_data = {
"วันนี้อากาศเป็นอย่างไร": "วันนี้อากาศแจ่มใส มีแดด",
"พรุ่งนี้ฝนจะตกไหม": "ยังไม่มีรายงานว่าพรุ่งนี้ฝนจะตก",
"อุณหภูมิวันนี้เท่าไหร่": "อุณหภูมิวันนี้ประมาณ 32 องศาเซลเซียส",
"อากาศร้อนไหม": "วันนี้อากาศค่อนข้างร้อน",
"วันนี้มีเมฆมากไหม": "วันนี้มีเมฆเล็กน้อย"
}
def get_weather_response(user_input, weather_data):
"""
จับคู่คำถามของผู้ใช้กับคำตอบในชุดข้อมูลสภาพอากาศโดยใช้ keyword matching
"""
user_tokens = word_tokenize(user_input, engine="newmm") # ใช้ word_tokenize จาก PyThaiNLP
for question, answer in weather_data.items():
question_tokens = word_tokenize(question, engine="newmm")
# ตรวจสอบว่ามีคำสำคัญจากคำถามของผู้ใช้อยู่ในคำถามในชุดข้อมูลหรือไม่
if any(token in question_tokens for token in user_tokens):
return answer
return "ไม่พบข้อมูลสภาพอากาศที่เกี่ยวข้อง" # กรณีไม่พบคำตอบที่ตรงกัน
# สร้าง loop สำหรับการสนทนา
while True:
user_input = input("คุณ: ")
if user_input.lower() == "ออก":
break # ออกจาก loop เมื่อผู้ใช้พิมพ์ "ออก"
response = get_weather_response(user_input, weather_data)
print("Chatbot:", response)
สรุป
ในบทความนี้ เราได้เรียนรู้วิธีการสร้าง Chatbot แบบง่ายๆ ที่สามารถตอบคำถามทั่วไปเกี่ยวกับสภาพอากาศในประเทศไทยได้ โดยใช้ PyThaiNLP และ Keyword Matching Chatbot ตัวนี้เป็นเพียงจุดเริ่มต้น และสามารถนำไปต่อยอดพัฒนาให้มีความสามารถที่ซับซ้อนมากยิ่งขึ้นได้ ในบทความถัดไป เราจะมาเรียนรู้วิธีการปรับปรุง Chatbot ของเราให้สามารถเข้าใจเจตนาของผู้ใช้ (Intent Recognition) ได้ดียิ่งขึ้น