Để tạo tính tự nhiên trong câu truyện thì ta có thể xây dựng nhiều câu trả lời Bot chọn ngẫu nhiên trả lời người dùng.
Bên cạnh đó ta cũng có thể xây dựng câu trả lời cho bot thông qua action. Hành động là những thứ bot chạy để đáp ứng với đầu vào của người dùng. Đây là thành phần có thể cung cấp thông tin trả lời người dùng dựa vào các intent, slot và dữ liệu lấy từ hệ thống khác qua API. Bên cạnh đó action của rasa còn hỗ trợ tùy biến qua ngôn ngữ python nên ta có thể điều hướng các action tiếp theo dựa vào dialog state tracker, policy và dispatcher của rasa. Có ba loại hành động trong Rasa Core:
- Default actions : các hành động default như lắng nghe người dùng, restart lại hội thoại hoặc trả lời mặc định khi không phân loại được ý định người dùng.
utter_default:
- text: "Xin lỗi tôi không hiểu. Tôi chỉ có thể hỗ trợ bạn các tính năng của ngân hàng như thông tin tài khoản, truy vấn số dư, chuyển tiền, thanh toán trực tuyến, tiết kiệm, vay tiền, gửi tiền, thông tin lãi suất, lịch sử giao dịch..."
- text: "Xin lỗi câu hỏi của bạn ngoài khả năng của tôi. nBạn có thể hỏi tôi về thông tin tài khoản, số dư, chuyển tiền, thông tin lãi suất..."
buttons:
- title: "Thông tin tài khoản" payload: "Thông tin tài khoản"
- title: "Số dư" payload: "Số dư"
- title: "Chuyển tiền" payload: "Chuyển tiền"
- title: "Thông tin lãi suất" payload: "Thông tin lãi suất"
- text: "Tôi chưa rõ ý bạn, nhưng bạn có muốn xem thông tin tài khoản hay số dư không?"
buttons:
- title: "Thông tin tài khoản" payload: "Thông tin tài khoản"
- title: "Số dư" payload: "Số dư"
- text: "Bạn có cần hỗ trợ trực tiếp qua tổng đài không"
Hình 40: Mẫu câu trả lời mặc định của bot khi không nhận ra ý định người dùng
- Utter actions: là các tập câu trả lời mẫu mà mình xây dựng cho bot
utter_ask_interest_type:
- text: "lãi suất vay tiền hay gửi tiền?"
- text: "lãi suất vay tiền hay tiết kiệm?"
- text: "lãi suất vay tiền hay lãi suất tiết kiệm?"
utter_ask_term:
- text: Xin vui lòng nhập thông tin kỳ hạn theo tháng (0>36 tháng) hoặc theo năm (1>3 năm)
- text: bạn nhập thông tin kỳ hạn?
Hình 41.8: Mẫu câu trả lời cho ý định người dùng hỏi lãi suất
- Custom actions: Khi các tập câu trả lời mẫu không áp dụng được với các câu trả lời cần có kết quả lấy từ một nguồn dữ liệu khác thì action tùy biến được sử dụng, nó sẽ trỏ đến một hàm trong lớp action (python). Trong đây mình sẽ tùy biến câu trả lời như lấy dữ liệu qua API rồi điền vào tham số trong câu trả lời.
class CheckMoney(Action):
""" This action for check money""" def name(self):
return "action_check_money"
def run(self, dispatcher, tracker, domain):
# money = tracker.get_slot('money') text = tracker.latest_message.text print(text)
# validate money money = text
if money:
# check money print(money)
else:
print('Xin vui lòng nhập lại số tiền:') dispatcher.utter_message("Xin vui lòng nhập lại số tiền:") return [UserUtteranceReverted()]
return [SlotSet('money', money)]
Hình 42: Custom action xử lý slot money
3.4.4 Xây dựng khung kịch bản (history)
Dựa vào các tập ý định người dùng và các mẫu câu trả lời tương ứng của bot ta xây dựng khung kịch bản cho bot thông qua việc sắp xếp chung thành một đoạn hội thoại như dưới:
## Generated Story without view transfer -3085341580024990180
* transfer_by_card
- utter_ask_card
* input_data
- action_check_card
- slot{"card": "12445456568345"}
- utter_ask_money
* input_data
- action_check_money
- slot{"money": "3000000"}
- utter_ask_content
* input_data
- action_check_content
- slot{"content": "tien chuyen tien"}
- utter_ask_otp
* input_data
- action_check_otp
- slot{"otp": "123456"}
- utter_transfer_complete
Hình 43: Khung kịch bản chuyển tiền bằng thẻ
Việc xây dựng đoạn hội thoại này có thể viết bằng tay hoặc thông qua việc học tương tác (Interactive Learning) với bot: Đây là một cách khác để xây dựng khung câu truyện là việc học tương tác với bot. Chế độ này cho phép người dùng tự động tạo ra các hội thoại sau khi chat trực tiếp với bot. Nếu bot nhận định các intent hay slot sai thì người dùng có thể dạy lại cho bot đúng
Hình 44: Học tương tác với bot
3.5 Thực nghiệm
Tiến hành thử nghiệm chat với bot ngẫu nhiên mỗi lần 60 câu thì ta được kết quả theo bảng đánh giá sau:
Số câu đúng | Độ chính xác | |
1 | 28/60 | 48% |
2 | 38/60 | 64% |
3 | 45/60 | 75% |
4 | 47/60 | 79% |
5 | 49/60 | 83% |
Có thể bạn quan tâm!
- Một Số Kỹ Thuật Sử Dụng Trong Chatbot
- Nghiên cứu và xây dựng chatbot hỗ trợ người dùng trong ngân hàng - 5
- Xây Dựng Chatbot Hỗ Trợ Người Dùng Lĩnh Vực Ngân Hàng
- Nghiên cứu và xây dựng chatbot hỗ trợ người dùng trong ngân hàng - 8
- Nghiên cứu và xây dựng chatbot hỗ trợ người dùng trong ngân hàng - 9
Xem toàn bộ 81 trang tài liệu này.
Hình 45 : Bảng mô tả số lần thử nghiệm với người dùng
Thử nghiệm cuối cùng tương tác với bot 60 câu thì thấy độ chính xác của bot đạt khoảng trên 80% và chỉ tính các câu hỏi xung quanh kịch bản đã đào tạo cho bot. Còn đối với các câu hỏi mà chưa trainning(out of scops) thì bot sẽ đưa ra một số mẫu câu trả lời điều hướng người dùng tới một số câu hỏi sẵn có mà bot có thể đáp ứng được.
Một số biểu đồ đánh giá ước lượng tập dữ liệu training và khung kịch bản (history) cho bot:
Hình 46: Hình ma trận ước lượng nhầm lẫn xây dựng dữ liệu intent
Với biểu đồ ước lượng trên ta thấy dữ liệu các câu đầu vào cho intent người dùng không bị xung đột hay nhầm lẫn với nhau. Điều này đảm bảo tính đúng đắn của tập dữ liệu cho việc đào tạo bot.
Hình 47: Hình ước lượng độ chính xác tập dữ liệu trainning intent
Sử dụng mô hình intent_classifier_tensorflow_embedding dựa trên nền tảng mô hình starspace [9] của facebook để đào tạo cho bot phục vụ việc phân loại ý định người dùng cho thấy độ chính xác tương đối cao đối với tập dữ liệu cho bài toán ngân hàng.
Hình 3.148 : Hình ước lượng độ chính xác trích chọn thông tin
Việc áp dụng mô hình CRF cho trích chọn thông tin đạt độ chính xác rất cao 0.99%. Qua quá trình đào tạo cho bot thì thấy việc càng training nhiều dữ liệu thì độ chính xác trích xuất càng cao với CRF. Để đảm bảo việc trích chọn thông tin chính xác nhất thì mỗi entity phải trainning cho bot từ 10 đến 20 dữ liệu.
Hình 496: Hình ước lượng độ nhầm lẫn cho việc xây dựng câu trả lời của bot (action)
Dưới là danh sách câu hỏi và trả lời khi người dùng tương tác với bot trong thử nghiệm cuối.
Người dùng | Bot | Slot | Đánh giá | |
1 | Xin chào | Chào bạn | ||
2 | bạn có thể hướng dẫn tôi cái gì | Tôi có thể hỗ trợ bạn các tính năng(tài khoản, số dư, chuyển tiền, thanh toán, tiết kiệm, vay tiền, gửi tiền, lãi suất...) Để biết thông tin chi tiết mời bạn điền thông tin tính năng cần hỗ trợ. Ví dụ: 'chuyển tiền' | ||
3 | thông tin tài khoản | Số tài khoản: {&account_number}. Tên tài khoản: {@account_name}. Loại tài khoản: {&account_type}. Chi nhánh {&account_branch} | ||
4 | kiểm tra giúp tôi số dư tài khoản | Tài khoản {&account}. {&name}. Số dư của bạn là: {&money} | ||
5 | Cảm ơn | Không có gì, đó là trách nhiệm của tôi | ||
6 | bạn có hỗ trợ qua điện thoại? | Quý khách có thể gọi về tổng đài {&phone} miễn phí để được hỗ trợ và hướng dẫn xử lý | ||
7 | cảm ơn. tôi sẽ gọi cho tổng đài hỗ trợ nếu cần | Quý khách có thể gọi về tổng đài {&phone} miễn phí để được hỗ trợ và hướng dẫn xử lý | ||
8 | Cảm ơn | Rất vui khi giúp đỡ bạn | ||
9 | bạn có thể hướng dẫn tôi cái khác | Tôi có thể hỗ trợ bạn các tính năng(tài khoản, số dư, chuyển tiền, thanh toán, tiết kiệm, vay tiền, gửi tiền, lãi suất...) Để biết thông tin chi tiết mời bạn điền thông tin tính năng cần hỗ trợ. Ví dụ: 'chuyển tiền' | ||
10 | chuyển tiền | Bạn chọn loại chuyển tiền nào: Chuyển tiền qua thẻ, chuyển tiền trong ngân hàng, chuyển tiền ngoài ngân hàng, chuyển tiền nhanh từ danh bạ? | ||
11 | qua thẻ | Mời bạn nhập số thẻ: | ||
12 | 1234 6534 9544 6468 | Tên người nhận: Nguyễn Tất Tiến, ngân hàng Vietinbank | account: 1234 6534 9544 6468 Name: Nguyễn Tất Tiến Bank: Vietinbank | |
Mời bạn nhập số tiền chuyển: | ||||
13 | 2 triệu | Mời bạn nhập nội dung chuyển tiền: | Money: 2 triệu | |
14 | tiến chuyển tiền | Mời bạn xác nhận thông tin! Bạn muốn chuyển: 2,000,000 VNĐ Cho số thẻ: 1234 6534 9544 6468 Người nhận: Nguyen Tat Tien Ngân Hàng: Vietinbank | Content: tiến chuyển tiền |
Nội dung chuyển tiền: tiến chuyển tiền | ||||
Mời bạn nhập otp: | ||||
15 | 123456 | Giao dịch thành công! Chuyển 2,000,000 VNĐ Cho số thẻ: 1234 6534 9544 6468 Người nhận: Nguyen Tat Tien Ngân Hàng: Vietinbank Nội dung chuyển tiền: tiến chuyển tiền | Otp: 123456 | |
16 | cảm ơn | Tôi hi vọng bạn sẽ hài lòng | ||
17 | cảm ơn tôi rất hài lòng với bạn | Tôi hi vọng bạn sẽ hài lòng | ||
18 | ok bạn | Tôi là chatbot hỗ trợ ngân hàng. Tôi sinh năm 2018. Luôn sẵn lòng hỗ trợ bạn | ||
19 | bạn hướng dẫn tôi chuyển tiền tiếp chứ | Bạn chọn loại chuyển tiền nào: Chuyển tiền qua thẻ, chuyển tiền trong ngân hàng, chuyển tiền ngoài ngân hàng, chuyển tiền nhanh từ danh bạ? | ||
20 | chuyển tiền trong ngân hàng | Mời bạn nhập số tài khoản: | ||
21 | 9842 4223 5345 8723 | Tên người nhận: Nguyễn Tất Tiến | account: 9842 4223 5345 8723 Name: Nguyễn Tất Tiến | |
Mời bạn nhập số tiền chuyển: | ||||
22 | 123552342 | Chỉ được phép chuyển dưới 10,000,000 mỗi lần. Xin vui lòng nhập lại số tiền chuyển! | Money: 123552342 | |
23 | 11 triệu | Chỉ được phép chuyển dưới 10,000,000 mỗi lần. Xin vui lòng nhập lại số tiền chuyển! | Money: 11 triệu | |
24 | 9 triệu | Mời bạn nhập nội dung chuyển tiền: | Money: 9 triệu | |
22 | tiến trả tiền dư nợ thẻ tín dụng | Mời bạn xác nhận thông tin! Bạn muốn chuyển: 9,000,000 Cho số tài khoản: 9842 4223 5345 8723 Người nhận: Nguyen Tat Tien Ngân Hàng: None Nội dung chuyển tiền: tiến trả tiền dư nợ thẻ tín dụng | Content: tiến trả tiền dư nợ thẻ tín dụng | |
Mời bạn nhập otp: | ||||
23 | 1234567 | OTP không đúng. Xin vui lòng nhập lại OTP! | OTP: 1234567 | |
24 | 456234 | Giao dịch thành công! Chuyển 9,000,000 cho Nguyen Tat Tien, ngân hàng None. Nội dung chuyển tiền:tiến trả tiền dư nợ thẻ tín dụng | OTP: 456234 | |
25 | bạn có thể chuyển tiền | Mời bạn nhập số tài khoản: | sai |
qua kênh nào khác? | ||||
26 | bạn nhầm rồi. tôi muốn hủy giao dịch | Hủy giao dịch thành công! | ||
27 | hướng dẫn chuyển tiền? | Bạn chọn loại chuyển tiền nào: Chuyển tiền qua thẻ, chuyển tiền trong ngân hàng, chuyển tiền ngoài ngân hàng, chuyển tiền nhanh từ danh bạ? | ||
28 | chuyển tiền ngoài ngân hàng | Mời bạn nhập ngân hàng: | ||
29 | vietinbank | Mời bạn nhập chi nhánh: | Bank: vietinbank | |
30 | hà nội | Mời bạn nhập số tài khoản: | Branch: hà nội | |
31 | 8734 2345 2341 9584 | Tên người nhận: Nguyễn Tất Tiến | Account: 8734 2345 2341 9584 | |
Mời bạn nhập số tiền chuyển: | ||||
32 | tiến chuyển tiền ngoài ngân hàng | Xin vui lòng nhập lại số tiền: | ||
33 | 5 trăm | Mời bạn nhập nội dung chuyển tiền: | Money: 5 trăm | |
34 | tiến test chuyển tiền ngoài ngân hàng | Mời bạn xác nhận thông tin! Bạn muốn chuyển: 500,000 Cho số tài khoản: 8734 2345 2341 9584 Người nhận: Nguyen Tat Tien Ngân Hàng: vietinbank Chi Nhánh: hà nội Nội dung chuyển tiền: tiến test chuyển tiền ngoài ngân hàng | Content: tiến test chuyển tiền ngoài ngân hàng | |
35 | danh bạ người nhận tiền | Danh bạ người nhận: tiến - Nguyễn Tất Tiến, tài khoản 8888 8888 8888 8888, ngân hàng Vietinbank tú - Nguyễn Đình Tú, tài khoản 6666 6666 6666 6666, ngân hàng Vietcombank thảo - Nguyễn Thanh Thảo, tài khoản 9999 9999 9999 9999, ngân hàng Vietinbank | ||
36 | chuyển 6 triệu cho nam | Không tìm thấy nam trong danh bạ. Xin vui lòng nhập đúng tên trong danh bạ người nhận | Receiver: nam | |
37 | chuyển cho thảo 6000000 | Hệ thống ghi nhận! Bạn muốn chuyển: 6000000 VNĐ Người nhận: thảo từ danh bạ | Name: thảo Money: 6000000 | |
Mời bạn nhập nội dung chuyển tiền: |