TRẦN ANH DŨNG Thời gian thực hiện: từ ngày 12/03/2021 đến ngày 23/06/2021 Sinh viên thực hiện: Nghiên cứu sâu hơn 1 ChatBot framework Wit.ai và các công nghệ liên quan Node.js, Express.j
Trang 1ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ PHẦN MỀM
NGUYỄN NGỌC ĐĂNG
BÁO CÁO ĐỒ ÁN TÌM HIỂU VỀ CHATBOT FRAMEWORK VÀ XÂY
DỰNG ỨNG DỤNG MINH HỌA
ĐỒ ÁN 1 – SE121.L21
Trang 2TP HỒ CHÍ MINH, 2021ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ PHẦN MỀM
NGUYỄN NGỌC ĐĂNG - 18520557
BÁO CÁO ĐỒ ÁN TÌM HIỂU VỀ CHATBOT FRAMEWORK VÀ XÂY
DỰNG ỨNG DỤNG MINH HỌA
ĐỒ ÁN 1 – SE121.L21
GIẢNG VIÊN HƯỚNG DẪN THS PHAN TRUNG HIẾU THS TRẤN ANH DŨNG
Trang 3TP HỒ CHÍ MINH, 2021
Trang 4ĐẠI HỌC QUỐC GIA TP HỒ CHÍ
MINH
TRƯỜNG ĐẠI HỌC
CÔNG NGHỆ THÔNG TIN
CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT
NAM Độc Lập - Tự Do - Hạnh Phúc
TP HCM, ngày 30 tháng 03 năm 2021
ĐỀ CƯƠNG CHI TIẾT
Tên đề tài: Tìm hiểu ChatBot framework và xây dựng ứng dụng minh họa
Cán bộ hướng dẫn: THS PHAN TRUNG HIẾU, THS TRẦN ANH DŨNG
Thời gian thực hiện: từ ngày 12/03/2021 đến ngày 23/06/2021
Sinh viên thực hiện:
Nghiên cứu sâu hơn 1 ChatBot framework (Wit.ai) và các công nghệ liên quan
(Node.js, Express.js, React, Javascript) để xây dựng một ứng dụng minh họa
Xây dựng ứng dụng minh họa có tính thực tiễn trong cuộc sống, giúp ích người dùng trong việc tiếp cận thông tin
Nhóm hi vọng với nền tảng lý thuyết đã được truyền đạt trong quá trình học tập trên giảng đường cũng như khả năng tự tìm hiểu thông tin, sẽ có thể hoàn thiện được các mục tiêu đã đề ra
Phương pháp thực hiện: Dự án cá nhân, sinh viên đảm nhiệm tất cả các vai trò trong
việc tìm hiểu, thiết kế và xây dựng ứng dụng minh họa cũng như biên soạn báo cáo phục vụ cho đồ án này
Kết quả mong đợi: Sau khi xác định đề tài và định hướng nghiên cứu, nhóm hi vọng
Trang 5Về mặt chức năng, ứng dụng có thể thực hiện trả lời các câu hỏi của người dùng về một số các vấn đề khác nhau mà người dùng muốn biết
Đối với nhà phát triển, ứng dụng trở thành cơ hội để áp dụng các công nghệ khác nhau
đã được nghiên cứu, tìm hiểu trong quá trình thực hiện đồ án, với trung tâm là
ChatBot framework
Về mặt thẩm mỹ, xây dựng một giao diện giao tiếp với ChatBot thân thiện, đơn giản
và dễ nhìn, tạo thiện cảm cho người sử dụng
Về mặt logic, tạo được liên kết giữa kết quả xử lý yêu cầu người dùng của ChatBot framework và logic ứng dụng để trả về người dùng thông tin mà người dùng muốn thấy
Về mặt bảo mật, thực hiện bảo mật các API key được sử dụng trong quá trình phát triển hệ thống, tránh trường hợp hệ thống bị lạm dụng cho các mục đích khác
Kế hoạch thực hiện:
Với thời gian thực hiện từ 12/03/2021 đến 26/06/2021, nhóm chia khung thời gian này
ra thành các giai đoạn lớn với các phần việc nhỏ hơn có thể thực hiện theo thứ tự bất
kì miễn là nằm trong giới hạn cho phép của giai đoạn đó, các giai đoạn này như sau:
Giai đoạn 1: Khảo sát hiện trạng, tìm hiểu sơ bộ về ChatBot cũng như các ChatBot framework được sử dụng rộng rãi hiện nay
Giai đoạn 2: Tìm hiểu sâu hơn về các ChatBot framework, nhận biết các ưu nhược điểm giữa các framework với nhau, xác định hướng xây dựng ứng dụng minh họa và chọn ra ChatBot framework phù hợp cũng như các công nghệ liên quan để hỗ trợ xây dựng ứng dụng này
Giai đoạn 3: Thiết kế hệ thống bao gồm kiến trúc, kịch bản, đặc tả các API được dùng trong ứng dụng
Giai đoạn 4: Xây dựng giao diện cho ứng dụng minh họa, huấn luyện cho ChatBot xử
lý yêu cầu của người dùng và xây dựng server lấy dữ liệu cho việc trả lời câu hỏi của ChatBot
Giai đoạn 5: Hoàn thiện hệ thống bằng việc liên kết giao diện với ChatBot framework
và hệ thống lấy dữ liệu trả lời, đưa vào thử nghiệm, hoàn thiện báo cáo đồ án
Giai đoạn (Thời gian
Trang 6- Tìm hiểu chung về ChatBot
- Tìm hiểu sơ bộ về các ChatBot framework đang được sử dụng rộng rãi hiện tại
Giai đoạn 2
(26/03/2021 –
09/04/2021)
- Tìm hiểu sâu hơn giữa các ChatBot framework
- So sánh các hướng tiếp cận xây dựng ChatBot
- Xác định phương án xây dựng ứng dụng minh họa
- Tìm hiểu các công nghệ liên quan để xây dựng ứng dụng minh họa
Giai đoạn 3
(09/04/2021 –
14/05/2021
- Thiết kế kiến trúc hệ thống
- Thiết kế giao diện
- Thiết kế kịch bản giao tiếp
- Thiết kế API truy vấn thông tin
- Hoàn thiện đặc tả thiết kế hệ thốngGiai đoạn 4
(14/05/2021 –
3/06/2021)
- Cài đặt giao diện
- Huấn luyện ChatBot xử lý yêu cầu
- Cài đặt hệ thống truy vấn thông tinGiai đoạn 5 (3/06/2021
– 23/06/2021) - - Hoàn thiện hệ thốngVận hành thử nghiệm
Xác nhận của CBHD
(Ký tên và ghi rõ họ tên)
PHAN TRUNG HIẾU
TP HCM, ngày 30 tháng 03 năm 2021
Sinh viên
(Ký tên và ghi rõ họ tên)
NGUYỄN NGỌC ĐĂNG
Trang 7MỤC LỤC
1 TỔNG QUAN VỀ ĐỀ TÀI 16
1.1 Giới thiệu về đề tài 16
1.1.1 Chatbot là gì 16
1.1.2 Cái nhìn chung về nhu cầu tra cứu thông tin 17
1.1.3 Lý do lựa chọn đề tài 18
1.2 Khảo sát hiện trạng 18
1.2.1 CleverBot – Chatbot trò chuyện nổi tiếng nhất thế giới 21
1.2.2 Google – Nền tảng tra cứu thông tin lớn nhất thế giới 22
1.3 Đối tượng nghiên cứu 22
1.4 Phạm vi nghiên cứu 23
1.5 Phương pháp nghiên cứu 23
1.6 Nhiệm vụ của đề tài 23
2 CƠ SỞ LÝ THUYẾT 24
2.1 Tổng quan về ECMAScript 24
2.1.1 Khái niệm 24
2.1.2 Cấu trúc 25
2.1.3 Ưu điểm 25
2.2 Tổng quan về Node.js 26
2.2.1 Khái niệm 26
Trang 82.2.2 Cấu trúc 27
2.2.3 Ưu điểm 29
2.3 Tổng quan về Express.js 29
2.3.1 Khái niệm 29
2.3.2 Cấu trúc 30
2.3.3 Ưu điểm 31
2.4 Tổng quan về React 32
2.4.1 Khái niệm 32
2.4.2 Cấu trúc 32
2.4.3 Ưu điểm 33
2.5 Tổng quan về MongoDB 35
2.5.1 Khái niệm 35
2.5.2 Cấu trúc 35
2.5.3 Ưu điểm 36
3 KẾT QUẢ TÌM HIỂU 36
3.1 Kết quả tìm hiểu về Chatbot 36
3.1.1 Cách xây dựng một Chatbot 36
3.1.2 Ứng dụng của Chatbot 45
3.2 Kết quả tìm hiểu về Chatbot Framework 46
3.2.1 Khái niệm Chatbot Framework 46
3.2.2 Bảng mô tả sơ lược các Chatbot Framework thông dụng 47
3.3 Kết quả tìm hiểu về Wit.ai 54
3.3.1 Giới thiệu về Wit.ai 54
3.3.2 Ưu điểm của Wit.ai 54
Trang 93.3.4 Mô tả sơ lược cách sử dụng Wit.ai 65
4 THIẾT KẾ HỆ THỐNG ỨNG DỤNG MINH HỌA 76
4.1 Xác định yêu cầu 76
4.1.1 Sơ đồ ca sử dụng 76
4.1.2 Đặc tả ca sử dụng 76
4.2 Thiết kế kiến trúc hệ thống 91
4.3 Thiết kế mô hình dữ liệu 93
4.3.1 Sơ đồ lớp 93
4.3.2 Đặc tả lớp dữ liệu 93
4.4 Thiết kế luồng xử lý 105
4.4.1 Luồng xử lý chức năng đăng nhập 105
4.4.2 Luồng xử lý chức năng đăng kí 106
4.4.3 Luồng xử lý chức năng thu phí 107
4.4.4 Luồng xử lý chức năng giao tiếp với Chatbot 108
4.5 Thiết kế module truy vấn thông tin 108
4.5.1 Truy vấn thông tin thời tiết 108
4.5.2 Truy vấn thông tin tỉ giá tiền tệ 109
4.5.3 Truy vấn thông tin dịch thuật 110
4.5.4 Truy vấn giá cổ phiếu 111
4.5.5 Truy vấn thông tin dịch COVID-19 112
4.6 Thiết kế giao diện 113
4.6.1 Màn hình chính 116
4.6.2 Màn hình đăng nhập 118
4.6.3 Màn hình đăng kí 119
4.6.4 Màn hình liệt kê giá dịch vụ 120
Trang 104.6.5 Màn hình giao tiếp với Chatbot 121
4.6.6 Màn hình nhập thông tin thanh toán 122
4.6.7 Màn hình xem lịch sử thanh toán 123
4.6.8 Màn hình xem thông tin người dùng 124
4.6.9 Màn hình danh sách bài viết 125
5 CÀI ĐẶT HỆ THỐNG 126
5.1 Quy trình huấn luyện Chatbot 126
5.1.1 Phương thức huấn luyện Chatbot 126
5.1.2 Quá trình huấn luyện Chatbot 126
5.2 Quy trình cài đặt giao diện 127
5.2.1 Phương thức cài đặt giao diện 127
5.2.2 Quá trình cài đặt giao diện 127
5.3 Quy trình cài đặt hệ thống xử lý 128
5.3.1 Phương thức cài đặt hệ thống xử lý 128
5.3.2 Quá trình cài đặt hệ thống xử lý 129
5.4 Quy trình cài đặt cơ sở dữ liệu 129
5.4.1 Phương thức cài đặt cơ sở dữ liệu 129
5.4.2 Quá trình cài đặt cơ sở dữ liệu 130
6 KẾT QUẢ CÀI ĐẶT HỆ THỐNG 130
6.1 Giới thiệu hệ thống 130
6.2 Sơ lược tính năng hệ thống 131
6.3 Đánh giá độ hoàn thiện hệ thống 134
7 KẾT LUẬN 135
7.1 Đánh giá kết quả làm việc 135
Trang 117.1.2 Khó khăn 136
7.2 Kết quả đạt được 136
7.2.1 Ưu điểm 136
7.2.2 Nhược điểm 136
7.3 Hướng phát triển 137
8 PHỤ LỤC 137
8.1 Tài liệu tham khảo 137
8.2 Danh mục công nghệ được sử dụng 138
DANH MỤC HÌNH Hình 1.1 Dữ liệu Google Trend cho cụm từ "chatbot" trong vòng 5 năm trở lại đây .19 Hình 1.2 Một giao diện của Cleverbot 21
Hình 1.3 Giao diện tra cứu thông tin của Google 22
Hình 2.1 Hình mô tả cách mà Node.js phân bố công việc cho các tiểu trình trong hệ thống 28
Hình 3.1 Cấu trúc đầy đủ của một Chatbot 43
Hình 3.2 Màn hình tạo ứng dụng mới của Wit.AI 66
Hình 3.3 Màn hình Understanding, nơi khởi đầu của việc thiết kế Chatbot 66
Hình 3.4 Cách thức chọn Intent 67
Hình 3.5 Chọn Intent sau khi đã tạo mới 67
Hình 3.6 Chọn đoạn văn bản làm Entity 68
Hình 3.7 Chọn loại Entity cho đoạn văn bản 68
Hình 3.8 Màn hình chọn Trait 69
Hình 3.9 Tạo giá trị mới cho Trait vừa tạo 69
Hình 3.10 Một Utterance được cài một cách hoàn chỉnh, sẵn sàng để train 70
Trang 12Hình 3.11 Màn hình quản lý Intent 70
Hình 3.12 Màn hình quản lý Entity 71
Hình 3.13 Màn hình quản lý Trait 71
Hình 3.14 Màn hình quản lý Utterance 72
Hình 3.15 Màn hình cài đặt cấu hình hệ thống 72
Hình 3.16 Ví dụ gửi yêu cầu đến Wit.AI bằng Postman 73
Hình 3.17 Màn hình xem thống kê lưu lượng truy cập 75
Hình 3.18 Màn hình Live Utterance 75
Hình 4.1 Sơ đồ ca sử dụng 76
Hình 4.2 Sơ đồ kiến trúc hệ thống 91
Hình 4.3 Sơ đồ lớp của hệ thống 93
Hình 4.4 Sơ đồ luồng xử lý chức năng đăng nhập 105
Hình 4.5 Sơ đồ luồng xử lý chức năng đăng ký 106
Hình 4.6 Sơ đồ luồng xử lý chức năng thu phí 108
Hình 4.7 Sơ đồ luồng xử lý chức năng giao tiếp với Chatbot 108
Hình 4.8 Sơ đồ luồng xử lý truy vấn thông tin thời tiết 109
Hình 4.9 Sơ đồ luồng xử lý truy vấn thông tin tỉ giá ngoại tệ 110
Hình 4.10 Sơ đồ luồng xử lý dịch thuật 111
Hình 4.11 Sơ đồ luồng xử lý truy vấn giá cổ phiếu 112
Hình 4.12 Sơ đồ luồng xử lý truy vấn thông tin dịch COVID-19 113
Hình 4.13 Sơ đồ màn hình 114
Hình 4.14 Giao diện màn hình chính (Chưa đăng nhập) 116
Hình 4.15 Giao diện màn hình chính (Đã đăng nhập) 117
Hình 4.16 Giao diện màn hình đăng nhập 118
Trang 13Hình 4.18 Giao diện màn hình liệt kê giá dịch vụ 120
Hình 4.19 Giao diện màn hình giao tiếp với Chatbot 121
Hình 4.20 Giao diện màn hình nhập thông tin thanh toán 122
Hình 4.21 Giao diện màn hình xem lịch sử thanh toán 123
Hình 4.22 Giao diện màn hình xem thông tin người dùng 124
Hình 4.23 Giao diện màn hình danh sách bài viết 125
Hình 6.1 Chức năng cơ bản của Chatbot 131
Hình 6.2 Các chức năng khác của Chatbot 132
Hình 6.3 Hỏi Chatbot về tinhg dịch COVID-19 132
Hình 6.4 Chức năng đổi giọng nói thành tin nhắn 133
Hình 6.5 Chức năng tra cứu thông tin sử dụng Wikidata 133
Hình 6.6 Màn hình đăng nhập 134
DANH MỤC BẢNG Bảng 2.1 Bảng danh sách các thành phần Middleware được tích hợp vào Express.JS30 Bảng 3.1 Bảng danh sách các thành phần trong một Chatbot 43
Bảng 3.2 Bảng so sánh 10 Chatbot Framework được dùng nhiều nhất hiện tại 47
Bảng 3.3 Bảng danh sách thuộc tính trong một Entity 55
Bảng 3.4 Bảng danh sách thuộc tính trong một Intent 55
Bảng 3.5 Bảng Intent được xây dựng sẵn trong Wit.AI 56
Bảng 3.6 Bảng danh sách thuộc tính của một Entity Parameter 60
Bảng 3.7 Bảng Entity được xây dựng sẵn trong Wit.AI 60
Bảng 3.8 Bảng danh sách thuộc tính của Trait 64
Bảng 3.9 Bảng Trait được xây dựng sẵn trong Wit.AI 64
Trang 14Bảng 4.1 Bảng mô tả thành phần chính trong hệ thống 92
Bảng 4.2 Bảng thuộc tính lớp User 94
Bảng 4.3 Bảng phương thức lớp User 94
Bảng 4.4 Bảng thuộc tính lớp Service 94
Bảng 4.5 Bảng phương thức lớp Service 95
Bảng 4.6 Bảng thuộc tính lớp Session 95
Bảng 4.7 Bảng phương thức lớp Session 95
Bảng 4.8 Bảng thuộc tính lớp Bill 96
Bảng 4.9 Bảng phương thức lớp Bill 96
Bảng 4.10 Bảng thuộc tính lớp PendingBill 96
Bảng 4.11 Bảng phương thức lớp PendingBill 97
Bảng 4.12 Bảng thuộc tính lớp ConfirmBill 97
Bảng 4.13 Bảng phương thức lớp ConfirmBill 98
Bảng 4.14 Bảng thuộc tính lớp Context 98
Bảng 4.15 Bảng phương thức lớp Context 99
Bảng 4.16 Bảng thuộc tính lớp ActiveContext 99
Bảng 4.17 Bảng phương thức lớp ActiveContext 99
Bảng 4.18 Bảng thuộc tính lớp Message 100
Bảng 4.19 Bảng phương thức lớp Message 100
Bảng 4.20 Bảng thuộc tính lớp Option 100
Bảng 4.21 Bảng phương thức lớp Option 101
Bảng 4.22 Bảng thuộc tính lớp InformationKey 101
Bảng 4.23 Bảng phương thức lớp InformationKey 101
Bảng 4.24 Bảng thuộc tính lớp Utterance 102
Trang 15Bảng 4.26 Bảng thuộc tính lớp Intent 102
Bảng 4.27 Bảng phương thức lớp Intent 103
Bảng 4.28 Bảng thuộc tính lớp Entity 103
Bảng 4.29 Bảng phương thức lớp Entity 103
Bảng 4.30 Bảng thuộc tính lớp Trait 104
Bảng 4.31 Bảng phương thức lớp Trait 104
Bảng 4.32 Bảng danh sách màn hình trong hệ thống 114
Bảng 4.33 Bảng danh sách các thành phần trong màn hình chính 117
Bảng 4.34 Bảng danh sách thành phần trong màn hình đăng nhập 118
Bảng 4.35 Bảng danh sách thành phần trong màn hình đăng ký 119
Bảng 4.36 Bảng danh sách thành phần trong màn hình liệt kê giá dịch vụ 120
Bảng 4.37 Bảng danh sách thành phần trong màn hình giao tiếp với Chatbot 121
Bảng 4.38 Bảng danh sách thành phần trong màn hình nhập thông tin thanh toán .122
Bảng 4.39 Bảng danh sách thành phần trong màn hình lịch sử thanh toán 123
Bảng 4.40 Bảng danh sách thành phần trong màn hình xem thông tin người dùng 124
Bảng 4.41 Bảng danh sách thành phần trong màn hình danh sách bài viết 125
Bảng 5.1 Bảng tác vụ huấn luyện Chatbot 126
Bảng 5.2 Bảng tác vụ cài đặt giao diện 127
Bảng 5.3 Bảng tác vụ cài đặt hệ thống xử lý 129
Bảng 5.4 Bảng tác vụ cài đặt cơ sở dữ liệu 130
Bảng 6.1 Bảng đánh giá độ hoàn thiện hệ thống 134
Bảng 8.1 Bảng danh sách công nghệ được sử dụng trong đồ án 138
Trang 16Đa số các chatbot được hiện thực hóa dưới dạng một cửa số nhắn tin hoặc một trợ lý
ảo truy cập được thông qua mạng máy tính Chúng có thể được phân loại dựa vào lĩnh vực sử dụng như sau:
quan đến công việc, …)
Trang 17Nhìn chung thì Chatbot vẫn còn là một loại hình ứng dụng còn rất nhiều tiềm năng để khai phá mặc dù không yêu cầu cao về trình độ để có thể khởi đầu
1.1.2 Cái nhìn chung về nhu cầu tra cứu thông tin
Chúng ta không thể phủ nhận rằng một trong những lợi thế của mạng Internet là khả năng tiếp cận thông tin nhanh và chính xác Trong các nguồn lực phát triển xã hội, thông tin được coi là nguồn tài nguyên quan trọng nhất Thông tin là tri thức, là sức mạnh và là bí quyết góp phần định hướng đúng, giúp lãnh đạo quản lý ra các quyết định chính xác hơn Mọi hoạt động kinh tế - xã hội đều liên quan tới thông tin
Nhu cầu tra cứu thông tin là đòi hỏi khách quan của con người (cá nhân, nhóm, xã hội) đối với việc tiếp nhận và sử dụng thông tin để duy trì hoạt động sống Khi đòi hỏi
về thông tin trở lên cấp thiết thì nhu cầu tra cứu thông tin xuất hiện Thông tin trở thành nhu cầu của con người, là một dạng của nhu cầu tinh thần, nhu cầu bậc cao của con người Nhu cầu nảy sinh trong quá trinh thực hiện các loại hoạt động khác của conngười, thông tin về đối tượng hoạt động, về môi trường và các phương tiện hoạt động
là yếu tố quan trọng tạo nên hiệu quả hoạt động của con người Bất kỳ hoạt động nào muốn có kết quả tốt thì cũng cần phải có thông tin Mọi người càng tham gia nhiều hoạt động khác nhau thì nhu cầu tin của con người càng phong phú hơn, tham gia hoạtđộng phức tạp thì nhu cầu tin càng trở lên sâu sắc hơn
Ta lấy ví dụ về việc tra cứu thông tin như sau: Buổi tối một ngày, A đang nghĩ về việcchạy bộ buổi sáng hôm sau A sẽ có nhu cầu tra cứu thời tiết của ngày hôm sau và A biết được rằng thời tiết ngày mai khả năng cao sẽ mưa A đổi kế hoạch của mình cho sáng hôm sau sang việc uống cà phê và đọc tin tức Sáng hôm sau, A đang đọc tin tức trên một trang mạng Có một thông tin quan trọng hiện lên: Theo chỉ đạo của thủ tướng chính phủ, người dân được khuyến khích ở nhà để phòng chống đại dịch C Vậy
là A nghĩ về việc thay vì ra ngoài đường để chạy bộ, có thể mua một máy chạy bộ không phải là một ý tưởng tồi Vì thế A lại tìm kiếm thông tin về một máy chạy bộ giávừa phải và có thể được chuyển đến trong thời gian ngắn Như ta có thể thấy, chỉ với một công việc ban đầu đó là chạy bộ, A đã thực hiện tra cứu từ thông tin thời tiết, đến thông tin thời sự, rồi lại đến thông tin sản phẩm máy chạy bộ Những thông tin này có thể không thật sự cần thiết cho A trong việc có chạy bộ hay không Nhưng ở đây ta
Trang 18cũng có thể thấy, với việc sử dụng mạng Internet mà việc tiếp cận thông tin cũng trở nên cực kì dễ dàng và nó giúp ích cho A trong việc lựa chọn cách thức chạy bộ cho bản thân mà không gây ra bất tiện cho bản thân hay những người xung quanh Bởi vậynhu cầu tra cứu thông tin, đặc biệt là thông qua mạng Internet là một nhu cầu không thể thiếu trong quá trình làm việc cũng như giải trí của con người
1.1.3 Lý do lựa chọn đề tài
Như đã được đề cập trong các phần trước, nhu cầu tra cứu thông tin của con người đang ngày một gia tăng Cũng như nền tảng công nghệ Chatbot đang dần được hoàn thiện, dẫn đến sự ra đời của các Chatbot Framework (sẽ được đề cập kĩ hơn trong phần sau) Nhóm đã đi tới việc tìm hiểu về các Chatbot Framework và xây dựng ứng dụng minh họa với mục tiêu là sử dụng một Chatbot Framework để xây dựng một hệ thống trả lời tự động, cung cấp thông tin cho người sử dụng Lý do cụ thể bao gồm:
cứu thông tin
Hiện nay, Chatbot là một ứng dụng được sử dụng rộng rãi dưới đủ quy mô cũng như
độ phức tạp Dưới đây là một số sô liệu cụ thể để khẳng định điều này
Trang 19Hình 1.1 Dữ liệu Google Trend cho cụm từ "chatbot" trong vòng 5 năm trở lại đây
Dữ liệu Google Trend cho cụm từ “Chat bot” có xu hướng tăng dần theo từng năm và hiện tại đang ở mức khá ổn định
việc kinh doanh của họ (theo như Accenture)
năng của tổ chức trong việc xử lý yêu cầu của khách hàng bằng mạng lưới liên kết với những con bot khác Chúng có thể đem lại sự chăm chút đến từng cá nhân đối với từng đối tượng tiếp xúc với trang web (theo như Accenture)
Về mặt trải nghiệm, ta có những số liệu sau
(theo như Chatbots Journal)
nghiệm không tốt (theo như OpenText)
(theo như SuperOffice)
hàng của họ sử dụng Chatbot (theo như Lauren Foye of Juniper Research, via Chatbots Magazine)
Vể ảnh hưởng đến nhân viên chăm sóc khách hàng truyền thống, ta có những số liệu sau
Trang 20 64% thời gian AI Chatbot giao tiếp với khách hàng sẽ dùng để giải quyết các vấn đề phức tạp (theo như Salesforce 2)
nhắc đến nhất của Chatbot (about one in 10)
Về ý thích của người dùng, ta có những số liệu sau
khách hàng (theo như Salesforce)
tiếp xúc với một nhãn hàng (theo như Drift)
trong 5 năm tới (theo như Salesforce)
Chatbot (theo như Forbes)
điện từ đã tăng 50% kể từ năm 2012 (theo như Forrester)
giao tiếp với một thực thể kinh doanh thông qua Facebook Messenger bởi khả năng mà họ được hồi âm là cao hơn so với những phương thức khác (theo như Facebook Business)
Về tiềm năng phát triển của Chatbot, ta có những số liệu sau:
lên 9.4 tỷ USD vào năm 2024 với với tỉ lệ tăng trưởng hàng năm là 29.7% (theo như Business Insider)
hiện một cách chủ động bởi các hệ thống được điều hành bởi AI và các hệ thống tích hợp thông minh khác (theo như Gartner)
Như vậy ta có thể thấy rằng Chatbot là một trong những nhân tố nổi bật trong quá trình phát triển của các doanh nghiệp và tiềm năng của nó trong tương lai là rất lớn
Trang 21Để khảo sát rõ hơn tình trạng thực tiễn của Chatbot cũng như nhu cầu tra cứu thông tin, ta khảo sát hai đối tượng sau
1.2.1 CleverBot – Chatbot trò chuyện nổi tiếng nhất thế giới
Hình 1.2 Một giao diện của Cleverbot
Cleverbot là một phần mềm chatbot sử dụng thuật toán trí tuệ nhân tạo để thiết lập một cuộc trò chuyện với con người Nó được tạo ra bởi nhà khoa học nghiên cứu về
AI tên là Rollo Carpenter Người tiền nhiệm của nó là Jabberwacky Dự án được bắt đầu vào năm 1996 và chính thức được đưa lên mạng vào năm 1997 Trong khoảng thập kỉ đầu tiên trong sự tồn tại của nó, Cleverbot học cách giao tiếp thông qua việc lắng nghe hàng nghìn cuộc trò chuyện giữa ông Carpenter với những người đồng sự của ông Sau khi phiên bản web của Cleverbot được ra mắt, con số này đến nay đã lên tới 150 triệu
Một số thành tích nổi bật của Cleverbot bao gồm: Trong bài thử Turing được tổ chức chính thức tại ngày hội Techniche 2011 tại Học viện công nghệ Guwahati Ấn Độ Cleverbot đạt được điểm tỉ lệ 59.3% số người tham gia đồng ý đây là con người, đạt được với 1334 phiếu bầu, so với tỉ lệ 63.3% mà người thật Số điểm trên 50.5% được xét là đạt bài kiểm tra này
Trang 22Thay vì sử dụng một kịch bản hoặc các quy định cho trước, Cleverbot sử dụng logic
mở để tìm kiếm một cách phản hồi phù hợp từ dữ liệu chính là các cuộc trò chuyện trước đó của Cleverbot với người dùng
1.2.2 Google – Nền tảng tra cứu thông tin lớn nhất thế giới
Hình 1.3 Giao diện tra cứu thông tin của Google
Google là nền tảng công cụ tìm kiếm lớn nhất thế giới hiện tại, với 92% lưu lượng yêucầu tìm kiếm diễn ra tại đây và cũng biến Google trở thành trang web được truy cập nhiều nhất thế giới Tuy nhiên cái ta quan tâm ở đây là Google Knowledge Graph Đây là dịch vụ giúp Google thu thập thông tin từ nhiều nguồn khác nhau và cung cấp thông tin đó cho người dùng ngay tại trang hiện kết quả tìm kiếm Thông tin đó có thể
là về một cá nhân, tập thể, thời tiết, chứng khoán, v.v Và nó cũng trở thành nền tảng
để các trợ lý ảo như Google Home có thể trả lời câu hỏi của người dùng
1.3 Đối tượng nghiên cứu
Đồ án này hướng đến nghiên cứu các đối tượng sau
o MongoDB
Trang 23o Người có nhu cầu tra cứu thông tin
o Người có nhu cầu trò chuyện với một phong cách giống người
1.4 Phạm vi nghiên cứu
Ứng dụng YourChatStarter được viết chủ yếu bằng ngôn ngữ lập trình Javascript (Chuẩn ECMAScript 6) Ngoài ra nhóm phát triển sẽ tiến hành xây dựng hệ thống frontend để tạo môi trường giao tiếp với người dùng sử dụng React, phần chatbot cũngmột số tính năng khác sẽ được phát triển chạy trên Node.js và giao tiếp với frontend
sử dụng Express.js, Dữ liệu được quản lý bằng MongoDB Hệ thống được cài đặt bằng Visual Studio Code
1.5 Phương pháp nghiên cứu
Nhóm đã sử dụng các phương pháp nghiên cứu:
1.6 Nhiệm vụ của đề tài
Đề tài: “Tìm hiểu ChatBot framework và xây dựng ứng dụng minh họa” sẽ bao gồm 2 nhiệm vụ chính
o Tìm hiểu chung về Chatbot và cách thức giải quyết các vấn đề trong việc thiết kế một Chatbot
Trang 24o Tìm hiểu về các Chatbot Framework phổ biến, phân tích được điểm mạnh cũng như điểm yếu của chúng, từ đó chon ra Framework phù hợp
để nghiên cứu kĩ hơn
o Tìm hiểu sâu hơn về một Chatbot Framework, cụ thể về các thành phấn chính cấu tạo nên Framework, cách cài đặt, sử dụng
o Trình bày kết quả tìm hiểu trong báo cáo này
o Đăng kí: Đăng kí tài khoản để sử dụng trong hệ thống
o Đăng nhập: Đăng nhập vào tài khoản để sử dụng hệ thống
o Xem thông tin người dùng
o Mua gói cao cấp của hệ thống (Bao gồm tính năng thanh toán online)
o Quản lý đơn hàng
o Màn hình giao tiếp với Chatbot (mô phỏng một cửa sổ chat)
năng
o Chào hỏi
o Cung cấp thông tin về thời tiết
o Cung cấp thông tin về tỉ giá
o Thực hiện phép toán
o Dịch thuật theo yêu cầu
o Thu thập thông tin để cá nhân hóa phản hồi
o Phản hồi để xây dựng một chuỗi hội thoại
o Phản hồi các trường hợp đầu vào không như dự định
Trang 25Vào cuối năm 1995 trên thế giới xuất hiện một ngôn ngữ kịch bản được phát triển bởi Brendan Eich (nhân viên của Netscapce) có tên là Mocha và chỉ ngay sau đó một thời gian nó lại được đổi tên thành LiveScript và cuối cùng là Javascript (tên hiện tại) Và tiếp đó vào tháng 3 năm 1996 trình duyệt Netscape Navigator 2.0 ra đời và đã hỗ trợ Javascript Sau đó Microsoft cũng cho ra đời một ngôn ngữ tương tự có tên là JScript
để cạnh tranh với Netscape và nó đã bắt đầu được hỗ trợ từ internet Explorer 3.0 (8 - 1996)
Sau đó Netscape đã chuyển Javascript đến ECMA International để làm công tác chuẩnhóa và viết đặc tả Cái tên ECMAScript đã được hình thành từ đây
Về cơ bản thì ECMAScript chính là chuẩn của ngôn ngữ Javascript ta sẽ sử dụng trong dự án này
2.1.2 Cấu trúc
ECMAScript là một ngôn ngữ lập trình hướng đối tượng để thực hiện các tác vụ tính toán cũng như thao tác với các đối tượng điện toán trong một môi trường vật chủ ECMAScript được định nghĩa ở đây không có ý định trở nên tự chủ về mặt thực hiện tác vụ tính toán Và đúng là như vậy, không có một yếu tố nào trong đặc tả này liên quan đến việc xử lý dữ liệu đầu ra hoặc đầu vào của tác vụ tính toán Thay vào đó, nó được kì vọng rằng môi trường điện toán chứa chương trình ECMAScript sẽ không chỉ cung cấp đối tượng tính toán và các cơ sở hạ tầng được miêu tả trong đặc tả của ECMAScript (Ví dụ các kiểu dữ liệu, chuẩn đầu ra, đầu vào, v.v.) mà còn cung cấp một số đối tượng điện toán đặc trưng của môi trường vật chủ đó, với mô tả và hành vi vượt quá định nghĩa của ngôn ngữ này ngoại trừ mục đích thể hiện rằng chúng có thể cung cấp một số tính chất nhất định có thể được truy cập hoặc một số hàm có thể đượcgọi bởi chương trình viết bằng ECMAScript
2.1.3 Ưu điểm
ECMAScript là bố quy chuẩn ngôn ngữ scripting trên trình duyệt web và Javascript chính là hiện thân của ECMAScript Lợi ích của việc dùng ECMAScript tương đương với sử dụng Javascript, bao gồm:
Trang 26 Xử lý logic bên phía máy khách đem lại trải nghiệm người dùng nhanh hơn Bắt nguồn từ việc bớt đi nhu cầu phải gọi từ mày chủ Ngay cả với sự tồn tại cảu máy chủ thì với bản chất của Javascript là bất động bộ thì việc liên lạc với máy chủ sẽ diễn ra đằng sau trình duyệt và không làm ảnh hưởng tới việc ngườidùng tương tác với trang web
dùng lên các trang web Giờ đây nó đang làm điều đó với nhiều loại ứng dụng hơn cả Ngày nay những framework như Vue.js, Angular hay React đã đem trảinghiệm người dùng lên tầm cao mới
càng ngày nhà phát triển phải thiết kế ứng dụng của mình phù hợp với nhiều loại thiết bị với nhiều kích thước khác nhau Kết hợp HTML5, CSS3 cũng Javascript cho phép nhà phát triển đạt được điều đó chỉ với một tập mã nguồn
của Javascript dễ hiểu vầ linh hoạt cho người mới bắt đầu Đơn giản hóa quy trình phát triển các phần mềm phức tạp hơn bằng cách cho phép nhà phát triển đơn giản hóa tổ chức mã nguồn ứng dụng Nhiều framework cũng như thư việncũng được sinh ra để hỗ trợ lập trình viên
sàng giúp đỡ người mới bắt đầu với những khó khăn học có thể gặp phải
2.2 Tổng quan về Node.js
2.2.1 Khái niệm
Nodejs là một nền tảng (Platform) phát triển độc lập được xây dựng ở trên Javascript Runtime của Chrome (V8 Engine) mà chúng ta có thể xây dựng được các ứng dụng mạng một cách nhanh chóng và dễ dàng mở rộng
Node.js được xây dựng và phát triển từ năm 2009, bảo trợ bởi công ty Joyent, trụ sở tại California, Hoa Kỳ
Phần Core bên dưới của Nodejs được viết hầu hết bằng C++ nên cho tốc độ xử lý và hiệu năng khá cao
Trang 27Nodejs tạo ra được các ứng dụng có tốc độ xử lý nhanh, realtime thời gian thực.
Nodejs áp dụng cho các sản phẩm có lượng truy cập lớn, cần mở rộng nhanh, cần đổi mới công nghệ, hoặc tạo ra các dự án Startup nhanh nhất có thể
2.2.2 Cấu trúc
Có nhiều hiểu nhầm cho rằng node.js chạy ứng dụng của nó chỉ trên một luồng Thực
tế không hề như vậy và nó cũng giúp cho ta thấy được điểm mạnh của Node.js trước những framework khác
Như ta đã biết, Node.js về cơ bản là trình chạy Javascript được xây dựng trên engine V8 của chrome Đồng nghĩa với việc, Node.js dựa trên kiến trúc đơn luồng của
Javascript Vì vậy, mỗi khi có một yêu cầu từ máy khách, nó được xử lý bởi một luồn chính Vòng lặp sự kiện chính là thành phần chính giúp cho Node.js có thể chạy các tác vụ I/O mà thường gây ra trạng thái block lên ứng dụng (Ví dụ như đọc file, lấy dữ liệu từ server, …) theo một cách mà không gây ra trạng thái block Nó liên tục theo dõi trạng thái của các tác vụ bất đồng bộ (Ví dụ như kiểm tra lời gọi hàm callback) và
di chuyển chúng vào hàng đợi thực thu khi mà chúng đã hoàn thành Nó thực hiện việc này trên luồn ứng dụng chính mà ta đã đề cập tới
Một điều đáng chú ý ở đây đó là dù chỉ có một luồng ứng dụng chính, còn tồn tại nhiều luồng ứng dụng phụ trợ khác tại tầng lõi của hệ thống giúp cho Node.js có thể tối ưu hóa các hoạt động liên quan đến đọc ghi tại ổ đĩa hoặc các hoạt động bất đồng
bộ qua mạng máy tính Nhóm các luồng này thường được gộp chung lại gọi là worker pool
Trang 28Hình 2.4 Hình mô tả cách mà Node.js phân bố công việc cho các tiểu trình trong hệ thống
Vòng lặp sự kiện có thể đảm bảo cho các tác vụ xử lý cơ bản, nhưng đối với các tác
vụ I/O bất đồng bộ liên quan đến các module như fs (Xử lý đọc ghi tệp tin) hoặc crypto (Mã hóa, nặng về CPU), nó có thể san sẻ gánh nặng sang worker pool tại tầng nhân của hệ thống Worker pool được cài đặt bằng thư viện lõi libuv và có khả năng khởi tạo và quản lý nhiều luồng ứng dụng cùng một lúc nếu cần thiết Những luồn ứngdụng này có thể chạy động lập đối với những tác vụ được giao riêng cho chúng một cách đồng bộ và trả phản hồi về vòng lặp sự kiện khi đã sẵn sàng Trong khi những luồn ứng dụng này làm việc với những tác vụ được giao, vòng lặp sự kiện có thể chạy như bình thường, đồng thời đáp ứng các yêu cầu khác từ máy khách Khi mà luồng ứng dụng khác đã hoàn thành công việc, chúng có thể trả kết quả thực hiện về vòng lặp sự kiện, nó sẽ được đặt lại về hàng đợi xử lý để được thực thi hoặc trả về cho máy khách
Ý niệm đằng sau kiến trúc cho quy trình xử lý này có thể được trỏ về sự thật rằng dướimột lượng tải thông thường của một trang web, một luồng chính có thể thực thi cũng như mở rộng tốt hơn nhiều so với kiến trúc “một yêu cầu một luồng” thông thường Như là một hệ quả, Node.js trở thành lựa chọn thường xuyên của nhiều người vì lợi thế của nó về mặt tốc độ cũng như khả năng mở rộng Một điểm khó khăn ở đây đó là việc hiệu suất có thể bị ảnh hưởng bởi độ phức tạp tức thời, các tác vụ nặng về mặt bộ nhớ như nhân ma trận cho xử lý hình ảnh, khoa học dữ liệu hay ứng dụng máy học sẽ dẫn đến việc luồng ứng dụng chính bị chặn, làm cho máy chủ trở nên chậm chạp,
Trang 29worker mà nhà phát triển có thể tận dụng để tạo ra ứng dụng Node.js đa luồng một cách hiệu quả
2.2.3 Ưu điểm
Điểm mạnh đáng chú ý của Node.js có thể được biểu diễn thông qua danh sách dưới đây
Không đồng bộ: Tất cả các API của NodeJS đều không đồng bộ
(none-blocking), nó chủ yếu dựa trên nền của NodeJS Server và chờ đợi Server trả dữliệu về Việc di chuyển máy chủ đến các API tiếp theo sau khi gọi và cơ chế thông báo các sự kiện của Node.js giúp máy chủ để có được một phản ứng từ các cuộc gọi API trước (Realtime)
Chạy rất nhanh: NodeJ được xây dựng dựa vào nền tảng V8 Javascript
Engine nên việc thực thi chương trình rất nhanh
Đơn luồng nhưng khả năng mở rộng cao: Node.js sử dụng một mô hình
luồng duy nhất với sự kiện lặp cơ chế tổ chức sự kiện giúp các máy chủ để đápứng một cách không ngăn chặn và làm cho máy chủ cao khả năng mở rộng nhưtrái ngược với các máy chủ truyền thống mà tạo đề hạn chế để xử lý yêu cầu Node.js sử dụng một chương trình đơn luồng và các chương trình tương tự có thể cung cấp dịch vụ cho một số lượng lớn hơn nhiều so với yêu cầu máy chủ truyền thống như Apache HTTP Server
Không đệm: NodeJS không đệm bất kì một dữ liệu nào và các ứng dụng này
chủ yếu là đầu ra dữ liệu
Có giấy phép: NodeJS đã được cấp giấy phép bởi MIT License.
2.3 Tổng quan về Express.js
2.3.1 Khái niệm
Expressjs là một framework được xây dựng trên nền tảng của Nodejs Nó cung cấp các tính năng mạnh mẽ để phát triển web hoặc mobile Expressjs hỗ trợ các method HTTP và midleware tạo ra API vô cùng mạnh mẽ và dễ sử dụng
Một số chức năng chính của Express.js bao gồm:
Trang 30 Define router cho phép sử dụng với các hành động khác nhau dựa trên phương thức HTTP và URL.
Bảng 2.1 Bảng danh sách các thành phần Middleware được tích hợp vào Express.JS
cũng như điền thông tin cookie vào yêu cầu HTTP
express.cookieParser
nguồn (CORS) với cài đặt đa dạng
NA
triển
express.errorHandler
Trang 31
serve-static Cung cấp file tĩnh express.static
để render trang web
Components của công cụ này được phát triển bởi Facebook Nó được ra mắt như một công cụ JavaScript mã nguồn mở vào năm 2013 Hiện tại, nó đã đi trước các đối thủ chính như Angular và Bootstrap, hai thư viện JavaScript bán chạy nhất thời bấy giờ
2.4.2 Cấu trúc
Nguyên tắc thiết kế của React có thể được thể hiện thông qua các tính chất sau đây
phần Các thành phần viết bởi những con người khác nhau nên làm việc nhịp
Trang 32nhàng với nhau Điều quan trọng là nhà phát triển có thể thêm chức năng vào một thành phần bất kì mà không tạo nên hiệu ứng sóng nước lên toàn bộ tập mãnguồn
thực hiện nếu đội ngũ phát triển react nhận thất nhiều thành phần đang cài đặt một chức năng cụ thể một cách khó tương thích và thiếu hiệu quả Và họ sẵn sàng làm việc đó một cách triệt để, đó là bởi vì họ tin rằng nâng mức độ trừu tượng hóa có thể đem lại lợi ích thiết thực lên toàn bộ hệ sinh thái Sự chuẩn hóa State, phương thức lifecycle cũng như sự kiện đa trình duyệt là những ví
dụ rõ ràng hơn cả
phẩm tại Facebook Và trong khi React chịu ảnh hưởng của một số hướng tiếp cận còn chưa thực sự phổ biến như lập trình hướng hàm, giữ cho framework dễtiếp cận đến một tập hợp rộng lớn các nhà phát triển ở những trình độ và kĩ năng khác nhau chính là mục tiêu rõ ràng của dự án này
tốt Nó sẽ sớm trở nên cồng kềnh và chậm chạp Thay vào đó, sự ổn ddingj được thể hiện trong việc “Chức năng này được sử dụng rộng rãi trong môi trường thực tế, và khi có thứ gì đó thay đổi, phải có một con đường rõ ràng (tự động nữa thì càng tốt) để thích ứng với thay đổi đó”
cho phép chuyển đổi dần dần được đánh giá cao Ngay cả Facebook vẫn còn tồn tại một lượng lớn mã nguồn không phải là React Điều quan trọng là bất kì đội ngũ thiết kế sản phẩm nào đều có thể bắt đầu sử dụng React cho một chức năng nhỏ thay vì việc viết lại toàn bộ tập mã nguồn đánh cược vào React
nổi tiếng đi theo hướng “đẩy” dữ liệu khi mà tính toán được thực hiện ngay khi
dữ liệu mới được cập nhật Ngược lại, React sử dụng hướng tiếp cận “kéo” dữ liệu và việc tính toán được trì hoãn đến khi cần thiết React phải là một thư viện
xử lý dữ liệu Nó là một thư viện để xây dựng giao diện người dùng Điều đó
Trang 33cho phép react đứng vào một vị trí mà nó có thể biết được việc tính toán nào là cần thiết và liên quan vào lúc này
điều quan trọng
có được vụn bánh mì để theo dấu sai sót trong mã nguồn Đối với React, props,state là những mẩu vụn bánh mì đó
cung cấp một số tùy chính toàn bụ ở tầng build, ví dụ như việc tách biệt cấu hình môi trường phát triển và môi trường thực
2.4.3 Ưu điểm
Các ưu điểm cảu React có thể được kể đến như sau:
hơn React cho phép bạn viết component một cách sạch sẽ và có tính module hóa cao, phân rã dự án thành các thành phần riêng biệt Cho phép sử dụng lại
mã nguồn, rất tốt trong việc tăng năng suất làm việc của nhà phát triển
dễ bảo trì và cập nhật do bản chất module hóa của nó Sản phẩm làm ra từ React cực kì linh hoạt và có thể được mở rộng một cách dễ dàng Điều này có thể dễ dàng tiết kiệm thời gian cũng như tiền bạc trong dài hạn
ban đầu, các chức năng chính của thư viện, như DOM ảo hoặc render phía máy chủ, cho phép bạn tạo ra ứng dụng quy mô lớn với hiệu năng rất cao
việc render tại backend, dự án dùng React được tối ưu hóa tối ưu cho các công
cụ tìm kiếm Hơn nữa, với tốc độ cao và hiệu năng ổn định đã được nêu ở phía trên, đóng góp vào việc SEO, và cũng cung cấp một trải nghiệm tốt hơn cho người dùng
miễn phí và rộng cửa cho tất cả mọi người Hơn nữa, nó có một hệ sinh thái
Trang 34giàu có, bao gồm những công cụ phải có như Flux hay Redux cũng như
Node.js tại backend với một số lượng lớn các thư viện nguồn mở phục vụ mục đích khác nhau
được hỗ trợ và bảo trì bởi một công ty với nhiều hơn 1000 người đóng góp độc lập trên toàn cầu Nhờ vào cộng đồng đầy nhiệt huyết này cũng như nền tảng chắc chắn của một tập đoàn công nghệ lớn, React sẽ được đảm bảo là đáng tin cậy và bắt kịp với công nghệ mới
triển ứng dụng di động, dựa trên React, Vì vậy, việc nhà phát triển quen với React hoàn toàn có thể sử dụng React Native để xây dựng trải nghiệm người dùng trên di động một cách nhanh chóng và thân thiện Hơn nữa, bạn có thể dụng một phần ứng dụng react của bạn trong ứng dụng React Native (chủ yếu trong hần logic nghiệp vụ) Điều này giúp cải thiện tốc độ phát triển
Với cơ sở dữ liệu quan hệ chúng ta có khái niệm bảng, các cơ sở dữ liệu quan hệ (như MySQL hay SQL Server ) sử dụng các bảng để lưu dữ liệu thì với MongoDB chúng
ta sẽ dùng khái niệm là collection thay vì bảng
So với hệ quản trị cơ sở dữ liệu quan hệ thì trong MongoDB collection ứng với table, còn document sẽ ứng với row , MongoDB sẽ dùng các document thay cho row trong
hệ quản trị cơ sở dữ liệu quan hệ
Các collection trong MongoDB được cấu trúc rất linh hoạt, cho phép các dữ liệu lưu trữ không cần tuân theo một cấu trúc nhất định
Trang 35Thông tin liên quan được lưu trữ cùng nhau để truy cập truy vấn nhanh thông qua ngôn ngữ truy vấn MongoDB
2.5.2 Cấu trúc
MongoDB được thiết kế để đáp ứng những nhu cầu của phần mềm hiện đại với một nền tảng công nghệ cho phép bạn sử dụng những thành phần sau:
việc với dữ liệu
ngoan
phép bạn chuẩn bị ứng dụng của mình cho tương lai cũng như hạn chế việc bị
bó buộc với phía cung cấp dịch vụ
Với những khả năng này, bạn có thể xây dựng một nền tảng điều hành dữ liệu thông minh, được bảo trợ bởi MongoDB
2.5.3 Ưu điểm
Các ưu điểm của MongoDB được liệt kê dưới đây:
hệ thống
Trang 36 Ngôn ngữ truy vấn gần như mạnh bằng SQL
thì MongoDB được xây dựng cho đám mây
Ví dụ cơ bản nhất có thể được mô tả như sau:
Người dùng: Bạn khỏe không?
Chatbot: Tôi khỏe
Ở đây đầu vào của người dùng là “Bạn khỏe không?” và phản hồi của Chatbot là “Tôi khỏe” Ta có thể lập trình cho hệ thống xử lý đầu vào của Chatbot so khớp dữ liệu đầuvào với chuỗi “Bạn khỏe không?” và nếu kết quả so khớp là đúng, trả về xâu ký tự
“Tôi khỏe” Rõ ràng cách làm này bộc lộ nhiều vấn đề và ta sẽ đi lần lượt qua những vấn đề đó cũng như cách giải quyết chúng
Trước hết lấy ví dụ sau
Người dùng: Bạn có khỏe không?
Ở đây rõ ràng người dùng có ý định hỏi giống như câu “Bạn khỏe không?” Tuy nhiên Chatbot sẽ không thể nhận ra được ý nghĩa của câu này nếu nó tiếp tục thực hiện so khớp với xâu “Bạn khỏe không?” (Kết quả so khớp sẽ là sai) Hướng giải quyết vấn đềnày có thể bao gồm việc chỉ sử dụng từ khóa nhất định (Ví dụ như cụm từ “khỏe không”) và so khớp nó với bất kì chuỗi con nào trong câu hoặc sử dụng các thuật toán tìm chuỗi mờ (Fuzzy String Search) bằng cách chia các từ trong câu ra một chuỗi các
từ, chia các câu từ khóa ra thành một chuỗi các từ khác Sau đó tính toán khoảng cách Levenshtein để xác định khoảng cách nhỏ nhất hoặc khoảng cách nằm trong một giới
Trang 37hạn nhất định để thỏa mãn điều kiện so khớp với từ khóa Trong thực tế ta có thể kết hợp cả 2 phương pháp này để tăng tỉ lệ Chatbot có thể xác định được từ khóa
Tiếp theo, ta xét ví dụ sau
Người dùng: Bạn khỏe không?
Chatbot: Tôi khỏe
Người dùng: Bạn khỏe không?
Chatbot: Tôi khỏe
Người dùng: Bạn khỏe không?
Chatbot: Tôi khỏe
Ta dễ dàng thấy được vấn đề ở đây đó là: với đầu vào giống nhau, Chatbot sẽ trả về kết quả giống nhau Điều này làm mất đi tính tự nhiên của một Chatbot và người dùng
sẽ phàn nàn về việc phản hồi của nó là quá thô cứng (Canned response) Để giải quyếtvấn đề này Ta có thể tạo ra một tập hợp các phản hồi mà Chatbot có thể lựa chọn nếu
từ khóa tương ứng được so khớp Để tránh tình trạng lặp lại, ta có thể lưu phản hồi trước đó của Chatbot đối với từ khóa này và tránh phản hồi đó nếu gặp lại từ khóa đó lần tới
Tiếp đến, ta xét trường hợp Chatbot được thiết kế như sau
Từ khóa: “Tên bạn là gì?”
Phản hồi: “Tên tôi là Chatbot A”
Từ khóa: “Bạn là gì?”
Phản hồi: “Tôi là một Chatbot”
Xét đoạn hội thoại sau
Người dùng: Tên của bạn là gì?
Chatbot: Tên tôi là Chatbot A
Ở ví dụ trên, đầu vào của người dùng sẽ trùng với cả 2 từ khóa “Tên bạn là gì?” và
“Bạn là gì?” Phản hồi nào mà Chatbot nên lựa chọn? Rõ ràng phải là phản hồi của từ khóa “Tên bạn là gì?” Vì vậy ta cần phải có cách để xếp hạng các từ khóa sao cho Chatbot có thể chọn ra phản hồi phù hợp nhất Cách đơn giản nhất ở đây sẽ là lựa chọn từ khóa có độ dài lớn nhất
Trang 38Tiếp tục với ví dụ dưới đây
Người dùng: Bạn không hề có thật!
Chatbot: Vậy bạn nghĩ tôi không hề có thật?
Người dùng: Bạn chẳng biết cái gì cả
Chatbot: Vậy bạn nghĩ tôi chẳng biết cái gì cả?
Ta thấy người dùng đưa ra 2 đầu vào rất khác nhau về mặt mục đích và khá chắc chắn rằng Chatbot của chúng ta không thể lường trước được những đầu vào này Tuy nhiên với một vài kĩ thuật chuyển đổi ngôi từ và phản hồi theo khuôn mẫu, ta có thể giúp cho Chatbot đối phó được với những câu này một cách thuyết phục hơn Một ví dụ về cách xử lý có thể như sau
tương ứng với một chuỗi bất kì (wildcard), ta có thể đưa nguyên câu nói của người dùng vào chuỗi wildcard này
Ví dụ như nếu ta tìm thấy từ “Bạn”, “mày”, “anh”, “chị”, …(Đại từ nhân xưng ngôi thứ hai) biến đổi các từ đó thành các đại từ nhân xưng ngôi thứ nhất (“Tôi”, “mình”) hoặc ngược lại, nếu tìm thấy đại từ nhân xưng ngôi thứ nhất, biến đổi nó thành đại từ nhân xưng ngôi thứ hai
Cần phải lưu ý rằng ta không nên lạm dụng cách làm này bởi vì những phản hồi như thế này thường ít khi tạo ra được giá trị trong cuộc trò chuyện giữa người và Chatbot
Trang 39Nếu sử dụng nhiều người dùng sẽ dễ dàng nhận ra khuôn mẫu của Chatbot và ta lại rơivào trường hợp trả lời rập khuôn, thô cứng
Ta lại tiếp tục với ví dụ sau đây
Từ khóa: “Bạn là ai”
Phản hồi: “Tôi là Chatbot A”
Xét đoạn hội thoại sau
Người dùng: Bạn là ai?
Chatbot: Tôi là Chatbot A
Người dùng: Bạn là ai mà dám lên mặt với tôi?
Chatbot: Tôi là Chatbot A
Người dùng: Ca sĩ yêu thích của bạn là ai?
Chatbot: Tôi là Chatbot A
Người dùng: Tôi biết bạn là ai Rất vui được gặp bạn
Chatbot: Tôi là Chatbot A
Vấn đề xảy ra ở đây chính là việc Chatbot không xác định được vị trí của từ khóa có thể làm ảnh hưởng đến ý nghĩa của đầu vào Cách giải quyết ở đây sẽ là thêm vào kí hiệu để Chatbot biết được từ khóa đó nằm ở đâu trong câu thì sẽ dùng phản hồi đó Với chuỗi ví dụ trên, ta có thể kí hiệu rằng nếu chuỗi “Bạn là ai” được tìm thấy ở đầu câu thì phản hồi “Tôi là Chatbot A” sẽ là phù hợp
Tiếp đến ta xét đoạn hội thoại sau
Người dùng: Ca sĩ yêu thích của bạn là ai?
Chatbot: Tôi thích Lady Gaga
Người dùng: Tại sao?
Chatbot: Vì bộ đồ cô ấy mặc rất thú vị với tôi
Và đoạn hội thoại sau
Người dùng: Tại sao?
Chatbot: Tôi không hiểu bạn đang hỏi gì
Cùng là câu “Tại sao?” nhưng ta đang mong đợi Chatbot trả lời theo 2 hướng khác nhau Tất cả dựa vào ngữ cảnh của cuộc trò chuyện Để giữ cho ứng dụng đơn giản, ta
Trang 40sẽ chỉ xét ngữ cảnh là tập hợp tất cả các câu hội thoại giữa Chatbot và người dùng trong một ca giao tiếp Ngữ cảnh ở đoạn hội thoại đầu tiên trước câu hỏi “Tại sao?” bao gồm việc người dùng đã hỏi Chatbot ai là ca sĩ mà chatbot yêu thích với câu trả lời nhận về là Lady Gaga Vì vậy mà Chatbot có thể hiểu được câu hỏi sẽ là “Tại sao bạn thích ca sĩ Lady Gaga?” và có phản hồi tương ứng Chính vì vậy lưu trữ ngữ cảnh cũng là một công việc quan trọng để tạo nên một Chatbot có thể giao tiếp ở mức thuyết phục
Tiếp tục xét đoạn hội thoại sau
Người dùng: Chào bạn
Chatbot: Chào bạn, bạn tên gì?
Người dùng: Mình tên A
Chatbot: Mình có thể giúp gì cho A?
Ở đây Chatbot đã chủ động hỏi người dùng họ tên gì, nếu người dùng trả lời đúng theo từ khóa mà Chatbot đã dự đoán (Ví dụ như “Tên tôi là *”, “Tên mình là *”,
“Mình tên *”, …) Chatbot sẽ có thể lưu lại thông tin đó để tăng tính cá nhân của cuộc hội thoại
Người dùng: Chào bạn
Chatbot: Chào bạn, mình có thể giúp gì được cho bạn?
Người dùng: Cho mình hỏi thời tiết ở thành phố X như thế nào
Chatbot: Thời tiết nhiều mây, nhiệt độ 23.4 độ C nhé bạn
Ta thấy rằng, để xây dựng một chatbot cung cấp thông tin, ta sẽ phải có một tầng tìm kiếm thông tin từ các API khác để có thể soạn ra phản hồi cho người dùng
Như vậy thông qua các ví dụ trên, ta có thể giải quyết được một số trường hợp có thể làm cho Chatbot phản hồi một cách thiếu thuyết phục Tuy nhiên quan trọng nhất chính là việc tạo ra một cơ sở kiến thức càng lớn càng tốt cho Chatbot để nó có thể phản hồi trước các đầu vào từ phía người dùng Một số phương pháp có thể kể đến như sau
của Chatbot