SlideShare a Scribd company logo
ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƢỜNG ĐẠI HỌC CÔNG NGHỆ
NGUYỄN TẤT TIẾN
NGHIÊN CỨU VÀ XÂY DỰNG CHATBOT HỖ TRỢ
NGƢỜI DÙNG TRONG NGÂN HÀNG
LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN
HÀ NỘI – 2019
ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƢỜNG ĐẠI HỌC CÔNG NGHỆ
NGUYỄN TẤT TIẾN
NGHIÊN CỨU VÀ XÂY DỰNG CHATBOT HỖ TRỢ
NGƢỜI DÙNG TRONG NGÂN HÀNG
Ngành: Kỹ thuật phần mềm
Chuyên ngành: Kỹ thuật phần mềm
Mã số: 8480103.01
LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN
HÀ NỘI – 2019
LỜI CAM ĐOAN
Tôi là Nguyễn Tất Tiến, học viên khóa K22, ngành Kỹ thuật phần mềm, chuyên
ngành Kỹ Thuật Phần Mềm. Tôi xin cam đoan luận văn “Nghiên cứu và xây dựng
chatbot hỗ trợ người dùng trong ngân hàng” là do tôi nghiên cứu, tìm hiểu và phát
triển dưới sự dẫn dắt của TS. Nguyễn Văn Vinh. Luận văn không phải sự sao chép từ
các tài liệu, công trình nghiên cứu của người khác mà không ghi rõ trong tài liệu tham
khảo. Tôi xin chịu trách nhiệm về lời cam đoan này.
Hà nội, ngày tháng năm 2019
LỜI CẢM ƠN
Đầu tiên tôi xin gửi lời cảm ơn tới các thầy cô trường đại học Công Nghệ, Đại học
Quốc Gia Hà Nội đã tận tình giảng dạy và truyền đạt kiến thức trong suốt khóa cao
học vừa qua. Tôi cũng xin được gửi lời cảm ơn đến các thầy cô trong bộ môn Kỹ
Thuật Phần Mềm cũng như khoa Công Nghệ Thông Tin đã mang lại cho tôi những
kiến thức vô cùng quý giá và bổ ích trong quá trình học tập tại trường.
Đặc biệt xin chân thành cảm ơn thầy giáo, TS. Nguyễn Văn Vinh, người đã định
hướng, giúp đỡ, trực tiếp hướng dẫn và tận tình chỉ bảo tôi trong suốt quá trình nghiên
cứu, xây dựng và hoàn thiện luận văn này.
Tôi cũng xin được cảm ơn tới gia đình, những người thân, các đồng nghiệp và bạn
bè thường xuyên quan tâm, động viên, chia sẻ kinh nghiệm, cung cấp các tài liệu hữu
ích trong thời gian học tập, nghiên cứu cũng như trong suốt quá trình thực hiện luận
văn tốt nghiệp.
Hà Nội, ngày tháng năm 2019
MỤC LỤC
LỜI CẢM ƠN ................................................................................................................4
MỤC LỤC ......................................................................................................................5
DANH MỤC KÝ HIỆU VÀ CÁC CHỮ VIẾT TẮT..................................................7
DANH MỤC HÌNH VẼ VÀ ĐỒ THỊ ..........................................................................8
MỞ ĐẦU.........................................................................................................................1
1. Động lực nghiên cứu .............................................................................................2
2. Mục tiêu luận văn..................................................................................................3
3. Cấu trúc luận văn...................................................................................................4
CHƢƠNG 1 : TỔNG QUAN HỆ THỐNG CHATBOT ............................................5
1.1 Giới thiệu ...........................................................................................................5
1.2 Cấu trúc các thành phần hệ thống chatbot .........................................................6
1.3 Hiểu ngôn ngữ tự nhiên (NLU)..........................................................................7
1.4 Quản lý hội thoại (DM)....................................................................................11
1.4.1 Mô hình máy trạng thái hữu hạn FSA.......................................................13
1.4.2 Mô hình Frame-based ...............................................................................14
1.5 Thành phần sinh ngôn ngữ (NLG)...................................................................14
1.5.1 Template-based NLG................................................................................15
1.5.2 Plan-based NLG........................................................................................15
1.5.3 Class-based NLG ......................................................................................16
CHƢƠNG 2 : MỘT SỐ KỸ THUẬT SỬ DỤNG TRONG CHATBOT ................17
2.1 Kiến trúc mạng nơ ron nhân tạo.......................................................................17
2.2 Mạng nơ ron hồi quy RNN ..............................................................................20
2.3 Mạng Long short Term Memory (LSTM).......................................................23
2.3.1 Vấn đề phụ thuộc quá dài..........................................................................23
2.3.2 Kiến trúc mạng LSTM ..............................................................................24
2.3.3 Phân tích mô hình LSTM..........................................................................25
2.4 Word embeddings ............................................................................................28
2.4.1 Word2vec ..................................................................................................28
2.4.2 Glove.........................................................................................................29
2.5 Ứng dụng RNN vào quản lý hội thoại .............................................................31
2.5.1 Mô hình word-based DST.........................................................................31
2.5.2 Mô hình Global-Locally Self-Attentive DST (GLAD).............................32
CHƢƠNG 3 : XÂY DỰNG CHATBOT HỖ TRỢ NGƢỜI DÙNG LĨNH VỰC
NGÂN HÀNG ..............................................................................................................34
3.1 Bài toán ............................................................................................................34
3.2 Xây dựng chatbot hỗ trợ người dùng lĩnh vực ngân hàng ...............................34
3.3 Ứng dụng RASA xây dựng chatbot.................................................................36
3.4 Xây dựng dữ liệu chatbot.................................................................................37
3.4.1 Xây dựng ý định........................................................................................38
3.4.2 Xây dựng entity.........................................................................................39
3.4.3 Xây dựng câu trả lời cho bot.....................................................................39
3.4.4 Xây dựng khung kịch bản (history) ..........................................................41
3.5 Thực nghiệm ....................................................................................................43
3.6 Đánh giá...........................................................................................................51
KẾT LUẬN ..................................................................................................................52
TÀI LIỆU THAM KHẢO...........................................................................................53
PHỤ LỤC .....................................................................................................................55
DANH MỤC KÝ HIỆU VÀ CÁC CHỮ VIẾT TẮT
Từ
viết tắt
Từ chuẩn Diễn giải
AI Artificial Intelligence Trí tuệ nhân tạo
ANN Artificial Nerual Network Mạng nơ ron nhân tạo
CBOW Continuous Bag of Words
CNN Convolution Neural Network Mạng nơ ron tích chập
CRF Conditional Random Fields Mô hình xác xuất trường điều kiện ngẫu
nhiên
DM Dialogue Management Quản lý hội thoại
DNN Deep Neural Networks Mô hình học máy
DTS Dialogue State Tracking Theo dõi trạng thái hội thoại
FSA Finite State Automata Mô hình dựa trên máy trạng thái hữu hạn
FSM Finite State Machine Máy trạng thái hữu hạn
GLAD Global-Locally SelfAttentive
Dialogue State Tracker
HMM Hiden Markov Models Mô hình Markov ẩn
LSTM Long short-term memory Mạng cải tiến để giải quyết vấn đề phụ
thuộc quá dài
NLG Natural Language Generation Thành phần sinh ngôn ngữ
NLP Natural Language Processing Xử lý ngôn ngữ tự nhiên
NLU Natural Language Understanding Hiểu ngôn ngữ tự nhiên
ML Machine Learning Học máy, máy có khả năng học tập
POS Part Of Speech Gán nhãn từ loại
RNN Recurrent Neural Network Mạng nơ ron hồi quy
SVM Vector Support Machine Máy vector hỗ trợ
DANH MỤC HÌNH VẼ VÀ ĐỒ THỊ
Hình 1.1: Cấu trúc các thành phần cơ bản hệ thống chatbot [12] ...................................6
Hình 1.2: Mô hình các thành phần xử lý trong chatbot [1].............................................7
Hình 1.3: Các bước xử lý chính trong pipeline của NLU [1]..........................................8
Hình 1.4: Các bước xử lý trong NLU [2]........................................................................8
Hình 1.5: Mô hình các bước xác định ý định ................................................................10
Hình 1.6: Gán nhãn từ theo mô hình B-I-O trong trích xuất thông tin ................. Error!
Bookmark not defined.
Hình 1.7: Mô hình quản lý trạng thái và quyết định action trong hội thoại [2] ............12
Hình 1.8: Quản lý hội thoại theo mô hình máy trạng thái hữu hạn FSA ......................13
Hình 1.9: Frame cho chatbot hỏi thông tin khách hàng ................................................14
Hình 1.10: Phương pháp sinh ngôn ngữ dựa trên tập mẫu câu trả lời [1].....................15
Hình 1.11: Phương pháp sinh ngôn ngữ Plan-based [1]................................................15
Hình 1.12: Phương pháp sinh ngôn ngữ class-based [1]...............................................16
Hình 2.1: Kiến trúc mạng nơ ron nhân tạo [15] ............................................................17
Hình 2.2: Quá trình xử lý thông tin của một mạng nơ-ron nhân tạo [15] .....................18
Hình 2.3: Mạng RNN [15].............................................................................................21
Hình 2.4: Mạng RNN 2 chiều [15]................................................................................22
Hình 2.5: Mạng RNN nhiều tầng [15]...........................................................................22
Hình 2.6: RNN phụ thuộc short-term [17] ....................................................................23
Hình 2.7: RNN phụ thuộc long-term [17] .....................................................................23
Hình 2.8: Các mô-đun lặp của mạng RNN chứa một layer [17]...................................24
Hình 2.9 : Các mô-đun lặp của mạng LSTM chứa bốn layer [17]................................24
Hình 2.10 : Tế bào trạng thái LSTM giống như một băng truyền [17].........................25
Hình 2.11 : Cổng trạng thái LSTM [17]........................................................................26
Hình 2.12 : LSTM focus f [17]......................................................................................26
Hình 2.13 : LSTM focus I [17]......................................................................................27
Hình 2.14 : LSTM focus c [17] .....................................................................................27
Hình 2.15 : LSTM focus o [17].....................................................................................27
Hình 2.16 : Mô hình từ nhúng [16] ...............................................................................28
Hình 2.17 : Mô hình CBOW và Skip-Ngram [16]........................................................29
Hình 2.18 : Xác xuất từ k trên ngữ cảnh của từ i và j [16]............................................29
Hình 2.20 : Công thức tính hàm chi phí tối thiểu [16] ..................................................30
Hình 2.21 : Hàm trọng số (weighting function) [16] ....................................................30
Hình 2.22: Mô hình word-based DST với mạng RNN [20]..........................................31
Hình 2.23: Mô hình Global-Locally Self-Attentive DST (GLAD) [21].......................32
Hình 2.24 : Global-locally self-attentive encoder modul [21] ......................................33
Hình 3.1: Cấu trúc chatbot cho hệ thống ebanking .......................................................35
Hình 3.2 : Cấu hình pipeline xử lý ngôn ngữ tự nhiên..................................................37
Hình 3.3 : Các bước xây dựng chatbot..........................................................................38
Hình 3.4 : Xây dựng ý định người dùng........................................................................39
Hình 3.6 : Mẫu câu trả lời của bot cho ý định hỏi số dư tài khoản ...............................39
Hình 3.7: Mẫu câu trả lời mặc định của bot khi không nhận ra ý định người dùng .....40
Hình 3.8: Mẫu câu trả lời cho ý định người dùng hỏi lãi suất.......................................41
Hình 3.9: Custom action xử lý slot money....................................................................41
Hình 3.10: Khung kịch bản chuyển tiền bằng thẻ .........................................................42
Hình 3.11: Học tương tác với bot..................................................................................42
Hình 3.12 : Bảng mô tả số lần thử nghiệm với người dùng..........................................43
Hình 3.13: Hình ma trận ước lượng nhầm lẫn xây dựng dữ liệu intent ........................43
Hình 3.14: Hình ước lượng độ chính xác tập dữ liệu trainning intent ..........................44
Hình 3.15 : Hình ước lượng độ chính xác trích chọn thông tin.....................................44
Hình 3.16: Hình ước lượng độ nhầm lẫn việc xây dựng câu trả lời của bot (action)....45
Hình 3.17 : Bảng mô tả đoạn hội thoại test với bot.......................................................50
1
MỞ ĐẦU
“Chatbot will fundamentally revolutionize how computing is experienced by
everybody”
CEO Microsoft - Satya Nadella
Chatbot nói riêng hay trợ lý ảo nói chung đang ngày càng thông minh hơn, hoàn
thiện hơn. Nó giúp chúng ta có những tương tác và trải nghiệm tốt hơn đối với các
phần mềm.
Chúng ta sẽ điểm qua một số thành tựu mà chatbot đã đạt được (thống kê trên
infographic : the future of chatbots statistics & trends) [23]
 100000 : là số lượng chatbot trên Facebook Messenger tại thời điểm tháng
11/2018
 80% các doanh nghiệp muốn sử dụng chatbot vào năm 2020
 63% người dùng sẽ xem xét một tin nhắn online từ chatbot để kết nối với doanh
nghiệp hoặc nhãn hiệu
 59% số người đã từng sử dụng chatbot trên một app
 37.11% là số chatbot tăng trưởng trong suốt giai đoạn 2017-2021
 56% các công ty đa truyền thông và công nghệ sẽ chuyển qua sử dụng các công
nghệ chăm sóc khách hàng tự động trong tương lai gần, 33% sẽ có kế hoạch
chuyển sang dùng các robot sử dụng AI trước năm 2019
 75% là tỉ lệ thành công của việc bot tương tác với người dùng trong lĩnh vực y tế
và ngân hàng. 90% là chỉ số mong đợi sau này.
 30% là số chi phí giảm đi khi áp dụng chatbot vào lĩnh vực chăm sóc khách hàng
 8 tỷ USD là chi phí sẽ giảm khi áp dụng chatbot vào chăm sóc khách hàng đến
năm 2022 so với 20 triệu USD ở năm 2017
Vậy đâu là cơ sở để chatbot phát triển nhanh như vậy. Chúng ta sẽ điểm qua một số
các tác nhân chính:
Đầu tiên là do thời đại bùng nổ của tin nhắn và nó là cơ sở cho chatbot phát triển
mạnh mẽ:
 28,2 tỷ tin nhắn di động đã được gửi trong năm 2017, gấp đôi so với năm 2012.
[25]
 98% tin nhắn sẽ được đọc, với email tỷ lệ là 22%.
 Tỷ lệ gỡ bỏ các ứng dụng nhắn tin chỉ bằng một nửa so với các ứng dụng khác
2
 6 trong top các ứng dụng được cài đặt là ứng dụng nhắn tin: WhatsApp, Facebook
messenger, Wechat, Viber, Line, KakaoTalk, Telegram [24]
Bên cạnh đó cách mạng công nghệ 4.0 đã kéo theo nhiều thay đổi đáng kể đối với
nhiều lĩnh vực trong cuộc sống, đặc biệt nó thúc đẩy sự tiến bộ lớn trong lĩnh vực hiểu
và xử lý ngôn ngữ tư nhiên (NLU và NLP). Hàng loạt các thuật toán ra đời bắt đầu từ
năm 2013 đã giúp chatbot ngày càng thông minh và chính xác hơn.
Và cuối cùng là sự đầu tư nghiên cứu mạnh mẽ vào chatbot của các ông lớn trong
lĩnh vực công nghệ đã tạo ra hệ sinh thái, platform trên nền tảng các chatbot giúp
người dùng có thể tiếp cận một cách dễ dàng. Đây chính là tiền đề thúc đẩy cho sự
phát triển mạnh mẽ của chatbot trong những năm gần đây.
Kỷ nguyên của Chatbot mới chỉ đang bắt đầu nhưng chúng ta đã được hưởng
không ít lợi ích từ việc ứng dụng chúng. Với công nghệ ngày một phát triển, đặc biệt
là với những tiến bộ của trí tuệ nhân tạo trong vài năm trở lại đây, chúng ta hoàn toàn
có thể kỳ vọng ở một tương lai nơi chatbot không chỉ giúp con người giải đáp mọi khía
cạnh trong cuộc sống mà còn có thể thay con người đưa ra quyết định.
1. Động lực nghiên cứu
Ở nước ta, việc giải đáp thắc mắc của bộ phận chăm sóc khách hàng qua tin nhắn
trực tuyến đang được ưa chuộng. Tuy nhiên, việc này còn thực hiện một cách thủ công
và gặp nhiều khó khăn như: tốn rất nhiều thời gian và chi phí chi trả cho nhân viên chỉ
để trả lời những câu hỏi đơn giản và giống nhau. Chính vì vậy, nhu cầu cấp thiết là cần
một hệ thống điều khiển thông minh, tự động để mang lại hiệu quả cao hơn và Chatbot
là một sự lựa chọn hoàn hảo.
Hiện nay, các ứng dụng trò chuyện trực tuyến được mọi người sử dụng đang bắt
đầu trở thành một phương tiện ưa thích để giao tiếp với các doanh nghiệp và giải quyết
thắc mắc của khách hàng. Ứng dụng nhắn tin nhanh đã trở thành điểm đến hàng đầu
cho mọi thương hiệu nhằm tiếp cận người tiêu dùng, bởi vậy không có gì đáng ngạc
nhiên khi Chatbot ngày càng trở nên phổ biến.
Với một khối lượng lớn câu hỏi mà chúng ta phải giải quyết mỗi ngày như: khách
hàng hỏi về sản phẩm, dịch vụ, nhân viên hỏi về các quy chế công ty, con cái hỏi về
những sự việc chúng đang tò mò…ngoài ra chatbot còn được áp dụng trong rất nhiều
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…người dùng có thể nói chuyện tương tác với chúng hàng giờ, nó
3
trả lời câu hỏi của bạn theo cách nhân văn nhất và hiểu được tâm trạng của bạn với
ngôn ngữ bạn đang sử dụng.
Thời tiết: Poncho là ChatBot được thiết kế để trở thành một chuyên gia thời tiết,
ngoài dự báo thời tiết chúng còn gửi cảnh báo khi thời tiết xấu với sự chấp thuận của
người dùng.
Từ thiện: Để nâng cao nhận thức của con người về cuộc khủng hoảng nước ở
Ethiopia (dưới 50% dân số được sử dụng nước sạch), tổ chức từ thiện: Nước hợp tác
với Lokai để tạo ra Yeshi. Yeshi là một ChatBot đại diện các cô gái trẻ ở Ethiopia,
người phải đi bộ 2,5 giờ mỗi ngày để tìm nước sạch. Khi ai đó bắt đầu trò chuyện với
bot, Yeshi sẽ gửi hình ảnh, video, clip âm thanh và bản đồ để tạo ra trải nghiệm cảm
xúc sâu sắc giúp người dùng khám phá ra thực tế khắc nghiệt của người Ethiopia như
Yeshi.
Nhà hàng và các ngành bán lẻ: Khách hàng được Chatbot chào đón và được cung
cấp các tùy chọn menu như: chọn vị trí chổ ngồi, thanh toán và được thông báo khi
nào họ có thể bắt đầu lấy thức ăn của họ.
Khách sạn và Du lịch: Chatbot có thể giúp khách sạn trong một số lĩnh vực, bao
gồm quản lý thời gian, dịch vụ khách hàng và giảm chi phí nhân lực. Chúng có thể
giúp khách hàng với các câu hỏi cơ bản và yêu cầu. Chúng có thể được lập trình để trò
chuyện với khách bằng các ngôn ngữ khác nhau, làm cho các khách hàng nói chuyện
bằng ngôn ngữ địa phương của mình dễ dàng hơn.
Y tế: ChatBot này sẽ hỏi về các triệu chứng, các thông số cơ thể và lịch sử y tế, sau
đó biên soạn một danh sách các nguyên nhân gây ra hầu hết các triệu chứng và xếp
hạng chúng theo thứ tự nghiêm trọng. ChatBot có thể hướng dẫn bệnh nhân điều trị
các bệnh có thể được chữa khỏi mà không cần đến bác sĩ.
Hàng không: bạn có thể nhận tài liệu chuyến bay của mình 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.
2. Mục tiêu luận văn
Nghiên cứu các thành phần cấu tạo chatbot. Tìm hiểu các kỹ thuật xử lý ngôn ngữ
trong NLU, NLP như biểu diễn ngôn ngữ, phân loại ý định (intent classification hay
intent detection), trích xuất thông tin (information extraction), quản lý hội thoại…
trong việc xây dựng chatbot
4
Luận văn tập trung tìm cách giải quyết các bài toán mà chatbot ứng dụng trong
miền đóng (closed domain) và trả lời theo mô hình truy xuất thông tin (retrieval-
based). Mô hình truy xuất thông tin là mô hình trong đó, chatbot đưa ra những phản
hồi được chuẩn bị trước hoặc tuân theo những mô thức nhất định. Các hệ thống
chatbot được triển khai trong thực tế phần lớn tuân theo mô hình truy xuất thông tin và
được áp dụng trong những miền ứng dụng nhất định.
Với đề tài này thì luận văn sẽ tập trung xây dựng hệ thống chatbot hỗ trợ người
dùng trong lĩnh vực ngân hàng dựa vào framework Rasa và áp dụng những kiến thức
tìm hiểu về chatbot để có thể tùy chỉnh trên mã nguồn mở này. Đối tượng hỗ trợ người
dùng chatbot cụ thể ở đây là khách hàng cá nhân sử dụng trong hệ thống ebanking.
3. Cấu trúc luận văn
MỞ ĐẦU: Giới thiệu và đưa ra hướng nghiên cứu bài toán chatbot
CHƢƠNG I: Tổng quan hệ thống chatbot: Giới thiệu tổng quan hệ thống chatbot.
Cấu tạo và nhiệm vụ các thành phần hệ thống chatbot.
CHƢƠNG II: Một số kỹ thuật sử dụng trong chatbot: Hiểu và nắm được một số kỹ
thuật hay thuật toán cơ bản sử dụng trong chatbot để từ đó có thể điều chỉnh phù hợp
với ngôn ngữ tiếng việt, giúp chatbot xử lý thông minh hơn.
CHƢƠNG III: Xây dựng chatbot lĩnh vực ngân hàng : Xây dựng ứng dụng chatbot
cho ngân hàng trên nền tảng mã nguồn mở Rasa. Đưa ra những kết luận và đánh giá,
cải tiến hệ thống.
KẾT LUẬN : Đưa ra những kết luận, đánh giá và định hướng nghiên cứu tiếp theo
PHỤ LỤC: Danh sách các đoạn hội thoại với bot được đính kèm ở phần thử nghiệm
5
CHƢƠNG 1 : TỔNG QUAN HỆ THỐNG CHATBOT
Chương này sẽ giới thiệu tổng quan về hệ thống chatbot, cấu trúc các thành
phần và những vấn đề khi xây dựng hệ thống chatbot.
1.1 Giới thiệu
Hệ thống đối thoại người máy hay còn gọi với thuật ngữ là chatbot 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. Phạm vi và sự phức tạp của
ChatBot được xác định bởi thuật toán của người tạo nên chúng. ChatBot thường được
ứng dụng trong nhiều lĩnh vực như thương mại điện tử, dịch vụ khách hàng, y tế, tài
chính ngân hàng, các dịch vụ giải trí…
Chatbot có thể được chia thành 2 loại:
- Hệ thống hướng mục tiêu trên một miền ứng dụng (Task-Oriented)
- Hệ thống không có định hướng mục tiêu (chit-chat)
Miền mở (Open Domain): Mô hình trả lời tự động trên miền mở cho phép người
dùng có thể tham gia trò chuyện với một chủ đề bất kỳ, không nhất thiết phải có một
mục tiêu rõ ràng hay một ý định cụ thể nào. Các cuộc trò chuyện trên mạng xã hội như
Facebook, Twitter thường là miền mở, chúng có thể đi vào tất cả các chủ đề. Số lượng
các chủ đề thảo luận được đề cập đến là không giới hạn, do đó, tri thức yêu cầu được
tạo ra để trả lời các câu đối thoại thuộc miền mở trở nên khó hơn. Tuy nhiên, việc thu
thập trích rút dữ liệu từ miền này khá phong phú và đơn giản.
Miền đóng (Close Domain): Mô hình trả lời tự động thuộc miền đóng thường tập
trung vào trả lời các câu hỏi đối thoại liên quan đến một miền cụ thể, ví dụ như: Y tế,
Giáo dục, Du lịch, Mua sắm, ..
Trong một miền đóng cụ thể, không gian các mẫu hỏi input và output là có giới
hạn, bởi vì các hệ thống này đang cố gắng để đạt được một mục tiêu rất cụ thể. Hệ
thống hỗ trợ kỹ thuật (Technical Customer Support) hay tư vấn và hỗ trợ mua hàng
(Shopping Assistants) là các ứng dụng thuộc miền đóng. Các hệ thống này không thể
đối thoại về “Chính trị” hay “Pháp luật”, chúng chỉ cần thực hiện các nhiệm vụ cụ thể
một cách hiệu quả nhất có thể. Chắc chắn, người dùng vẫn có thể hỏi đáp bất cứ gì,
nhưng hệ thống không yêu cầu phải xử lý những trường hợp ngoại lệ này.
6
Mỗi cách tiếp cận bài toán đều có hướng giải quyết khác nhau dẫn tới các kỹ thuật
sử dụng khác nhau. Trong luận văn này, tôi sẽ tập trung vào giải quyết trƣờng hợp
thứ nhất là bài toán hƣớng mục tiêu trên một miền ứng dụng đóng.
1.2 Cấu trúc các thành phần hệ thống chatbot
Hình 1.1: Cấu trúc các thành phần cơ bản hệ thống chatbot [12]
Chatbot có 3 thành phần chính là hiểu ngôn ngữ tự nhiên (NLU), quản lý hội thoại
(DM), thành phần sinh ngôn ngữ (NLG). Các thành phần nhận dạng giọng nói
Speech Recognition (text to speech hay speech to text) là các thành phần tăng cường.
Mỗi thành phần trong chatbot đều có vai trò riêng:
 NLU: bao gồm việc xử lý ngôn ngữ tự nhiên (NLP) có nhiệm vụ xác định
được ý định câu hỏi(intent classification) và trích chọn thông tin (slots filter)
 DM: Quản lý hội thoại có nhiệm vụ xác định được hành động (action) tiếp
theo dựa vào trạng thái hành động trước đó hay ngữ cảnh hội thoại. Các ngữ
cảnh này phải được đối chiếu trong các kịch bản dựng sẵn (history) đã đào tạo
cho bot. Thành phần này cũng đảm nhiệm việc lấy dữ liệu từ hệ thống khác
qua các API gọi trong action
 NLG: là thành phần sinh ngôn ngữ dựa vào chính sách (policy) và hành động
được xác định trong DM thông qua các tập hội thoại. NGL có thể được sinh ra
7
câu trả lời dựa vào tập mẫu câu trả lời (pre-defined template) đã đào tạo cho
bot.
Để rõ chi tiết luồng xử lý tin nhắn từ các thành phần chatbot ta xem mô hình 1.2:
Hình 1.2: Mô hình các thành phần xử lý trong chatbot [1]
1.3 Hiểu ngôn ngữ tự nhiên (NLU)
Đây có thể nói là thành phần quan trọng nhất của chatbot. Chatbot có thông minh
hay không thì đây là thành phần quyết định. Mục tiêu của thành phần này là trích xuất
ra 3 thành phần thông tin từ câu nói của người dùng:
 Đầu tiên là phân loại lĩnh vực (domain classification), nó có thể là lĩnh vực
ngân hàng, y tế hay bảo hiểm. Nếu trong trường hợp chỉ có một lĩnh vực thì
không cần thiết cho bước phân loại này.
 Tiếp đến là phân loại ý định (intent classification), ví dụ như xác định được ý
định tra cứu thông tin tài khoản hoặc ý định kiểm tra số dư.
 Cuối cùng là bước trích xuất thông tin (slot fillter hay entity extraction) trong
câu hỏi người dùng. Ví dụ ta phải trích chọn được thông tin số tháng trong câu
hỏi người dùng: “lãi xuất kỳ hạn 3 tháng là bao nhiêu”. Từ việc trích xuất được
thông tin 3 tháng thì chatbot mới có cơ sở trả lời cho người dùng.
8
NLU xử lý tin nhắn người dùng bằng một đường ống (pipeline) nơi mà cấu hình các
bước xử lý liên tiếp theo tuần tự :
Hình 1.3: Các bước xử lý chính trong pipeline của NLU [1]
Trong đường ống này thì bạn có thể tùy chỉnh các thành phần từ bước tiền xử lý dữ
liệu, mô hình hóa ngôn ngữ, các thuật toán dùng để tách từ và trích xuất thông tin thực
thể…
Để chi tiết các bước xử lý ta xem trong mô hình 1.4: Trong đó bước entity extraction
chính là bước slot filling ở hình 1.3
Hình 1.4: Các bước xử lý trong NLU [2]
Phân loại tên
miền (Domain
Classification)
Phân loại ý
định (intent
Classification)
Trích chọn
thông tin (Entity
Extraction)
“Lãi suất vay 12 tháng?” {“loan”:”vay”,“term”:”12 tháng”}
“Lãi suất vay 12 tháng?” {intent:” interest”}
Lãi suất vay
12 tháng?
Hiểu ngôn ngữ
tự nhiên (NLU)
Vector hóa ngôn ngữ
(Vectorrization)
Phân loại ý định
(intent classification)
Trích xuất thông tin thực
thể (entity extraction)
Nhận dạng tên thực thể
(Name entity recognition)
Phân tích cú pháp
(chunker)
Gán nhãn từ loại
(Part of Speech Tagger)
Thuật toán tách từ
(Tokenizer)
Phân loại ý định trong pipelined
Trích xuất thông tin trong pipelined
9
Để phân loại được ý định câu người dùng thì ta cần mô hình hóa ngôn ngữ tức là
việc biểu diễn ngôn ngữ dưới dạng vector số học cho máy có thể hiểu được
(vectorization). Phương pháp phổ biến nhất hiện tại là word embedding (nhúng từ).
Tập nhúng từ là tên chung cho một tập hợp các mô hình ngôn ngữ và các phương pháp
học đặc trưng trong xử lý ngôn ngữ tự nhiên (NLP), nơi các từ hoặc cụm từ từ vựng
được ánh xạ tới vectơ số thực. Về mặt khái niệm, nó liên quan đến việc nhúng toán
học từ một không gian với một chiều cho mỗi từ vào một không gian vectơ liên tục với
kích thước thấp hơn nhiều. Một số phương pháp biểu diễn phổ biến như Word2Vec,
GloVe hay mới hơn là FastText sẽ được giới thiệu trong phần sau.
Sau khi mô hình hóa ngôn ngữ bao gồm dữ liệu đầu vào training cho bot thì việc
xác định ý định người dùng từ câu hỏi người dùng dựa trên tập đã training là bước
phân loại ý định (intent classification) hay phân loại văn bản. Ở bước này ta có thể
dùng một số kỹ thuật như: Naive Bayes, Decision Tree (Random Forest), Vector
Support Machine (SVM), Convolution Neural Network (CNN), Recurrent Neural
Network (RNN), Long Short-Term Memory (LSTM, Bi-LSTM). Hầu hết các chatbot
hiện tại đều ứng dụng mô hình deep learning như RNN và LSTM để phân loại ý định
người dùng. Bài toán thách thức lớn nhất cho các chatbot ở bước này là xác định nhiều
ý định(multiple intents) trong một câu nói người dùng. Ví dụ nếu bạn nói “xin chào,
kiểm tra cho tôi số dư tài khoản” thì bot phải xác định được 2 ý định “chào hỏi” và
“kiểm tra số dư” trong câu nói người dùng. Nếu bot có thể hiểu và trả lời được câu hỏi
loại này sẽ giúp việc tương tác với bot trở nên tư nhiên hơn.
Tiếp đến là việc trích xuất thông tin trong câu hội thoại người dùng. Các thông tin
cần trích xuất thường dưới dạng số, chuỗi hoặc thời gian và chúng phải được khai báo
và huấn luyện trước.
Phân tách các từ (Tokenization hay word segmention): Tách từ là một quá trình xử
lý nhằm mục đích xác định ranh giới của các từ trong câu văn, cũng có thể hiểu đơn
giản rằng tách từ là quá trình xác định các từ đơn, từ ghép… có trong câu. Đối với xử
lý ngôn ngữ, để có thể xác định cấu trúc ngữ pháp của câu, xác định từ loại của một từ
trong câu, yêu cầu nhất thiết đặt ra là phải xác định được đâu là từ trong câu. Vấn đề
này tưởng chừng đơn giản với con người nhưng đối với máy tính, đây là bài toán rất
khó giải quyết. Thông thường thì các ngôn ngữ phân tách các từ bởi khoảng trắng
nhưng đối với ngôn ngữ tiếng việt thì có rất nhiều từ ghép và cụm từ. Ví dụ từ ghép
“tài khoản” được tạo bởi 2 từ đơn “tài” và “khoản”. Có một số thuật toán hỗ trợ giải
quyết bài toán này như mô hình so khớp từ dài nhất (longest matching), so khớp cực
10
đại (Maximum Matching), Markov ẩn (Hidden Markov Models- HMM) hay mô hình
CRF (conditinal random field)…
1.3.1 Xác định ý định ngƣời dùng
Hình 1.5: Mô hình các bước xác định ý định
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
 Trích xuất đặc trưng
 Huấn luyện mô hình
 Phân lớp
Bước tiền xử lý dữ liệu chính là thao tác “làm sạch” dữ liệu như: loại bỏ các thông
tin dư thừa, chuẩn hoá dữ liệu và chuyển các từ viết sai chính tả thành đúng chính tả,
chuẩn hoá các từ viết tắt… Bước tiền xử lý dữ liệu có vai trò quan trọng trong hệ
thống chatbot. Nếu dữ liệu đầu vào có xử lý ở bước này thì sẽ làm tăng khả năng năng
độ chính xác cũng như sự thông minh cho bot.
Tiếp đến là bước trích xuất đặc trưng (feature extraction hay feature engineering)
từ những dữ liệu đã được làm sạch. Trong mô hình học máy truyền thống (trước khi
mô hình học sâu được áp dụng rộng rãi), bướ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. Để trích xuất được những đặc trưng tốt, chúng ta
cần phân tích dữ liệu khá tỉ mỉ và cần cả những tri thức chuyên gia trong từng miền
ứng dụng cụ thể.
Bước huấn luyện mô hình nhận đầu vào là các đặc trưng đã được trích xuất và áp
dụng các thuật toán học máy để học ra một mô hình phân lớp. Các mô hình phân lớp
có thể là các luật phân lớp (nếu sử dụng decision tree) hoặc là các vector trọng số
11
tương ứng với các đặc trưng được trích xuất (như trong các mô hình logistic
regression, SVM, hay mạng Neural).
Sau khi có một mô hình phân lớp intent, chúng ta có thể sử dụng nó để phân lớp
một câu hội thoại mới. Câu hội thoại này cũng đi qua các bước tiền xử lý và trích xuất
đặc trưng, sau đó mô hình phân lớp sẽ xác định “điểm số” cho từng intent trong tập
các intent và đưa ra intent có điểm cao nhất
Để đưa ra hỗ trợ được chính xác, chatbot cần xác định được ý định (intent) đó của
người dùng. Việc xác định ý định của người dùng sẽ quyết định hội thoại tiếp theo
giữa người và chatbot sẽ diễn ra như thế nào. Vì thế, nếu xác định sai ý định người
dùng, chatbot sẽ đưa ra những phản hồi không đúng, không hợp ngữ cảnh. Khi đó,
người dùng có thể thấy chán ghét và không quay lại sử dụng hệ thống. Bài toán xác
định ý định người dùng vì thế đóng vai trò rất quan trọng trong hệ thống chatbot.
Đối với miền ứng dụng đóng, chúng ta có thể giới hạn số lượng ý định của người
dùng nằm trong một tập hữu hạn những ý định đã được định nghĩa sẵn, có liên quan
đến những nghiệp vụ mà chatbot có thể hỗ trợ. Với giới hạn này, bài toán xác định ý
định người dùng có thể quy về bài toán phân lớp văn bản. Với đầu vào là một câu giao
tiếp của người dùng, hệ thống phân lớp sẽ xác định ý định tương ứng với câu đó trong
tập các intent đã được định nghĩa trước.
Để xây dựng một mô hình phân lớp intent, chúng ta cần một tập dữ liệu huấn luyện
bao gồm các cách diễn đạt khác nhau cho mỗi intent. Ví dụ, cùng một mục đích hỏi về
số dư tài khoản người dùng có thể dùng những cách diễn đạt sau:
 Thông tin tài khoản?
 Tra cứu tài khoản?
 Số dư tài khoản?
 Số tiền trong tài khoản?
Có thể nói, bước tạo dữ liệu huấn luyện cho bài toán phân lớp intent là một trong
những công việc quan trọng nhất khi phát triển hệ thống chatbot và ảnh hưởng lớn tới
chất lượng sản phẩm của hệ thống chatbot về sau. Công việc này cũng đòi hỏi thời
gian, công sức khá lớn của nhà phát triển chatbot.
1.4 Quản lý hội thoại (DM)
Trong các phiên trao đổi dài (long conversation) giữa người và chatbot, chatbot sẽ
cần ghi nhớ những thông tin về ngữ cảnh (context) hay quản lý các trạng thái hội thoại
12
(dialog state). Vấn đề quản lý hội thoại (dialoge management) khi đó là quan trọng để
đảm bảo việc trao đổi giữa người và máy là thông suốt.
Chức năng của thành phần quản lý hội thoại là nhận đầu vào từ thành phần NLU,
quản lý các trạng thái hội thoại (dialogue state), ngữ cảnh hội thoại (dialogue context),
và truyền đầu ra cho thành phần sinh ngôn ngữ (Natural Language Generation, viết tắt
là NLG).
Hình 1.6: Mô hình quản lý trạng thái và quyết định action trong hội thoại [2]
Trạng thái hội thoại (dialog state) được lưu lại và dựa vào tập luật hội thoại (dialog
policy) để quyết định hành động tiếp theo cho câu trả lời của bot trong một kịch bản
hội thoại, hay hành động (action) chỉ phụ thuộc vào trạng thái (dialog state) trước của
nó.
Ví dụ module quản lý dialogue trong một chatbot phục vụ đặt vé máy bay cần biết
khi nào người dùng đã cung cấp đủ thông tin cho việc đặt vé để tạo một ticket tới hệ
thống hoặc khi nào cần phải xác nhận lại thông tin do người dùng đưa vào. Hiện nay,
các sản phẩm chatbot thường dùng mô hình máy trạng thái hữu hạn (Finite State
Automata – FSA), mô hình Frame-based (Slot Filling), hoặc kết hợp hai mô hình này.
Một số hướng nghiên cứu mới có áp dụng mô hình ANN vào việc quản lý hội thoại
giúp bot thông minh hơn, chi tiết xem mục 2.5
13
1.4.1 Mô hình máy trạng thái hữu hạn FSA
Hình 1.7: Quản lý hội thoại theo mô hình máy trạng thái hữu hạn FSA
Mô hình FSA quản lý hội thoại đơn giản nhất. Ví dụ hệ thống chăm sóc khách
hàng của một công ty viễn thông, phục vụ cho những khách hàng than phiền về vấn đề
mạng chậm. Nhiệm vụ của chatbot là hỏi tên khách hàng, số điện thoại, tên gói
Internet khách hàng đang dùng, tốc độ Internet thực tế của khách hàng. Hình vẽ minh
hoạ một mô hình quản lý hội thoại cho chatbot chăm sóc khách hàng. Các trạng thái
của FSA tương ứng với các câu hỏi mà dialogue manager hỏi người dùng. Các cung
nối giữa các trạng thái tương ứng với các hành động của chatbot sẽ thực hiện. Các
hành động này phụ thuộc phản hồi của người dùng cho các câu hỏi. Trong mô hình
FSA, chatbot là phía định hướng người sử dụng trong cuộc hội thoại.
Ưu điểm của mô hình FSA là đơn giản và chatbot sẽ định trước dạng câu trả lời
mong muốn từ phía người dùng. Tuy nhiên, mô hình FSA không thực sự phù hợp cho
các hệ thống chatbot phức tạp hoặc khi người dùng đưa ra nhiều thông tin khác nhau
trong cùng một câu hội thoại. Trong ví dụ chatbot ở trên, khi người dùng đồng thời
cung cấp cả tên và số điện thoại, nếu chatbot tiếp tục hỏi số điện thoại, người dùng có
thể cảm thấy khó chịu.
14
1.4.2 Mô hình Frame-based
Mô hình Frame-based (hoặc tên khác là Form-based) có thể giải quyết vấn đề mà
mô hình FSA gặp phải. Mô hình Frame-based dựa trên các frame định sẵn để định
hướng cuộc hội thoại. Mỗi frame sẽ bao gồm các thông tin (slot) cần điền và các câu
hỏi tương ứng mà dialogue manager hỏi người dùng. Mô hình này cho phép người
dùng điền thông tin vào nhiều slot khác nhau trong frame. Hình vẽ là một ví dụ về một
frame cho chatbot ở trên.
Hình 1.8: Frame cho chatbot hỏi thông tin khách hàng
Thành phần quản lý dialogue theo mô hình Frame-based sẽ đưa ra câu hỏi cho
khách hàng, điền thông tin vào các slot dựa trên thông tin khách hàng cung cấp cho
đến khi có đủ thông tin cần thiết. Khi người dùng trả lời nhiều câu hỏi cùng lúc, hệ
thống sẽ phải điền vào các slot tương ứng và ghi nhớ để không hỏi lại những câu hỏi
đã có câu trả lời.
Trong các miền ứng dụng phức tạp, một cuộc hội thoại có thể có nhiều frame khác
nhau. Vấn đề đặt ra cho người phát triển chatbot khi đó là làm sao để biết khi nào cần
chuyển đổi giữa các frame. Cách tiếp cận thường dùng để quản lý việc chuyển điều
khiển giữa các frame là định nghĩa các luật (production rule). Các luật này dựa trên
một số các thành tố như câu hội thoại hoặc câu hỏi gần nhất mà người dùng đưa ra.
1.5 Thành phần sinh ngôn ngữ (NLG)
NLG là thành phần sinh câu trả lời của chatbot. Nó dựa vào việc ánh xạ các hành
động của quản lý hội thoại vào ngôn ngữ tự nhiên để trả lời người dùng.
Có 4 phương pháp ánh xạ hay dùng là: Template-Base, Plan-based, Class-base,
RNN-base
15
1.5.1 Template-based NLG
Phương pháp ánh xạ câu trả lời này là dùng những câu mẫu trả lời của bot đã được
định nghĩa từ trước để sinh câu trả lời
Hình 1.9: Phương pháp sinh ngôn ngữ dựa trên tập mẫu câu trả lời [1]
- Ƣu điểm: đơn giản, kiểm soát dễ dàng. Phù hợp cho các bài toán miền đóng.
- Nhƣợc điểm: tốn thời gian định nghĩa các luật, không mang tính tự nhiên trong
câu trả lời. Đối với các hệ thống lớn thì khó kiểm soát các luật dẫn đến hệ thống
cũng khó phát triển và duy trì.
1.5.2 Plan-based NLG
Hình 1.10: Phương pháp sinh ngôn ngữ Plan-based [1]
- Ƣu điểm: Có thể mô hình hóa cấu trúc ngôn ngữ phức tạp
- Nhƣợc điểm: Thiết kế nặng nề, đòi hỏi phải rõ miền kiến thức
16
1.5.3 Class-based NLG
Hình 1.11: Phương pháp sinh ngôn ngữ class-based [1]
Phương pháp này dựa trên việc cho bot học những câu trả lời đầu vào đã được gán
nhãn. Ứng với các hành động (action) và thông tin(slot) từ quản lý hội thoại thì bot sẽ
đưa ra câu trả lời gần nhất dựa trên tập dữ liệu trả lời được đào tạo trước đó.
- Ƣu điểm: dễ dàng thực thi
- Nhƣợc điểm: phụ thuộc vào dữ liệu trả lời đã được gán nhãn đào tạo trước đó.
Bên cạnh đó việc tính toán điểm số không hiệu quả cũng dân đến việc sinh câu
trả lời sai
17
CHƢƠNG 2 : MỘT SỐ KỸ THUẬT SỬ DỤNG TRONG CHATBOT
Chương này giới thiệu một số kiến thức nền tảng về mạng nơ ron nhân tạo, cách
thức hoạt động của mạng nơ ron và một số các kỹ thuật được ứng dụng trong việc xử
lý ngôn ngữ tự nhiên nói riêng hay xây dựng chatbot nói chung.
2.1Kiến trúc mạng nơ ron nhân tạo
Mạng nơ ron nhân tạo (Artificial Neural Network – ANN) là một mô hình xử lý
thông tin được mô phỏng dựa trên hoạt động của hệ thống thần kinh của sinh vật, bao
gồm số lượng lớn các Nơ-ron được gắn kết để xử lý thông tin. ANN hoạt động giống
như bộ não của con người, được học bởi kinh nghiệm (thông qua việc huấn luyện), có
khả năng lưu giữ các tri thức và sử dụng các tri thức đó trong việc dự đoán các dữ liệu
chưa biết (unseen data).
Một mạng nơ-ron là một nhóm các nút nối với nhau, mô phỏng mạng nơ-ron thần
kinh của não người. Mạng nơ ron nhân tạo được thể hiện thông qua ba thành phần cơ
bản: mô hình của nơ ron, cấu trúc và sự liên kết giữa các nơ ron. Trong nhiều trường
hợp, mạng nơ ron nhân tạo là một hệ thống thích ứng, tự thay đổi cấu trúc của mình
dựa trên các thông tin bên ngoài hay bên trong chạy qua mạng trong quá trình học.
Hình 12: Kiến trúc mạng nơ ron nhân tạo [15]
Kiến trúc chung của một ANN gồm 3 thành phần đó là Input Layer, Hidden
Layer và Output Layer
Trong đó, lớp ẩn (Hidden Layer) gồm các nơ-ron, nhận dữ liệu input từ các Nơ-
ron ở lớp (Layer) trước đó và chuyển đổi các input này cho các lớp xử lý tiếp theo.
Trong một mạng ANN có thể có nhiều Hidden Layer.
18
Lợi thế lớn nhất của các mạng ANN là khả năng được sử dụng như một cơ chế xấp
xỉ hàm tùy ý mà “học” được từ các dữ liệu quan sát. Tuy nhiên, sử dụng chúng không
đơn giản như vậy, một số các đặc tính và kinh nghiệm khi thiết kế một mạng nơ-ron
ANN.
Phương pháp này là tính toán tỷ lệ chính xác dữ liệu đầu ra (output) từ dữ liệu đầu
vào (input) bằng cách tính toán các trọng số cho mỗi kết nối (connection) từ các lần
lặp lại trong khi “huấn luyện” dữ liệu cho Chatbot. Mỗi bước “huấn luyện” dữ liệu cho
Chatbot sẽ sửa đổi các trọng số dẫn đến dữ liệu output được xuất ra với độ chính xác
cao.
 Chọn mô hình: Điều này phụ thuộc vào cách trình bày dữ liệu và các ứng dụng.
Mô hình quá phức tạp có xu hướng dẫn đền những thách thức trong quá trình học.
 Cấu trúc và sự liên kết giữa các nơ-ron
 Thuật toán học: Có hai vấn đề cần học đối với mỗi mạng ANN, đó là học tham
số của mô hình (parameter learning) và học cấu trúc (structure learning). Học tham số
là thay đổi trọng số của các liên kết giữa các nơ-ron trong một mạng, còn học cấu trúc
là việc điều chỉnh cấu trúc mạng bằng việc thay đổi số lớp ẩn, số nơ-ron mỗi lớp và
cách liên kết giữa chúng. Hai vấn đề này có thể được thực hiện đồng thời hoặc tách
biệt. Nếu các mô hình, hàm chi phí và thuật toán học được lựa chọn một cách thích
hợp, thì mạng ANN sẽ cho kết quả có thể vô cùng mạnh mẽ và hiệu quả.
Hình 13: Quá trình xử lý thông tin của một mạng nơ-ron nhân tạo [15]
Inputs: Mỗi Input tương ứng với 1 đặc trưng của dữ liệu. Ví dụ như trong ứng
dụng của ngân hàng xem xét có chấp nhận cho khách hàng vay tiền hay không thì mỗi
input là một thuộc tính của khách hàng như thu nhập, nghề nghiệp, tuổi, số con,…
Output: Kết quả của một ANN là một giải pháp cho một vấn đề, ví dụ như với bài
toán xem xét chấp nhận cho khách hàng vay tiền hay không thì output là yes hoặc no.
Connection Weights (Trọng số liên kết) : Đây là thành phần rất quan trọng của
một ANN, nó thể hiện mức độ quan trọng, độ mạnh của dữ liệu đầu vào đối với quá
trình xử lý thông tin chuyển đổi dữ liệu từ Layer này sang layer khác. Quá trình học
19
của ANN thực ra là quá trình điều chỉnh các trọng số Weight của các dữ liệu đầu vào
để có được kết quả mong muốn.
Summation Function (Hàm tổng): Tính tổng trọng số của tất cả các input được
đưa vào mỗi Nơ-ron. Hàm tổng của một Nơ-ron đối với n input được tính theo công
thức sau:
Transfer Function (Hàm chuyển đổi): Hàm tổng của một nơ-ron cho biết khả
năng kích hoạt của nơ-ron đó còn gọi là kích hoạt bên trong. Các nơ-ron này có thể
sinh ra một output hoặc không trong mạng ANN, nói cách khác rằng có thể output của
1 Nơ-ron có thể được chuyển đến layer tiếp trong mạng Nơ-ron theo hoặc không. Mối
quan hệ giữa hàm tổng và kết quả output được thể hiện bằng hàm chuyển đổi.
Việc lựa chọn hàm chuyển đổi có tác động lớn đến kết quả đầu ra của mạng ANN.
Hàm chuyển đổi phi tuyến được sử dụng phổ biến trong mạng ANN là sigmoid hoặc
tanh.
Trong đó, hàm tanh là phiên bản thay đổi tỉ lệ của sigmoid , tức là khoảng giá trị
đầu ra của hàm chuyển đổi thuộc khoảng [-1, 1] thay vì [0,1] của Sigmoid nên chúng
còn gọi là hàm chuẩn hóa (Normalized Function).
Kết quả xử lý tại các nơ-ron (Output) đôi khi rất lớn, vì vậy hàm chuyển đổi được
sử dụng để xử lý output này trước khi chuyển đến layer tiếp theo. Đôi khi thay vì sử
dụng Transfer Function người ta sử dụng giá trị ngưỡng (Threshold value) để kiểm
soát các output của các neuron tại một layer nào đó trước khi chuyển các output này
đến các Layer tiếp theo. Nếu output của một neuron nào đó nhỏ hơn Threshold thì nó
sẻ không được chuyển đến Layer tiếp theo.
Mạng nơ-ron của chúng ta dự đoán dựa trên lan truyền thẳng (forward propagation)
là các phép nhân ma trận cùng với activation function để thu được kết quả đầu ra. Nếu
input x là vector 2 chiều thì ta có thể tính kết quả dự đoán 𝑦 bằng công thức :
20
Trong đó, 𝑧𝑖 là input của layer thứ 𝑖, 𝑎𝑖 là output của layer thứ 𝑖 sau khi áp dụng
activation function. 𝑊1, 𝑏1, 𝑊2, 𝑏2 là các tham số (parameters) cần tìm của mô hình
mạng nơ-ron. Huấn luyện để tìm các tham số cho mô hình tương đương với việc tìm
các tham số 𝑊1, 𝑏1, 𝑊2, 𝑏2 sao cho hàm lỗi của mô hình đạt được là thấp nhất. Ta gọi
hàm lỗi của mô hình là loss function. Đối với softmax function, ta dùng crossentropy
loss (còn gọi là negative log likelihood). Nếu ta có N ví dụ dữ liệu huấn luyện, và C
nhóm phân lớp, khi đó hàm lỗi giữa giá trị dự đoán 𝑦 và 𝑦 được tính:
Ý nghĩa công thức trên nghĩa là: lấy tổng trên toàn bộ tập huấn luyện và cộng dồn
vào hàm loss nếu kết quả phân lớp sai. Độ dị biệt giữa hai giá trị 𝑦 và 𝑦 càng lớn thì
độ lỗi càng cao. Mục tiêu của chúng ta là tối thiểu hóa hàm lỗi này. Ta có thể sử dụng
phương pháp gradient descent để tối tiểu hóa hàm lỗi. Có hai loại gradient descent,
một loại với fixed learning rate được gọi là batch gradient descent, loại còn lại có
learning rate thay đổi theo quá trình huấn luyện được gọi là SGD (stochastic gradient
descent) hay minibatch gradient descent.
Gradient descent cần các gradient là các vector có được bằng cách lấy đạo
hàm của loss function theo từng tham số để tính các gradient
này, ta sử dụng thuật toán lan truyền ngược (backpropagation). Đây là cách hiệu
quả để tính gradient khởi điểm từ output layer.
Áp dụng giải thuật lan truyền ngược ta có các đại lượng:
( )
2.2Mạng nơ ron hồi quy RNN
Ý tưởng của RNN đó là thiết kế một Neural Network sao cho có khả năng xử lý
được thông tin dạng chuỗi (sequential information), ví dụ một câu là một chuỗi gồm
nhiều từ. Recurrent có nghĩa là thực hiện lặp lại cùng một tác vụ cho mỗi thành phần
21
trong chuỗi. Trong đó, kết quả đầu ra tại thời điểm hiện tại phụ thuộc vào kết quả tính
toán của các thành phần ở những thời điểm trước đó. Nói cách khác, RNN là một mô
hình có trí nhớ (memory), có khả năng nhớ được thông tin đã tính toán trước đó.
Không như các mô hình Neural Network truyền thống đó là thông tin đầu vào (input)
hoàn toàn độc lập với thông tin đầu ra (output). Về lý thuyết, RNN có thể nhớ được
thông tin của chuỗi có chiều dài bất kì, nhưng trong thực tế mô hình này chỉ nhớ được
thông tin ở vài bước trước đó. Về cơ bản một mạng RNN có dạng:
Hình 14: Mạng RNN [15]
Mô hình trên mô tả phép triển khai nội dung của một RNN. Triển khai ở đây có thể
hiểu đơn giản là ta vẽ ra một mạng nơ-ron chuỗi tuần tự. Ví dụ ta có một câu gồm 5
chữ “Thông tin tài khoản”, thì mạng nơ-ron được triển khai sẽ gồm 4 tầng nơ-ron
tương ứng với mỗi chữ một tầng. Lúc đó việc tính toán bên trong RNN được thực hiện
như sau:
xt : là đầu vào tại bước t. Ví dụ, x1 là một vec-tơ one-hot tương ứng với từ thứ 2 của
câu.
st : là trạng thái ẩn tại t. Nó chính là bộ nhớ của mạng. st được tính toán dựa trên cả
các trạng thái ẩn phía trước và đầu vào tại bước đó: st = f(Uxt+Wst−1). Hàm f thường là
một hàm phi tuyến tính như tang hyperbolic (tanh) hay ReLu. Để làm phép toán cho phần
tử ẩn đầu tiên ta cần khởi tạo thêm s−1, thường giá trị khởi tạo được gắn bằng 0
ot : là đầu ra tại bước t. Ví dụ, ta muốn dự đoán từ tiếp theo có thể xuất hiện trong câu
thì ot chính là một vectơ xác xuất các từ trong danh sách từ vựng của ta: ot = softmax(Vst)
Trong vài năm qua, các nhà nghiên cứu đã phát triển nhiều loại mạng RNNs ngày
càng tinh vi để giải quyết các mặt hạn chế của RNN. Dưới đây, là một số phiên bản
mở rộng của RNN.
Bidirectinal RNN (2 chiều) : dựa trên ý tưởng output tại thời điểm t không chỉ
phụ thuộc vào các thành phần trước đó mà còn phụ thuộc vào các thành phần trong
22
tương lai. Ví dụ, để dự đoán một từ bị thiếu (missing word) trong chuỗi, ta cần quan
sát các từ bên trái và bên phải xung quanh từ đó. Mô hình này chỉ gồm hai RNNs nạp
chồng lên nhau. Trong đó, các hidden state được tính toán dựa trên cả hai thành phần
bên trái và bên phải của mạng.
Hình 15: Mạng RNN 2 chiều [15]
Deep RNN : tương tự như Bidirectional RNN, điểm khác biệt đó là mô hình này
gồm nhiều tầng Bidirectional RNN tại mỗi thời điểm. Mô hình này sẽ cho ta khả năng
thực hiện các tính toán nâng cao nhưng đòi hỏi tập huấn luyện phải đủ lớn.
Hình 16: Mạng RNN nhiều tầng [15]
Long short-term memory network (LSTM) : mô hình này có cấu trúc tương tự
như RNNs nhưng có cách tính toán khác đối với các trạng thái ẩn. Memory trong
LSTMs được gọi là cells (hạt nhân). Ta có thể xem đây là một hộp đen nhận thông tin
đầu vào gồm hidden state và giá trị . Bên trong các hạt nhân này, chúng sẽ quyết định
thông tin nào cần lưu lại và thông tin nào cần xóa đi, nhờ vậy mà mô hình này có thể
lưu trữ được thông tin dài hạn.
23
2.3Mạng Long short Term Memory (LSTM)
2.3.1 Vấn đề phụ thuộc quá dài
Ý tưởng ban đầu của RNN là kết nối những thông tin trước đó nhằm hỗ trợ cho các
xử lý hiện tại. Nhưng đôi khi, chỉ cần dựa vào một số thông tin gần nhất để thực hiện
tác vụ hiện tại. Ví dụ, trong mô hình hóa ngôn ngữ, chúng ta cố gắng dự đoán từ tiếp
theo dựa vào các từ trước đó. Nếu chúng ta dự đoán từ cuối cùng trong câu “đám mây
bay trên bầu trời”, thì chúng ta không cần truy tìm quá nhiều từ trước đó, ta có thể
đoán ngay từ tiếp theo sẽ là “bầu trời”. Trong trường hợp này, khoảng cách tới thông
tin liên quan được rút ngắn lại, nạng RNN có thể học và sử dụng các thông tin quá
khứ.
Hình 17: RNN phụ thuộc short-term [17]
Nhưng cũng có trường hợp chúng ta cần nhiều thông tin hơn, nghĩa là phụ thuộc
vào ngữ cảnh. Ví dụ nhưng khi dự đoán từ cuối cùng trong đoạn văn bản “Tôi sinh ra
và lớn lên ở Việt Nam … Tôi có thể nói thuần thục Tiếng Việt.” Từ thông tin gần nhất
cho thấy rằng từ tiếp theo là tên một ngôn ngữ, nhưng khi chúng ta muốn biết cụ thể
ngôn ngữ nào, thì cần quay về quá khứ xa hơn, để tìm được ngữ cảnh Việt Nam. Và
như vậy, RRN có thể phải tìm những thông tin có liên quan và số lượng các điểm đó
trở nên rất lớn. Không được như mong đợi, RNN không thể học để kết nối các thông
tin lại với nhau:
Hình 18: RNN phụ thuộc long-term [17]
24
Về lý thuyết, RNN hoàn toàn có khả năng xử lý “long-term dependencies”, nghĩa
là thông tin hiện tại có được là nhờ vào chuỗi thông tin trước đó. Đáng buồn là, trong
thực tế, RNN dường như không có khả năng này. Vấn đề này đã được Hochreiter
(1991) [German] and Bengio, và công sự đưa ra như một thách thức cho mô hình RNN
2.3.2 Kiến trúc mạng LSTM
Long Short Term Memory network (LSTM) là trường hợp đặc biệt của RNN, có
khả năng học long-term dependencies. Mô hình này được giới thiệu bởi Hochreiter &
Schmidhuber (1997), và được cải tiến lại. Sau đó, mô hình này dần trở nên phổ biến
nhờ vào các công trình nghiên cứu gần đây. Mô hình này có khả năng tương thích với
nhiều bài toán nên được sử dụng rộng rãi ở các ngành liên quan
LSTM được thiết kế nhằm loại bỏ vấn đề phụ thuộc quá dài. Ta quan sát lại mô
hình RNN bên dưới, các layer đều mắc nối với nhau thành các module neural network.
Trong RNN chuẩn, module repeating này có cấu trúc rất đơn giản chỉ gồm một lớp
đơn giản tanh layer.
Hình 19: Các mô-đun lặp của mạng RNN chứa một layer [17]
LSTM cũng có cấu trúc mắt xích tương tự, nhưng các module lặp có cấu trúc khác
hẳn. Thay vì chỉ có một layer neural network, thì LSTM có tới bốn layer, tương tác với
nhau theo một cấu trúc cụ thể.
Hình 20 : Các mô-đun lặp của mạng LSTM chứa bốn layer [17]
25
Trong đó, các ký hiệu sử dụng trong mạng LSTM được giải nghĩa như sau:
 : là các lớp ẩn của mạng nơ-ron
 : toán tử Pointwise, biểu diễn các phép toán như cộng, nhân vector
 : vector chỉ đầu vào và đầu ra của một nút
 biểu thị phép nối các toán hạng
 : biểu thị cho sự sao chép từ vị trí này sang vị trí khác
2.3.3 Phân tích mô hình LSTM
Mấu chốt của LSTM là cell state (tế bào trạng thái), đường kẻ ngang chạy dọc ở
trên của sơ đồ hình vẽ. Cell state giống như băng chuyền. Nó chạy xuyên thẳng toàn
bộ mắc xích, chỉ một vài tương tác nhỏ tuyến tính (minor linear interaction) được thực
hiện. Điều này giúp cho thông tin ít bị thay đổi xuyên suốt quá trình lan truyền.
Hình 21 : Tế bào trạng thái LSTM giống như một băng truyền [17]
LSTM có khả năng thêm hoặc bớt thông tin vào cell state, được quy định một cách
cẩn thận bởi các cấu trúc gọi là cổng (gate). Các cổng này là một cách (tuỳ chọn) để
định nghĩa thông tin băng qua. Chúng được tạo bởi hàm sigmoid và một toán tử nhân
pointwise.
26
Hình 22 : Cổng trạng thái LSTM [17]
Hàm kích hoạt Sigmoid có giá trị từ [0 – 1], mô tả độ lớn thông tin được phép
truyền qua tại mỗi lớp mạng. Nếu ta thu được 0 điều này có nghĩa là “không cho bất
kỳ cái gì đi qua”, ngược lại nếu thu được giá trị là 1 thì có nghĩa là “cho phép mọi thứ
đi qua”. Một LSTM có ba cổng như vậy để bảo vệ và điều khiển cell state.
Quá trình hoạt động của LSTM đƣợc thông qua các bƣớc cơ bản sau:
Bước đầu tiên của mô hình LSTM là quyết định xem thông tin nào chúng ta cần
loại bỏ khỏi cell state. Tiến trình này được thực hiện thông qua một sigmoid layer gọi
là “forget gate layer” – cổng chặn. Đầu vào là ℎ𝑡−1 và 𝑥𝑡, đầu ra là một giá trị nằm
trong khoảng [0, 1] cho cell state 𝐶𝑡−1. 1 tương đương với “giữ lại thông tin”, 0 tương
đương với “loại bỏ thông tin”
Hình 23 : LSTM focus f [17]
Bước tiếp theo, ta cần quyết định thông tin nào cần được lưu lại tại cell state. Ta có
hai phần. Một, single sigmoid layer được gọi là “input gate layer” quyết định các giá
trị chúng ta sẽ cập nhật. Tiếp theo, một 𝑡𝑎𝑛ℎ layer tạo ra một vector ứng viên mới, Ct
.
được thêm vào trong ô trạng thái.
27
Hình 24 : LSTM focus I [17]
Ở bước tiếp theo, ta sẽ kết hợp hai thành phần này lại để cập nhật vào cell state.
Lúc cập nhật vào cell state cũ, Ct-1 , vào cell state mới Ct. Ta sẽ đưa state cũ hàm ff, để
quên đi những gì trước đó. Sau đó, ta sẽ thêm it * Ct. Đây là giá trị ứng viên mới, co
giãn (scale) số lượng giá trị mà ta muốn cập nhật cho mỗi state.
Hình 25 : LSTM focus c [17]
Cuối cùng, ta cần quyết định xem thông tin output là gì. Output này cần dựa trên
cell state của chúng ta, nhưng sẽ được lọc bớt thông tin. Đầu tiên, ta sẽ áp dụng single
sigmoid layer để quyết định xem phần nào của cell state chúng ta dự định sẽ output.
Sau đó, ta sẽ đẩy cell state qua tanh giá trị khoảng [-1 và 1] và nhân với một output
sigmoid gate, để giữ lại những phần ta muốn output ra ngoài.
Hình 26 : LSTM focus o [17]
28
Với ví dụ về mô hình ngôn ngữ, chỉ cần xem chủ thể mà ta có thể đưa ra thông tin
về một trạng từ đi sau đó. Ví dụ, nếu đầu ra của chủ thể là số ít hoặc số nhiều thì ta có
thể biết được dạng của trạng từ đi theo sau nó phải như thế nào.
2.4Word embeddings
Biểu diễn ngôn ngữ hay vector hóa từ là thành phần quan trọng để giúp máy tính có
thể hiểu được ngôn ngữ từ dạng văn bản sang dạng số. Tức là đưa văn bản dạng text
vào một không gian mới người ta gọi là embbding space( không gian từ nhúng).
Word embeddings (tập nhúng từ) là phương pháp ánh xạ mỗi từ vào một không
gian số thực nhiều chiều nhưng có kích thước nhỏ hơn nhiều so với kích thước từ điển.
Word embbding có 2 model nổi tiếng là word2vec và Glove [16]
2.4.1 Word2vec
Word2vec được tạo ra năm 2013 bởi một kỹ sư ở google có tên là Tomas Mikolov.
Về mặt toán học, thực chất Word2Vec là việc ánh xạ từ từ 1 tập các từ vocabulary
sang 1 không gian vector, mỗi vector được biểu diễn bởi n số thực. Mỗi từ ứng với 1
vector cố định. Sau quá trình huấn luyện mô hình bằng thuật toán backprobagation,
trọng số các vector của từng từ được cập nhật liên tục. Từ đó, ta có thể thực hiện tính
toán được khoảng cách giữa các từ và những từ càng "gần" nhau thường là các từ hay
xuất hiện cùng nhau trong văn cảnh, các từ đồng nghĩa.
Hình 27 : Mô hình từ nhúng [16]
29
Word2vec có 2 word vector là skip-gram và Continuous Bag-of-Words (Cbow).
Hình 287 : Mô hình CBOW và Skip-Ngram [16]
CBoW: Dự đoán từ hiện tại dựa trên ngữ cảnh của các từ trước đó
 Cho các từ ngữ cảnh
 Đoán xác suất của một từ đích
Skip-gram: Dự đoán các từ xung quanh khi cho bởi từ hiện tại.
 Cho từ đích
 Đoán xác suất của các từ ngữ cảnh
2.4.2 Glove
GloVe [16] là một trong những phương pháp mới để xây dựng vectơ từ (giới thiệu
vào năm 2014), nó được xây dựng dựa trên ma trận đồng xảy ra (Co-occurrence
Matrix). GloVe dựa trên ý tưởng tính tỉ lệ xác xuất:
( )
( )
Hình 29 : Xác xuất từ k trên ngữ cảnh của từ i và j [16]
Với P(k|i) là xác suất từ k xuất hiện trong ngữ cảnh của từ i, tương tự vậy với P(k|j).
Công thức tính của P(k|i):
( 𝑖)
∑
Hình 2.19 : Công thức tính xác xuất từ k trên ngữ cảnh của từ i [16]
Xik : là số lần xuất hiện của từ k trong ngữ cảnh của từ i (và ngược lại).
Xi : là số lần xuất hiện của từ i trong ngữ cảnh của toàn bộ các từ còn lại ngoại trừ i.
(2)
(1)
30
Ý tưởng chính của GloVe được tính dựa trên độ tương tự ngữ nghĩa giữa hai từ i, j
được xác định thông qua độ tương tự ngữ nghĩa giữa từ k với mỗi từ i, j, những từ k có
tính xác định ngữ nghĩa tốt chính là những từ làm cho giá trị được tính từ công thức
(1) nằm trong khoảng [0 ,1]
Ví dụ, nếu từ i là “table”, từ j là “cat” và từ k là “chair” thì công thức (1) sẽ cho giá
trị tiệm cận đến 1 do “chair” có nghĩa gần hơn với “table” hơn là “cat”, ở trường hợp
khác, nếu ta thay từ k là “ice cream” thì giá trị công thức (1) sẽ xấp xỉ bằng 0 do “ice
cream” hầu như chẳng lên quan gì tới “table” và “cat”.
Dựa trên tầm quan trọng của công thức (1) , GloVe khởi đầu bằng việc là nó sẽ tìm
một hàm F sao cho nó ánh xạ từ các vec-tơ từ trong vùng không gian V sang một giá
trị tỉ lệ tính theo công thức (1) . Việc tìm F không đơn giản, tuy nhiên, sau nhiều bước
đơn giản hóa cũng như tối ưu, ta có thể đưa nó về bài toán hồi quy với việc tính hàm
chi phí tối thiểu (minimum cost function) sau:
∑ ( ) (𝑊 𝑊̃ 𝑏 𝑏̃ )
Hình 30 : Công thức tính hàm chi phí tối thiểu [16]
là các vector từ.
là các bias tương ứng (được thêm vào ở các bước đơn giản hóa và tối ưu).
: mục nhập tương ứng với cặp từ i,j trong ma trận đồng xảy ra
Hàm f(x) được gọi là hàm trọng số (weighting function), được thêm vào để giảm
bớt sự ảnh hưởng của các cặp từ xuất hiện quá thường xuyên, hàm này thỏa mãn 3 tính
chất:
 Có giới hạn tại 0.
 Là hàm không giảm.
 Có giá trị nhỏ khi x rất lớn.
Thực tế, có nhiều hàm số thỏa các tính chất trên, nhưng ta sẽ lựa chọn hàm số sau:
( 𝑥) {
(𝑥 𝑥 )
Với α=3/4
Hình 31 : Hàm trọng số (weighting function) [16]
(3)
(4)
31
Việc thực hiện tính hàm chi phí tối thiểu J để tìm ra các vec-tơ từ thể được
thực hiện bằng nhiều cách, trong đó cách tiêu chuẩn nhất là sử dụng tìm cực tiểu hàm
số theo thuật toán Gradient Descent.
2.5Ứng dụng RNN vào quản lý hội thoại
Phần này sẽ giới thiệu thuật toán RNN áp dụng cho chức năng theo dõi trạng thái
hay ngữ cảnh hội thoại Dialogue State Tracking (DTS) trong thành phần quản lý hội
thoại đã được mô tả chi tiết trong hình 1.7 như đã đề cập.
2.5.1 Mô hình word-based DST
Như đã biết thành phần DM có nhiệm vụ quan trọng nhất đó là quản lý các trạng
thái hay ngữ cảnh của hội thoại để quyết định được hành động tiếp theo. Vậy việc
quyết định action tiếp theo thì dựa vào đâu. Đó chính là dữ liệu đầu vào của người
dùng, dữ liệu các slot được lưu trong bộ nhớ và trạng thái của các action ở trước. Với
khả năng lưu được các thông tin trong việc xử lý các bài toán dạng chuỗi thì mạng
RNN được ứng dụng trong việc xác định ngữ cảnh và quyết định action tiếp nhờ vào
các thông tin lưu được trong bộ nhớ mạng RNN.
Hình 32: Mô hình word-based DST với mạng RNN [20]
a1
S1
m1
h1
u1
a2
S2
m2
h2
u2
a3
S3
m3
h3
u3
User Utterance
hidden
Memory
Slot
Action state
Dialogue Turn
32
User Utterance: là câu dữ liệu đầu vào của người dùng
Hidden: là lớp ẩn được sử dụng trong thành phần NLU để vector hóa ngôn ngữ,
phân loại ý định và trích xuất được các thông tin người dùng
Memory: là bộ nhớ lưu các giá trị vector hóa ngôn ngữ và ngữ cảnh hội thoại bao
gồm cả slot
Slot: thông tin được trích xuất được lưu lại trong các câu nói người dùng
Action State: trạng thái action trước. Nó mang tính ngữ cảnh ở trong đoạn hội
thoại
2.5.2 Mô hình Global-Locally Self-Attentive DST (GLAD)
Với các mô hình theo dõi trạng thái hội thoại khác thường xác định intent người
dùng trực tiếp trên danh sách các đoạn hội thoại đã trainning cho bot sẽ gặp vấn đề về
nhập nhằng xác định 1 intent trong các đoạn hội thoại có sử dụng cùng 1 intent. Tức là
với cùng 1 câu nói người dùng xác định được 1 intent thì intent đó có thể được dùng
nhiều trong các đoạn hội thoại. Với tư tưởng xác định cả ngữ cảnh cho từng đoạn hội
thoại thì việc xác định intent nằm trong đoạn hội thoại nào sẽ tăng thêm độ chính xác.
Hình 33: Mô hình Global-Locally Self-Attentive DST (GLAD) [21]
Các tham số đầu vào cho phần local và global là các giá trị intent người dùng (X),
các slot và action state (C)
33
Hình 34 : Global-locally self-attentive encoder modul [21]
Việc dùng các slot trong mô hình cần lưu ý là sau kết thúc mỗi hội thoại thì nên
xóa các slot không dùng nữa để tránh nhập nhằng xác định ví trí chính xác intent của
người dùng trong danh sách các đoạn hội thoại mà bot được đào tạo.
34
CHƢƠNG 3 : XÂY DỰNG CHATBOT HỖ TRỢ NGƢỜI DÙNG LĨNH
VỰC NGÂN HÀNG
Chương này sẽ mô tả từng bước xây dựng bài toán trên nền tảng mã nguồn mở
Rasa. Phần thực nghiệm và đánh giá sẽ cho ta biết khả năng phục vụ của chatbot cũng
như chỉ ra những điểm hạn chế của chatbot nhằm tìm cách cải tiến và tìm hướng đi
mới cho việc xây dựng chatbot nhằm phục vụ các bài toán hỗ trợ người dùng trên
nhiều lĩnh vực chứ không chỉ riêng trong lĩnh vực ngân hàng.
3.1 Bài toán
Có rất nhiều bài toán ứng dụng cho chatbot nhưng tôi chọn bài toán cho ngân hàng
để giải quyết một số bài toán phức tạp như chuyển tiền và thanh toán nhằm đánh giá
khả năng đáp ứng xử lý trong một số tác vụ khó của bot.
Hiện tại thì cũng có một số ngân hàng ở Việt Nam đã xây dựng chatbot trong lĩnh
vực ngân hàng như MB bank, eximbank, TP bank… Hầu hết các ngân hàng hỗ trợ
chatbot trên facebook cho phép người dùng thao tác một số đơn giản như kiểm tra số
dư, truy vấn lãi suất, tỉ giá và có thể chuyển tiền trong giới hạn ít như MB cho phép
chuyển dưới 1 triệu đồng.
Bài toán mà tôi xây dựng sẽ tập trung vào các chức năng hỗ trợ khách hàng cá nhân
trên hệ thống ebanking. Các chức năng chính bao gồm:
- Thông tin tài khoản
- Truy vấn số dư
- Chuyển tiền: trong ngân hàng, ngoài ngân hàng, qua thẻ
- Lịch sử giao dịch
- Vay tiền
- Gửi tiền
- Thanh toán: điện, nước, điện thoại, vé máy bay…
- Thông tin các biểu phí
- Thông tin lãi suất, tỉ giá
3.2 Xây dựng chatbot hỗ trợ ngƣời dùng lĩnh vực ngân hàng
Cấu trúc hệ thống chatbot cho lĩnh vực ngân hàng sẽ được thiết kế như sau:
35
Hình 35: Cấu trúc chatbot cho hệ thống ebanking
Từ mô hình trên thì đầu vào hệ thống là một câu hỏi người dùng. Đầu ra là câu trả
lời của bot. Các thành phần bên trong hệ thống chatbot sẽ đảm nhiệm như sau:
NLU: Có nhiệm vụ vector hóa ngôn ngữ, phân loại ý định người dùng và trích xuất
ra các thông tin người dùng. Ví dụ câu đầu vào người dùng hỏi “Lãi suất kỳ hạn 12
tháng bao nhiêu?” thì hệ thống sẽ vector hóa nó rồi đối chiếu với các tập dữ liệu
training đã được gán nhãn để đưa ra ý định là “interest”. Tiếp đến hệ thống trích xuất
được thông tin với kỳ hạn là “12 tháng”.
DM: Dựa vào trạng thái và ngữ cảnh hội thoại để xác định ra action xử lý cho câu
đầu vào trên. Thành phần này cũng có nhiệm vụ lấy dữ liệu từ hệ thống ebanking để
phục vụ việc sinh dữ liệu trả lời của bot cho thành phần NLG. Ở ví dụ trên thì hệ thống
xác nhận bot đang trong ngữ cảnh hỏi về thông tin lãi suất nhưng chưa rõ hỏi về lãi
suất nào nên bot sẽ đưa ra quyết định hỏi lại người dùng. Trong trường hợp mà bot có
đầy đủ thông tin hỏi về lãi suất nào thì sẽ lấy dữ liệu từ ebanking backend để trả về
cho người dùng.
NLG: Bot sinh câu trả lời dựa vào dữ liệu từ thành phần DM theo các mẫu câu
template đã được xây dựng trước.
Hiện tại có rất nhiều phương pháp làm chatbot do bên thứ 3 cung cấp như ahachat,
Chatfuel, Messnow… dễ dàng xây dựng và tích hợp thông qua API nhưng lại không
đảm bảo tính bảo mật về mặt dữ liệu người dùng nên trong bài toán này tôi quyết định
sử dụng mã nguồn mở Rasa để xây dựng hệ thống chatbot riêng nhằm mục đích làm
Lãi suất kỳ
hạn 12 tháng
Lãi suất vay
hay tiết kiệm
intent :”interest”
entity: “12 tháng”
NLU
IONIC RASA
State tracker,
policy, action
DM
Template
NLG
Ebanking
API
36
chủ dữ liệu và bảo mật hệ thống lẫn thông tin người dùng. Bên cạnh đó với Rasa tôi có
thể tùy chỉnh một số cơ chế học máy cho tương thích với tiếng việt hay có thể tùy ý
kết nối tới nhiều hệ thống khác để trả lại dữ liệu cho chatbot. Hiện tại Rasa đang có
cộng đồng phát triển mạnh với hơn 3500 thành viên, số lượng download là hơn
500000. Các tính năng và bug mới liên tục được cập nhật và sửa đổi. Trên thực tế thì
Rasa cũng đã áp dụng thành công nhiều bài toán cho các lĩnh vực như: sức khỏe, bảo
hiểm, du lịch, ngân hàng và viễn thông. Đó cũng chính là những động lực giúp em lựa
chọn Rasa là framework để xây dựng chatbot giải quyết bài toán này. Chi tiết về việc
tìm hiểu và làm chủ công cụ Rasa này sẽ đề cập trong mục 3 của chương.
Về phần xây dựng giao diện hiển thị và tương tác người dùng với bot tôi sử dụng
ionic framework cho phép dễ dàng build app các nền tảng ios và android.
Một khía cạnh khác cũng rất quan trọng trong việc xây dựng hệ thống chatbot và là
yếu tố gần như quyết định bot có đáp ứng được yêu cầu người dùng hay không đó là
việc xây dựng tập dữ liệu tranning cho bot. Việc xây dựng dữ liệu cho bot sẽ được đề
cập chi tiết trong mục 3 của chương.
3.3 Ứng dụng RASA xây dựng chatbot
Rasa cung cấp cho ta 2 phương pháp chính xây dựng dữ liệu trainning cho bot:
- Pretrained Embeddings (Intent_classifier_sklearn) : Việc phân loại ý định
người dùng sẽ dựa trên các tập dữ liệu được lọc trước, sau đó được sử dụng để
thể hiện từng từ trong thông điệp người dùng dưới dạng từ nhúng (word
embedding) hay biểu diễn ngôn ngữ dưới dạng vector(word2vec). Các tập dữ
liệu này có thể được cung cấp từ Spacy hoặc MITIE …
- Supervised Embeddings (Intent_classifier_tensorflow_embedding): Nhúng
được giám sát. Với phương pháp này thì người dùng sẽ phải tự xây dựng dữ
liệu từ đầu do ko có dữ liệu đào tạo sẵn có. Nhưng với các bài toán trong một
lĩnh vực nhỏ thì nó sẽ đảm bảo tính chính xác hơn nhiều và tránh dư thừa dữ
liệu so với phương pháp ở trên.
Với bài toán tập trung vào miền đóng như trợ lý ảo hỗ trợ dịch vụ ebanking, cộng
thêm việc khó tìm kiếm tập dữ liệu pretrained (do hầu hết dữ liệu pretrained đều là
tiếng anh) thì ta không cần sử dụng tập dữ liệu đào tạo từ trước (pretrained word
embeddings) thay vào đó thì ta sẽ tự tạo tập dữ liệu training riêng của mình. Điều này
cũng đảm bảo bot có thời gian training ngắn mà độ chính xác cao hơn.
37
Một số cấu hình trong Rasa mà tôi lựa chọn để training cho bot bao gồm từ việc phân
tích câu, phân loại ý định(intent) đến trích chọn thông tin người dùng… như sau:
language: vi
##pipeline: tensorflow_embedding
pipeline:
- name: tokenizer_whitespace
- name: ner_crf
- name: ner_synonyms
- name: intent_featurizer_count_vectors
- name: intent_classifier_tensorflow_embedding
intent_tokenization_flag: true
intent_split_symbol: "+"
Hình 362 : Cấu hình pipeline xử lý ngôn ngữ tự nhiên
Thuật toán tách từ tôi sử dụng tokenizer_whitespace tức các từ có thể phân tách bởi
dấu cách. Điều này có thể sai trong một số trường hợp đối với từ ghép.
Để trích chọn thông tin (slot filter) thì tôi cấu hình dùng mô hình CRF. Bên cạnh
đó cũng hỗ trợ cấu hình việc nhận dạng các từ đồng nghĩa (ner_synonyms). Rasa cũng
tích hợp với framework hỗ trợ trích xuất thông tin nổi tiếng như duckling có hỗ trợ
tiếng việt và rất thông minh trong việc trích xuất được thời gian và dữ liệu số như tiền
tệ. Với bài toán demo thì CRF là một lựa chọn hợp lý hơn khi đã tích hợp sẵn trong
Rasa mà không phải cấu hình thêm như duckling.
Thành phần chính là trình phân loại ý định intent_classifier_tensorflow_embedding
dựa trên kỹ thuật starspace [9] đang được facebook phát triển.
3.4 Xây dựng dữ liệu chatbot
Nguồn dữ liệu xây dựng chatbot hỗ trợ hệ thống ebanking của ngân hàng được thu
thập và tham khảo qua một số người dùng, một số chatbot cho ngân hàng ở Việt Nam
như eMbee(MB bank), Timo (VP bank) và demo chatbot về ngân hàng của FPT.AI.
Một đoạn hội thoại giữa người và bot là để giải quyết một vấn đề nào đó. Ví dụ
đoạn hội thoại hỏi về thông tin lãi suất:
Ngƣời dùng Bot
Cho tôi biết thông tin lãi suất Bạn hỏi lãi suất vay hay tiết kiệm
Lãi suất tiết kiệm Mời bạn nhập kỳ hạn
13 tháng Lãi suất 13 tháng là: 8,1%
38
Đây cũng chính là một khung kịch bản để người dùng có thể hỏi về thông tin lãi
suất. Và ta cũng có một đoạn hội thoại khác để hỏi về thông tin lãi suất như sau:
Ngƣời dùng Bot
Lãi suất tiết kiệm 1 năm là bao nhiêu Lãi suất tiết kiệm 12 tháng là: 8,1%
Như vậy với bài toán xây dựng dữ liệu chatbot theo miền đóng là ta đi xây dựng
danh sách các khung kịch bản như trên.
Ứng với mỗi một câu trong đoạn hội thoại là một ý định (intent). Ý định của người
dùng có thể là một danh sách các câu nói có cùng chung một thông điệp. Ví dụ với
mục đích là chào hỏi thì người dùng có thể nói “xin chào”, “chào bạn”…
Để ý tiếp ta thấy trong mỗi intent thì cần trích xuất ra thông tin người dùng. Đó
chính là các entity. Các entity này có thể được lưu lại thông tin vào các slot để phục vụ
cho các hành động sau của bot. Như ở ví dụ trên ta có thông tin tháng lãi suất là “13
tháng”
Việc xây dựng chatbot sẽ thực hiện qua một số bước chính như hình 3.2:
Hình 37.3 : Các bước xây dựng chatbot
3.4.1 Xây dựng ý định
Việc xây dựng ý định sẽ theo nguyên tắc là những mẫu câu hỏi của người dùng phổ
biến nhất, thông dụng nhất có thể. Hiện tại bot đang hỗ trợ khoảng 30 intent. Ví dụ cho
Xây dựng ý định (intent)
Xây dựng entity (slot)
Xây dựng câu trả lời cho bot
Xây dựng khung kịch bản
Đào tạo cho bot
Test, phân tích cải tiến bot
39
một ý định muốn xem thông tin số dư tài khoản thì người dùng có thể hỏi nhiều câu
như sau:
## intent:balance
- số dư
- số tiền trong tài khoản của tôi
- truy vấn số dư
- số dư tài khoản
Hình 38.4 : Xây dựng ý định người dùng
3.4.2 Xây dựng entity
Entity là các thông tin trích xuất từ ý định người dùng. Slot là các thông tin được
trích lọc trong các câu nói người dùng được bot lưu lại trong bộ nhớ để sử dụng trong
các action hay câu trả lời của bot và tránh việc hỏi lại thông tin từ phía người dùng.
Việc trích xuất slot được cấu hình theo CRF như đã đề cập ở trên. Hiện tại bot đang
được cấu hình khoảng 15 slot.
entities:
- location
- card
- receiver
- money
- otp
- content
- number
- account
- bank
- name
- data
- term
- branch
- count
- short_name
Hình 3.5 : Danh sách các thông tin người dùng
3.4.3 Xây dựng câu trả lời cho bot
Ứng với mỗi câu hỏi của người dùng thì ta cũng phải xây dựng các mẫu câu
(template) trả lời của bot tương ứng :
utter_balance:
- text: "Số dư tài khoản của quý khách là {&balance}"
- text: "Số tiền trong tài khoản là : {&balance}"
Hình 39 : Mẫu câu trả lời của bot cho ý định hỏi số dư tài khoản
40
Để 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?"
41
- 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
42
* 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
43
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:
Lần thử nghiệm 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%
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
44
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
45
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)
46
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.
No 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
Luan van xay dung Chatbot
Luan van xay dung Chatbot
Luan van xay dung Chatbot
Luan van xay dung Chatbot
Luan van xay dung Chatbot
Luan van xay dung Chatbot
Luan van xay dung Chatbot
Luan van xay dung Chatbot
Luan van xay dung Chatbot
Luan van xay dung Chatbot
Luan van xay dung Chatbot
Luan van xay dung Chatbot
Luan van xay dung Chatbot
Luan van xay dung Chatbot

More Related Content

What's hot

Giáo trình Tester Full
Giáo trình Tester FullGiáo trình Tester Full
Giáo trình Tester Full
Thanh Sơn
 
Xây dựng hệ thống thông tin quản lý khách hàng bằng PHP và MySQL
Xây dựng hệ thống thông tin quản lý khách hàng bằng PHP và MySQLXây dựng hệ thống thông tin quản lý khách hàng bằng PHP và MySQL
Xây dựng hệ thống thông tin quản lý khách hàng bằng PHP và MySQL
AskSock Ngô Quang Đạo
 
Nghiên cứu kỹ thuật giấu tin trong ảnh và ứng dụng.pdf
Nghiên cứu kỹ thuật giấu tin trong ảnh và ứng dụng.pdfNghiên cứu kỹ thuật giấu tin trong ảnh và ứng dụng.pdf
Nghiên cứu kỹ thuật giấu tin trong ảnh và ứng dụng.pdf
Man_Ebook
 

What's hot (20)

LUẬN VĂN THẠC SĨ: ỨNG DỤNG HỌC SÂU TRONG PHÂN LOẠI TRÁI CÂY
LUẬN VĂN THẠC SĨ: ỨNG DỤNG HỌC SÂU TRONG PHÂN LOẠI TRÁI CÂYLUẬN VĂN THẠC SĨ: ỨNG DỤNG HỌC SÂU TRONG PHÂN LOẠI TRÁI CÂY
LUẬN VĂN THẠC SĨ: ỨNG DỤNG HỌC SÂU TRONG PHÂN LOẠI TRÁI CÂY
 
Đề tài: Hệ thống cung cấp chứng chỉ số theo mô hình sinh khóa
Đề tài: Hệ thống cung cấp chứng chỉ số theo mô hình sinh khóaĐề tài: Hệ thống cung cấp chứng chỉ số theo mô hình sinh khóa
Đề tài: Hệ thống cung cấp chứng chỉ số theo mô hình sinh khóa
 
Luận án: Thuật toán trí tuệ nhân tạo cho bài toán tái cấu trúc lưới điện
Luận án: Thuật toán trí tuệ nhân tạo cho bài toán tái cấu trúc lưới điệnLuận án: Thuật toán trí tuệ nhân tạo cho bài toán tái cấu trúc lưới điện
Luận án: Thuật toán trí tuệ nhân tạo cho bài toán tái cấu trúc lưới điện
 
Khóa luận nghiên cứu bài toán phân tích cảm xúc của người hùng 9166421
Khóa luận nghiên cứu bài toán phân tích cảm xúc của người hùng 9166421Khóa luận nghiên cứu bài toán phân tích cảm xúc của người hùng 9166421
Khóa luận nghiên cứu bài toán phân tích cảm xúc của người hùng 9166421
 
Báo cáo đồ án tốt nghiệp "Ứng dụng trí tuệ nhân tạo nhận dạng chữ viết tay xâ...
Báo cáo đồ án tốt nghiệp "Ứng dụng trí tuệ nhân tạo nhận dạng chữ viết tay xâ...Báo cáo đồ án tốt nghiệp "Ứng dụng trí tuệ nhân tạo nhận dạng chữ viết tay xâ...
Báo cáo đồ án tốt nghiệp "Ứng dụng trí tuệ nhân tạo nhận dạng chữ viết tay xâ...
 
Báo cáo phân tích thiết kế đồ án game
Báo cáo phân tích thiết kế đồ án game Báo cáo phân tích thiết kế đồ án game
Báo cáo phân tích thiết kế đồ án game
 
Báo cáo quản lý cửa hàng máy tính
Báo cáo quản lý cửa hàng máy tínhBáo cáo quản lý cửa hàng máy tính
Báo cáo quản lý cửa hàng máy tính
 
Luận văn: Phương pháp tấn công chữ ký số: Rsa,Elgamal,Dss
Luận văn: Phương pháp tấn công chữ ký số: Rsa,Elgamal,DssLuận văn: Phương pháp tấn công chữ ký số: Rsa,Elgamal,Dss
Luận văn: Phương pháp tấn công chữ ký số: Rsa,Elgamal,Dss
 
Báo cáo thực tập công nghệ thông tin.
Báo cáo thực tập công nghệ thông tin.Báo cáo thực tập công nghệ thông tin.
Báo cáo thực tập công nghệ thông tin.
 
Giáo trình phân tích thiết kế hệ thống thông tin
Giáo trình phân tích thiết kế hệ thống thông tinGiáo trình phân tích thiết kế hệ thống thông tin
Giáo trình phân tích thiết kế hệ thống thông tin
 
Đề tài: Quản lí tiền điện
Đề tài: Quản lí tiền điệnĐề tài: Quản lí tiền điện
Đề tài: Quản lí tiền điện
 
Báo cáo đồ án tôt nghiệp: Xây dựng Website bán hàng thông minh
Báo cáo đồ án tôt nghiệp: Xây dựng Website bán hàng thông minhBáo cáo đồ án tôt nghiệp: Xây dựng Website bán hàng thông minh
Báo cáo đồ án tôt nghiệp: Xây dựng Website bán hàng thông minh
 
[Báo cáo Thực tập Athena] Nghiên cứu cơ chế routing của Cisco, mô phỏng trên ...
[Báo cáo Thực tập Athena] Nghiên cứu cơ chế routing của Cisco, mô phỏng trên ...[Báo cáo Thực tập Athena] Nghiên cứu cơ chế routing của Cisco, mô phỏng trên ...
[Báo cáo Thực tập Athena] Nghiên cứu cơ chế routing của Cisco, mô phỏng trên ...
 
Giáo trình Tester Full
Giáo trình Tester FullGiáo trình Tester Full
Giáo trình Tester Full
 
Báo cáo phân tích thiết kế mạng
Báo cáo phân tích thiết kế mạngBáo cáo phân tích thiết kế mạng
Báo cáo phân tích thiết kế mạng
 
Xây dựng hệ thống thông tin quản lý khách hàng bằng PHP và MySQL
Xây dựng hệ thống thông tin quản lý khách hàng bằng PHP và MySQLXây dựng hệ thống thông tin quản lý khách hàng bằng PHP và MySQL
Xây dựng hệ thống thông tin quản lý khách hàng bằng PHP và MySQL
 
Đề tài: Nghiên cứu kỹ thuật tấn công mạng LAN và giải pháp, HAY
Đề tài: Nghiên cứu kỹ thuật tấn công mạng LAN và giải pháp, HAYĐề tài: Nghiên cứu kỹ thuật tấn công mạng LAN và giải pháp, HAY
Đề tài: Nghiên cứu kỹ thuật tấn công mạng LAN và giải pháp, HAY
 
Báo cáo đồ án cơ sở đề tài xây dựng ứng dụng chat tự động với deep learning
Báo cáo đồ án cơ sở đề tài  xây dựng ứng dụng chat tự động với deep learningBáo cáo đồ án cơ sở đề tài  xây dựng ứng dụng chat tự động với deep learning
Báo cáo đồ án cơ sở đề tài xây dựng ứng dụng chat tự động với deep learning
 
Đề tài: Quản lý cửa hàng vật liệu xây dựng, HAY, 9đ
Đề tài: Quản lý cửa hàng vật liệu xây dựng, HAY, 9đĐề tài: Quản lý cửa hàng vật liệu xây dựng, HAY, 9đ
Đề tài: Quản lý cửa hàng vật liệu xây dựng, HAY, 9đ
 
Nghiên cứu kỹ thuật giấu tin trong ảnh và ứng dụng.pdf
Nghiên cứu kỹ thuật giấu tin trong ảnh và ứng dụng.pdfNghiên cứu kỹ thuật giấu tin trong ảnh và ứng dụng.pdf
Nghiên cứu kỹ thuật giấu tin trong ảnh và ứng dụng.pdf
 

Similar to Luan van xay dung Chatbot

Similar to Luan van xay dung Chatbot (20)

Kiểm chứng các chương trình phần mềm hướng khía cạnh, HAY
Kiểm chứng các chương trình phần mềm hướng khía cạnh, HAYKiểm chứng các chương trình phần mềm hướng khía cạnh, HAY
Kiểm chứng các chương trình phần mềm hướng khía cạnh, HAY
 
Luận văn: Nghiên cứu mô hình phân lớp câu hỏi và ứng dụng, 9đ
Luận văn: Nghiên cứu mô hình phân lớp câu hỏi và ứng dụng, 9đLuận văn: Nghiên cứu mô hình phân lớp câu hỏi và ứng dụng, 9đ
Luận văn: Nghiên cứu mô hình phân lớp câu hỏi và ứng dụng, 9đ
 
Luận văn: Ứng dụng công nghệ Webrtc cho giải pháp cộng tác, 9đ
Luận văn: Ứng dụng công nghệ Webrtc cho giải pháp cộng tác, 9đLuận văn: Ứng dụng công nghệ Webrtc cho giải pháp cộng tác, 9đ
Luận văn: Ứng dụng công nghệ Webrtc cho giải pháp cộng tác, 9đ
 
Nghiên cứu phát triển cổng thông tin điện tử cho doanh nghiệp.pdf
Nghiên cứu phát triển cổng thông tin điện tử cho doanh nghiệp.pdfNghiên cứu phát triển cổng thông tin điện tử cho doanh nghiệp.pdf
Nghiên cứu phát triển cổng thông tin điện tử cho doanh nghiệp.pdf
 
Nâng cao hiệu năng mạng Manet bằng kỹ thuật định tuyến cân bằng tải - Gửi miễ...
Nâng cao hiệu năng mạng Manet bằng kỹ thuật định tuyến cân bằng tải - Gửi miễ...Nâng cao hiệu năng mạng Manet bằng kỹ thuật định tuyến cân bằng tải - Gửi miễ...
Nâng cao hiệu năng mạng Manet bằng kỹ thuật định tuyến cân bằng tải - Gửi miễ...
 
Luận án: Nâng cao hiệu năng mạng MANET sử dụng kỹ thuật định tuyến cân bằng t...
Luận án: Nâng cao hiệu năng mạng MANET sử dụng kỹ thuật định tuyến cân bằng t...Luận án: Nâng cao hiệu năng mạng MANET sử dụng kỹ thuật định tuyến cân bằng t...
Luận án: Nâng cao hiệu năng mạng MANET sử dụng kỹ thuật định tuyến cân bằng t...
 
Đề tài: Chương trình trợ giúp đăng ký và quản lý tour du lịch, HOT
Đề tài: Chương trình trợ giúp đăng ký và quản lý tour du lịch, HOTĐề tài: Chương trình trợ giúp đăng ký và quản lý tour du lịch, HOT
Đề tài: Chương trình trợ giúp đăng ký và quản lý tour du lịch, HOT
 
Luận văn thạc sĩ
Luận văn thạc sĩLuận văn thạc sĩ
Luận văn thạc sĩ
 
Luận Văn Nghiên Cứu Về Mối Quan Hệ Giữa Chất Lượng Phần Mềm Kế Toán Với Hoạt ...
Luận Văn Nghiên Cứu Về Mối Quan Hệ Giữa Chất Lượng Phần Mềm Kế Toán Với Hoạt ...Luận Văn Nghiên Cứu Về Mối Quan Hệ Giữa Chất Lượng Phần Mềm Kế Toán Với Hoạt ...
Luận Văn Nghiên Cứu Về Mối Quan Hệ Giữa Chất Lượng Phần Mềm Kế Toán Với Hoạt ...
 
Luận văn - Xây dựng chatbot bán hàng dựa trên mô hình sinh.doc
Luận văn - Xây dựng chatbot bán hàng dựa trên mô hình sinh.docLuận văn - Xây dựng chatbot bán hàng dựa trên mô hình sinh.doc
Luận văn - Xây dựng chatbot bán hàng dựa trên mô hình sinh.doc
 
Luận văn: Nâng cao hiệu quả hoạt động của các cơ quan báo chí
Luận văn: Nâng cao hiệu quả hoạt động của các cơ quan báo chíLuận văn: Nâng cao hiệu quả hoạt động của các cơ quan báo chí
Luận văn: Nâng cao hiệu quả hoạt động của các cơ quan báo chí
 
Đề tài: Nâng cao hiệu quả hoạt động của cơ quan báo chí, HAY
Đề tài: Nâng cao hiệu quả hoạt động của cơ quan báo chí, HAYĐề tài: Nâng cao hiệu quả hoạt động của cơ quan báo chí, HAY
Đề tài: Nâng cao hiệu quả hoạt động của cơ quan báo chí, HAY
 
Hiệu quả hoạt động của các cơ quan báo chí thuộc Hội KHKT, 9đ
Hiệu quả hoạt động của các cơ quan báo chí thuộc Hội KHKT, 9đHiệu quả hoạt động của các cơ quan báo chí thuộc Hội KHKT, 9đ
Hiệu quả hoạt động của các cơ quan báo chí thuộc Hội KHKT, 9đ
 
Đề tài: Hiệu quả hoạt động của cơ quan báo chí Việt Nam, HOT
Đề tài: Hiệu quả hoạt động của cơ quan báo chí Việt Nam, HOTĐề tài: Hiệu quả hoạt động của cơ quan báo chí Việt Nam, HOT
Đề tài: Hiệu quả hoạt động của cơ quan báo chí Việt Nam, HOT
 
Luận văn: Nâng cao hiệu quả hoạt động của các cơ quan báo chí
Luận văn: Nâng cao hiệu quả hoạt động của các cơ quan báo chíLuận văn: Nâng cao hiệu quả hoạt động của các cơ quan báo chí
Luận văn: Nâng cao hiệu quả hoạt động của các cơ quan báo chí
 
Tính cận trên bộ nhớ Log của chương trình sử dụng giao dịch, 9đ
Tính cận trên bộ nhớ Log của chương trình sử dụng giao dịch, 9đTính cận trên bộ nhớ Log của chương trình sử dụng giao dịch, 9đ
Tính cận trên bộ nhớ Log của chương trình sử dụng giao dịch, 9đ
 
Đề tài: Chương trình quản lý đăng ký tham gia hoạt động giải trí
Đề tài: Chương trình quản lý đăng ký tham gia hoạt động giải tríĐề tài: Chương trình quản lý đăng ký tham gia hoạt động giải trí
Đề tài: Chương trình quản lý đăng ký tham gia hoạt động giải trí
 
Luận văn: Nghiên cứu xây dựng quy trình quản lý đầu tư ứng dụng công nghệ thô...
Luận văn: Nghiên cứu xây dựng quy trình quản lý đầu tư ứng dụng công nghệ thô...Luận văn: Nghiên cứu xây dựng quy trình quản lý đầu tư ứng dụng công nghệ thô...
Luận văn: Nghiên cứu xây dựng quy trình quản lý đầu tư ứng dụng công nghệ thô...
 
Marketing trực tiếp và việc ứng dụng vào Việt Nam
Marketing trực tiếp và việc ứng dụng vào Việt NamMarketing trực tiếp và việc ứng dụng vào Việt Nam
Marketing trực tiếp và việc ứng dụng vào Việt Nam
 
BC-PHPLaravel.pdf
BC-PHPLaravel.pdfBC-PHPLaravel.pdf
BC-PHPLaravel.pdf
 

Recently uploaded

kjsbgkjbskfkgabksfbgbsfjkvbksfbkbfskbskbkjsb
kjsbgkjbskfkgabksfbgbsfjkvbksfbkbfskbskbkjsbkjsbgkjbskfkgabksfbgbsfjkvbksfbkbfskbskbkjsb
kjsbgkjbskfkgabksfbgbsfjkvbksfbkbfskbskbkjsb
hoangphuc12ta6
 
GIAO TRINH TRIET HOC MAC - LENIN (Quoc gia).pdf
GIAO TRINH TRIET HOC MAC - LENIN (Quoc gia).pdfGIAO TRINH TRIET HOC MAC - LENIN (Quoc gia).pdf
GIAO TRINH TRIET HOC MAC - LENIN (Quoc gia).pdf
LngHu10
 

Recently uploaded (18)

ĐỀ THI THỬ TUYỂN SINH VÀO LỚP 10 THPT MÔN TOÁN CÁC TỈNH NĂM HỌC 2023-2024 CÓ ...
ĐỀ THI THỬ TUYỂN SINH VÀO LỚP 10 THPT MÔN TOÁN CÁC TỈNH NĂM HỌC 2023-2024 CÓ ...ĐỀ THI THỬ TUYỂN SINH VÀO LỚP 10 THPT MÔN TOÁN CÁC TỈNH NĂM HỌC 2023-2024 CÓ ...
ĐỀ THI THỬ TUYỂN SINH VÀO LỚP 10 THPT MÔN TOÁN CÁC TỈNH NĂM HỌC 2023-2024 CÓ ...
 
BÀI TẬP DẠY THÊM TOÁN LỚP 12 SÁCH MỚI THEO FORM THI MỚI BGD 2025 - CHÂN TRỜI ...
BÀI TẬP DẠY THÊM TOÁN LỚP 12 SÁCH MỚI THEO FORM THI MỚI BGD 2025 - CHÂN TRỜI ...BÀI TẬP DẠY THÊM TOÁN LỚP 12 SÁCH MỚI THEO FORM THI MỚI BGD 2025 - CHÂN TRỜI ...
BÀI TẬP DẠY THÊM TOÁN LỚP 12 SÁCH MỚI THEO FORM THI MỚI BGD 2025 - CHÂN TRỜI ...
 
xemsomenh.com-Bố cục của lá số tử vi như thế nào.pdf
xemsomenh.com-Bố cục của lá số tử vi như thế nào.pdfxemsomenh.com-Bố cục của lá số tử vi như thế nào.pdf
xemsomenh.com-Bố cục của lá số tử vi như thế nào.pdf
 
kjsbgkjbskfkgabksfbgbsfjkvbksfbkbfskbskbkjsb
kjsbgkjbskfkgabksfbgbsfjkvbksfbkbfskbskbkjsbkjsbgkjbskfkgabksfbgbsfjkvbksfbkbfskbskbkjsb
kjsbgkjbskfkgabksfbgbsfjkvbksfbkbfskbskbkjsb
 
20 ĐỀ DỰ ĐOÁN - PHÁT TRIỂN ĐỀ MINH HỌA BGD KỲ THI TỐT NGHIỆP THPT NĂM 2024 MÔ...
20 ĐỀ DỰ ĐOÁN - PHÁT TRIỂN ĐỀ MINH HỌA BGD KỲ THI TỐT NGHIỆP THPT NĂM 2024 MÔ...20 ĐỀ DỰ ĐOÁN - PHÁT TRIỂN ĐỀ MINH HỌA BGD KỲ THI TỐT NGHIỆP THPT NĂM 2024 MÔ...
20 ĐỀ DỰ ĐOÁN - PHÁT TRIỂN ĐỀ MINH HỌA BGD KỲ THI TỐT NGHIỆP THPT NĂM 2024 MÔ...
 
TÀI LIỆU DẠY THÊM HÓA HỌC 12 - SÁCH MỚI (BẢN HS+GV) (FORM BÀI TẬP 2025 CHUNG ...
TÀI LIỆU DẠY THÊM HÓA HỌC 12 - SÁCH MỚI (BẢN HS+GV) (FORM BÀI TẬP 2025 CHUNG ...TÀI LIỆU DẠY THÊM HÓA HỌC 12 - SÁCH MỚI (BẢN HS+GV) (FORM BÀI TẬP 2025 CHUNG ...
TÀI LIỆU DẠY THÊM HÓA HỌC 12 - SÁCH MỚI (BẢN HS+GV) (FORM BÀI TẬP 2025 CHUNG ...
 
Bài thuyết trình môn học Hệ Điều Hành.pptx
Bài thuyết trình môn học Hệ Điều Hành.pptxBài thuyết trình môn học Hệ Điều Hành.pptx
Bài thuyết trình môn học Hệ Điều Hành.pptx
 
Talk Academy Presentation 2024 (ENG) MICE.pdf
Talk Academy Presentation 2024 (ENG) MICE.pdfTalk Academy Presentation 2024 (ENG) MICE.pdf
Talk Academy Presentation 2024 (ENG) MICE.pdf
 
DS thi KTHP HK2 (dot 3) nam hoc 2023-2024.pdf
DS thi KTHP HK2 (dot 3) nam hoc 2023-2024.pdfDS thi KTHP HK2 (dot 3) nam hoc 2023-2024.pdf
DS thi KTHP HK2 (dot 3) nam hoc 2023-2024.pdf
 
2.THUỐC AN THẦN VÀ THUỐC GÂY NGỦ.pptx
2.THUỐC AN THẦN VÀ THUỐC GÂY NGỦ.pptx2.THUỐC AN THẦN VÀ THUỐC GÂY NGỦ.pptx
2.THUỐC AN THẦN VÀ THUỐC GÂY NGỦ.pptx
 
BÀI TẬP DẠY THÊM HÓA HỌC LỚP 12 - CẢ NĂM - THEO FORM THI MỚI BGD 2025 (DÙNG C...
BÀI TẬP DẠY THÊM HÓA HỌC LỚP 12 - CẢ NĂM - THEO FORM THI MỚI BGD 2025 (DÙNG C...BÀI TẬP DẠY THÊM HÓA HỌC LỚP 12 - CẢ NĂM - THEO FORM THI MỚI BGD 2025 (DÙNG C...
BÀI TẬP DẠY THÊM HÓA HỌC LỚP 12 - CẢ NĂM - THEO FORM THI MỚI BGD 2025 (DÙNG C...
 
slide tuần kinh tế công nghệ phần mềm hust
slide tuần kinh tế công nghệ phần mềm hustslide tuần kinh tế công nghệ phần mềm hust
slide tuần kinh tế công nghệ phần mềm hust
 
GIAO TRINH TRIET HOC MAC - LENIN (Quoc gia).pdf
GIAO TRINH TRIET HOC MAC - LENIN (Quoc gia).pdfGIAO TRINH TRIET HOC MAC - LENIN (Quoc gia).pdf
GIAO TRINH TRIET HOC MAC - LENIN (Quoc gia).pdf
 
onluyen.vn_Ebook 120 đề thi tuyển sinh tiếng anh 10 theo cấu trúc sở hà nội.doc
onluyen.vn_Ebook 120 đề thi tuyển sinh tiếng anh 10 theo cấu trúc sở hà nội.doconluyen.vn_Ebook 120 đề thi tuyển sinh tiếng anh 10 theo cấu trúc sở hà nội.doc
onluyen.vn_Ebook 120 đề thi tuyển sinh tiếng anh 10 theo cấu trúc sở hà nội.doc
 
Nghiên cứu cơ chế và động học phản ứng giữa hợp chất Aniline (C6H5NH2) với gố...
Nghiên cứu cơ chế và động học phản ứng giữa hợp chất Aniline (C6H5NH2) với gố...Nghiên cứu cơ chế và động học phản ứng giữa hợp chất Aniline (C6H5NH2) với gố...
Nghiên cứu cơ chế và động học phản ứng giữa hợp chất Aniline (C6H5NH2) với gố...
 
GIÁO TRÌNH 2-TÀI LIỆU SỬA CHỮA BOARD MONO TỦ LẠNH MÁY GIẶT ĐIỀU HÒA.pdf
GIÁO TRÌNH 2-TÀI LIỆU SỬA CHỮA BOARD MONO TỦ LẠNH MÁY GIẶT ĐIỀU HÒA.pdfGIÁO TRÌNH 2-TÀI LIỆU SỬA CHỮA BOARD MONO TỦ LẠNH MÁY GIẶT ĐIỀU HÒA.pdf
GIÁO TRÌNH 2-TÀI LIỆU SỬA CHỮA BOARD MONO TỦ LẠNH MÁY GIẶT ĐIỀU HÒA.pdf
 
Thực hành lễ tân ngoại giao - công tác NG
Thực hành lễ tân ngoại giao - công tác NGThực hành lễ tân ngoại giao - công tác NG
Thực hành lễ tân ngoại giao - công tác NG
 
BÀI TẬP DẠY THÊM TOÁN LỚP 12 SÁCH MỚI THEO FORM THI MỚI BGD 2025 - CÁNH DIỀU ...
BÀI TẬP DẠY THÊM TOÁN LỚP 12 SÁCH MỚI THEO FORM THI MỚI BGD 2025 - CÁNH DIỀU ...BÀI TẬP DẠY THÊM TOÁN LỚP 12 SÁCH MỚI THEO FORM THI MỚI BGD 2025 - CÁNH DIỀU ...
BÀI TẬP DẠY THÊM TOÁN LỚP 12 SÁCH MỚI THEO FORM THI MỚI BGD 2025 - CÁNH DIỀU ...
 

Luan van xay dung Chatbot

  • 1. ĐẠI HỌC QUỐC GIA HÀ NỘI TRƢỜNG ĐẠI HỌC CÔNG NGHỆ NGUYỄN TẤT TIẾN NGHIÊN CỨU VÀ XÂY DỰNG CHATBOT HỖ TRỢ NGƢỜI DÙNG TRONG NGÂN HÀNG LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN HÀ NỘI – 2019
  • 2. ĐẠI HỌC QUỐC GIA HÀ NỘI TRƢỜNG ĐẠI HỌC CÔNG NGHỆ NGUYỄN TẤT TIẾN NGHIÊN CỨU VÀ XÂY DỰNG CHATBOT HỖ TRỢ NGƢỜI DÙNG TRONG NGÂN HÀNG Ngành: Kỹ thuật phần mềm Chuyên ngành: Kỹ thuật phần mềm Mã số: 8480103.01 LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN HÀ NỘI – 2019
  • 3. LỜI CAM ĐOAN Tôi là Nguyễn Tất Tiến, học viên khóa K22, ngành Kỹ thuật phần mềm, chuyên ngành Kỹ Thuật Phần Mềm. Tôi xin cam đoan luận văn “Nghiên cứu và xây dựng chatbot hỗ trợ người dùng trong ngân hàng” là do tôi nghiên cứu, tìm hiểu và phát triển dưới sự dẫn dắt của TS. Nguyễn Văn Vinh. Luận văn không phải sự sao chép từ các tài liệu, công trình nghiên cứu của người khác mà không ghi rõ trong tài liệu tham khảo. Tôi xin chịu trách nhiệm về lời cam đoan này. Hà nội, ngày tháng năm 2019
  • 4. LỜI CẢM ƠN Đầu tiên tôi xin gửi lời cảm ơn tới các thầy cô trường đại học Công Nghệ, Đại học Quốc Gia Hà Nội đã tận tình giảng dạy và truyền đạt kiến thức trong suốt khóa cao học vừa qua. Tôi cũng xin được gửi lời cảm ơn đến các thầy cô trong bộ môn Kỹ Thuật Phần Mềm cũng như khoa Công Nghệ Thông Tin đã mang lại cho tôi những kiến thức vô cùng quý giá và bổ ích trong quá trình học tập tại trường. Đặc biệt xin chân thành cảm ơn thầy giáo, TS. Nguyễn Văn Vinh, người đã định hướng, giúp đỡ, trực tiếp hướng dẫn và tận tình chỉ bảo tôi trong suốt quá trình nghiên cứu, xây dựng và hoàn thiện luận văn này. Tôi cũng xin được cảm ơn tới gia đình, những người thân, các đồng nghiệp và bạn bè thường xuyên quan tâm, động viên, chia sẻ kinh nghiệm, cung cấp các tài liệu hữu ích trong thời gian học tập, nghiên cứu cũng như trong suốt quá trình thực hiện luận văn tốt nghiệp. Hà Nội, ngày tháng năm 2019
  • 5. MỤC LỤC LỜI CẢM ƠN ................................................................................................................4 MỤC LỤC ......................................................................................................................5 DANH MỤC KÝ HIỆU VÀ CÁC CHỮ VIẾT TẮT..................................................7 DANH MỤC HÌNH VẼ VÀ ĐỒ THỊ ..........................................................................8 MỞ ĐẦU.........................................................................................................................1 1. Động lực nghiên cứu .............................................................................................2 2. Mục tiêu luận văn..................................................................................................3 3. Cấu trúc luận văn...................................................................................................4 CHƢƠNG 1 : TỔNG QUAN HỆ THỐNG CHATBOT ............................................5 1.1 Giới thiệu ...........................................................................................................5 1.2 Cấu trúc các thành phần hệ thống chatbot .........................................................6 1.3 Hiểu ngôn ngữ tự nhiên (NLU)..........................................................................7 1.4 Quản lý hội thoại (DM)....................................................................................11 1.4.1 Mô hình máy trạng thái hữu hạn FSA.......................................................13 1.4.2 Mô hình Frame-based ...............................................................................14 1.5 Thành phần sinh ngôn ngữ (NLG)...................................................................14 1.5.1 Template-based NLG................................................................................15 1.5.2 Plan-based NLG........................................................................................15 1.5.3 Class-based NLG ......................................................................................16 CHƢƠNG 2 : MỘT SỐ KỸ THUẬT SỬ DỤNG TRONG CHATBOT ................17 2.1 Kiến trúc mạng nơ ron nhân tạo.......................................................................17 2.2 Mạng nơ ron hồi quy RNN ..............................................................................20 2.3 Mạng Long short Term Memory (LSTM).......................................................23 2.3.1 Vấn đề phụ thuộc quá dài..........................................................................23 2.3.2 Kiến trúc mạng LSTM ..............................................................................24 2.3.3 Phân tích mô hình LSTM..........................................................................25 2.4 Word embeddings ............................................................................................28 2.4.1 Word2vec ..................................................................................................28 2.4.2 Glove.........................................................................................................29 2.5 Ứng dụng RNN vào quản lý hội thoại .............................................................31 2.5.1 Mô hình word-based DST.........................................................................31
  • 6. 2.5.2 Mô hình Global-Locally Self-Attentive DST (GLAD).............................32 CHƢƠNG 3 : XÂY DỰNG CHATBOT HỖ TRỢ NGƢỜI DÙNG LĨNH VỰC NGÂN HÀNG ..............................................................................................................34 3.1 Bài toán ............................................................................................................34 3.2 Xây dựng chatbot hỗ trợ người dùng lĩnh vực ngân hàng ...............................34 3.3 Ứng dụng RASA xây dựng chatbot.................................................................36 3.4 Xây dựng dữ liệu chatbot.................................................................................37 3.4.1 Xây dựng ý định........................................................................................38 3.4.2 Xây dựng entity.........................................................................................39 3.4.3 Xây dựng câu trả lời cho bot.....................................................................39 3.4.4 Xây dựng khung kịch bản (history) ..........................................................41 3.5 Thực nghiệm ....................................................................................................43 3.6 Đánh giá...........................................................................................................51 KẾT LUẬN ..................................................................................................................52 TÀI LIỆU THAM KHẢO...........................................................................................53 PHỤ LỤC .....................................................................................................................55
  • 7. DANH MỤC KÝ HIỆU VÀ CÁC CHỮ VIẾT TẮT Từ viết tắt Từ chuẩn Diễn giải AI Artificial Intelligence Trí tuệ nhân tạo ANN Artificial Nerual Network Mạng nơ ron nhân tạo CBOW Continuous Bag of Words CNN Convolution Neural Network Mạng nơ ron tích chập CRF Conditional Random Fields Mô hình xác xuất trường điều kiện ngẫu nhiên DM Dialogue Management Quản lý hội thoại DNN Deep Neural Networks Mô hình học máy DTS Dialogue State Tracking Theo dõi trạng thái hội thoại FSA Finite State Automata Mô hình dựa trên máy trạng thái hữu hạn FSM Finite State Machine Máy trạng thái hữu hạn GLAD Global-Locally SelfAttentive Dialogue State Tracker HMM Hiden Markov Models Mô hình Markov ẩn LSTM Long short-term memory Mạng cải tiến để giải quyết vấn đề phụ thuộc quá dài NLG Natural Language Generation Thành phần sinh ngôn ngữ NLP Natural Language Processing Xử lý ngôn ngữ tự nhiên NLU Natural Language Understanding Hiểu ngôn ngữ tự nhiên ML Machine Learning Học máy, máy có khả năng học tập POS Part Of Speech Gán nhãn từ loại RNN Recurrent Neural Network Mạng nơ ron hồi quy SVM Vector Support Machine Máy vector hỗ trợ
  • 8. DANH MỤC HÌNH VẼ VÀ ĐỒ THỊ Hình 1.1: Cấu trúc các thành phần cơ bản hệ thống chatbot [12] ...................................6 Hình 1.2: Mô hình các thành phần xử lý trong chatbot [1].............................................7 Hình 1.3: Các bước xử lý chính trong pipeline của NLU [1]..........................................8 Hình 1.4: Các bước xử lý trong NLU [2]........................................................................8 Hình 1.5: Mô hình các bước xác định ý định ................................................................10 Hình 1.6: Gán nhãn từ theo mô hình B-I-O trong trích xuất thông tin ................. Error! Bookmark not defined. Hình 1.7: Mô hình quản lý trạng thái và quyết định action trong hội thoại [2] ............12 Hình 1.8: Quản lý hội thoại theo mô hình máy trạng thái hữu hạn FSA ......................13 Hình 1.9: Frame cho chatbot hỏi thông tin khách hàng ................................................14 Hình 1.10: Phương pháp sinh ngôn ngữ dựa trên tập mẫu câu trả lời [1].....................15 Hình 1.11: Phương pháp sinh ngôn ngữ Plan-based [1]................................................15 Hình 1.12: Phương pháp sinh ngôn ngữ class-based [1]...............................................16 Hình 2.1: Kiến trúc mạng nơ ron nhân tạo [15] ............................................................17 Hình 2.2: Quá trình xử lý thông tin của một mạng nơ-ron nhân tạo [15] .....................18 Hình 2.3: Mạng RNN [15].............................................................................................21 Hình 2.4: Mạng RNN 2 chiều [15]................................................................................22 Hình 2.5: Mạng RNN nhiều tầng [15]...........................................................................22 Hình 2.6: RNN phụ thuộc short-term [17] ....................................................................23 Hình 2.7: RNN phụ thuộc long-term [17] .....................................................................23 Hình 2.8: Các mô-đun lặp của mạng RNN chứa một layer [17]...................................24 Hình 2.9 : Các mô-đun lặp của mạng LSTM chứa bốn layer [17]................................24 Hình 2.10 : Tế bào trạng thái LSTM giống như một băng truyền [17].........................25 Hình 2.11 : Cổng trạng thái LSTM [17]........................................................................26 Hình 2.12 : LSTM focus f [17]......................................................................................26 Hình 2.13 : LSTM focus I [17]......................................................................................27 Hình 2.14 : LSTM focus c [17] .....................................................................................27 Hình 2.15 : LSTM focus o [17].....................................................................................27 Hình 2.16 : Mô hình từ nhúng [16] ...............................................................................28 Hình 2.17 : Mô hình CBOW và Skip-Ngram [16]........................................................29 Hình 2.18 : Xác xuất từ k trên ngữ cảnh của từ i và j [16]............................................29
  • 9. Hình 2.20 : Công thức tính hàm chi phí tối thiểu [16] ..................................................30 Hình 2.21 : Hàm trọng số (weighting function) [16] ....................................................30 Hình 2.22: Mô hình word-based DST với mạng RNN [20]..........................................31 Hình 2.23: Mô hình Global-Locally Self-Attentive DST (GLAD) [21].......................32 Hình 2.24 : Global-locally self-attentive encoder modul [21] ......................................33 Hình 3.1: Cấu trúc chatbot cho hệ thống ebanking .......................................................35 Hình 3.2 : Cấu hình pipeline xử lý ngôn ngữ tự nhiên..................................................37 Hình 3.3 : Các bước xây dựng chatbot..........................................................................38 Hình 3.4 : Xây dựng ý định người dùng........................................................................39 Hình 3.6 : Mẫu câu trả lời của bot cho ý định hỏi số dư tài khoản ...............................39 Hình 3.7: Mẫu câu trả lời mặc định của bot khi không nhận ra ý định người dùng .....40 Hình 3.8: Mẫu câu trả lời cho ý định người dùng hỏi lãi suất.......................................41 Hình 3.9: Custom action xử lý slot money....................................................................41 Hình 3.10: Khung kịch bản chuyển tiền bằng thẻ .........................................................42 Hình 3.11: Học tương tác với bot..................................................................................42 Hình 3.12 : Bảng mô tả số lần thử nghiệm với người dùng..........................................43 Hình 3.13: Hình ma trận ước lượng nhầm lẫn xây dựng dữ liệu intent ........................43 Hình 3.14: Hình ước lượng độ chính xác tập dữ liệu trainning intent ..........................44 Hình 3.15 : Hình ước lượng độ chính xác trích chọn thông tin.....................................44 Hình 3.16: Hình ước lượng độ nhầm lẫn việc xây dựng câu trả lời của bot (action)....45 Hình 3.17 : Bảng mô tả đoạn hội thoại test với bot.......................................................50
  • 10. 1 MỞ ĐẦU “Chatbot will fundamentally revolutionize how computing is experienced by everybody” CEO Microsoft - Satya Nadella Chatbot nói riêng hay trợ lý ảo nói chung đang ngày càng thông minh hơn, hoàn thiện hơn. Nó giúp chúng ta có những tương tác và trải nghiệm tốt hơn đối với các phần mềm. Chúng ta sẽ điểm qua một số thành tựu mà chatbot đã đạt được (thống kê trên infographic : the future of chatbots statistics & trends) [23]  100000 : là số lượng chatbot trên Facebook Messenger tại thời điểm tháng 11/2018  80% các doanh nghiệp muốn sử dụng chatbot vào năm 2020  63% người dùng sẽ xem xét một tin nhắn online từ chatbot để kết nối với doanh nghiệp hoặc nhãn hiệu  59% số người đã từng sử dụng chatbot trên một app  37.11% là số chatbot tăng trưởng trong suốt giai đoạn 2017-2021  56% các công ty đa truyền thông và công nghệ sẽ chuyển qua sử dụng các công nghệ chăm sóc khách hàng tự động trong tương lai gần, 33% sẽ có kế hoạch chuyển sang dùng các robot sử dụng AI trước năm 2019  75% là tỉ lệ thành công của việc bot tương tác với người dùng trong lĩnh vực y tế và ngân hàng. 90% là chỉ số mong đợi sau này.  30% là số chi phí giảm đi khi áp dụng chatbot vào lĩnh vực chăm sóc khách hàng  8 tỷ USD là chi phí sẽ giảm khi áp dụng chatbot vào chăm sóc khách hàng đến năm 2022 so với 20 triệu USD ở năm 2017 Vậy đâu là cơ sở để chatbot phát triển nhanh như vậy. Chúng ta sẽ điểm qua một số các tác nhân chính: Đầu tiên là do thời đại bùng nổ của tin nhắn và nó là cơ sở cho chatbot phát triển mạnh mẽ:  28,2 tỷ tin nhắn di động đã được gửi trong năm 2017, gấp đôi so với năm 2012. [25]  98% tin nhắn sẽ được đọc, với email tỷ lệ là 22%.  Tỷ lệ gỡ bỏ các ứng dụng nhắn tin chỉ bằng một nửa so với các ứng dụng khác
  • 11. 2  6 trong top các ứng dụng được cài đặt là ứng dụng nhắn tin: WhatsApp, Facebook messenger, Wechat, Viber, Line, KakaoTalk, Telegram [24] Bên cạnh đó cách mạng công nghệ 4.0 đã kéo theo nhiều thay đổi đáng kể đối với nhiều lĩnh vực trong cuộc sống, đặc biệt nó thúc đẩy sự tiến bộ lớn trong lĩnh vực hiểu và xử lý ngôn ngữ tư nhiên (NLU và NLP). Hàng loạt các thuật toán ra đời bắt đầu từ năm 2013 đã giúp chatbot ngày càng thông minh và chính xác hơn. Và cuối cùng là sự đầu tư nghiên cứu mạnh mẽ vào chatbot của các ông lớn trong lĩnh vực công nghệ đã tạo ra hệ sinh thái, platform trên nền tảng các chatbot giúp người dùng có thể tiếp cận một cách dễ dàng. Đây chính là tiền đề thúc đẩy cho sự phát triển mạnh mẽ của chatbot trong những năm gần đây. Kỷ nguyên của Chatbot mới chỉ đang bắt đầu nhưng chúng ta đã được hưởng không ít lợi ích từ việc ứng dụng chúng. Với công nghệ ngày một phát triển, đặc biệt là với những tiến bộ của trí tuệ nhân tạo trong vài năm trở lại đây, chúng ta hoàn toàn có thể kỳ vọng ở một tương lai nơi chatbot không chỉ giúp con người giải đáp mọi khía cạnh trong cuộc sống mà còn có thể thay con người đưa ra quyết định. 1. Động lực nghiên cứu Ở nước ta, việc giải đáp thắc mắc của bộ phận chăm sóc khách hàng qua tin nhắn trực tuyến đang được ưa chuộng. Tuy nhiên, việc này còn thực hiện một cách thủ công và gặp nhiều khó khăn như: tốn rất nhiều thời gian và chi phí chi trả cho nhân viên chỉ để trả lời những câu hỏi đơn giản và giống nhau. Chính vì vậy, nhu cầu cấp thiết là cần một hệ thống điều khiển thông minh, tự động để mang lại hiệu quả cao hơn và Chatbot là một sự lựa chọn hoàn hảo. Hiện nay, các ứng dụng trò chuyện trực tuyến được mọi người sử dụng đang bắt đầu trở thành một phương tiện ưa thích để giao tiếp với các doanh nghiệp và giải quyết thắc mắc của khách hàng. Ứng dụng nhắn tin nhanh đã trở thành điểm đến hàng đầu cho mọi thương hiệu nhằm tiếp cận người tiêu dùng, bởi vậy không có gì đáng ngạc nhiên khi Chatbot ngày càng trở nên phổ biến. Với một khối lượng lớn câu hỏi mà chúng ta phải giải quyết mỗi ngày như: khách hàng hỏi về sản phẩm, dịch vụ, nhân viên hỏi về các quy chế công ty, con cái hỏi về những sự việc chúng đang tò mò…ngoài ra chatbot còn được áp dụng trong rất nhiều 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…người dùng có thể nói chuyện tương tác với chúng hàng giờ, nó
  • 12. 3 trả lời câu hỏi của bạn theo cách nhân văn nhất và hiểu được tâm trạng của bạn với ngôn ngữ bạn đang sử dụng. Thời tiết: Poncho là ChatBot được thiết kế để trở thành một chuyên gia thời tiết, ngoài dự báo thời tiết chúng còn gửi cảnh báo khi thời tiết xấu với sự chấp thuận của người dùng. Từ thiện: Để nâng cao nhận thức của con người về cuộc khủng hoảng nước ở Ethiopia (dưới 50% dân số được sử dụng nước sạch), tổ chức từ thiện: Nước hợp tác với Lokai để tạo ra Yeshi. Yeshi là một ChatBot đại diện các cô gái trẻ ở Ethiopia, người phải đi bộ 2,5 giờ mỗi ngày để tìm nước sạch. Khi ai đó bắt đầu trò chuyện với bot, Yeshi sẽ gửi hình ảnh, video, clip âm thanh và bản đồ để tạo ra trải nghiệm cảm xúc sâu sắc giúp người dùng khám phá ra thực tế khắc nghiệt của người Ethiopia như Yeshi. Nhà hàng và các ngành bán lẻ: Khách hàng được Chatbot chào đón và được cung cấp các tùy chọn menu như: chọn vị trí chổ ngồi, thanh toán và được thông báo khi nào họ có thể bắt đầu lấy thức ăn của họ. Khách sạn và Du lịch: Chatbot có thể giúp khách sạn trong một số lĩnh vực, bao gồm quản lý thời gian, dịch vụ khách hàng và giảm chi phí nhân lực. Chúng có thể giúp khách hàng với các câu hỏi cơ bản và yêu cầu. Chúng có thể được lập trình để trò chuyện với khách bằng các ngôn ngữ khác nhau, làm cho các khách hàng nói chuyện bằng ngôn ngữ địa phương của mình dễ dàng hơn. Y tế: ChatBot này sẽ hỏi về các triệu chứng, các thông số cơ thể và lịch sử y tế, sau đó biên soạn một danh sách các nguyên nhân gây ra hầu hết các triệu chứng và xếp hạng chúng theo thứ tự nghiêm trọng. ChatBot có thể hướng dẫn bệnh nhân điều trị các bệnh có thể được chữa khỏi mà không cần đến bác sĩ. Hàng không: bạn có thể nhận tài liệu chuyến bay của mình 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. 2. Mục tiêu luận văn Nghiên cứu các thành phần cấu tạo chatbot. Tìm hiểu các kỹ thuật xử lý ngôn ngữ trong NLU, NLP như biểu diễn ngôn ngữ, phân loại ý định (intent classification hay intent detection), trích xuất thông tin (information extraction), quản lý hội thoại… trong việc xây dựng chatbot
  • 13. 4 Luận văn tập trung tìm cách giải quyết các bài toán mà chatbot ứng dụng trong miền đóng (closed domain) và trả lời theo mô hình truy xuất thông tin (retrieval- based). Mô hình truy xuất thông tin là mô hình trong đó, chatbot đưa ra những phản hồi được chuẩn bị trước hoặc tuân theo những mô thức nhất định. Các hệ thống chatbot được triển khai trong thực tế phần lớn tuân theo mô hình truy xuất thông tin và được áp dụng trong những miền ứng dụng nhất định. Với đề tài này thì luận văn sẽ tập trung xây dựng hệ thống chatbot hỗ trợ người dùng trong lĩnh vực ngân hàng dựa vào framework Rasa và áp dụng những kiến thức tìm hiểu về chatbot để có thể tùy chỉnh trên mã nguồn mở này. Đối tượng hỗ trợ người dùng chatbot cụ thể ở đây là khách hàng cá nhân sử dụng trong hệ thống ebanking. 3. Cấu trúc luận văn MỞ ĐẦU: Giới thiệu và đưa ra hướng nghiên cứu bài toán chatbot CHƢƠNG I: Tổng quan hệ thống chatbot: Giới thiệu tổng quan hệ thống chatbot. Cấu tạo và nhiệm vụ các thành phần hệ thống chatbot. CHƢƠNG II: Một số kỹ thuật sử dụng trong chatbot: Hiểu và nắm được một số kỹ thuật hay thuật toán cơ bản sử dụng trong chatbot để từ đó có thể điều chỉnh phù hợp với ngôn ngữ tiếng việt, giúp chatbot xử lý thông minh hơn. CHƢƠNG III: Xây dựng chatbot lĩnh vực ngân hàng : Xây dựng ứng dụng chatbot cho ngân hàng trên nền tảng mã nguồn mở Rasa. Đưa ra những kết luận và đánh giá, cải tiến hệ thống. KẾT LUẬN : Đưa ra những kết luận, đánh giá và định hướng nghiên cứu tiếp theo PHỤ LỤC: Danh sách các đoạn hội thoại với bot được đính kèm ở phần thử nghiệm
  • 14. 5 CHƢƠNG 1 : TỔNG QUAN HỆ THỐNG CHATBOT Chương này sẽ giới thiệu tổng quan về hệ thống chatbot, cấu trúc các thành phần và những vấn đề khi xây dựng hệ thống chatbot. 1.1 Giới thiệu Hệ thống đối thoại người máy hay còn gọi với thuật ngữ là chatbot 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. Phạm vi và sự phức tạp của ChatBot được xác định bởi thuật toán của người tạo nên chúng. ChatBot thường được ứng dụng trong nhiều lĩnh vực như thương mại điện tử, dịch vụ khách hàng, y tế, tài chính ngân hàng, các dịch vụ giải trí… Chatbot có thể được chia thành 2 loại: - Hệ thống hướng mục tiêu trên một miền ứng dụng (Task-Oriented) - Hệ thống không có định hướng mục tiêu (chit-chat) Miền mở (Open Domain): Mô hình trả lời tự động trên miền mở cho phép người dùng có thể tham gia trò chuyện với một chủ đề bất kỳ, không nhất thiết phải có một mục tiêu rõ ràng hay một ý định cụ thể nào. Các cuộc trò chuyện trên mạng xã hội như Facebook, Twitter thường là miền mở, chúng có thể đi vào tất cả các chủ đề. Số lượng các chủ đề thảo luận được đề cập đến là không giới hạn, do đó, tri thức yêu cầu được tạo ra để trả lời các câu đối thoại thuộc miền mở trở nên khó hơn. Tuy nhiên, việc thu thập trích rút dữ liệu từ miền này khá phong phú và đơn giản. Miền đóng (Close Domain): Mô hình trả lời tự động thuộc miền đóng thường tập trung vào trả lời các câu hỏi đối thoại liên quan đến một miền cụ thể, ví dụ như: Y tế, Giáo dục, Du lịch, Mua sắm, .. Trong một miền đóng cụ thể, không gian các mẫu hỏi input và output là có giới hạn, bởi vì các hệ thống này đang cố gắng để đạt được một mục tiêu rất cụ thể. Hệ thống hỗ trợ kỹ thuật (Technical Customer Support) hay tư vấn và hỗ trợ mua hàng (Shopping Assistants) là các ứng dụng thuộc miền đóng. Các hệ thống này không thể đối thoại về “Chính trị” hay “Pháp luật”, chúng chỉ cần thực hiện các nhiệm vụ cụ thể một cách hiệu quả nhất có thể. Chắc chắn, người dùng vẫn có thể hỏi đáp bất cứ gì, nhưng hệ thống không yêu cầu phải xử lý những trường hợp ngoại lệ này.
  • 15. 6 Mỗi cách tiếp cận bài toán đều có hướng giải quyết khác nhau dẫn tới các kỹ thuật sử dụng khác nhau. Trong luận văn này, tôi sẽ tập trung vào giải quyết trƣờng hợp thứ nhất là bài toán hƣớng mục tiêu trên một miền ứng dụng đóng. 1.2 Cấu trúc các thành phần hệ thống chatbot Hình 1.1: Cấu trúc các thành phần cơ bản hệ thống chatbot [12] Chatbot có 3 thành phần chính là hiểu ngôn ngữ tự nhiên (NLU), quản lý hội thoại (DM), thành phần sinh ngôn ngữ (NLG). Các thành phần nhận dạng giọng nói Speech Recognition (text to speech hay speech to text) là các thành phần tăng cường. Mỗi thành phần trong chatbot đều có vai trò riêng:  NLU: bao gồm việc xử lý ngôn ngữ tự nhiên (NLP) có nhiệm vụ xác định được ý định câu hỏi(intent classification) và trích chọn thông tin (slots filter)  DM: Quản lý hội thoại có nhiệm vụ xác định được hành động (action) tiếp theo dựa vào trạng thái hành động trước đó hay ngữ cảnh hội thoại. Các ngữ cảnh này phải được đối chiếu trong các kịch bản dựng sẵn (history) đã đào tạo cho bot. Thành phần này cũng đảm nhiệm việc lấy dữ liệu từ hệ thống khác qua các API gọi trong action  NLG: là thành phần sinh ngôn ngữ dựa vào chính sách (policy) và hành động được xác định trong DM thông qua các tập hội thoại. NGL có thể được sinh ra
  • 16. 7 câu trả lời dựa vào tập mẫu câu trả lời (pre-defined template) đã đào tạo cho bot. Để rõ chi tiết luồng xử lý tin nhắn từ các thành phần chatbot ta xem mô hình 1.2: Hình 1.2: Mô hình các thành phần xử lý trong chatbot [1] 1.3 Hiểu ngôn ngữ tự nhiên (NLU) Đây có thể nói là thành phần quan trọng nhất của chatbot. Chatbot có thông minh hay không thì đây là thành phần quyết định. Mục tiêu của thành phần này là trích xuất ra 3 thành phần thông tin từ câu nói của người dùng:  Đầu tiên là phân loại lĩnh vực (domain classification), nó có thể là lĩnh vực ngân hàng, y tế hay bảo hiểm. Nếu trong trường hợp chỉ có một lĩnh vực thì không cần thiết cho bước phân loại này.  Tiếp đến là phân loại ý định (intent classification), ví dụ như xác định được ý định tra cứu thông tin tài khoản hoặc ý định kiểm tra số dư.  Cuối cùng là bước trích xuất thông tin (slot fillter hay entity extraction) trong câu hỏi người dùng. Ví dụ ta phải trích chọn được thông tin số tháng trong câu hỏi người dùng: “lãi xuất kỳ hạn 3 tháng là bao nhiêu”. Từ việc trích xuất được thông tin 3 tháng thì chatbot mới có cơ sở trả lời cho người dùng.
  • 17. 8 NLU xử lý tin nhắn người dùng bằng một đường ống (pipeline) nơi mà cấu hình các bước xử lý liên tiếp theo tuần tự : Hình 1.3: Các bước xử lý chính trong pipeline của NLU [1] Trong đường ống này thì bạn có thể tùy chỉnh các thành phần từ bước tiền xử lý dữ liệu, mô hình hóa ngôn ngữ, các thuật toán dùng để tách từ và trích xuất thông tin thực thể… Để chi tiết các bước xử lý ta xem trong mô hình 1.4: Trong đó bước entity extraction chính là bước slot filling ở hình 1.3 Hình 1.4: Các bước xử lý trong NLU [2] Phân loại tên miền (Domain Classification) Phân loại ý định (intent Classification) Trích chọn thông tin (Entity Extraction) “Lãi suất vay 12 tháng?” {“loan”:”vay”,“term”:”12 tháng”} “Lãi suất vay 12 tháng?” {intent:” interest”} Lãi suất vay 12 tháng? Hiểu ngôn ngữ tự nhiên (NLU) Vector hóa ngôn ngữ (Vectorrization) Phân loại ý định (intent classification) Trích xuất thông tin thực thể (entity extraction) Nhận dạng tên thực thể (Name entity recognition) Phân tích cú pháp (chunker) Gán nhãn từ loại (Part of Speech Tagger) Thuật toán tách từ (Tokenizer) Phân loại ý định trong pipelined Trích xuất thông tin trong pipelined
  • 18. 9 Để phân loại được ý định câu người dùng thì ta cần mô hình hóa ngôn ngữ tức là việc biểu diễn ngôn ngữ dưới dạng vector số học cho máy có thể hiểu được (vectorization). Phương pháp phổ biến nhất hiện tại là word embedding (nhúng từ). Tập nhúng từ là tên chung cho một tập hợp các mô hình ngôn ngữ và các phương pháp học đặc trưng trong xử lý ngôn ngữ tự nhiên (NLP), nơi các từ hoặc cụm từ từ vựng được ánh xạ tới vectơ số thực. Về mặt khái niệm, nó liên quan đến việc nhúng toán học từ một không gian với một chiều cho mỗi từ vào một không gian vectơ liên tục với kích thước thấp hơn nhiều. Một số phương pháp biểu diễn phổ biến như Word2Vec, GloVe hay mới hơn là FastText sẽ được giới thiệu trong phần sau. Sau khi mô hình hóa ngôn ngữ bao gồm dữ liệu đầu vào training cho bot thì việc xác định ý định người dùng từ câu hỏi người dùng dựa trên tập đã training là bước phân loại ý định (intent classification) hay phân loại văn bản. Ở bước này ta có thể dùng một số kỹ thuật như: Naive Bayes, Decision Tree (Random Forest), Vector Support Machine (SVM), Convolution Neural Network (CNN), Recurrent Neural Network (RNN), Long Short-Term Memory (LSTM, Bi-LSTM). Hầu hết các chatbot hiện tại đều ứng dụng mô hình deep learning như RNN và LSTM để phân loại ý định người dùng. Bài toán thách thức lớn nhất cho các chatbot ở bước này là xác định nhiều ý định(multiple intents) trong một câu nói người dùng. Ví dụ nếu bạn nói “xin chào, kiểm tra cho tôi số dư tài khoản” thì bot phải xác định được 2 ý định “chào hỏi” và “kiểm tra số dư” trong câu nói người dùng. Nếu bot có thể hiểu và trả lời được câu hỏi loại này sẽ giúp việc tương tác với bot trở nên tư nhiên hơn. Tiếp đến là việc trích xuất thông tin trong câu hội thoại người dùng. Các thông tin cần trích xuất thường dưới dạng số, chuỗi hoặc thời gian và chúng phải được khai báo và huấn luyện trước. Phân tách các từ (Tokenization hay word segmention): Tách từ là một quá trình xử lý nhằm mục đích xác định ranh giới của các từ trong câu văn, cũng có thể hiểu đơn giản rằng tách từ là quá trình xác định các từ đơn, từ ghép… có trong câu. Đối với xử lý ngôn ngữ, để có thể xác định cấu trúc ngữ pháp của câu, xác định từ loại của một từ trong câu, yêu cầu nhất thiết đặt ra là phải xác định được đâu là từ trong câu. Vấn đề này tưởng chừng đơn giản với con người nhưng đối với máy tính, đây là bài toán rất khó giải quyết. Thông thường thì các ngôn ngữ phân tách các từ bởi khoảng trắng nhưng đối với ngôn ngữ tiếng việt thì có rất nhiều từ ghép và cụm từ. Ví dụ từ ghép “tài khoản” được tạo bởi 2 từ đơn “tài” và “khoản”. Có một số thuật toán hỗ trợ giải quyết bài toán này như mô hình so khớp từ dài nhất (longest matching), so khớp cực
  • 19. 10 đại (Maximum Matching), Markov ẩn (Hidden Markov Models- HMM) hay mô hình CRF (conditinal random field)… 1.3.1 Xác định ý định ngƣời dùng Hình 1.5: Mô hình các bước xác định ý định 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  Trích xuất đặc trưng  Huấn luyện mô hình  Phân lớp Bước tiền xử lý dữ liệu chính là thao tác “làm sạch” dữ liệu như: loại bỏ các thông tin dư thừa, chuẩn hoá dữ liệu và chuyển các từ viết sai chính tả thành đúng chính tả, chuẩn hoá các từ viết tắt… Bước tiền xử lý dữ liệu có vai trò quan trọng trong hệ thống chatbot. Nếu dữ liệu đầu vào có xử lý ở bước này thì sẽ làm tăng khả năng năng độ chính xác cũng như sự thông minh cho bot. Tiếp đến là bước trích xuất đặc trưng (feature extraction hay feature engineering) từ những dữ liệu đã được làm sạch. Trong mô hình học máy truyền thống (trước khi mô hình học sâu được áp dụng rộng rãi), bướ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. Để trích xuất được những đặc trưng tốt, chúng ta cần phân tích dữ liệu khá tỉ mỉ và cần cả những tri thức chuyên gia trong từng miền ứng dụng cụ thể. Bước huấn luyện mô hình nhận đầu vào là các đặc trưng đã được trích xuất và áp dụng các thuật toán học máy để học ra một mô hình phân lớp. Các mô hình phân lớp có thể là các luật phân lớp (nếu sử dụng decision tree) hoặc là các vector trọng số
  • 20. 11 tương ứng với các đặc trưng được trích xuất (như trong các mô hình logistic regression, SVM, hay mạng Neural). Sau khi có một mô hình phân lớp intent, chúng ta có thể sử dụng nó để phân lớp một câu hội thoại mới. Câu hội thoại này cũng đi qua các bước tiền xử lý và trích xuất đặc trưng, sau đó mô hình phân lớp sẽ xác định “điểm số” cho từng intent trong tập các intent và đưa ra intent có điểm cao nhất Để đưa ra hỗ trợ được chính xác, chatbot cần xác định được ý định (intent) đó của người dùng. Việc xác định ý định của người dùng sẽ quyết định hội thoại tiếp theo giữa người và chatbot sẽ diễn ra như thế nào. Vì thế, nếu xác định sai ý định người dùng, chatbot sẽ đưa ra những phản hồi không đúng, không hợp ngữ cảnh. Khi đó, người dùng có thể thấy chán ghét và không quay lại sử dụng hệ thống. Bài toán xác định ý định người dùng vì thế đóng vai trò rất quan trọng trong hệ thống chatbot. Đối với miền ứng dụng đóng, chúng ta có thể giới hạn số lượng ý định của người dùng nằm trong một tập hữu hạn những ý định đã được định nghĩa sẵn, có liên quan đến những nghiệp vụ mà chatbot có thể hỗ trợ. Với giới hạn này, bài toán xác định ý định người dùng có thể quy về bài toán phân lớp văn bản. Với đầu vào là một câu giao tiếp của người dùng, hệ thống phân lớp sẽ xác định ý định tương ứng với câu đó trong tập các intent đã được định nghĩa trước. Để xây dựng một mô hình phân lớp intent, chúng ta cần một tập dữ liệu huấn luyện bao gồm các cách diễn đạt khác nhau cho mỗi intent. Ví dụ, cùng một mục đích hỏi về số dư tài khoản người dùng có thể dùng những cách diễn đạt sau:  Thông tin tài khoản?  Tra cứu tài khoản?  Số dư tài khoản?  Số tiền trong tài khoản? Có thể nói, bước tạo dữ liệu huấn luyện cho bài toán phân lớp intent là một trong những công việc quan trọng nhất khi phát triển hệ thống chatbot và ảnh hưởng lớn tới chất lượng sản phẩm của hệ thống chatbot về sau. Công việc này cũng đòi hỏi thời gian, công sức khá lớn của nhà phát triển chatbot. 1.4 Quản lý hội thoại (DM) Trong các phiên trao đổi dài (long conversation) giữa người và chatbot, chatbot sẽ cần ghi nhớ những thông tin về ngữ cảnh (context) hay quản lý các trạng thái hội thoại
  • 21. 12 (dialog state). Vấn đề quản lý hội thoại (dialoge management) khi đó là quan trọng để đảm bảo việc trao đổi giữa người và máy là thông suốt. Chức năng của thành phần quản lý hội thoại là nhận đầu vào từ thành phần NLU, quản lý các trạng thái hội thoại (dialogue state), ngữ cảnh hội thoại (dialogue context), và truyền đầu ra cho thành phần sinh ngôn ngữ (Natural Language Generation, viết tắt là NLG). Hình 1.6: Mô hình quản lý trạng thái và quyết định action trong hội thoại [2] Trạng thái hội thoại (dialog state) được lưu lại và dựa vào tập luật hội thoại (dialog policy) để quyết định hành động tiếp theo cho câu trả lời của bot trong một kịch bản hội thoại, hay hành động (action) chỉ phụ thuộc vào trạng thái (dialog state) trước của nó. Ví dụ module quản lý dialogue trong một chatbot phục vụ đặt vé máy bay cần biết khi nào người dùng đã cung cấp đủ thông tin cho việc đặt vé để tạo một ticket tới hệ thống hoặc khi nào cần phải xác nhận lại thông tin do người dùng đưa vào. Hiện nay, các sản phẩm chatbot thường dùng mô hình máy trạng thái hữu hạn (Finite State Automata – FSA), mô hình Frame-based (Slot Filling), hoặc kết hợp hai mô hình này. Một số hướng nghiên cứu mới có áp dụng mô hình ANN vào việc quản lý hội thoại giúp bot thông minh hơn, chi tiết xem mục 2.5
  • 22. 13 1.4.1 Mô hình máy trạng thái hữu hạn FSA Hình 1.7: Quản lý hội thoại theo mô hình máy trạng thái hữu hạn FSA Mô hình FSA quản lý hội thoại đơn giản nhất. Ví dụ hệ thống chăm sóc khách hàng của một công ty viễn thông, phục vụ cho những khách hàng than phiền về vấn đề mạng chậm. Nhiệm vụ của chatbot là hỏi tên khách hàng, số điện thoại, tên gói Internet khách hàng đang dùng, tốc độ Internet thực tế của khách hàng. Hình vẽ minh hoạ một mô hình quản lý hội thoại cho chatbot chăm sóc khách hàng. Các trạng thái của FSA tương ứng với các câu hỏi mà dialogue manager hỏi người dùng. Các cung nối giữa các trạng thái tương ứng với các hành động của chatbot sẽ thực hiện. Các hành động này phụ thuộc phản hồi của người dùng cho các câu hỏi. Trong mô hình FSA, chatbot là phía định hướng người sử dụng trong cuộc hội thoại. Ưu điểm của mô hình FSA là đơn giản và chatbot sẽ định trước dạng câu trả lời mong muốn từ phía người dùng. Tuy nhiên, mô hình FSA không thực sự phù hợp cho các hệ thống chatbot phức tạp hoặc khi người dùng đưa ra nhiều thông tin khác nhau trong cùng một câu hội thoại. Trong ví dụ chatbot ở trên, khi người dùng đồng thời cung cấp cả tên và số điện thoại, nếu chatbot tiếp tục hỏi số điện thoại, người dùng có thể cảm thấy khó chịu.
  • 23. 14 1.4.2 Mô hình Frame-based Mô hình Frame-based (hoặc tên khác là Form-based) có thể giải quyết vấn đề mà mô hình FSA gặp phải. Mô hình Frame-based dựa trên các frame định sẵn để định hướng cuộc hội thoại. Mỗi frame sẽ bao gồm các thông tin (slot) cần điền và các câu hỏi tương ứng mà dialogue manager hỏi người dùng. Mô hình này cho phép người dùng điền thông tin vào nhiều slot khác nhau trong frame. Hình vẽ là một ví dụ về một frame cho chatbot ở trên. Hình 1.8: Frame cho chatbot hỏi thông tin khách hàng Thành phần quản lý dialogue theo mô hình Frame-based sẽ đưa ra câu hỏi cho khách hàng, điền thông tin vào các slot dựa trên thông tin khách hàng cung cấp cho đến khi có đủ thông tin cần thiết. Khi người dùng trả lời nhiều câu hỏi cùng lúc, hệ thống sẽ phải điền vào các slot tương ứng và ghi nhớ để không hỏi lại những câu hỏi đã có câu trả lời. Trong các miền ứng dụng phức tạp, một cuộc hội thoại có thể có nhiều frame khác nhau. Vấn đề đặt ra cho người phát triển chatbot khi đó là làm sao để biết khi nào cần chuyển đổi giữa các frame. Cách tiếp cận thường dùng để quản lý việc chuyển điều khiển giữa các frame là định nghĩa các luật (production rule). Các luật này dựa trên một số các thành tố như câu hội thoại hoặc câu hỏi gần nhất mà người dùng đưa ra. 1.5 Thành phần sinh ngôn ngữ (NLG) NLG là thành phần sinh câu trả lời của chatbot. Nó dựa vào việc ánh xạ các hành động của quản lý hội thoại vào ngôn ngữ tự nhiên để trả lời người dùng. Có 4 phương pháp ánh xạ hay dùng là: Template-Base, Plan-based, Class-base, RNN-base
  • 24. 15 1.5.1 Template-based NLG Phương pháp ánh xạ câu trả lời này là dùng những câu mẫu trả lời của bot đã được định nghĩa từ trước để sinh câu trả lời Hình 1.9: Phương pháp sinh ngôn ngữ dựa trên tập mẫu câu trả lời [1] - Ƣu điểm: đơn giản, kiểm soát dễ dàng. Phù hợp cho các bài toán miền đóng. - Nhƣợc điểm: tốn thời gian định nghĩa các luật, không mang tính tự nhiên trong câu trả lời. Đối với các hệ thống lớn thì khó kiểm soát các luật dẫn đến hệ thống cũng khó phát triển và duy trì. 1.5.2 Plan-based NLG Hình 1.10: Phương pháp sinh ngôn ngữ Plan-based [1] - Ƣu điểm: Có thể mô hình hóa cấu trúc ngôn ngữ phức tạp - Nhƣợc điểm: Thiết kế nặng nề, đòi hỏi phải rõ miền kiến thức
  • 25. 16 1.5.3 Class-based NLG Hình 1.11: Phương pháp sinh ngôn ngữ class-based [1] Phương pháp này dựa trên việc cho bot học những câu trả lời đầu vào đã được gán nhãn. Ứng với các hành động (action) và thông tin(slot) từ quản lý hội thoại thì bot sẽ đưa ra câu trả lời gần nhất dựa trên tập dữ liệu trả lời được đào tạo trước đó. - Ƣu điểm: dễ dàng thực thi - Nhƣợc điểm: phụ thuộc vào dữ liệu trả lời đã được gán nhãn đào tạo trước đó. Bên cạnh đó việc tính toán điểm số không hiệu quả cũng dân đến việc sinh câu trả lời sai
  • 26. 17 CHƢƠNG 2 : MỘT SỐ KỸ THUẬT SỬ DỤNG TRONG CHATBOT Chương này giới thiệu một số kiến thức nền tảng về mạng nơ ron nhân tạo, cách thức hoạt động của mạng nơ ron và một số các kỹ thuật được ứng dụng trong việc xử lý ngôn ngữ tự nhiên nói riêng hay xây dựng chatbot nói chung. 2.1Kiến trúc mạng nơ ron nhân tạo Mạng nơ ron nhân tạo (Artificial Neural Network – ANN) là một mô hình xử lý thông tin được mô phỏng dựa trên hoạt động của hệ thống thần kinh của sinh vật, bao gồm số lượng lớn các Nơ-ron được gắn kết để xử lý thông tin. ANN hoạt động giống như bộ não của con người, được học bởi kinh nghiệm (thông qua việc huấn luyện), có khả năng lưu giữ các tri thức và sử dụng các tri thức đó trong việc dự đoán các dữ liệu chưa biết (unseen data). Một mạng nơ-ron là một nhóm các nút nối với nhau, mô phỏng mạng nơ-ron thần kinh của não người. Mạng nơ ron nhân tạo được thể hiện thông qua ba thành phần cơ bản: mô hình của nơ ron, cấu trúc và sự liên kết giữa các nơ ron. Trong nhiều trường hợp, mạng nơ ron nhân tạo là một hệ thống thích ứng, tự thay đổi cấu trúc của mình dựa trên các thông tin bên ngoài hay bên trong chạy qua mạng trong quá trình học. Hình 12: Kiến trúc mạng nơ ron nhân tạo [15] Kiến trúc chung của một ANN gồm 3 thành phần đó là Input Layer, Hidden Layer và Output Layer Trong đó, lớp ẩn (Hidden Layer) gồm các nơ-ron, nhận dữ liệu input từ các Nơ- ron ở lớp (Layer) trước đó và chuyển đổi các input này cho các lớp xử lý tiếp theo. Trong một mạng ANN có thể có nhiều Hidden Layer.
  • 27. 18 Lợi thế lớn nhất của các mạng ANN là khả năng được sử dụng như một cơ chế xấp xỉ hàm tùy ý mà “học” được từ các dữ liệu quan sát. Tuy nhiên, sử dụng chúng không đơn giản như vậy, một số các đặc tính và kinh nghiệm khi thiết kế một mạng nơ-ron ANN. Phương pháp này là tính toán tỷ lệ chính xác dữ liệu đầu ra (output) từ dữ liệu đầu vào (input) bằng cách tính toán các trọng số cho mỗi kết nối (connection) từ các lần lặp lại trong khi “huấn luyện” dữ liệu cho Chatbot. Mỗi bước “huấn luyện” dữ liệu cho Chatbot sẽ sửa đổi các trọng số dẫn đến dữ liệu output được xuất ra với độ chính xác cao.  Chọn mô hình: Điều này phụ thuộc vào cách trình bày dữ liệu và các ứng dụng. Mô hình quá phức tạp có xu hướng dẫn đền những thách thức trong quá trình học.  Cấu trúc và sự liên kết giữa các nơ-ron  Thuật toán học: Có hai vấn đề cần học đối với mỗi mạng ANN, đó là học tham số của mô hình (parameter learning) và học cấu trúc (structure learning). Học tham số là thay đổi trọng số của các liên kết giữa các nơ-ron trong một mạng, còn học cấu trúc là việc điều chỉnh cấu trúc mạng bằng việc thay đổi số lớp ẩn, số nơ-ron mỗi lớp và cách liên kết giữa chúng. Hai vấn đề này có thể được thực hiện đồng thời hoặc tách biệt. Nếu các mô hình, hàm chi phí và thuật toán học được lựa chọn một cách thích hợp, thì mạng ANN sẽ cho kết quả có thể vô cùng mạnh mẽ và hiệu quả. Hình 13: Quá trình xử lý thông tin của một mạng nơ-ron nhân tạo [15] Inputs: Mỗi Input tương ứng với 1 đặc trưng của dữ liệu. Ví dụ như trong ứng dụng của ngân hàng xem xét có chấp nhận cho khách hàng vay tiền hay không thì mỗi input là một thuộc tính của khách hàng như thu nhập, nghề nghiệp, tuổi, số con,… Output: Kết quả của một ANN là một giải pháp cho một vấn đề, ví dụ như với bài toán xem xét chấp nhận cho khách hàng vay tiền hay không thì output là yes hoặc no. Connection Weights (Trọng số liên kết) : Đây là thành phần rất quan trọng của một ANN, nó thể hiện mức độ quan trọng, độ mạnh của dữ liệu đầu vào đối với quá trình xử lý thông tin chuyển đổi dữ liệu từ Layer này sang layer khác. Quá trình học
  • 28. 19 của ANN thực ra là quá trình điều chỉnh các trọng số Weight của các dữ liệu đầu vào để có được kết quả mong muốn. Summation Function (Hàm tổng): Tính tổng trọng số của tất cả các input được đưa vào mỗi Nơ-ron. Hàm tổng của một Nơ-ron đối với n input được tính theo công thức sau: Transfer Function (Hàm chuyển đổi): Hàm tổng của một nơ-ron cho biết khả năng kích hoạt của nơ-ron đó còn gọi là kích hoạt bên trong. Các nơ-ron này có thể sinh ra một output hoặc không trong mạng ANN, nói cách khác rằng có thể output của 1 Nơ-ron có thể được chuyển đến layer tiếp trong mạng Nơ-ron theo hoặc không. Mối quan hệ giữa hàm tổng và kết quả output được thể hiện bằng hàm chuyển đổi. Việc lựa chọn hàm chuyển đổi có tác động lớn đến kết quả đầu ra của mạng ANN. Hàm chuyển đổi phi tuyến được sử dụng phổ biến trong mạng ANN là sigmoid hoặc tanh. Trong đó, hàm tanh là phiên bản thay đổi tỉ lệ của sigmoid , tức là khoảng giá trị đầu ra của hàm chuyển đổi thuộc khoảng [-1, 1] thay vì [0,1] của Sigmoid nên chúng còn gọi là hàm chuẩn hóa (Normalized Function). Kết quả xử lý tại các nơ-ron (Output) đôi khi rất lớn, vì vậy hàm chuyển đổi được sử dụng để xử lý output này trước khi chuyển đến layer tiếp theo. Đôi khi thay vì sử dụng Transfer Function người ta sử dụng giá trị ngưỡng (Threshold value) để kiểm soát các output của các neuron tại một layer nào đó trước khi chuyển các output này đến các Layer tiếp theo. Nếu output của một neuron nào đó nhỏ hơn Threshold thì nó sẻ không được chuyển đến Layer tiếp theo. Mạng nơ-ron của chúng ta dự đoán dựa trên lan truyền thẳng (forward propagation) là các phép nhân ma trận cùng với activation function để thu được kết quả đầu ra. Nếu input x là vector 2 chiều thì ta có thể tính kết quả dự đoán 𝑦 bằng công thức :
  • 29. 20 Trong đó, 𝑧𝑖 là input của layer thứ 𝑖, 𝑎𝑖 là output của layer thứ 𝑖 sau khi áp dụng activation function. 𝑊1, 𝑏1, 𝑊2, 𝑏2 là các tham số (parameters) cần tìm của mô hình mạng nơ-ron. Huấn luyện để tìm các tham số cho mô hình tương đương với việc tìm các tham số 𝑊1, 𝑏1, 𝑊2, 𝑏2 sao cho hàm lỗi của mô hình đạt được là thấp nhất. Ta gọi hàm lỗi của mô hình là loss function. Đối với softmax function, ta dùng crossentropy loss (còn gọi là negative log likelihood). Nếu ta có N ví dụ dữ liệu huấn luyện, và C nhóm phân lớp, khi đó hàm lỗi giữa giá trị dự đoán 𝑦 và 𝑦 được tính: Ý nghĩa công thức trên nghĩa là: lấy tổng trên toàn bộ tập huấn luyện và cộng dồn vào hàm loss nếu kết quả phân lớp sai. Độ dị biệt giữa hai giá trị 𝑦 và 𝑦 càng lớn thì độ lỗi càng cao. Mục tiêu của chúng ta là tối thiểu hóa hàm lỗi này. Ta có thể sử dụng phương pháp gradient descent để tối tiểu hóa hàm lỗi. Có hai loại gradient descent, một loại với fixed learning rate được gọi là batch gradient descent, loại còn lại có learning rate thay đổi theo quá trình huấn luyện được gọi là SGD (stochastic gradient descent) hay minibatch gradient descent. Gradient descent cần các gradient là các vector có được bằng cách lấy đạo hàm của loss function theo từng tham số để tính các gradient này, ta sử dụng thuật toán lan truyền ngược (backpropagation). Đây là cách hiệu quả để tính gradient khởi điểm từ output layer. Áp dụng giải thuật lan truyền ngược ta có các đại lượng: ( ) 2.2Mạng nơ ron hồi quy RNN Ý tưởng của RNN đó là thiết kế một Neural Network sao cho có khả năng xử lý được thông tin dạng chuỗi (sequential information), ví dụ một câu là một chuỗi gồm nhiều từ. Recurrent có nghĩa là thực hiện lặp lại cùng một tác vụ cho mỗi thành phần
  • 30. 21 trong chuỗi. Trong đó, kết quả đầu ra tại thời điểm hiện tại phụ thuộc vào kết quả tính toán của các thành phần ở những thời điểm trước đó. Nói cách khác, RNN là một mô hình có trí nhớ (memory), có khả năng nhớ được thông tin đã tính toán trước đó. Không như các mô hình Neural Network truyền thống đó là thông tin đầu vào (input) hoàn toàn độc lập với thông tin đầu ra (output). Về lý thuyết, RNN có thể nhớ được thông tin của chuỗi có chiều dài bất kì, nhưng trong thực tế mô hình này chỉ nhớ được thông tin ở vài bước trước đó. Về cơ bản một mạng RNN có dạng: Hình 14: Mạng RNN [15] Mô hình trên mô tả phép triển khai nội dung của một RNN. Triển khai ở đây có thể hiểu đơn giản là ta vẽ ra một mạng nơ-ron chuỗi tuần tự. Ví dụ ta có một câu gồm 5 chữ “Thông tin tài khoản”, thì mạng nơ-ron được triển khai sẽ gồm 4 tầng nơ-ron tương ứng với mỗi chữ một tầng. Lúc đó việc tính toán bên trong RNN được thực hiện như sau: xt : là đầu vào tại bước t. Ví dụ, x1 là một vec-tơ one-hot tương ứng với từ thứ 2 của câu. st : là trạng thái ẩn tại t. Nó chính là bộ nhớ của mạng. st được tính toán dựa trên cả các trạng thái ẩn phía trước và đầu vào tại bước đó: st = f(Uxt+Wst−1). Hàm f thường là một hàm phi tuyến tính như tang hyperbolic (tanh) hay ReLu. Để làm phép toán cho phần tử ẩn đầu tiên ta cần khởi tạo thêm s−1, thường giá trị khởi tạo được gắn bằng 0 ot : là đầu ra tại bước t. Ví dụ, ta muốn dự đoán từ tiếp theo có thể xuất hiện trong câu thì ot chính là một vectơ xác xuất các từ trong danh sách từ vựng của ta: ot = softmax(Vst) Trong vài năm qua, các nhà nghiên cứu đã phát triển nhiều loại mạng RNNs ngày càng tinh vi để giải quyết các mặt hạn chế của RNN. Dưới đây, là một số phiên bản mở rộng của RNN. Bidirectinal RNN (2 chiều) : dựa trên ý tưởng output tại thời điểm t không chỉ phụ thuộc vào các thành phần trước đó mà còn phụ thuộc vào các thành phần trong
  • 31. 22 tương lai. Ví dụ, để dự đoán một từ bị thiếu (missing word) trong chuỗi, ta cần quan sát các từ bên trái và bên phải xung quanh từ đó. Mô hình này chỉ gồm hai RNNs nạp chồng lên nhau. Trong đó, các hidden state được tính toán dựa trên cả hai thành phần bên trái và bên phải của mạng. Hình 15: Mạng RNN 2 chiều [15] Deep RNN : tương tự như Bidirectional RNN, điểm khác biệt đó là mô hình này gồm nhiều tầng Bidirectional RNN tại mỗi thời điểm. Mô hình này sẽ cho ta khả năng thực hiện các tính toán nâng cao nhưng đòi hỏi tập huấn luyện phải đủ lớn. Hình 16: Mạng RNN nhiều tầng [15] Long short-term memory network (LSTM) : mô hình này có cấu trúc tương tự như RNNs nhưng có cách tính toán khác đối với các trạng thái ẩn. Memory trong LSTMs được gọi là cells (hạt nhân). Ta có thể xem đây là một hộp đen nhận thông tin đầu vào gồm hidden state và giá trị . Bên trong các hạt nhân này, chúng sẽ quyết định thông tin nào cần lưu lại và thông tin nào cần xóa đi, nhờ vậy mà mô hình này có thể lưu trữ được thông tin dài hạn.
  • 32. 23 2.3Mạng Long short Term Memory (LSTM) 2.3.1 Vấn đề phụ thuộc quá dài Ý tưởng ban đầu của RNN là kết nối những thông tin trước đó nhằm hỗ trợ cho các xử lý hiện tại. Nhưng đôi khi, chỉ cần dựa vào một số thông tin gần nhất để thực hiện tác vụ hiện tại. Ví dụ, trong mô hình hóa ngôn ngữ, chúng ta cố gắng dự đoán từ tiếp theo dựa vào các từ trước đó. Nếu chúng ta dự đoán từ cuối cùng trong câu “đám mây bay trên bầu trời”, thì chúng ta không cần truy tìm quá nhiều từ trước đó, ta có thể đoán ngay từ tiếp theo sẽ là “bầu trời”. Trong trường hợp này, khoảng cách tới thông tin liên quan được rút ngắn lại, nạng RNN có thể học và sử dụng các thông tin quá khứ. Hình 17: RNN phụ thuộc short-term [17] Nhưng cũng có trường hợp chúng ta cần nhiều thông tin hơn, nghĩa là phụ thuộc vào ngữ cảnh. Ví dụ nhưng khi dự đoán từ cuối cùng trong đoạn văn bản “Tôi sinh ra và lớn lên ở Việt Nam … Tôi có thể nói thuần thục Tiếng Việt.” Từ thông tin gần nhất cho thấy rằng từ tiếp theo là tên một ngôn ngữ, nhưng khi chúng ta muốn biết cụ thể ngôn ngữ nào, thì cần quay về quá khứ xa hơn, để tìm được ngữ cảnh Việt Nam. Và như vậy, RRN có thể phải tìm những thông tin có liên quan và số lượng các điểm đó trở nên rất lớn. Không được như mong đợi, RNN không thể học để kết nối các thông tin lại với nhau: Hình 18: RNN phụ thuộc long-term [17]
  • 33. 24 Về lý thuyết, RNN hoàn toàn có khả năng xử lý “long-term dependencies”, nghĩa là thông tin hiện tại có được là nhờ vào chuỗi thông tin trước đó. Đáng buồn là, trong thực tế, RNN dường như không có khả năng này. Vấn đề này đã được Hochreiter (1991) [German] and Bengio, và công sự đưa ra như một thách thức cho mô hình RNN 2.3.2 Kiến trúc mạng LSTM Long Short Term Memory network (LSTM) là trường hợp đặc biệt của RNN, có khả năng học long-term dependencies. Mô hình này được giới thiệu bởi Hochreiter & Schmidhuber (1997), và được cải tiến lại. Sau đó, mô hình này dần trở nên phổ biến nhờ vào các công trình nghiên cứu gần đây. Mô hình này có khả năng tương thích với nhiều bài toán nên được sử dụng rộng rãi ở các ngành liên quan LSTM được thiết kế nhằm loại bỏ vấn đề phụ thuộc quá dài. Ta quan sát lại mô hình RNN bên dưới, các layer đều mắc nối với nhau thành các module neural network. Trong RNN chuẩn, module repeating này có cấu trúc rất đơn giản chỉ gồm một lớp đơn giản tanh layer. Hình 19: Các mô-đun lặp của mạng RNN chứa một layer [17] LSTM cũng có cấu trúc mắt xích tương tự, nhưng các module lặp có cấu trúc khác hẳn. Thay vì chỉ có một layer neural network, thì LSTM có tới bốn layer, tương tác với nhau theo một cấu trúc cụ thể. Hình 20 : Các mô-đun lặp của mạng LSTM chứa bốn layer [17]
  • 34. 25 Trong đó, các ký hiệu sử dụng trong mạng LSTM được giải nghĩa như sau:  : là các lớp ẩn của mạng nơ-ron  : toán tử Pointwise, biểu diễn các phép toán như cộng, nhân vector  : vector chỉ đầu vào và đầu ra của một nút  biểu thị phép nối các toán hạng  : biểu thị cho sự sao chép từ vị trí này sang vị trí khác 2.3.3 Phân tích mô hình LSTM Mấu chốt của LSTM là cell state (tế bào trạng thái), đường kẻ ngang chạy dọc ở trên của sơ đồ hình vẽ. Cell state giống như băng chuyền. Nó chạy xuyên thẳng toàn bộ mắc xích, chỉ một vài tương tác nhỏ tuyến tính (minor linear interaction) được thực hiện. Điều này giúp cho thông tin ít bị thay đổi xuyên suốt quá trình lan truyền. Hình 21 : Tế bào trạng thái LSTM giống như một băng truyền [17] LSTM có khả năng thêm hoặc bớt thông tin vào cell state, được quy định một cách cẩn thận bởi các cấu trúc gọi là cổng (gate). Các cổng này là một cách (tuỳ chọn) để định nghĩa thông tin băng qua. Chúng được tạo bởi hàm sigmoid và một toán tử nhân pointwise.
  • 35. 26 Hình 22 : Cổng trạng thái LSTM [17] Hàm kích hoạt Sigmoid có giá trị từ [0 – 1], mô tả độ lớn thông tin được phép truyền qua tại mỗi lớp mạng. Nếu ta thu được 0 điều này có nghĩa là “không cho bất kỳ cái gì đi qua”, ngược lại nếu thu được giá trị là 1 thì có nghĩa là “cho phép mọi thứ đi qua”. Một LSTM có ba cổng như vậy để bảo vệ và điều khiển cell state. Quá trình hoạt động của LSTM đƣợc thông qua các bƣớc cơ bản sau: Bước đầu tiên của mô hình LSTM là quyết định xem thông tin nào chúng ta cần loại bỏ khỏi cell state. Tiến trình này được thực hiện thông qua một sigmoid layer gọi là “forget gate layer” – cổng chặn. Đầu vào là ℎ𝑡−1 và 𝑥𝑡, đầu ra là một giá trị nằm trong khoảng [0, 1] cho cell state 𝐶𝑡−1. 1 tương đương với “giữ lại thông tin”, 0 tương đương với “loại bỏ thông tin” Hình 23 : LSTM focus f [17] Bước tiếp theo, ta cần quyết định thông tin nào cần được lưu lại tại cell state. Ta có hai phần. Một, single sigmoid layer được gọi là “input gate layer” quyết định các giá trị chúng ta sẽ cập nhật. Tiếp theo, một 𝑡𝑎𝑛ℎ layer tạo ra một vector ứng viên mới, Ct . được thêm vào trong ô trạng thái.
  • 36. 27 Hình 24 : LSTM focus I [17] Ở bước tiếp theo, ta sẽ kết hợp hai thành phần này lại để cập nhật vào cell state. Lúc cập nhật vào cell state cũ, Ct-1 , vào cell state mới Ct. Ta sẽ đưa state cũ hàm ff, để quên đi những gì trước đó. Sau đó, ta sẽ thêm it * Ct. Đây là giá trị ứng viên mới, co giãn (scale) số lượng giá trị mà ta muốn cập nhật cho mỗi state. Hình 25 : LSTM focus c [17] Cuối cùng, ta cần quyết định xem thông tin output là gì. Output này cần dựa trên cell state của chúng ta, nhưng sẽ được lọc bớt thông tin. Đầu tiên, ta sẽ áp dụng single sigmoid layer để quyết định xem phần nào của cell state chúng ta dự định sẽ output. Sau đó, ta sẽ đẩy cell state qua tanh giá trị khoảng [-1 và 1] và nhân với một output sigmoid gate, để giữ lại những phần ta muốn output ra ngoài. Hình 26 : LSTM focus o [17]
  • 37. 28 Với ví dụ về mô hình ngôn ngữ, chỉ cần xem chủ thể mà ta có thể đưa ra thông tin về một trạng từ đi sau đó. Ví dụ, nếu đầu ra của chủ thể là số ít hoặc số nhiều thì ta có thể biết được dạng của trạng từ đi theo sau nó phải như thế nào. 2.4Word embeddings Biểu diễn ngôn ngữ hay vector hóa từ là thành phần quan trọng để giúp máy tính có thể hiểu được ngôn ngữ từ dạng văn bản sang dạng số. Tức là đưa văn bản dạng text vào một không gian mới người ta gọi là embbding space( không gian từ nhúng). Word embeddings (tập nhúng từ) là phương pháp ánh xạ mỗi từ vào một không gian số thực nhiều chiều nhưng có kích thước nhỏ hơn nhiều so với kích thước từ điển. Word embbding có 2 model nổi tiếng là word2vec và Glove [16] 2.4.1 Word2vec Word2vec được tạo ra năm 2013 bởi một kỹ sư ở google có tên là Tomas Mikolov. Về mặt toán học, thực chất Word2Vec là việc ánh xạ từ từ 1 tập các từ vocabulary sang 1 không gian vector, mỗi vector được biểu diễn bởi n số thực. Mỗi từ ứng với 1 vector cố định. Sau quá trình huấn luyện mô hình bằng thuật toán backprobagation, trọng số các vector của từng từ được cập nhật liên tục. Từ đó, ta có thể thực hiện tính toán được khoảng cách giữa các từ và những từ càng "gần" nhau thường là các từ hay xuất hiện cùng nhau trong văn cảnh, các từ đồng nghĩa. Hình 27 : Mô hình từ nhúng [16]
  • 38. 29 Word2vec có 2 word vector là skip-gram và Continuous Bag-of-Words (Cbow). Hình 287 : Mô hình CBOW và Skip-Ngram [16] CBoW: Dự đoán từ hiện tại dựa trên ngữ cảnh của các từ trước đó  Cho các từ ngữ cảnh  Đoán xác suất của một từ đích Skip-gram: Dự đoán các từ xung quanh khi cho bởi từ hiện tại.  Cho từ đích  Đoán xác suất của các từ ngữ cảnh 2.4.2 Glove GloVe [16] là một trong những phương pháp mới để xây dựng vectơ từ (giới thiệu vào năm 2014), nó được xây dựng dựa trên ma trận đồng xảy ra (Co-occurrence Matrix). GloVe dựa trên ý tưởng tính tỉ lệ xác xuất: ( ) ( ) Hình 29 : Xác xuất từ k trên ngữ cảnh của từ i và j [16] Với P(k|i) là xác suất từ k xuất hiện trong ngữ cảnh của từ i, tương tự vậy với P(k|j). Công thức tính của P(k|i): ( 𝑖) ∑ Hình 2.19 : Công thức tính xác xuất từ k trên ngữ cảnh của từ i [16] Xik : là số lần xuất hiện của từ k trong ngữ cảnh của từ i (và ngược lại). Xi : là số lần xuất hiện của từ i trong ngữ cảnh của toàn bộ các từ còn lại ngoại trừ i. (2) (1)
  • 39. 30 Ý tưởng chính của GloVe được tính dựa trên độ tương tự ngữ nghĩa giữa hai từ i, j được xác định thông qua độ tương tự ngữ nghĩa giữa từ k với mỗi từ i, j, những từ k có tính xác định ngữ nghĩa tốt chính là những từ làm cho giá trị được tính từ công thức (1) nằm trong khoảng [0 ,1] Ví dụ, nếu từ i là “table”, từ j là “cat” và từ k là “chair” thì công thức (1) sẽ cho giá trị tiệm cận đến 1 do “chair” có nghĩa gần hơn với “table” hơn là “cat”, ở trường hợp khác, nếu ta thay từ k là “ice cream” thì giá trị công thức (1) sẽ xấp xỉ bằng 0 do “ice cream” hầu như chẳng lên quan gì tới “table” và “cat”. Dựa trên tầm quan trọng của công thức (1) , GloVe khởi đầu bằng việc là nó sẽ tìm một hàm F sao cho nó ánh xạ từ các vec-tơ từ trong vùng không gian V sang một giá trị tỉ lệ tính theo công thức (1) . Việc tìm F không đơn giản, tuy nhiên, sau nhiều bước đơn giản hóa cũng như tối ưu, ta có thể đưa nó về bài toán hồi quy với việc tính hàm chi phí tối thiểu (minimum cost function) sau: ∑ ( ) (𝑊 𝑊̃ 𝑏 𝑏̃ ) Hình 30 : Công thức tính hàm chi phí tối thiểu [16] là các vector từ. là các bias tương ứng (được thêm vào ở các bước đơn giản hóa và tối ưu). : mục nhập tương ứng với cặp từ i,j trong ma trận đồng xảy ra Hàm f(x) được gọi là hàm trọng số (weighting function), được thêm vào để giảm bớt sự ảnh hưởng của các cặp từ xuất hiện quá thường xuyên, hàm này thỏa mãn 3 tính chất:  Có giới hạn tại 0.  Là hàm không giảm.  Có giá trị nhỏ khi x rất lớn. Thực tế, có nhiều hàm số thỏa các tính chất trên, nhưng ta sẽ lựa chọn hàm số sau: ( 𝑥) { (𝑥 𝑥 ) Với α=3/4 Hình 31 : Hàm trọng số (weighting function) [16] (3) (4)
  • 40. 31 Việc thực hiện tính hàm chi phí tối thiểu J để tìm ra các vec-tơ từ thể được thực hiện bằng nhiều cách, trong đó cách tiêu chuẩn nhất là sử dụng tìm cực tiểu hàm số theo thuật toán Gradient Descent. 2.5Ứng dụng RNN vào quản lý hội thoại Phần này sẽ giới thiệu thuật toán RNN áp dụng cho chức năng theo dõi trạng thái hay ngữ cảnh hội thoại Dialogue State Tracking (DTS) trong thành phần quản lý hội thoại đã được mô tả chi tiết trong hình 1.7 như đã đề cập. 2.5.1 Mô hình word-based DST Như đã biết thành phần DM có nhiệm vụ quan trọng nhất đó là quản lý các trạng thái hay ngữ cảnh của hội thoại để quyết định được hành động tiếp theo. Vậy việc quyết định action tiếp theo thì dựa vào đâu. Đó chính là dữ liệu đầu vào của người dùng, dữ liệu các slot được lưu trong bộ nhớ và trạng thái của các action ở trước. Với khả năng lưu được các thông tin trong việc xử lý các bài toán dạng chuỗi thì mạng RNN được ứng dụng trong việc xác định ngữ cảnh và quyết định action tiếp nhờ vào các thông tin lưu được trong bộ nhớ mạng RNN. Hình 32: Mô hình word-based DST với mạng RNN [20] a1 S1 m1 h1 u1 a2 S2 m2 h2 u2 a3 S3 m3 h3 u3 User Utterance hidden Memory Slot Action state Dialogue Turn
  • 41. 32 User Utterance: là câu dữ liệu đầu vào của người dùng Hidden: là lớp ẩn được sử dụng trong thành phần NLU để vector hóa ngôn ngữ, phân loại ý định và trích xuất được các thông tin người dùng Memory: là bộ nhớ lưu các giá trị vector hóa ngôn ngữ và ngữ cảnh hội thoại bao gồm cả slot Slot: thông tin được trích xuất được lưu lại trong các câu nói người dùng Action State: trạng thái action trước. Nó mang tính ngữ cảnh ở trong đoạn hội thoại 2.5.2 Mô hình Global-Locally Self-Attentive DST (GLAD) Với các mô hình theo dõi trạng thái hội thoại khác thường xác định intent người dùng trực tiếp trên danh sách các đoạn hội thoại đã trainning cho bot sẽ gặp vấn đề về nhập nhằng xác định 1 intent trong các đoạn hội thoại có sử dụng cùng 1 intent. Tức là với cùng 1 câu nói người dùng xác định được 1 intent thì intent đó có thể được dùng nhiều trong các đoạn hội thoại. Với tư tưởng xác định cả ngữ cảnh cho từng đoạn hội thoại thì việc xác định intent nằm trong đoạn hội thoại nào sẽ tăng thêm độ chính xác. Hình 33: Mô hình Global-Locally Self-Attentive DST (GLAD) [21] Các tham số đầu vào cho phần local và global là các giá trị intent người dùng (X), các slot và action state (C)
  • 42. 33 Hình 34 : Global-locally self-attentive encoder modul [21] Việc dùng các slot trong mô hình cần lưu ý là sau kết thúc mỗi hội thoại thì nên xóa các slot không dùng nữa để tránh nhập nhằng xác định ví trí chính xác intent của người dùng trong danh sách các đoạn hội thoại mà bot được đào tạo.
  • 43. 34 CHƢƠNG 3 : XÂY DỰNG CHATBOT HỖ TRỢ NGƢỜI DÙNG LĨNH VỰC NGÂN HÀNG Chương này sẽ mô tả từng bước xây dựng bài toán trên nền tảng mã nguồn mở Rasa. Phần thực nghiệm và đánh giá sẽ cho ta biết khả năng phục vụ của chatbot cũng như chỉ ra những điểm hạn chế của chatbot nhằm tìm cách cải tiến và tìm hướng đi mới cho việc xây dựng chatbot nhằm phục vụ các bài toán hỗ trợ người dùng trên nhiều lĩnh vực chứ không chỉ riêng trong lĩnh vực ngân hàng. 3.1 Bài toán Có rất nhiều bài toán ứng dụng cho chatbot nhưng tôi chọn bài toán cho ngân hàng để giải quyết một số bài toán phức tạp như chuyển tiền và thanh toán nhằm đánh giá khả năng đáp ứng xử lý trong một số tác vụ khó của bot. Hiện tại thì cũng có một số ngân hàng ở Việt Nam đã xây dựng chatbot trong lĩnh vực ngân hàng như MB bank, eximbank, TP bank… Hầu hết các ngân hàng hỗ trợ chatbot trên facebook cho phép người dùng thao tác một số đơn giản như kiểm tra số dư, truy vấn lãi suất, tỉ giá và có thể chuyển tiền trong giới hạn ít như MB cho phép chuyển dưới 1 triệu đồng. Bài toán mà tôi xây dựng sẽ tập trung vào các chức năng hỗ trợ khách hàng cá nhân trên hệ thống ebanking. Các chức năng chính bao gồm: - Thông tin tài khoản - Truy vấn số dư - Chuyển tiền: trong ngân hàng, ngoài ngân hàng, qua thẻ - Lịch sử giao dịch - Vay tiền - Gửi tiền - Thanh toán: điện, nước, điện thoại, vé máy bay… - Thông tin các biểu phí - Thông tin lãi suất, tỉ giá 3.2 Xây dựng chatbot hỗ trợ ngƣời dùng lĩnh vực ngân hàng Cấu trúc hệ thống chatbot cho lĩnh vực ngân hàng sẽ được thiết kế như sau:
  • 44. 35 Hình 35: Cấu trúc chatbot cho hệ thống ebanking Từ mô hình trên thì đầu vào hệ thống là một câu hỏi người dùng. Đầu ra là câu trả lời của bot. Các thành phần bên trong hệ thống chatbot sẽ đảm nhiệm như sau: NLU: Có nhiệm vụ vector hóa ngôn ngữ, phân loại ý định người dùng và trích xuất ra các thông tin người dùng. Ví dụ câu đầu vào người dùng hỏi “Lãi suất kỳ hạn 12 tháng bao nhiêu?” thì hệ thống sẽ vector hóa nó rồi đối chiếu với các tập dữ liệu training đã được gán nhãn để đưa ra ý định là “interest”. Tiếp đến hệ thống trích xuất được thông tin với kỳ hạn là “12 tháng”. DM: Dựa vào trạng thái và ngữ cảnh hội thoại để xác định ra action xử lý cho câu đầu vào trên. Thành phần này cũng có nhiệm vụ lấy dữ liệu từ hệ thống ebanking để phục vụ việc sinh dữ liệu trả lời của bot cho thành phần NLG. Ở ví dụ trên thì hệ thống xác nhận bot đang trong ngữ cảnh hỏi về thông tin lãi suất nhưng chưa rõ hỏi về lãi suất nào nên bot sẽ đưa ra quyết định hỏi lại người dùng. Trong trường hợp mà bot có đầy đủ thông tin hỏi về lãi suất nào thì sẽ lấy dữ liệu từ ebanking backend để trả về cho người dùng. NLG: Bot sinh câu trả lời dựa vào dữ liệu từ thành phần DM theo các mẫu câu template đã được xây dựng trước. Hiện tại có rất nhiều phương pháp làm chatbot do bên thứ 3 cung cấp như ahachat, Chatfuel, Messnow… dễ dàng xây dựng và tích hợp thông qua API nhưng lại không đảm bảo tính bảo mật về mặt dữ liệu người dùng nên trong bài toán này tôi quyết định sử dụng mã nguồn mở Rasa để xây dựng hệ thống chatbot riêng nhằm mục đích làm Lãi suất kỳ hạn 12 tháng Lãi suất vay hay tiết kiệm intent :”interest” entity: “12 tháng” NLU IONIC RASA State tracker, policy, action DM Template NLG Ebanking API
  • 45. 36 chủ dữ liệu và bảo mật hệ thống lẫn thông tin người dùng. Bên cạnh đó với Rasa tôi có thể tùy chỉnh một số cơ chế học máy cho tương thích với tiếng việt hay có thể tùy ý kết nối tới nhiều hệ thống khác để trả lại dữ liệu cho chatbot. Hiện tại Rasa đang có cộng đồng phát triển mạnh với hơn 3500 thành viên, số lượng download là hơn 500000. Các tính năng và bug mới liên tục được cập nhật và sửa đổi. Trên thực tế thì Rasa cũng đã áp dụng thành công nhiều bài toán cho các lĩnh vực như: sức khỏe, bảo hiểm, du lịch, ngân hàng và viễn thông. Đó cũng chính là những động lực giúp em lựa chọn Rasa là framework để xây dựng chatbot giải quyết bài toán này. Chi tiết về việc tìm hiểu và làm chủ công cụ Rasa này sẽ đề cập trong mục 3 của chương. Về phần xây dựng giao diện hiển thị và tương tác người dùng với bot tôi sử dụng ionic framework cho phép dễ dàng build app các nền tảng ios và android. Một khía cạnh khác cũng rất quan trọng trong việc xây dựng hệ thống chatbot và là yếu tố gần như quyết định bot có đáp ứng được yêu cầu người dùng hay không đó là việc xây dựng tập dữ liệu tranning cho bot. Việc xây dựng dữ liệu cho bot sẽ được đề cập chi tiết trong mục 3 của chương. 3.3 Ứng dụng RASA xây dựng chatbot Rasa cung cấp cho ta 2 phương pháp chính xây dựng dữ liệu trainning cho bot: - Pretrained Embeddings (Intent_classifier_sklearn) : Việc phân loại ý định người dùng sẽ dựa trên các tập dữ liệu được lọc trước, sau đó được sử dụng để thể hiện từng từ trong thông điệp người dùng dưới dạng từ nhúng (word embedding) hay biểu diễn ngôn ngữ dưới dạng vector(word2vec). Các tập dữ liệu này có thể được cung cấp từ Spacy hoặc MITIE … - Supervised Embeddings (Intent_classifier_tensorflow_embedding): Nhúng được giám sát. Với phương pháp này thì người dùng sẽ phải tự xây dựng dữ liệu từ đầu do ko có dữ liệu đào tạo sẵn có. Nhưng với các bài toán trong một lĩnh vực nhỏ thì nó sẽ đảm bảo tính chính xác hơn nhiều và tránh dư thừa dữ liệu so với phương pháp ở trên. Với bài toán tập trung vào miền đóng như trợ lý ảo hỗ trợ dịch vụ ebanking, cộng thêm việc khó tìm kiếm tập dữ liệu pretrained (do hầu hết dữ liệu pretrained đều là tiếng anh) thì ta không cần sử dụng tập dữ liệu đào tạo từ trước (pretrained word embeddings) thay vào đó thì ta sẽ tự tạo tập dữ liệu training riêng của mình. Điều này cũng đảm bảo bot có thời gian training ngắn mà độ chính xác cao hơn.
  • 46. 37 Một số cấu hình trong Rasa mà tôi lựa chọn để training cho bot bao gồm từ việc phân tích câu, phân loại ý định(intent) đến trích chọn thông tin người dùng… như sau: language: vi ##pipeline: tensorflow_embedding pipeline: - name: tokenizer_whitespace - name: ner_crf - name: ner_synonyms - name: intent_featurizer_count_vectors - name: intent_classifier_tensorflow_embedding intent_tokenization_flag: true intent_split_symbol: "+" Hình 362 : Cấu hình pipeline xử lý ngôn ngữ tự nhiên Thuật toán tách từ tôi sử dụng tokenizer_whitespace tức các từ có thể phân tách bởi dấu cách. Điều này có thể sai trong một số trường hợp đối với từ ghép. Để trích chọn thông tin (slot filter) thì tôi cấu hình dùng mô hình CRF. Bên cạnh đó cũng hỗ trợ cấu hình việc nhận dạng các từ đồng nghĩa (ner_synonyms). Rasa cũng tích hợp với framework hỗ trợ trích xuất thông tin nổi tiếng như duckling có hỗ trợ tiếng việt và rất thông minh trong việc trích xuất được thời gian và dữ liệu số như tiền tệ. Với bài toán demo thì CRF là một lựa chọn hợp lý hơn khi đã tích hợp sẵn trong Rasa mà không phải cấu hình thêm như duckling. Thành phần chính là trình phân loại ý định intent_classifier_tensorflow_embedding dựa trên kỹ thuật starspace [9] đang được facebook phát triển. 3.4 Xây dựng dữ liệu chatbot Nguồn dữ liệu xây dựng chatbot hỗ trợ hệ thống ebanking của ngân hàng được thu thập và tham khảo qua một số người dùng, một số chatbot cho ngân hàng ở Việt Nam như eMbee(MB bank), Timo (VP bank) và demo chatbot về ngân hàng của FPT.AI. Một đoạn hội thoại giữa người và bot là để giải quyết một vấn đề nào đó. Ví dụ đoạn hội thoại hỏi về thông tin lãi suất: Ngƣời dùng Bot Cho tôi biết thông tin lãi suất Bạn hỏi lãi suất vay hay tiết kiệm Lãi suất tiết kiệm Mời bạn nhập kỳ hạn 13 tháng Lãi suất 13 tháng là: 8,1%
  • 47. 38 Đây cũng chính là một khung kịch bản để người dùng có thể hỏi về thông tin lãi suất. Và ta cũng có một đoạn hội thoại khác để hỏi về thông tin lãi suất như sau: Ngƣời dùng Bot Lãi suất tiết kiệm 1 năm là bao nhiêu Lãi suất tiết kiệm 12 tháng là: 8,1% Như vậy với bài toán xây dựng dữ liệu chatbot theo miền đóng là ta đi xây dựng danh sách các khung kịch bản như trên. Ứng với mỗi một câu trong đoạn hội thoại là một ý định (intent). Ý định của người dùng có thể là một danh sách các câu nói có cùng chung một thông điệp. Ví dụ với mục đích là chào hỏi thì người dùng có thể nói “xin chào”, “chào bạn”… Để ý tiếp ta thấy trong mỗi intent thì cần trích xuất ra thông tin người dùng. Đó chính là các entity. Các entity này có thể được lưu lại thông tin vào các slot để phục vụ cho các hành động sau của bot. Như ở ví dụ trên ta có thông tin tháng lãi suất là “13 tháng” Việc xây dựng chatbot sẽ thực hiện qua một số bước chính như hình 3.2: Hình 37.3 : Các bước xây dựng chatbot 3.4.1 Xây dựng ý định Việc xây dựng ý định sẽ theo nguyên tắc là những mẫu câu hỏi của người dùng phổ biến nhất, thông dụng nhất có thể. Hiện tại bot đang hỗ trợ khoảng 30 intent. Ví dụ cho Xây dựng ý định (intent) Xây dựng entity (slot) Xây dựng câu trả lời cho bot Xây dựng khung kịch bản Đào tạo cho bot Test, phân tích cải tiến bot
  • 48. 39 một ý định muốn xem thông tin số dư tài khoản thì người dùng có thể hỏi nhiều câu như sau: ## intent:balance - số dư - số tiền trong tài khoản của tôi - truy vấn số dư - số dư tài khoản Hình 38.4 : Xây dựng ý định người dùng 3.4.2 Xây dựng entity Entity là các thông tin trích xuất từ ý định người dùng. Slot là các thông tin được trích lọc trong các câu nói người dùng được bot lưu lại trong bộ nhớ để sử dụng trong các action hay câu trả lời của bot và tránh việc hỏi lại thông tin từ phía người dùng. Việc trích xuất slot được cấu hình theo CRF như đã đề cập ở trên. Hiện tại bot đang được cấu hình khoảng 15 slot. entities: - location - card - receiver - money - otp - content - number - account - bank - name - data - term - branch - count - short_name Hình 3.5 : Danh sách các thông tin người dùng 3.4.3 Xây dựng câu trả lời cho bot Ứng với mỗi câu hỏi của người dùng thì ta cũng phải xây dựng các mẫu câu (template) trả lời của bot tương ứng : utter_balance: - text: "Số dư tài khoản của quý khách là {&balance}" - text: "Số tiền trong tài khoản là : {&balance}" Hình 39 : Mẫu câu trả lời của bot cho ý định hỏi số dư tài khoản
  • 49. 40 Để 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?"
  • 50. 41 - 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
  • 51. 42 * 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
  • 52. 43 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: Lần thử nghiệm 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% 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
  • 53. 44 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
  • 54. 45 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)
  • 55. 46 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. No 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