3 CHATBOT – BÀI TỐN XỬ LÝ NGƠN NGỮ TỰ NHIÊN
3.4 Sơ lược về thư viện NLP.js
3.4.3 Các khái niệm cơ bản trong NLP.js
Entity: Entity là tất cả mọi thứ trong mơ hình xử lý ngôn ngữ của NLP.js. Cấu tạo của một entity cơ bản như sau
Bảng 3.2 Bảng danh sách thuộc tính trong một Entity
STT Tên thuộc tính Mơ tả Ví dụ
1 id Dãy số định danh một entity 71739421371429103
2 name Tên của entity temprature
3 confidence Độ tự tin của chương trình về
entity này phạm vi từ 0-1
0.7655
Intent: Intent, ở đây có thể dịch là ý định, là một loại entity đặc biệt để xác định ý định chung của toàn bộ câu đã cho. Ta lấy ví dụ sau
“Thời tiết ở Hà Nội như thế nào?”
Thì intent ở đây có thể gọi là “get_weather” vì ý định của người dùng là hỏi về thời tiết (tại Hà Nội, ta sẽ đề cập đến trong phần sau). Cấu tạo của một intent như sau
Bảng 3.3 Bảng danh sách thuộc tính trong một Intent
STT Tên thuộc tính Mơ tả Ví dụ
1 id Dãy số định danh một entity 71739421371429103
2 name Tên của entity get_weather
3 confidence Độ tự tin của chương trình về
entity này phạm vi từ 0-1
0.7655
Ngoài việc cho phép nhà phát triển tự tạo các intent thì Wit.ai cũng cung cấp một số intent có sẵn để nhà phát triển dễ dàng áp dụng vào chatbot của mình mà khơng cần phải trải qua quá trình huấn luyện chatbot. Bảng dưới đây mơ tả sơ lược các intent có sẵn tính đến ngày 1/5/2021
62
Entity parameter: Là một loại entity để xác định tham số trong một câu đã cho. Ta trở lại với ví dụ ta đã lấy intent
“Thời tiết ở Hà Nội như thế nào?”
Ở đây Hà Nội chính là một entity parameter, chỉ địa điểm người dùng muốn xem thời tiết. Ta thấy ở đây thì chuỗi con cũng chính là giá trị của parameter. Tuy nhiên ta có trường hợp khác như sau
“Thời tiết ở Đồng Hới ngày mai như thế nào?”
Ta đã biết Đồng Hới là một parameter cho địa điểm. Tuy nhiên parameter còn lại là chuỗi con “ngày mai”. Giả sử hôm nay là ngày 15/4/2021, cái ta cần là khả năng có thể phân giải xâu “ngày mai” thành giá trị “16/4/2021”. NLP.js cung cấp cho nhà phát triển công cụ để thiết lập và huấn luyện cho Chatbot nhận ra các tham số này. Cấu tạo của một entity parameter cơ bản như sau (có thể có các thuộc tính khác tùy vào loại parameter)
Bảng 3.4 Bảng danh sách thuộc tính của một Entity Parameter
STT Tên thuộc tính Mơ tả Ví dụ
1 id Dãy số định danh một entity 71739421371429103
2 name Tên của entity movie
3 role Vai trò của parameter trong câu seen
4 start Vị trị bắt đầu của chuỗi con đang
trích xuất
4
5 end Vị trí kết thúc của chuỗi con đang
trích xuất
10
63
7 confidence Độ tự tin của chương trình về
entity này phạm vi từ 0-1
0.7655
8 entities Danh sách entity trong entity đó Danh sách entity
9 value Giá trị trích xuất được từ
parameter
15/5/2021
10 type Loại giá trị trích xuất được từ
parameter
interval
NLP.js hỗ trợ 3 loại Entity chính
• Enum Named Entity: NLP.js sẽ lưu trữ Entity dưới dạng một từ điển và một giá
trị trả về. Nếu có một xâu con trong câu đầu vào so gần khớp với 1 từ trong enum sử dụng Edit Distance thì NLP.js sẽ trả về vị trị của từ đó cũng như giá trị của nó
• Regular Expression Named Entity: NLP.js hỗ trợ sử dụng biểu thức thường quy
(Regular Expression) để bắt các thực thể có cú pháp xác định được bởi biểu thức thường quy
• Trim Named Entity: NLP.js hỗ trợ sử dụng các từ ngữ như là một Delimiter để
xác định Entity, nó sẽ trim delimiter đi và hiển thị giá trị thỏa mãn luật của trim entity. NLP.js đang hỗ trợ những luật sau
o Between: Giữa một xâu <a> và <b>
o After: Sau một xâu <a>
o After First: Sau xâu <a> đầu tiên xuất hiện trong câu
o After Last: Sau xâu <a> cuối cùng xuất hiện trong câu.
o Before: Trước một xâu <a>
o Before First: Trước xâu <a> đầu tiên xuất hiện trong câu
o Before Last: Trước xâu <a> cuối cùng xuất hiện trong câu.
Ngoài việc hỗ trợ người dùng cài đặt các Entity. NLP.js được tích hợp sẵn một số built- in Entity (được hỗ trợ bởi Duckling), Một số built-in Entity được hỗ trợ sẽ được liệt kê tại bảng dưới đây
64
Bảng 3.5 Bảng các Entity được hỗ trợ bởi Duckling
STT Tên thuộc tính Mơ tả Ví dụ
1 Email Xác định một xâu con là
Email My email is something@somehost.com please write me 2 Phone Number Xác định một xâu con là số điện thoại (hỗ trợ mã vùng) So here is my number +1 541- 754-3010 callme maybe
3 URL Xác định một xâu con là
một đường dẫn
The url is
https://something.com
4 Number Xác định một xâu con là
một số (hỗ trợ số biểu diễn bằng chữ nhưng chỉ với một số ngôn ngữ)
This is 12 This is twelve
5 Ordinal Xác định một xâu con là
một số thứ tự (chỉ với một số ngôn ngữ)
He was 2nd
6 Dimenstion Xác định một xâu con là
một thước đo trong không gian (độ dài, diện tích, thời tiết, …)
120km
7 Quantity Xác định một xâu con là
định lượng của một vật thể
three cups of sugar
8 Amount of
money
Xác định một xâu con là một số tiền
65
9 Date Xác định một xâu con là
một điểm thời gian
12/12/2019 at 9am
Sentiment: Sentiment, hay cịn gọi là tính chất, là một dạng entity đặc biệt để diễn tả tính chất của một câu nói ví dụ như sau
Thời tiết ngày mai thế nào?
Ta có thể thấy Chatbot sẽ khơng thể hiểu được người dùng muốn hỏi thời tiết ở đâu (ít nhất là nếu khơng có ngữ cảnh cho trước). Vì vậy ta có thể gắn tính chất của câu này là “missing_location” Chatbot nếu nhận thấy có trait này có thể dị về các câu trước đó hoặc tìm trong ngữ cảnh của nó xem có địa điểm nào được nhắc đến hay khơng và thực hiện việc tra cứu dựa trên thơng tin đã thu thập được. Cho một ví dụ khác
Người dùng: Cho mình hỏi thời tiết ở Hà Nội thế nào được không? Chatbot: Thời tiết ở Hà Nội hiện tại đang là nhiều mây nhé bạn Người dùng: M** cho t** biết thời tiết ở Hà Nội như nào nhanh. Chatbot: Bạn ơi đừng nóng, thời tiết ở Hà Nội đang nhiều mây nhé
Cùng có một ý định là hỏi thời tiết ở Hà Nội nhưng ta dễ thấy 2 câu này có 2 giọng điệu rất khác nhau. Hệ thống trait có thể giúp nhà phát triển nhận định được những tính chất này và có biện pháp hành động hiệu quả nhất để tối ưu hóa trải nghiệm người dùng. Cấu tạo của một sentiment như sau:
Bảng 3.6 Bảng danh sách thuộc tính của Sentiment
STT Tên thuộc tính Mơ tả Ví dụ
1 id Chuỗi định danh của trait
theo quy chuẩn UUID/GUID
7cab9b55-875f-4c19- 8bbc-df4930b9eb34
66
3 confidence Độ tự tin của chương trình về
entity này phạm vi từ 0-1
0.7655
Utterance: Utterance, một câu nói, chính là thành phần xử lý trung tâm của NLP.js. Một Utterance sẽ có thể có một hoặc nhiều intent, một hoặc nhiều entity parameter và một hoặc nhiều trait. Nhà phát triển cần phải cung cấp utterance đã được gán nhãn để Chatbot có thể học các tính chất này cũng như việc phân tích các utterance mà khách hàng cung cấp chính là nhiệm vụ của Chatbot. Lấy ví dụ sau đây
Cho mình hỏi thời tiết Hà Nội ngày mai như thế nào khơng? Mình cảm ơn
Ta có intent của đoạn này là “get_weather”, parameter là “Hà Nội” – một địa điểm và “Ngày mai” – một mốc thời gian, Sentiment của đoạn này là người dùng muốn cảm ơn. Với những thông tin này ta có thể tạo ra một phản hồi thuyết phục cho Chatbot như sau
Thời tiết ở Hà Nội ngày mai là khơng mưa nhé, khơng có gì đâu bạn.
Như vậy các thành phần chính của NLP.js là một cách đơn giản mà hiệu quả để xử lý đầu vào của người dùng, tránh được đa số các khuyết điểm đã được nêu trong phần thiết kế Chatbot.
67
4 THIẾT KẾ HỆ THỐNG
4.1 Xác định yêu cầu
4.1.1 Sơ đồ ca sử dụng
Sơ đồ ca sử dụng cấp cao được biểu hiện như hình dưới đây. Các ca sử dụng trong sơ đồ được tổng qt hóa để phù họp với quy mơ của báo cáo
Hình 4.1 Sơ đồ ca sử dụng
4.1.2 Đặc tả ca sử dụng
Module 1: Hệ thống xác thực người dùng
UC1-1 Đăng nhập
Người tạo Nguyễn Ngọc
Đăng
Ngày tạo 14/3/2021
Tác nhân chính Người dùng Tác nhân phụ Khơng có
68
Xảy ra khi Người dùng có thơng tin tài khoản để đăng nhập
Điều kiện trước UC Khơng có
Điều kiện sau UC POST-1: Nếu người dùng đăng nhập vào hệ thống. Hệ thống
tạo ra một session đăng nhập mới cho người dùng Dòng sự kiện cơ
bản
1-1.0. Đăng nhập
1. Từ màn hình chính, người dùng chọn màn hình đăng nhập 2. Người dùng nhập thông tin đăng nhập vào biểu mẫu đăng nhập (Bao gồm tên đăng nhập và mật khẩu)
3. Người dùng chọn Đăng nhập để xác nhận gửi thông tin đăng nhập cho hệ thống
4. Hệ thống gửi thông báo đăng nhập thành công và điều hướng người dùng trở về màn hình chính
Dịng sự kiện thay thế
1-1.1. Người dùng chưa có tài khoản
1. Nếu người dùng chưa có tài khoản, hệ thống gợi ý người dùng đăng ký
2. Người dùng chọn đăng ký
3. Thực hiện ca sử dụng Đăng kí (Tham khảo UC1-2) Dịng sự kiện ngoại
lệ
1-1.0E1. Thông tin đăng nhập bị thiếu
1. Hệ thống thông báo trường nhập liệu bị thiếu
2a. Nếu người dùng chọn chỉnh sửa, trở lại bước 2 của 1-1.0 2b. Nếu không, kết thúc ca sử dụng
1-1.0E2. Thông tin đăng nhập không hợp lệ
1. Hệ thống thông báo thông tin đăng nhập không hợp lệ 2a. Nếu người dùng chọn chỉnh sửa, trở lại bước 2 của 1-1.0
69
2b. Nếu không, kết thúc ca sử dụng
Độ ưu tiên Cao
Tần suất sử dụng Ít nhất 10 lần trong 1 ngày
Thơng tin bổ sung Khơng có
Ngầm định Khơng có
UC1-2 Đăng ký
Người tạo Nguyễn Ngọc
Đăng
Ngày tạo 14/3/2021
Tác nhân chính Người dùng Tác nhân phụ Khơng có
Mơ tả Là người dùng, tôi muốn đăng ký một tài khoản mới cho hệ
thống
Xảy ra khi Người dùng chưa có tài khoản hoặc có nhu cầu đăng ký một tài
khoản mới
Điều kiện trước UC PRE-1: Người dùng đang ở màn hình đăng ký
Điều kiện sau UC POST-1: Hệ thống tạo ra một tài khoản mới trong hệ thống
Dòng sự kiện cơ bản
1-2.0. Đăng ký
1. Từ màn hình đăng nhập, người dùng chọn màn hình đăng ký 2. Người dùng nhập thông tin đăng ký vào biểu mẫu đăng nhập (Bao gồm tên đăng nhập, mật khẩu, xác nhận và email)
3. Người dùng chọn Đăng ký để xác nhận gửi thông tin đăng ký cho hệ thống
70
4. Hệ thống gửi thông báo đăng ký thành công và điều hướng người dùng trở về màn hình đăng nhập Dịng sự kiện thay thế Khơng có Dịng sự kiện ngoại lệ
1-2.0E1. Thông tin đăng nhập bị thiếu
1. Hệ thống thông báo trường nhập liệu bị thiếu
2a. Nếu người dùng chọn chỉnh sửa, trở lại bước 2 của 1-1.0 2b. Nếu không, kết thúc ca sử dụng
1-2.0E2. Tên tài khoản trùng với tài khoản có sẵn
1. Hệ thống thông báo tên tài khoản trùng đăng ký với tài khoản có sẵn
2a. Nếu người dùng chọn chỉnh sửa, trở lại bước 2 của 1-2.0 2b. Nếu không, kết thúc ca sử dụng
1-2.0E2. Mật khẩu xác nhận không trùng với mật khẩu đã nhập 1. Hệ thống thông báo mật khẩu xác nhận không trùng với mật khẩu đã nhập
2a. Nếu người dùng chọn chỉnh sửa, trở lại bước 2 của 1-2.0 2b. Nếu không, kết thúc ca sử dụng
Độ ưu tiên Cao
Tần suất sử dụng Tùy người dùng
Thông tin bổ sung Khơng có
71
UC1-3 Đổi mật khẩu
Người tạo Nguyễn Ngọc
Đăng
Ngày tạo 14/3/2021
Tác nhân chính Người dùng Tác nhân phụ Khơng có
Mơ tả Là người dùng, tôi muốn đổi mật khẩu tài khoản
Xảy ra khi Người dùng có nhu cầu đổi tài khoản
Điều kiện trước UC PRE-1: Người dùng đã đăng nhập vào hệ thống
PRE-2: Người dùng đã định hướng đến màn hình chỉnh sửa thông tin tài khoản
Điều kiện sau UC POST-1: Hệ thống đổi mật khẩu cho người dùng
Dòng sự kiện cơ bản
1-3.0. Đổi mật khẩu
1. Từ màn hình sửa đổi thơng tin người dùng. Người dùng chọn mục bảo mật
2. Người dùng nhập thông tin mật khẩu vào biểu mẫu đổi mật khẩu (Bao gồm mật khẩu cũ, mật khẩu mới, xác nhận mật khẩu mới)
3. Người dùng chọn Lưu mật khẩu để xác nhận gửi thông tin đăng đổi mật khẩu cho hệ thống
4. Hệ thống gửi thông báo đổi mật khẩu thành công và điều hướng người dùng trở về màn hình đăng nhập
Dòng sự kiện thay thế
72 Dịng sự kiện ngoại
lệ
1-3.0E1. Thơng tin đổi mật khẩu bị thiếu 1. Hệ thống thông báo trường nhập liệu bị thiếu
2a. Nếu người dùng chọn chỉnh sửa, trở lại bước 2 của 1-3.0 2b. Nếu không, kết thúc ca sử dụng
1-3.0E2. Sai mật khẩu cũ
1. Hệ thống thông báo mật khẩu cũ nhập sai
2a. Nếu người dùng chọn chỉnh sửa, trở lại bước 2 của 1-3.0 2b. Nếu không, kết thúc ca sử dụng
1-3.0E2. Mật khẩu xác nhận không trùng với mật khẩu đã nhập 1. Hệ thống thông báo mật khẩu xác nhận không trùng với mật khẩu đã nhập
2a. Nếu người dùng chọn chỉnh sửa, trở lại bước 2 của 1-3.0 2b. Nếu không, kết thúc ca sử dụng
Độ ưu tiên Cao
Tần suất sử dụng Tùy người dùng
Thông tin bổ sung Khơng có
Ngầm định Khơng có
Module 2: Hệ thống Chatbot
UC2-1 Gửi tin nhắn
Người tạo Nguyễn Ngọc
Đăng
73
Tác nhân chính Người dùng Tác nhân phụ Chatbot
Mô tả Là người dùng, tơi muốn gửi tin nhắn để Chatbot có thể trả lời
Xảy ra khi Người dùng muốn hỏi Chatbot
Điều kiện trước UC PRE-1: Người dùng đang ở màn hình trị chuyện với Chatbot
Điều kiện sau UC POST-1: Chatbot nhận được tin nhắn của người dùng
Dòng sự kiện cơ bản
2-1.0. Gửi tin nhắn
1. Người dùng ở màn hình trị chuyện với Chatbot
2a. Nếu người dùng chọn nhập tin nhắn vào ô nhập liệu, chuyển đây là ca sử dụng gửi tin nhắn chữ (Tham khảo UC2-2)
2b. Nếu người sử dụng chọn nút thu âm, đây là ca sử dụng gửi tin nhắn âm thanh (Tham khảo UC2-3)
3. Sau khi có kết quả là tin nhắn người dùng muốn gửi. Gửi tin nhắn đi tới hệ thống và đợi phản hồi của Chatbot
4. Hiển thị phản hồi của Chatbot ra giao diện Dòng sự kiện thay
thế
2-1.1. Gửi tin nhắn khác
1. Sau khi nhận được phản hồi từ Chatbot, người dùng có thể gửi tin nhắn khác
2. Trở về bước 1 UC2-1.0 Dòng sự kiện ngoại
lệ
2-1.0E1. Chatbot không hiểu được tin nhắn của người dùng 1. Hệ thống trả về phản hồi Chatbot không thể hiểu được yêu cầu người dùng
2. Hiển thị phản hồi đó ra giao diện, kết thúc use case
74
1. Hệ thống trả về phản hồi Chatbot không thể hiểu rõ được yêu cầu người dùng
2. Hiển thị phản hồi đó ra giao diện, kết thúc use case
Độ ưu tiên Cao
Tần suất sử dụng Tùy người dùng
Thơng tin bổ sung Khơng có
Ngầm định Khơng có
UC2-2 Gửi tin nhắn chữ
Người tạo Nguyễn Ngọc
Đăng
Ngày tạo 14/3/2021
Tác nhân chính Người dùng Tác nhân phụ Khơng có
Mơ tả Là người dùng, tơi muốn gửi tin nhắn văn bản để Chatbot có
thể trả lời
Xảy ra khi Người dùng muốn hỏi Chatbot dưới dạng văn bản
Điều kiện trước UC PRE-1: Người dùng đang ở màn hình trị chuyện với Chatbot PRE-2: Người dùng đang nhập tin nhắn vào ô nhập liệu