跳到主要内容

เนื้อหาภาษาไทย / 泰语内容

系统指南 内容已审核

สร้าง Chatbot อย่างง่าย: ตอบคำถามทั่วไปเกี่ยวกับสภาพอากาศ

บทความนี้ได้อธิบายวิธีการสร้าง Chatbot ภาษาไทยอย่างง่ายสำหรับตอบคำถามเกี่ยวกับสภาพอากาศ โดยใช้ไลบรารี PyThaiNLP ในการตัดคำ และเทคนิค Keyword Matching เพื่อจับคู...

สร้าง 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) ได้ดียิ่งขึ้น

Office.in.th Custom Service

想基于此结构开发或定制系统?

Office.in.th 承接企业级 Web Application、API Integration 以及政府/企业管理系统的设计与开发,并提供长期支持。

查看软件开发服务