GIỚI THIỆU CHUNG
Lý do chọn đề tài
Trong bối cảnh cuộc sống hiện đại với áp lực học tập và làm việc cùng sự phát triển của mạng xã hội, nhiều người ngày càng ít thời gian cho công việc gia đình như nấu ăn và chăm sóc sức khỏe Việc tìm kiếm và thử nghiệm các công thức nấu ăn, cũng như tìm hiểu về dinh dưỡng, trở nên khó khăn hơn Hệ quả là, nhiều người dần lơ là các vấn đề này, dẫn đến những ảnh hưởng tiêu cực đến sức khỏe.
Tập luyện thể thao kết hợp với chế độ ăn uống hợp lý là rất quan trọng, vì lượng dinh dưỡng hàng ngày ảnh hưởng lớn đến sức khỏe và tâm trạng của chúng ta.
Trong thời gian dịch Covid, việc làm việc và học tập tại nhà trở nên phổ biến, dẫn đến nhiều vấn đề sức khỏe nghiêm trọng Các phòng tập gym đóng cửa, khiến nhiều người không thể duy trì thói quen tập luyện, dẫn đến tình trạng thiếu vận động và sức khỏe suy giảm theo thời gian Sự mất cân bằng dinh dưỡng trong cơ thể cũng gia tăng, biểu hiện qua cảm giác mệt mỏi, tăng cân và tâm trạng tiêu cực.
Khi các quán ăn và hàng quán tạm dừng hoạt động, nhiều người buộc phải tự nấu ăn nhưng lại thiếu công thức và kiến thức dinh dưỡng Điều này khiến họ khó khăn trong việc xác định món ăn nào tốt cho sức khỏe Đối với hầu hết mọi người, việc nắm rõ thành phần dinh dưỡng của một món ăn cũng là một thách thức lớn.
Trong thời gian gần đây, việc nấu ăn thường không được chuẩn bị kỹ lưỡng, mà chủ yếu là sự kết hợp từ các thực phẩm có sẵn Với sự bận rộn trong cuộc sống và ảnh hưởng của dịch bệnh, việc đi chợ trở nên khó khăn hơn, khiến cho việc sử dụng nguyên liệu có sẵn để nấu ăn trở nên phổ biến hơn bao giờ hết.
Nhóm đã phát triển một ứng dụng giúp người dùng nhanh chóng tìm kiếm công thức nấu ăn dựa trên nguyên liệu có sẵn và nhu cầu dinh dưỡng Ứng dụng còn cung cấp thực đơn cho ngày hôm đó, hỗ trợ những ai không có nhiều thời gian chuẩn bị bữa ăn.
Trong thời đại số, người dùng thường cảm thấy choáng ngợp với lượng thông tin khổng lồ trên mạng, dẫn đến khó khăn trong việc lựa chọn thông tin phù hợp Để giải quyết vấn đề này, việc sử dụng một trợ lý ảo sẽ giúp tìm kiếm thông tin một cách đơn giản và nhanh chóng, đáp ứng nhu cầu và mong muốn của người dùng.
Hiện nay, nhiều người chia sẻ công thức nấu ăn qua mạng xã hội như Facebook, Tiktok và Youtube Short Tuy nhiên, người dùng thường không lưu lại những thông tin này, và việc tìm kiếm lại trên các ứng dụng mạng xã hội khá tốn công, khiến đa số người dùng không thực hiện điều đó.
Chatbot là công nghệ tiên tiến đang ngày càng phổ biến, được nhiều trang web tích hợp để hỗ trợ tư vấn khách hàng Người dùng có thể dễ dàng tìm kiếm thông tin và đặt câu hỏi bất cứ lúc nào, nhận được phản hồi ngay lập tức mà không cần chờ đợi.
Việc phát triển chatbot với bộ dữ liệu tích hợp và các chủ đề có sẵn không chỉ nâng cao độ chính xác trong việc đáp ứng nhu cầu của người dùng mà còn góp phần hình thành thói quen tốt cho họ trong việc sử dụng công nghệ.
Điểm nổi bật
- Chatbot cung cấp thông tin nhanh chóng và không cần mất thời gian ghi nhớ hay lưu trữ
Người dùng có thể dễ dàng truy cập thông tin dinh dưỡng, từ đó nhanh chóng hình thành thói quen quan tâm đến chế độ ăn uống của bản thân.
- Người dùng nếu không có thời gian chuẩn bị có thể dùng chatbot để đưa ra một thực đơn nhanh chóng
- Có thể tích hợp lên các ứng dụng khác, tiếp cận được với nhiều người dùng.
Đối tượng nghiên cứu
- Các công nghệ: o Chatbot: Rasa o Ngôn ngữ: Python o Công cụ: Postman, VSCode
Phạm vi ứng dụng
Phạm vi địa lý : Ứng dụng có thể sử dụng ở mọi nơi có sử dụng ngôn ngữ tiếng anh Phạm vi chức năng:
Khảo sát thực tế
- Ưu điểm: o Có sẳn trên các thiết bị o Truy cập nhanh chóng o Thông tin đa dạng
Nhược điểm của việc tìm kiếm thông tin là có quá nhiều dữ liệu nhưng không bao quát, khiến người dùng phải tìm kiếm nhiều lần Hơn nữa, người dùng thường phải tự nghĩ ra các thông tin cần thiết để tìm kiếm, điều này dẫn đến việc tốn thời gian quý báu.
1.5.2 Khảo sát trang web có giao diện tìm kiếm
- Ưu điểm: o Có sẳn trên các thiết bị o Truy cập nhanh chóng o Thông tin đa dạng
Nhược điểm của việc sử dụng các trang web tìm kiếm là thông tin quá nhiều nhưng không phù hợp với nhu cầu của người dùng, gây tốn thời gian cho việc tạo tài khoản và tìm kiếm địa chỉ Hơn nữa, người dùng còn phải mất thời gian để làm quen với giao diện của trang web.
1.5.3 Khảo sát Facebook, Tiktok, Youtube
- Ưu điểm: o Gần gủi người dùng, cộng đồng lớn o Truy cập nhanh chóng o Thông tin đa dạng (cả về hình thức)
Nhược điểm của việc chỉ xem qua thông tin là người dùng thường không lưu trữ, dẫn đến khó khăn trong việc tìm kiếm lại sau này Ngoài ra, nội dung thường chỉ bao gồm các thông tin cố định, chủ yếu là cách nấu, mà không cung cấp sự linh hoạt cho người đọc.
KIẾN THỨC NỀN TẢNG
Giới thiệu chung
Chatbot đã trở thành một phần quen thuộc trong công nghệ hiện đại, đóng vai trò quan trọng trong việc tương tác với người dùng Đây là một chương trình máy tính có khả năng giao tiếp qua tin nhắn nhanh, cho phép tự động trả lời các câu hỏi và xử lý nhiều tình huống khác nhau.
Ngày nay, ChatBot được sử dụng phổ biến qua cửa sổ popup của ứng dụng, trang web và các nền tảng nhắn tin như Google Assistant, Facebook Messenger, Line, Viber, WeChat và Skype Chúng phục vụ nhiều mục đích thực tế, bao gồm giải trí, nghiên cứu, dịch vụ khách hàng, quảng bá sản phẩm và thu thập thông tin trong nhiều lĩnh vực khác nhau.
Các hệ thống chatbot được thiết kế để mô phỏng cuộc trò chuyện với con người và cần điều chỉnh cũng như thử nghiệm liên tục Một số ứng dụng chatbot sử dụng các phương pháp như phân loại từ, xử lý ngôn ngữ tự nhiên và trí tuệ nhân tạo, trong khi đó, những ứng dụng khác chỉ cần quét từ khóa chung và tạo phản hồi dựa trên các cụm từ phổ biến từ thư viện hoặc cơ sở dữ liệu có sẵn, vẫn có thể tạo ra một chatbot hoàn chỉnh.
Xu thế, tính ứng dụng và phát triển của ChatBot
Với sự phát triển của công nghệ 4.0, ChatBot đang tiến hóa theo nhiều xu hướng khác nhau, trong đó nổi bật là ba xu hướng chính: ứng dụng tin nhắn có khả năng trở thành nền tảng độc lập như hệ điều hành, vấn đề ứng dụng khi người dùng thường không muốn cài đặt thêm ứng dụng mới, và các giao diện đàm thoại, tạo ra mô hình tương tác mới với dịch vụ trực tuyến ChatBot hiện đang được ứng dụng phổ biến trong nhiều lĩnh vực kinh doanh, với hầu hết các website đã tích hợp những ChatBot đơn giản để hỗ trợ khách hàng trả lời các câu hỏi cơ bản Việc đưa ChatBot vào Messenger cũng giúp củng cố vị thế cạnh tranh của ứng dụng Các lĩnh vực sử dụng ChatBot phổ biến bao gồm hàng không, báo chí, cung cấp dịch vụ, bất động sản, tuyển dụng và thuyết trình.
Dựa vào tình hình thực tế hiện nay ta sẽ thấy đây là thời điểm cực kỳ thích hợp để phát triển chatbot
2.2.1 Sự phát triển của “NLP” và “NLU”: Đột nhiên “Cách mạng công nghiệp 4.0” đến và soi sáng con đường phát triển của chatbot Khi mà các công nghệ như NLP (Natural Language Processing) và NLU
Natural Language Understanding (NLU) đã trải qua một sự đầu tư mạnh mẽ, thúc đẩy sự phát triển của các kỹ thuật và công nghệ mới, từ đó nâng cao khả năng của chatbot, khiến chúng trở nên thông minh và giống con người hơn Sự tiến bộ này cũng đã dẫn đến sự gia tăng số lượng và độ chính xác của các công cụ xây dựng chatbot.
2.2.2 Hệ sinh thái, các nền tảng (platform):
Các nền tảng nhắn tin hàng đầu như Messenger, Telegram và Slack đều cung cấp công cụ hỗ trợ xây dựng chatbot Điều này cho thấy tiềm năng phát triển mạnh mẽ của chatbot hiện nay, với xu hướng ngày càng gia tăng trong việc tích hợp vào các ứng dụng nhắn tin và trang web thương mại điện tử.
Các ứng dụng chatbot hiện nay
Mạng xã hội Facebook giúp người dùng tương tác và kết nối dễ dàng hơn, cho phép bạn làm quen và tìm hiểu về những người bạn mới, dù chưa từng gặp mặt.
Tại Việt Nam đã có hơn 69 triệu tài khoản Facebook Chiếm 2/3 dân số Việt Nam
Theo số liệu năm 2019 từ gso.gov.vn, Việt Nam có 96,2 triệu người dùng, trong đó 50,7% người dùng Facebook là nam giới, trong khi 49,3% còn lại là nữ giới và các giới tính khác.
Việc sử dụng chatbot mang lại nhiều lợi ích, bao gồm khả năng tạo ra các kịch bản trả lời sẵn giúp cung cấp thông tin nhanh chóng và hỗ trợ người dùng 24/7 Khi người dùng trò chuyện với bot trên Facebook, họ thực chất đang giao tiếp với một hệ thống tự động thay vì một người thật, giúp khai thác và xử lý thông tin hiệu quả hơn.
Ứng dụng của chatbot trong các lĩnh vực
• Giải trí: Các ChatBot giải trí trực tuyến tốt nhất dựa trên AI có thể là Mitsuku, Rose,
Insomno Bot cho phép người dùng tương tác và trò chuyện trong nhiều giờ, cung cấp câu trả lời nhân văn và hiểu rõ tâm trạng của bạn thông qua ngôn ngữ mà bạn sử dụng.
Poncho là một ChatBot chuyên về thời tiết, không chỉ cung cấp dự báo thời tiết mà còn gửi cảnh báo về các điều kiện thời tiết xấu, tất cả đều dựa trên sự chấp thuận của người dùng.
Trong lĩnh vực bất động sản, sự tồn tại của các đơn vị môi giới phụ thuộc vào khả năng thu hút khách hàng tiềm năng mới Chatbot bất động sản là giải pháp hiệu quả để kết nối và chuyển đổi khách hàng, giúp họ trở thành người đăng ký, đặt hẹn hoặc nhận tư vấn Công nghệ này không chỉ tự động hóa quy trình tiếp cận khách hàng mà còn gia tăng cơ hội tăng doanh số Những lợi ích nổi bật bao gồm tiết kiệm nguồn nhân lực, thu hút đối tượng trẻ, thu thập dữ liệu khách hàng tiềm năng, cải thiện hiệu quả quảng cáo và cung cấp dịch vụ 24/7, giữ cho khách hàng luôn được tương tác.
Nhà hàng và các ngành bán lẻ đang áp dụng công nghệ Chatbot để nâng cao trải nghiệm khách hàng Khách hàng sẽ được Chatbot chào đón, cung cấp các tùy chọn như chọn vị trí chỗ ngồi, thực hiện thanh toán và nhận thông báo về thời gian lấy thức ăn.
Chatbot trong lĩnh vực khách sạn và du lịch hoạt động như một nhân viên du lịch ảo, cung cấp gợi ý cá nhân hóa dựa trên sở thích và yêu cầu của người dùng Nó không chỉ giúp trả lời các câu hỏi thường gặp mà còn hỗ trợ trong việc đặt chỗ và đặt lịch tại nhà hàng, khách sạn một cách tiện lợi.
Chatbot trong lĩnh vực y tế và chăm sóc sức khỏe giúp người dùng theo dõi và phân tích thông tin sức khỏe, đồng thời khám phá và mua sắm các sản phẩm chức năng Chúng cũng kết nối bệnh nhân với nhà cung cấp dịch vụ và phòng khám, kiểm tra triệu chứng dựa trên từ khóa và chuyển tiếp thông tin đến bác sĩ khi cần Một số chatbot còn đóng vai trò là nhà trị liệu ảo, giới thiệu bệnh nhân đến các bác sĩ tâm lý thực sự.
Bạn có thể nhận tài liệu chuyến bay qua Messenger, bao gồm xác nhận đặt vé, thông báo đăng ký, thẻ lên máy bay và cập nhật trạng thái chuyến bay.
CƠ SỞ LÝ THUYẾT XÂY DỰNG CHATBOT
Tìm hiểu về chatbot
Theo từ điển Cambridge, chatbot là một một chương trình máy tính được thiết kế để trò chuyện với con người, đặc biệt là qua internet
Chatbot thường trao đổi với người dùng qua hình thức tin nhắn hoặc âm thanh
3.1.1 Các loại chatbot hiện nay
Hình 3.1 Các loại chatbot hiện nay o Menu/button-based chatbots o Linguistic Based (Rule-Based Chatbots) o Keyword recognition-based chatbots o Machine Learning chatbots o The hybrid model o Voice bots
Tìm hiểu về Rasa
3.2.1 Giới thiệu Rasa a Rasa là gì ?
Rasa là một công cụ mạnh mẽ để xây dựng chatbot AI bằng ngôn ngữ Python và công nghệ hiểu ngôn ngữ tự nhiên (NLU) Với Rasa, người dùng có thể phát triển chatbot một cách linh hoạt, bao gồm việc huấn luyện mô hình và thêm các hành động cụ thể Chatbot được tạo ra từ Rasa có khả năng hoạt động trên nhiều nền tảng phổ biến như Messenger, Slack và Telegram.
• Có tính mở rộng: có thể sử dụng các pipeline riêng biệt như spaCy hoặc duckling
Rasa là một nền tảng mã nguồn mở, cho phép người dùng tùy chỉnh mã nguồn trên GitHub để đáp ứng các yêu cầu cụ thể của họ Việc sử dụng mã nguồn mở mang lại lợi thế lớn, giúp người dùng linh hoạt trong việc phát triển và tối ưu hóa các ứng dụng của mình.
Rasa hỗ trợ xây dựng chatbot với khả năng nhận diện nhiều intent đa dạng, giúp chatbot hiểu rõ ý định của người dùng và cung cấp câu trả lời phù hợp, thay vì chỉ đưa ra phản hồi cố định.
• Hỗ trợ nhiều nền tảng: như messenger, slack hoặc telegram,
Rasa yêu cầu phần cứng khá cao để đạt được hiệu suất tối ưu, với dung lượng RAM tối thiểu khoảng 4GB cho mỗi dự án Mặc dù Rasa có tốc độ xử lý nhanh, nhưng việc đảm bảo cấu hình phần cứng phù hợp là điều cần thiết để vận hành hiệu quả.
Việc sử dụng Rasa mang lại khả năng tuỳ chỉnh cao cho người dùng, tuy nhiên, điều này cũng tạo ra những khó khăn trong việc nghiên cứu và xây dựng, đặc biệt đối với những người mới chưa có kinh nghiệm về Python hoặc AI.
Kiến trúc của Rasa
Rasa được xây dựng trên những phương pháp sau:
• NLU (Natural Language Understanding - hiểu ngôn ngữ tự nhiên): bao gồm
Xử lý ngôn ngữ tự nhiên (NLP) có vai trò quan trọng trong việc xác định ý định câu hỏi (intent classification) và trích xuất thông tin (slots filter) NLU nhằm mục đích trích xuất ngữ cảnh và ý nghĩa từ đầu vào của người dùng bằng ngôn ngữ tự nhiên, có thể không có cấu trúc, và phản hồi phù hợp với ý định của người dùng Nó xác định mục đích của người dùng và trích xuất các thực thể theo miền cụ thể Ý định đại diện cho mối liên hệ giữa những gì người dùng nói và hành động mà chatbot cần thực hiện Các hành động này tương ứng với các bước mà chatbot sẽ thực hiện khi các ý định được kích hoạt bởi đầu vào của người dùng, có thể bao gồm các tham số để cung cấp thông tin chi tiết Phát hiện ý định thường được thực hiện thông qua phân loại câu, trong đó các nhãn ý định đơn hoặc nhiều ý định được dự đoán cho mỗi câu.
Xử lý ngôn ngữ tự nhiên (NLP) là hệ thống cho phép con người và máy tính giao tiếp một cách tự nhiên bằng ngôn ngữ Để thực hiện điều này, NLP cần sử dụng cơ sở dữ liệu chứa các thông tin đối thoại lịch sử, từ đó giúp nhận diện và chuyển đổi dữ liệu đầu vào của người dùng thành dữ liệu có cấu trúc, đồng thời tiến hành phân loại thông tin hiệu quả.
• Quản lý hội thoại (DM):
Quản lý hội thoại (DM) là thành phần quan trọng trong việc duy trì và cập nhật ngữ cảnh của cuộc trò chuyện, bao gồm ý định hiện tại và các thực thể cần thiết để thực hiện yêu cầu của người dùng Nó không chỉ yêu cầu thông tin còn thiếu mà còn xử lý các yêu cầu làm rõ từ người dùng và đưa ra câu hỏi tiếp theo Ví dụ, một chatbot có thể hỏi: “Bạn có muốn cho tôi một câu ví dụ với từ môi trường không?” Ngoài ra, DM còn xác định hành động tiếp theo dựa trên trạng thái hành động trước đó và ngữ cảnh hội thoại, đồng thời phải đối chiếu với các kịch bản đã được đào tạo cho bot Thành phần này cũng có nhiệm vụ lấy dữ liệu từ các hệ thống khác thông qua các API hoặc nguồn dữ liệu được gọi trong hành động.
NLG (Sinh ngôn ngữ tự nhiên) là một thành phần quan trọng trong việc tạo ra ngôn ngữ dựa trên các chính sách và hành động được xác định trong hệ thống quản lý đối thoại (DM) Khi nhận phản hồi, NLG sẽ chuẩn bị các câu trả lời tự nhiên cho người dùng dựa trên ý định và thông tin ngữ cảnh Các phản hồi này được tạo ra thông qua các mô hình được thiết kế theo quy tắc hoặc dựa trên trí tuệ nhân tạo (AI).
GIỚI THIỆU MỘT SỐ KỸ THUẬT SỬ DỤNG RASA FRAMEWORK
Một số kỹ thuật sử dụng trong chatbot
Intent: điều người dùng mong muốn chatbot thực hiện (hỗ trợ) khi đưa ra câu hội thoại
Khi người dùng tìm hiểu thông tin về các loại phòng tại khách sạn, họ thường đặt câu hỏi như: "Khách sạn mình có những loại phòng nào?" hoặc "Khách sạn mình có phòng đơn không?" và "Khách sạn mình có phòng twin không?"
Hoặc khi một người dùng hỏi “What’s the weather like tomorrow?” thì chatbot cần hiểu được ý định của họ là hỏi về thời tiết (request weather)
Việc xác định intent là yếu tố quyết định cấu trúc và kịch bản của cuộc hội thoại tiếp theo trong chatbot Sự chính xác trong việc nhận diện ý định rất quan trọng, vì nếu chatbot xác định sai intent, điều này có thể dẫn đến phản hồi không phù hợp, gây ra sự không hài lòng cho người dùng và có khả năng khiến họ rời bỏ hệ thống.
Các vấn đề khi xác định ý định (intent)
Với sự phát triển của công nghệ trí tuệ nhân tạo, các công ty Internet lớn đã giới thiệu chatbot Tuy nhiên, do trải nghiệm người dùng còn hạn chế, việc thu thập dữ liệu văn bản trò chuyện giữa người dùng và chatbot trở nên khó khăn, dẫn đến số lượng văn bản đối thoại nghiên cứu bị giới hạn Điều này tạo ra thách thức lớn cho các nhiệm vụ phát hiện ý định Trong thực tế, có rất ít văn bản có mục đích và được chú thích, làm cho việc nghiên cứu và phát triển trong lĩnh vực phát hiện ý định trở nên khó khăn hơn.
• Sự bất quy tắc trong diễn đạt của người dùng:
Trong hệ thống chatbot, người dùng thường diễn đạt mục đích của mình bằng cách sử dụng ngôn ngữ thông thường, với câu ngắn và nội dung rộng, điều này gây khó khăn trong việc xác định rõ ràng mục tiêu của họ Ví dụ, câu "tôi muốn tìm một địa điểm ăn tối" thực chất có ý định là "tìm kiếm một nhà hàng", nhưng cách diễn đạt không rõ ràng khiến cho máy không thể hiểu chính xác yêu cầu Tương tự, câu "tôi muốn đặt vé" có thể liên quan đến nhiều loại vé như máy bay, tàu, hay xe buýt, dẫn đến việc chatbot không thể phản hồi kịp thời do sự mơ hồ trong diễn đạt của người dùng.
Với sự mở rộng không ngừng của hệ thống đối thoại giữa người và máy, cách thể hiện ý định ngày càng đa dạng Ý định có thể được phân loại thành hai loại: ý định rõ ràng và ý định ngầm định Ý định rõ ràng là khi người dùng thể hiện một cách cụ thể yêu cầu hoặc mong muốn của mình trong cuộc hội thoại, bao gồm các yếu tố như miền chủ đề và thể loại ý định Ngược lại, ý định ngầm định xảy ra khi người dùng không đưa ra yêu cầu rõ ràng, buộc hệ thống phải suy luận để xác định ý định thực sự của người dùng thông qua phân tích ngữ cảnh.
Chẳng hạn “Book a hotel near the People’s Park for one night” và câu ngầm định
Tôi sẽ đến Shenzhen trong hai ngày vào tuần tới Mặc dù họ có ý định đặt phòng khách sạn, nhưng khách hàng cần phải đánh giá và suy đoán về ý định thực sự của người dùng Vì vậy, việc phát hiện ý định ngầm mà không có chủ đề rõ ràng là một thách thức lớn trong nhiệm vụ nhận diện ý định.
• Phát hiện đa ý định (Multiple intents detection):
Trong câu hội thoại con người sẽ có những nội dung với đa ý định Ví dụ nếu bạn nói
Để cải thiện khả năng tương tác tự nhiên với bot, việc nhận diện đa ý định trong câu nói của người dùng là rất quan trọng Ví dụ, khi người dùng nói "xin chào, cho tôi đặt phòng nhé", bot cần xác định được hai ý định chính: "chào hỏi" và "đặt phòng" Tuy nhiên, phát hiện đa ý định trong văn bản ngắn vẫn là một thách thức lớn trong lĩnh vực nhận diện ý định.
Phát hiện lỗi chính tả và bỏ dấu trong tiếng Việt gặp nhiều thách thức, đặc biệt khi người dùng gõ không dấu hoặc nhầm lẫn giữa các chữ cái như s, x, l, n Những sai sót này có thể gây khó khăn lớn trong việc nhận diện ý định của người dùng.
Xác định ý định dựa trên học máy (machine learning)
Các bước xác định ý định dựa trên học máy được minh họa như hình dưới
Hình 4.1 Cách thức xác định intent
Hệ thống phân lớp ý định người dùng có một số bước cơ bản:
• Tiền xử lý dữ liệu:
Bước tiền xử lý dữ liệu là quá trình "làm sạch" dữ liệu, bao gồm loại bỏ thông tin dư thừa, chuẩn hóa dữ liệu và sửa lỗi chính tả, cũng như chuẩn hóa các từ viết tắt Quy trình này đóng vai trò quan trọng trong hệ thống chatbot, vì nếu dữ liệu đầu vào được xử lý tốt ở bước này, nó sẽ nâng cao độ chính xác và sự thông minh của bot.
Một số kỹ thuật tiền xử lý bao gồm tách từ, giúp phân chia câu thành các token; xử lý từ đồng nghĩa để cải thiện độ chính xác; chỉnh sửa các lỗi chính tả như từ "mạng"; và xử lý từ viết tắt, ví dụ như thay thế "gõ ip" bằng "iphone".
Bước tiếp theo là trích xuất đặc trưng từ dữ liệu đã được làm sạch, một công đoạn quan trọng trong mô hình học máy truyền thống, trước khi học sâu trở nên phổ biến Việc trích xuất đặc trưng ảnh hưởng lớn đến độ chính xác của mô hình phân lớp Để đạt được đặc trưng tốt, cần phải phân tích dữ liệu một cách tỉ mỉ và kết hợp tri thức chuyên gia trong từng lĩnh vực ứng dụng cụ thể Đây là quá trình chuyển đổi ngôn ngữ con người thành dạng số, giúp máy móc có thể hiểu và xử lý thông tin.
Một số kỹ thuật trích xuất đặc trưng: o Word2Vec o One-hot Encoding o Bag of Words o TD/IDF
• Huấn luyện mô hình và Mô hình phân lớp:
Trong quá trình huấn luyện mô hình, đầu vào là các đặc trưng đã được trích xuất, và các thuật toán học máy được áp dụng để xây dựng một mô hình phân lớp Mô hình phân lớp có thể bao gồm các luật phân lớp, như trong cây quyết định (decision tree), hoặc các vector trọng số tương ứng với các đặc trưng đã được trích xuất, như trong logistic regression, SVM, hoặc mạng Neural.
Một số kỹ thuật phân lớp: o Support Vector Machines (SVM) o Random Forest o Neural Networks (LSTM)
Sau khi xây dựng mô hình phân lớp intent, chúng ta có thể áp dụng nó để phân loại các câu hội thoại mới Các câu này sẽ trải qua quy trình tiền xử lý và trích xuất đặc trưng, sau đó mô hình sẽ đánh giá "điểm số" cho từng intent trong danh sách intent và xác định intent có điểm số cao nhất.
Các thành phần của Rasa
Rasa Open Source là nền tảng mạnh mẽ cho việc hiểu ngôn ngữ tự nhiên và quản lý đối thoại, trong khi Rasa X là bộ công cụ miễn phí giúp nâng cao khả năng của các trợ lý ngữ cảnh Kết hợp lại, chúng cung cấp nhiều tính năng đa dạng để phát triển trợ lý và chatbot dựa trên văn bản và giọng nói.
Understanding messages involves transforming free-form text in any language into structured data This process supports both single and multiple intents, as well as pre-trained and custom entities.
• Duy trì cuộc trò chuyện (Hold conversations): ghi nhớ ngữ cảnh bằng cách sử dụng quản lý hội thoại dựa trên máy học
• Học tập tương tác (Interactive learning): tạo dữ liệu đào tạo bằng cách nói chuyện với chatbot của bạn và cung cấp phản hồi khi nó mắc lỗi
• Kết nối với các nền tảng nhắn tin thường dùng (Connect): tích hợp chatbot của bạn trên Slack, Facebook, Google Home,
• Tích hợp các lệnh gọi API (Integrate): sử dụng các hành động tùy chỉnh của Rasa để tương tác với các API và các hệ thống khác
• Xem và chú thích cuộc hội thoại (View and annotate conversations): lọc, gắn cờ và sửa các cuộc trò chuyện để liên tục cải thiện chatbot của bạn
Triển khai mọi nơi cho phép người dùng dễ dàng triển khai các Docker containers và điều phối để chạy Rasa, có thể thực hiện trên hệ thống tại chỗ hoặc thông qua nhà cung cấp đám mây mà họ ưa thích.
Hình 4.2 Sơ đồ các thành phần của Rasa
Rasa hỗ trợ chế độ học tương tác, cho phép người dùng cung cấp phản hồi cho chatbot trong quá trình trò chuyện Đây là phương pháp hiệu quả để khám phá khả năng của chatbot và dễ dàng sửa chữa các lỗi phát sinh Một lợi thế nổi bật của đối thoại dựa trên học máy là khả năng dạy cho chatbot những điều mới khi nó chưa biết cách thực hiện.
Hình 4.3 Sơ đồ học tương tác
Rasa còn cung cấp công cụ Rasa X dành cho phát triển theo hướng hội thoại (
Conversation-Driven Development (CDD) là một phương pháp giúp cải thiện trợ lý AI chatbot bằng cách lắng nghe ý kiến và nhu cầu của người dùng, từ đó sử dụng những thông tin chi tiết để tối ưu hóa trải nghiệm người dùng.
Hình 4.4 Giao diện người dùng RasaX
Sơ đồ dưới cho thấy các bước cơ bản về cách một trợ lý được xây dựng bằng Rasa phản hồi một thông báo:
Hình 4.5 Sơ đồ điều hướng tin nhắn
Tin nhắn được tiếp nhận và chuyển đến trình thông dịch, nơi nó được chuyển đổi thành từ điển bao gồm văn bản gốc, ý định và các thực thể đã được xác định Quy trình này được thực hiện bởi NLU (Natural Language Understanding).
• Tracker là đối tượng theo dõi trạng thái hội thoại Nó nhận được thông tin rằng một tin nhắn mới đã đến
• Chính sách (Policy) nhận trạng thái hiện tại của Tracker
• Chính sách chọn hành động (Action) tiếp theo để thực hiện
• Hành động đã chọn được ghi lại bởi Tracker
• Một phản hồi được gửi đến người dùng
4.4.2 Cấu trúc mã nguồn của Rasa
Cấu trúc của một chương trình của Rasa như hình dưới:
Trong chương trình chatbot, các thành phần chính bao gồm: file init .py giúp Python nhận diện hành động của chatbot; actions.py chứa mã cho các hành động tùy chỉnh; config.yml cấu hình NLU và các mô hình Core; credentials.yml cung cấp thông tin kết nối với các dịch vụ khác; data/nlu.md chứa dữ liệu đào tạo NLU; data/stories.md lưu trữ các câu chuyện; domain.yml định nghĩa miền của chatbot; endpoints.yml chi tiết kết nối với các kênh như Facebook Messenger; và models/.tar.gz là tên model sau khi huấn luyện thành công.
Trong Rasa, việc khai báo các Intent (ý định người dùng) được thực hiện trong tệp domain.yml Ví dụ, một số ý định phổ biến mà người dùng thường tương tác với chatbot bao gồm chào hỏi, tạm biệt, đồng ý và từ chối.
Trong Rasa, việc khai báo các thực thể (Entity) trong tệp domain.yml là rất quan trọng Ví dụ, một số thực thể có thể bao gồm tên nguyên liệu và công thức nấu ăn, giúp hệ thống hiểu và xử lý thông tin một cách hiệu quả hơn.
Rasa stories là một dạng dữ liệu đào tạo được sử dụng để đào tạo các mô hình quản lý hội thoại của Rasa
Một câu chuyện là sự mô tả cuộc đối thoại giữa người dùng và trợ lý AI, trong đó thông tin đầu vào của người dùng được thể hiện dưới dạng ý định (intents) và các thực thể cần thiết, trong khi phản hồi của chatbot được thể hiện qua tên hành động (action) tương ứng.
Một ví dụ về việc đào tạo hệ thống đối thoại Rasa Core được gọi là "câu chuyện" Câu chuyện này thể hiện một đoạn hội thoại theo định dạng của Rasa, giúp hệ thống hiểu và phản hồi một cách tự nhiên trong các tình huống giao tiếp khác nhau.
- action: action_search_food_recipe
Khi viết các câu chuyện, có hai loại hành động cần lưu ý: hành động phát biểu (utterance actions) và hành động tùy chỉnh (custom actions) Hành động phát biểu là những thông điệp cố định mà bot có thể phản hồi, trong khi hành động tùy chỉnh liên quan đến việc thực thi mã tùy chỉnh.
Tất cả các hành động của chatbot, bao gồm cả hành động phát biểu và hành động tùy chỉnh, đều được hiển thị dưới dạng các dòng bắt đầu bằng ký hiệu đặc biệt và theo sau là tên của hành động.
Các phản hồi cho các hành động phát biểu cần bắt đầu bằng tiền tố "utter" và phải phù hợp với tên phản hồi đã được xác định trong tệp domain.yml.
Trong file config.yml, khóa policies cho phép tùy chỉnh các chính sách của chatbot Chẳng hạn, tham số max history được sử dụng để kiểm soát lượng lịch sử đối thoại mà mô hình xem xét khi quyết định hành động tiếp theo.
- name: RulePolicy core_fallback_threshold: 0.3 core_fallback_action_name: "action_default_fallback" enable_fallback_prediction: True
- name: TEDPolicy max_history: 10 epochs: 20 batch_size:
Tổng kết chương
Trong chương này, luận văn trình bày các kỹ thuật quan trọng nhất trong chatbot và các thành phần cơ bản của framework Rasa Những kiến thức này là nền tảng để phát triển một chatbot cung cấp thông tin về món ăn.
PHÂN TÍCH THIẾT KẾ VÀ XÂY DỰNG CHATBOT HỖ TRỢ TƯ VẤN ĂN UỐNG
Giới thiệu bài toán
Mục tiêu của việc xây dựng chatbot là cung cấp thông tin và tư vấn về chế độ ăn uống, hoạt động liên tục 24/7 để hỗ trợ người dùng trả lời các câu hỏi liên quan đến dinh dưỡng Chatbot sẽ tập trung vào một số chức năng chính nhằm nâng cao trải nghiệm người dùng.
• Giúp đỡ trong cách sử dụng chatbot
• Nhận diện món ăn hoặc công thức nấu ăn
• Thông tin về các công thức nấu ăn
• Tùy chỉnh các thống số như thành phần dinh dưỡng, chế độ ăn,
• Tìm kiếm các món ăn
• Thông tin thành phần dinh dưỡng trong các món ăn được tìm kiếm
• Thông tin các thành phần nguyên liệu trong các món ăn được tìm kiếm
• Tạo kế hoạch ăn uống trong một ngày
Phân tích khả năng hội thoại của chatbot
Với những khó khăn trong việc nghiên cứu và tìm kiếm các công thức nấu ăn, chatbot có :
• Nhận diện được các thành phần nguyên liệu trong tin nhắn người dùng
• Trả lời được những câu hỏi liên quan đến các cách chế biến món ăn
• Có khả năng đưa ra các công thức món ăn liên quan đến các thành phần thực phẩm được người dùng cung cấp
• Phát hiện được từ đồng nghĩa như greater than, more than hoặc dấu >
• Ghi nhớ được ngữ cảnh của những câu trước, giúp cho việc hội thoại giữa người dùng và chatbot trở nên mạch lạc và xuyên suốt
• Đưa ra kế hoạch ăn uống trong 1 ngày cho người sử dụng
Phân tích thiết kế hệ thống chatbot
5.3.1 Mô hình huấn luyện chatbot:
Trong Rasa, các thông điệp được xử lý thông qua một chuỗi các thành phần (components) được thực hiện theo thứ tự trong "pipeline" được xác định trong file config.yml Việc lựa chọn một NLU pipeline không chỉ giúp tùy chỉnh mô hình mà còn cho phép kết hợp nó với tập dữ liệu của bạn.
Có nhiều thành phần để trích xuất thực thể, phân loại ý định, lựa chọn phản hồi và tiền xử lý Nếu bạn muốn bổ sung các thành phần riêng, như kiểm tra chính tả hoặc phân tích quan điểm, bạn có thể tạo các thành phần tùy chỉnh.
5.3.2 Một pipeline thường bao gồm ba phần chính:
Mỗi câu trong bài viết sẽ được tách thành danh sách các từ tố (token) Các từ trong câu sẽ được phân tách theo nghĩa, sử dụng dấu cách để phân biệt Đối với tiếng Việt, tác giả đã chọn SpacyTokenizer làm công cụ tách từ.
Nhằm chuẩn hóa từ đồng nghĩa bằng việc đồng nhất từ đồng nghĩa, từ địa phương, tiếng lóng về một từ chuẩn hóa, chúng em sử dụng EntitySynonymMapper
Khi quyết định giữa việc sử dụng nhúng từ được đào tạo trước và nhúng được giám sát, ta cần xem xét các ưu điểm của từng phương pháp Nhúng từ được đào tạo trước cho phép phân loại ý định người dùng dựa trên dữ liệu đã được lọc, giúp mô hình nhận diện sự tương đồng giữa các từ như "greater than" và ">" trong các ví dụ khác nhau, đặc biệt hữu ích khi dữ liệu đào tạo hạn chế Ngược lại, nhúng được giám sát cho phép tạo ra tập dữ liệu huấn luyện riêng, giúp Rasa có khả năng huấn luyện với bất kỳ ngôn ngữ nào, bao gồm tiếng Việt, và đảm bảo tính chính xác hơn trong các lĩnh vực chuyên biệt như trả lời thông tin khách sạn Tác giả đã chọn phương pháp nhúng được giám sát kết hợp với các thành phần như CountVectorsFeaturizer để trích xuất đặc trưng cho phân loại ý định, RegexFeaturizer để tạo vectơ từ thông điệp người dùng qua biểu thức chính quy, và LexicalSyntacticFeaturizer để tạo các đặc trưng từ vựng và cú pháp hỗ trợ trích xuất thực thể.
• Entity Recognition / Intent Classification / Response Selectors:
Tùy thuộc vào dữ liệu, chúng ta có thể chỉ thực hiện phân loại ý định, nhận dạng thực thể hoặc lựa chọn phản hồi, hoặc kết hợp nhiều nhiệm vụ Rasa hỗ trợ nhiều thành phần cho từng nhiệm vụ, trong đó việc nhận diện ý định thường sử dụng mô hình máy vector hỗ trợ (SVM) và trích xuất thông tin thực thể sử dụng mô hình trường ngẫu nhiên có điều kiện (CRF) Các thành phần được lựa chọn bao gồm DIETClassifier.
Kiến trúc Dual Intent và Entity Transformer (DIET) là một giải pháp đa tác vụ hiệu quả cho việc phân loại ý định và nhận dạng thực thể Nó sử dụng một bộ chuyển đổi chung cho cả hai nhiệm vụ, với chuỗi nhãn thực thể được dự đoán qua lớp gắn thẻ trường ngẫu nhiên có điều kiện (CRF) dựa trên chuỗi đầu vào Đối với nhãn ý định, đầu ra của bộ chuyển đổi được lấy từ token CLS , với nhãn ý định được nhúng vào không gian vectơ ngữ nghĩa DIETClassifier cũng cho phép xử lý đa ý định, tách các ý định thành nhiều nhãn khác nhau Để nâng cao độ chính xác trong việc nhận diện, chúng tôi đã tích hợp thêm hai loại nhận dạng thực thể.
• CRFEntityExtractor: tuy DIETClassifier đã có tích hợp CRFEntityExtractor nhưng việc tách thành 2 service với mục đichs riêng biết sẽ tẳng khả năng nhận diên của chatbot
RegexEntityExtractor sử dụng biểu thức chính quy (regex) để nhận diện các thực thể dựa trên danh sách đã được cung cấp Phương pháp này đặc biệt hiệu quả cho các thực thể có số lượng lớn, chẳng hạn như tên nguyên liệu hoặc chế độ dinh dưỡng.
ResponseSelector là một thành phần quan trọng trong việc xây dựng mô hình truy xuất phản hồi, giúp dự đoán chính xác phản hồi của bot từ một tập hợp các lựa chọn có sẵn.
Mô hình này, được áp dụng bởi Retrieval Actions, nhúng đầu vào của người dùng và nhãn phản hồi vào cùng một không gian, sử dụng kiến trúc và tối ưu hóa mạng thần kinh tương tự như DIETClassifier.
Sau khi hoàn tất việc xây dựng mô hình và tạo dữ liệu đào tạo cho NLU, bạn có thể tiến hành huấn luyện mô hình bằng lệnh `rasa train nlu` Khi quá trình huấn luyện kết thúc, bạn có thể kiểm tra khả năng hiểu và diễn giải các thông điệp đầu vào khác nhau thông qua công cụ `rasa shell nlu`.
Phân tích thiết kế hệ thống
Hình 5.1 Sơ đồ chức năng
1 Người dùng Người dùng là người bất kỳ truy cập vào chatbot có thể sử dụng các tính năng: tìm kiếm và xem thông tin của các món ăn
API nguyên liệu nấu ăn cung cấp dữ liệu chi tiết về các thành phần dinh dưỡng của nguyên liệu, giúp người dùng dễ dàng tra cứu thông tin cần thiết cho việc chế biến món ăn.
API thực đơn cung cấp thông tin chi tiết về danh sách món ăn, hỗ trợ người dùng lựa chọn thực đơn theo ngày hoặc theo nhu cầu ăn uống cá nhân.
API công thức cung cấp danh sách các công thức nấu ăn dựa trên các từ khóa liên quan đến món ăn, đồng thời cung cấp thông tin chi tiết về thành phần dinh dưỡng và nguyên liệu của từng món.
• Danh sách các use cases:
STT Tên Usecase Mô tả Usecase
Tìm kiếm theo nguyên liệu giúp người dùng dễ dàng tìm công thức nấu ăn bằng cách nhập tên nguyên liệu và kỹ thuật nấu.
2 Tìm kiếm theo thành phần dinh dưỡng
Là một trường hợp đặc biệt của “tìm kiếm thoe nguyên liệu”, Khi người dùng cung cấp thêm thành phần dinh dưỡng
3 Tìm kiếm theo tên món Cho phép người dùng sử dụng tên món gần chính xác để tìm ra công thức nấu ăn của món
4 Xem kết quả tìm kiếm Xem các kết quả tìm kiếm công thức món ăn bao gồm thành phần dinh dưỡng, cách nấu, nguyên liệu
5 Lưu trữ kết quả tìm kiếm Hệ thống lưu giữ tất cả thông tin về lần tìm kiếm gần nhất, cho phép người dùng xem lại
Hệ thống lưu trữ tất cả thông số về nguyên liệu và kỹ thuật nấu, giúp người dùng dễ dàng xem lại và hỗ trợ trong việc tìm kiếm công thức nấu ăn hiệu quả.
7 Lưu trữ thành phần dinh dưỡng
Hệ thống lưu lại tất cả các thông số về dinh dưỡng cho phép người dùng xem lại đồng thời hổ trợ trong việc tìm kiếm công thức
8 Tạo thực đơn tự động Cho phép người dùng có một thực đơn hợp lý trong ngày 1 cách nhanh chóng
9 Tạo thực đơn theo nhu cầu Cho phép người dùng có một thực đơn hợp lý trong ngày 1 cách nhanh chóng dự trên các yêu cầu về dinh dưỡng
10 Tìm kiếm thông tin kỹ thuật nấu ăn
Có thể hiện thị các thông tin lý giải về kỹ thuật nấu ăn
11 Hướng dẫn sử dụng chatbot Hướng dẫn người dùng cách để có thể hỏi chatbot về các chủ đề
12 Xem thành phần dinh dưỡng theo nguyên liệu
Cho phép người dùng xem các thành phần dinh dưỡng của nguyên liệu
5.4.2 Sơ đồ tuần tự (sequence diagram)
• Lưu trữ nguyên liệu và kỹ thuật nấu
Hình 5.2 Sơ đồ tuần tự Sơ đồ tuần tự lưu trữ nguyên liệu và kỹ thuật nấu
• Tìm kiếm Công Thức nấu ăn
Hình 5.3 Sơ đồ tuần tự tìm kiếm công thức nấu ăn
TIẾN HÀNH XÂY DỰNG
Xây dựng Intents
• Hệ thống chatbot bao gồm những intents như bên dưới
Intent Ý nghĩa / Chú thích greet Xác định lời chào
To create a successful food recipe, it is essential to identify key ingredients and cooking techniques Understanding the necessary cooking methods allows for clear explanations of each step involved Additionally, determining the nutritional components of a dish is crucial for health-conscious recipes When seeking recipes, it is important to specify requirements based on individual needs To maintain accuracy, requests to clear current nutritional settings or all current parameters should be made when necessary For a comprehensive understanding, accessing detailed information about the current dish is also vital.
Xác định các yêu cầu liên quan đến dinh dưỡng và thực đơn như sau: yêu cầu hiển thị thông tin dinh dưỡng cho món ăn đang lưu trữ (ask_for_meal_plan), tạo thực đơn trong ngày (ask_for_help), tư vấn cách sử dụng món ăn (get_last_food), hiển thị lại món ăn vừa xem (how_to_cook), hướng dẫn cách nấu món ăn đang chọn (get_ingredient_detail), hiển thị nguyên liệu nấu của món ăn hiện tại (help_get_recipe), hướng dẫn cách lấy công thức món ăn (help_set_nutrient), và hướng dẫn cách đặt yêu cầu dinh dưỡng cho món ăn cần tìm.
Xây dựng Entities
Hệ thống chatbot được xây dựng với các entity chính bao gồm: ingredient để lưu trữ thông tin về nguyên liệu nấu ăn, cook_technique để ghi nhận các kỹ thuật nấu, nutrient chứa các thành phần dinh dưỡng, và reset_nutrient_option để lựa chọn giá trị mặc định (min, max, all) Hệ thống cũng lưu giữ giá trị min và max cho các thành phần như calory và fat, đồng thời food_position giúp người dùng chọn công thức nấu ăn từ danh sách món ăn có sẵn Cuối cùng, nutrient_type lưu trữ thông tin về loại thành phần dinh dưỡng.
Các giao diện của chatbot
• Giao diện khi người dùng muốn biết cách sử dụng chatbot
Hình 6.1 Hướng dẫn lấy công thức
Hình 6.2 Hướng dẫn sử dụng chatbot
Hình 6.3 Hướng dẫn đặt thông số dinh dưỡng
• Giao diện khi người muốn biết thêm về các công thức nấu ăn
Hình 6.4 Giải thích kỹ thuật nấu ăn
• Giao diện người dùng khi muốn cài đặt món ăn dựa theo nguyên liệu và công thức nấu ăn
Hình 6.5 Cài đặt keyword để tìm kiếm món ăn
• Giao diện khi người dùng thay đổi thông số các thành phần dinh dưỡng trong món ăn
Hình 6.6 Cài đặt thông số dinh dưỡng cho món ăn
• Giao diện khi người muốn kiểm tra lại các thành phần món ăn
Hình 6.7 Hiển thị keyword hiện tại
• Giao diện khi người muốn kiểm tra lại thông số thành phần dinh dưỡng
Hình 6.8 Hiển thị thông số dinh dưỡng hiện tại
• Giao diện khi người muốn bắt đầu tìm kiếm món ăn dựa trên các thông số đã được cung cấp
Hình 6.9 Tìm kiếm công thức nấu ăn
• Giao diện khi người muốn bắt đầu tìm hiểu thông tin về món ăn trong danh sách món ăn được tìm kiếm
Hình 6.10 Hiển thông tin dinh dưỡng của món ăn
• Giao diện khi người muốn bắt đầu muốn coi thành phần nguyên liệu tạo nên món ăn
Hình 6.11 Hiển thị các nguyên liệu của món ăn
• Giao diện khi người muốn coi thông tin của nguyên liệu
Hình 6.12 Hiển thị thông tin chi tiết của nguyên liệu nấu ăn
• Giao diện khi người muốn coi lại danh sách tìm kiếm món ăn
Hình 6.13 Xem lại danh sách các món ăn đã tìm kiếm
• Giao diện khi người muốn tạo kế hoạch ăn trong 1 ngày
Hình 6.14 Tạo thực đơn trong ngày