Trong phần này, tùy theo tính chất của các mẫu hội thoại để xác định người dùng cần lấy thông tin gì từ cơ sở dữ liệu hay phải kết nối đến hệ thống khác. Vì
64
vậy, xây dựng Action rất quan trọng giúp chatbot trả lời linh hoạt, hiểu đúng yêu cầu người dùng và có khả năng tự động tìm kiếm thông tin để cung cấp cho người dùng.
Nhóm đã xây dựng các action như sau:
Hình 4.31: Các action cho chatbot
4.6. Kết chương
Trong chương này chúng tôi đã trình bày về kiến trúc của hệ thống, chi tiết về thiết kế và xây dựng API, giao diện cho ứng dụng mobile và xây dựng chatbot. Trong chương sau chúng tôi sẽ rút ra các kết luận và từ đó đề ra hướng phát triển trong tương lai.
65
Chương 5. KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 5.1. Đánh giá
5.1.1. Thuận lợi
- Giảng viên hướng dẫn tận tình hỗ trợ và định hướng nhóm nghiên cứu và thực
hiện đề tài.
- Đã có kiến thức và kinh nghiệm làm ứng dụng Flutter trước đó.
- Có các Api về công thức nấu ăn, dữ liệu đa dạng phong phú
5.1.2. Khó khăn
- Gặp khó khăn khi có ít kinh nghiệm code python và xây dựng chatbot nên tốn
nhiều thời gian và xảy ra nhiều lỗi.
- Lần đầu xây dựng hệ thống mạng xã hội nên gặp nhiều thiếu sót.
- Tìm hiểu về các dữ liệu xoay quanh vấn đề nấu ăn tốn nhiều thời gian.
5.2. Kết quả đạt được
Thông qua việc nghiên cứu và tìm hiểu đề tài, nhóm đã phát triển và triển khai thành công một ứng dụng mạng xã hội kết nối người yêu thích nấu ăn. Tuy hệ thống còn ít chức năng và chưa nhiều chủ đề. Nhưng hướng phát triển của hệ thống vẫn còn rất nhiều, vẫn còn nhiều tính năng để khai thác và áp dụng sau này. Một số kết quả đạt được sau:
Về mặt nghiên cứu:
- Hiểu rõ thêm về cách xây dựng một chatbot thông minh
- Củng cố và có thêm kinh nghiệm xây dựng ứng dụng mobile với Flutter, kinh
nghiệm sử dụng MongoDb để lưu trữ dữ liệu.
- Có thêm có kiến thức hữu ích về nấu ăn và dinh dưỡng trong món ăn.
Về sản phẩm:
66 của mạng xã hội.
- Chức năng chatbot hỗ trợ trả lời được các chủ đề đặt ra với hai bộ dữ liệu tiếng anh và tiếng việt.
5.3. Hướng phát triển
- Hoàn thiện hơn nữa các chức năng đã có.
- Hoàn thiện luồng xử lý đồng bộ nhiều user và thông báo.
- Xây dựng thêm nhiều chủ đề hơn về nấu ăn.
- Thêm chức năng kiểm duyệt.
- Xây dựng chức năng xem video ngắn
- Xây dựng môi trường nhắn tin với nhau.
- Tối ưu hóa code để tăng tốc độ tương tác.
- Tối ưu hóa CSDL hợp lý hơn.
67
TÀI LIỆU THAM KHẢO TÀI LIỆU TIẾNG ANH
[1] “Rasa Framework” [Online]. Available: https://rasa.com/
[2] “Rasa docs” https://rasa.com/docs/
[3] “Intents & Entities: Understanding the Rasa NLU Pipeline” [Online]. Available:
https://rasa.com/blog/intents-entities-understanding-the-rasa-nlu-pipeline/
[4] “Stack Overflow” https://stackoverflow.com/
[5] “Mongoose docs” https://mongoosejs.com/docs/
[6] “MongoDb” https://www.mongodb.com/
[7] “NodeJs docs” https://nodejs.org/en/docs/
[8] “Flutter docs” https://docs.flutter.dev/
[9] “The official package repository for Dart and Flutter apps.” https://pub.dev/
TÀI LIỆU TIẾNG VIỆT
[10] “Cook Pad” [Online]. Available: https://cookpad.com/vn
[11] “Cooky” [Online]. Available: https://www.cooky.vn/
[12] “BLOC pattern trong flutter” [Online]. Available: https://viblo.asia/p/bloc- pattern-trong-flutter-Qbq5QQ7R5D8
[13] “Kiến trúc 3 layer trong NodeJs” [Online]. Available: https://viblo.asia/p/ap- dung-kien-truc-3-layer-architecture-vao-project-nodejs-RQqKLqEmZ7z
[14] “Chatbot hoạt động như thế nào” [Online]. Available:
https://bigdatauni.com/tin-tuc/tong-quan-ve-chatbot-phan-2-chatbot-hoat-dong-nhu- the-nao.html
[15] “Xử lý ngôn ngữ tự nhiên trong phát triển chatbot” [Online]. Available:
http://hoctructuyen123.net/xu-ly-ngon-ngu-tu-nhien-trong-phat-trien-mot-he-thong- chatbot/
68
PHỤ LỤC 1: FLUTTER Flutter là gì ?
Flutter là một nền tảng hỗ trợ phát triển cho các ứng dụng đa nền cho hệ iOS và Android do tập đoàn Google phát triển. Nó được sử dụng vô cùng phổ biến cho nhiệm vụ tạo ra các ứng dụng gốc dành cho Google.
Flutter thường bao gồm 2 thành phần chính quan trọng như sau:
• Một SDK (Software Development Kit): Đây là một bộ sưu tập bao gồm các
công cụ có thể hỗ trợ cho người dùng có thể phát triển được các ứng dụng nền của mình. Những điều này thường bao gồm các công cụ có trình để biên dịch mã thành các mã gốc dành riêng cho hệ điều hành iOS và Android.
• Một Framework (UI Library based on widgets): Mỗi một tập hợp những thành
phần giao diện của người dùng đều có thể thực hiện tái sử dụng vô cùng dễ dàng nên người sử dụng có thể cá nhân hóa tùy theo nhu cầu riêng của bản thân mình.
Một số đặc điểm ?
- Các ứng dụng được xây dựng với Flutter hầu như không thể phân biệt với những ứng dụng được xây dựng bằng cách sử dụng Android SDK, cả về giao diện và hiệu suất. Hơn nữa, với những tinh chỉnh nhỏ, chúng có thể chạy trên thiết bị iOS.
- Chạy ở 60 fps, giao diện người dùng được tạo ra với Flutter thực thi tốt hơn
nhiều so với những ứng dụng được tạo ra với các framework phát triển đa nền tảng khác chẳng hạn như React Native và Ionic.
- Fast Development: Tính năng Hot Reload hoạt động trong milliseconds để hiện thị giao diện tới bạn. Sử dụng tập hợp các widget có thể customizable để xây dựng giao diện trong vài phút. Ngoài ra Hot Reload còn giúp thêm các tính năng, fix bug tiết kiệm thời gian hơn mà không cần phải thông qua máy ảo, máy android hoặc iOS.
69
diện của Flutter vô cùng đẹp mắt theo phong cách Material Design và Cupertino, hỗ trợ nhiều các APIs chuyển động, smooth scrolling..
- Native Performance: Các widget của flutter kết hợp các sự khác biệt của các
nền tảng ví dụ như scrolling, navigation, icons, font để cung cấp một hiệu năng tốt nhất tới iOS và Android.
Kiến trúc hệ thống ?
Hình 0.1: Kiến trúc hệ thống Flutter Hệ thống flutter được chia thành 3 phần:
• Embedder (tầng thấp nhất)
• Engine
70
Embedder: Đầu vào được cung cấp bởi một trình nhúng của nền tảng đó, này
phối hợp với hệ điều hành cơ bản để truy cập các dịch vụ như trợ năng, hiển thị giao diện và đầu vào input.
Embedder được viết bằng ngôn ngữ dành riêng cho nền tảng, chẳng hạn như Java và C ++ cho Android, Objective-C / Objective-C ++ cho iOS và macOS, và C ++ cho Windows và Linux.
Flutter được nhúng vào ứng dụng hiện có dưới dạng mô-đun hoặc dưới dạng một framework hoàn chỉnh.
Engine layer: Tầng engine được viết bằng C / C ++, và nó đảm nhận đầu vào,
đầu ra, các yêu cầu mạng và xử lý các translation khi một khung hình cần được vẽ. Flutter sử dụng Skia làm công cụ rendering engine.
Framework layer: Tầng framework là tầng mà phần lớn người lập trình dành
thời gian để xây dựng. Flutter framework cung cấp các component được viết bằng ngôn ngữ dart:
• Rendering
• Widgets
• Material and Cupertino
Tại sao nên sử dụng Flutter ?
• Thể hiện cùng một UI trên nhiều nền tảng
• Ứng dụng có hiệu năng cao
• Sử dụng ngôn ngữ lập trình Dart đơn giản và dễ học
• Một cộng đồng phát triển mạnh mẽ. Tài liệu hướng dẫn đầy đủ và mọi thứ đều
rất chi tiết với các ví dụ dễ hiểu.
• Phát triển ứng dụng nhanh: Tính năng hot reload của Flutter giúp bạn thử nghiệm và xây dựng app dễ dàng, nhanh chóng. Khung giao diện này còn hỗ trợ người dùng thêm tính năng, sửa lỗi nhanh hơn so với các công cụ khác.
71
• Cung cấp UI đẹp và biểu cảm tốt: Flutter thoả mãn khả năng sáng tạo của người dùng với các widget built-in đẹp mắt theo Material Design và Cupertino (iOS-flavor). API của Flutter được đánh giá cao về khả năng chuyển động phong phú, scroll tự nhiên, mượt mà và có thể tự nhận thức được nền tảng.
• Hỗ trợ rất nhiều widget khác nhau: Flutter luôn chứa sẵn hai bộ widget được
thiết kế theo hai nền tảng di động nổi tiếng nhất. Material Design widgets dựa theo thiết kế của Google cho Android và Cupertino widgets dựa theo thiết kế của Apple cho iOS.
72
PHỤ LỤC 2: MONGODB MongoDB là gì ?
MongoDB là một chương trình cơ sở dữ liệu mã nguồn mở được thiết kế theo kiểu hướng đối tượng trong đó các bảng được cấu trúc một cách linh hoạt cho phép các dữ liệu lưu trên bảng không cần phải tuân theo một dạng cấu trúc nhất định nào. Chính do cấu trúc linh hoạt này nên MongoDB có thể được dùng để lưu trữ các dữ liệu có cấu trúc phức tạp và đa dạng và không cố định (hay còn gọi là Big Data). So sánh giữa RDBMS và MongoDB: RDBMS MongoDB Database Database Table Collection Tuple/Row Document column Field
Table Join Embedded Documents
Primary Key Primary Key (mặc định là _id) Bảng 0.1: Bảng so sánh RDBMS và MongoDB
Một số đặc điểm ?
Mongodb được sử dụng rất nhiều và được đánh giá vô cùng cao nhờ sở hữu nhiều đặc điểm nổi trội sau:
• Mongodb chính là một database hướng tài liệu, nên khi đó mọi dữ liệu sẽ được
lưu trữ trong document theo kiểu JSON thay vì lưu theo dạng bảng như CSDL quan hệ nên việc truy cập vấn sẽ nhanh chóng hơn.
73
• Với các CSDL quan hệ thì chúng ta sẽ có khái niệm bảng, khi đó các cơ sở dữ
liệu quan hệ sẽ sử dụng các bảng để có thể lưu trữ dữ liệu, còn với Mongodb thì bạn cần phải sử dụng khái niệm collection thay cho bảng.
• Mongodb chính là một hệ quản trị cơ sở dữ liệu mà trong đó mã nguồn mở là
CSDL thường thuộc NoSql và được hàng triệu người sử dụng.
• So với RDBMS thì trong Mongodb collection thường sẽ ứng với table, còn
document sẽ tương ứng với row. MongoDB sẽ sử dụng các document để thay cho row trong RDBMS.
• Với các collection có trong Mongodb thường sẽ được cấu trúc rất linh hoạt
nên nó cho phép các dữ liệu được lưu trữ mà không cần phải tuân theo bất kỳ một cấu trúc nhất định nào.
• Các thông tin có liên quan đều sẽ được lưu trữ cùng với nhau để người dùng
có thể truy cập truy vấn nhanh hơn thông qua các ngôn ngữ truy vấn Mongodb.
Hình 0.1: Đặc điểm của MongoDb
Tại sao nên sử dụng MongoDb ?
• Document-oriented – Vì MongoDB là cơ sở dữ liệu kiểu NoSQL, thay vì có
74
này làm cho MongoDB rất linh hoạt và thích ứng với các yêu cầu và tình hình thực tế.
• MongoDB hỗ trợ tìm kiếm theo field, range queries và regular expression searches. Các truy vấn có thể được thực hiện để trả về các trường cụ thể trong document.
• Indexes có thể được tạo để cải thiện hiệu suất của các tìm kiếm trong MongoDB. Bất kỳ trường nào trong document MongoDB đều có thể được index.
• Trong MongoDB có một khái niệm cluster là cụm các node chứa dữ liệu giao
tiếp với nhau, khi muốn mở rộng hệ thống ta chỉ cần thêm một node với vào cluster.
75
PHỤ LỤC 3: CHATBOT Chatbot là gì ?
Chatbot là một cụm từ không còn xa lạ đối với nền công nghệ phát triển hiện nay trên thế giới. Về cơ bản, ChatBot là một chương trình máy tính tiến hành cuộc trò chuyện thông qua nhắn tin nhanh, nó có thể tự động trả lời những câu hỏi hoặc xử lý tình huống.
Ngày nay ChatBot thường được sử dụng, truy cập thông qua các cửa sổ popup của ứng dụng, trang web và trên các nền tảng nhắn tin tức thời của nhiều tổ chức, chẳng hạn như: Google Assistant, Facebook Messenger, Line, Viber, WeChat, Skype… phục vụ cho các mục đích thực tế khác nhau bao gồm: giải trí, nghiên cứu, dịch vụ khách hàng, quảng bá sản phẩm hoặc thu thập thông tin và nhiều lĩnh vực khác.
Do được thiết kế để mô phỏng cách trò chuyện với con người, các hệ thống chatbot thường phải điều chỉnh và thử nghiệm liên tục. Tuy nhiên mặc dù một số ứng dụng chatbot sử dụng các phương pháp phân loại từ (word-classification), xử lý ngôn ngữ tự nhiên (NLP) và trí tuệ nhân tạo (AI), nhưng một số ứng dụng khác chỉ cần quét các từ khóa chung và tạo phản hồi bằng các cụm từ phổ biến thu được từ thư viện hoặc cơ sở dữ liệu liên quan là đã có thể tạo ra một chatbot hoàn chỉnh.
76
Hình 0.1: Minh họa về chatbot
Cơ chế hoạt động ?
Chatbot tương tác với con người qua âm thanh hoặc văn bản và sử dụng các nền tảng để giao tiếp với bot. Phần mà các lập trình viên cần phát triển bao gồm:
Hình 0.2: Cơ chế hoạt động của chatbot
• Translator: Dịch yêu cầu của người dùng giúp máy tính hiểu được yêu
cầu cần thực hiện. Mục đích và các thực thể có trong yêu cầu được trích xuất để làm cơ sở cho xác định câu trả lời. Các kỹ thuật xử lý ngôn ngữ tự nhiên được áp dụng để phân tích ngữ nghĩa yêu cầu của người dùng.
77
• Processor: Xử lý yêu cầu của người dùng dựa vào dữ liệu được Translator
cung cấp. Câu trả lời sẽ được truy xuất từ cơ sở dữ liệu của chatbot. Tùy thuộc vào kỹ thuật sử dụng sẽ cho mức độ chính xác của câu trả lời khác nhau.
• Responsor: Nhận output từ Processor và trả lời lại cho người dùng. Các phương pháp xây dựng chatbot
So sánh trùng khớp mẫu câu (Pattern matchers): Các chatbot hoạt động bằng cách sử dụng phương pháp này để tìm kiếm các mẫu câu có trong câu hỏi của người dùng và xem có khớp với các câu hỏi đã được lưu trữ trong cơ sở dữ liệu của hệ thống để đưa ra câu trả lời phù hợp nhất. Phương pháp Pattern matchers dựa theo cấu trúc tiêu chuẩn của ngôn ngữ lập trình Artificial Intelligence Markup Language (AIML) là một ví dụ. AIML là một dạng của XML định nghĩa các quy tắc để kết hợp các mẫu câu hỏi và xác định câu trả lời cho nó.
Sử dụng thuật toán phân lớp (Classification algorithms): Giả sử trong trường hợp có rất nhiều câu hỏi riêng biệt với ý định khác nhau đến từ người dùng, mà chatbot chỉ có thể phản hồi khi tất cả câu hỏi này đã được thiết lập, huấn luyện cho chatbot với các kịch bản đối thoại đã được lưu trữ trong cơ sở dữ liệu. Sự phức tạp sẽ gia tăng khi chatbot cố gắng kết nối các mẫu câu và tạo nên một cấu trúc phân tầng trong hệ thống. Một giải pháp được sử dụng là áp dụng các thuật toán phân lớp vào chatbot để giảm việc phân loại quá nhiều các câu hỏi. Các câu hỏi sẽ được phân lớp theo các điều kiện khác nhau và tạo ra một cấu trúc dễ quản lý hơn, tăng độ chính xác cho các phản hồi được chatbot tới cho người dùng.
Ví dụ: giả sử tập hợp các câu hỏi, tin nhắn tương tác của người dùng cùng ý định, chủ đề đã được phân lớp trong các lớp cụ thể và sẽ có nhiều lớp được tạo. Nếu người đưa ra một câu mới so với cơ sở dữ liệu hiện có, chatbot sẽ đối sánh câu này với các câu đã tập hợp trong các lớp. Dựa vào điểm số tương tự của sự so sánh, chatbot sẽ tìm ra lớp chứa câu tương tự và đưa ra phản hồi chính xác đến người dùng dựa vào lựa chọn câu thích hợp trong lớp đó. Multinomial Naive
78
Bayes là một thuật toán phân loại văn bản được sử dụng phổ biến trong xử lý ngôn ngữ tự nhiên dựa trên tính toán xác suất áp dụng định lý Bayes.
Thuật toán này thuộc nhóm học có giám sát. Với phương pháp này, điểm số chỉ thể hiện độ tin cậy và sự liên quan nhất định của các câu hỏi, tin nhắn mà người dùng đưa ra đối với một lớp cụ thể chứ không đảm bảo độ chính xác hoàn