B các câu h i m u cộ ỏ ẫ ủa người dùng s ẽ đượ ậc t p h p l i t các cu c h i thoợ ạ ừ ộ ộ ại của người dùng trao đổ ới v i nhân viên h ỗ trợ, giúp b d ộ ữ liệu chính xác nh t vấ ới thự ếc t ngư i dùng hờ ỏi. Kèm theo đó hỗ ợtr viên s cung c p nh ng m u câu h i ẽ ấ ữ ẫ ỏ mớ ểi đ đả m b o tả ập ý định phong phú và đầy đủ nh t. ấ
Chatbot Nhất Nam bao g m t ng c ng ồ ổ ộ 36 intent v i 1024 câu mớ ẫu, được khai báo trong file nlu.yml, dưới đây là ví dụ mẫu c a 2 intent ủ bao_tri_phan_mem (hỏi v b o trì ph n m m) và ề ả ầ ề hoa_don_dien_tu (hỏi về hóa đơn điệ ửn t )
Hình 3.5. Khai báo intent trong file nlu.yml
Có th ể thấy là trong ti ng Vi t khách hàng s d ng nhi u t ế ệ ử ụ ề ừ viế ắt như t t “không” viế ắt t t thành “k” “bao nhiêu”, viế ắt t t thành “bn”… do vậy vi c t n ệ ậ d ng nh ng cu c h i tho i trong th c t vào quá trình training s giúp Chatbot ụ ữ ộ ộ ạ ự ế ẽ hiểu ý định người dùng t t hơn. ố
3.3.2 Xây d ng th c th (entity) ự ự ể
Entity là các th c th ự ể thông tin đặc trưng quan trọng được trích xu t theo các ấ ý định của người dùng, các thông tin được trích ch n trong tin nh n cọ ắ ủa người dùng được h thệ ống lưu lạ ừ đó giúp hệ ối t th ng quyết định hành động ti p theo ế phụ thu c vào entity trích chọộ n và ng cữ ảnh đang diễn ra.
Trong Chatbot Nhất Nam s bao gẽ ồm các entity được khai báo trong domain.yml như trong hình dưới đây:
Hình 3.6. Khai báo entity trong file domain.yml
Entity s ẽ được trích ch n tr c ti p trong các ví d m u cọ ự ế ụ ẫ ủa intent theo định d ng, ví dạ ụ trong câu “Phần m m k toán doanh nghi p giá th nào nhề ế ệ ế ỉ?” có thực thể “kế toán doanh nghi p”ệ là mộ ảt s n phẩm, khi đó câu trên đổi thành “Phần mềm [kế toán doanh nghi p](san_pham)ệ giá th nào nhế ỉ”. Dưới đây là ví dụ entity trong chương trình:
Hình 3.7. Khai báo intent có ch a entity trong file nlu.yml ứ
3.3.3 Xây d ng câu tr l i cho Chatbot ự ả ờ
Khi người dùng đưa ra câu hỏi, Chatbot s x lý phân lo i câu h i và ph n ẽ ử ạ ỏ ả h i câu tr l i phù h p v i câu h i và yêu cồ ả ờ ợ ớ ỏ ầu đó. Rasa có th xây d ng ph n hể ự ả ồi cho Chatbot thông qua các hành động (action). Action này có th cung c p thông ể ấ tin mong muốn cho người dùng dựa vào các ý định, slot và d u lữ liệ ấ ừ cơ sởy t d ữ
liệu thông qua k t n i API. Có 2 loế ố ại hành động để ử x lý câu tr l i trong Chatbot ả ờ Nhất Nam, loại hành động mặc định (default actions) và hành động tùy bi n ế (custom actions).
3.3.3.1 Hành động mặc đ nhị
Là các hành động d ự đoán và đưa ra câu trả ờ ự l i d a vào ý định và th c th ự ể được trích ch n cọ ủa người dùng, được x lý thành ph n Dialog management ử ở ầ đã được Rasa cung c pấ . Hành động tiếp theo được quyết định b i ở các chính sách đó là chính sách d a vào quy t c (Rule policy), chính sách ghi nh (Memorization ự ắ ớ policy) và chính sách TED (TED policy).
- Khai báo chính sách d a vào các quy t c (Rule-based policy)ự ắ : Rule- based policies được khai báo trong file rules.yml. Ví d mụ ỗi khi người dùng nhập câu có ý định “chao_hoi” Chatbot luôn đưa ra câu trả ờ l i “Kính chào quý khách! Rất vui lòng được h ỗ trợ quý khách”.
Hình 3.8. Khai báo Rule policy trong file rules.yml
- Khai báo k ch b n cu c h i thoị ả ộ ộ ại: B ng cách thu th p các cu c h i thoằ ậ ộ ộ ại thực t c a h ế ủ ỗ trợ viên và người dùng, ta s dẽ ựng được nh ng k ch b n thông dữ ị ả ụng nhất. Ví d ụ trước khi h i giá s n phỏ ả ẩm, người dùng s chào h i hẽ ỏ ỗ ợ tr viên, h i v ỏ ề thông tin các s n ph m doanh nghi p cung cả ẩ ệ ấp, sau đó ới đếm n câu h i giá. Các ỏ k ch b n s ị ả ẽ được khai báo trong file stories.yml. K ch b n có th ị ả ể được vi t b ng ế ằ tay ho c thông qua hặ ọc tương tác (interactive learning) khi đó ta có thể đánh giá và dạy Chatbot cách tr lả ời các ý định của người dùng thông qua giao diệ ệnh n l CLI hoặc chương trình Rasa X. H ệ thống s so sánh h i thoẽ ộ ại đang diễn ra v i kớ ịch
b n có s n, n u trùng kh p s ả ẵ ế ớ ẽ đưa ra phản h i theo s ồ ự kiện ti p theo trong kế ịch b n.ả
Hình 3.9. Khai báo k ch b n trong file stories.ymlị ả 3.3.3.2 Hành động tùy bi n ế
Khi yêu cầu người dùng c n th c hi n truy xuầ ự ệ ất đến d u bên ngoài hoữ liệ ặc x lý tính toán ph c t p c n s d ng thuử ứ ạ ầ ử ụ ật toán mà các phương pháp Default action không th ể thực hiện được thì có th s dể ử ụng Custom action để tùy bi n hàế nh động. Mỗi khi hành động tùy biến được g i nó s ọ ẽ trỏ đế n m t hàm trong file actions.py. ộ Custom action vi t b ng ngôn ng python do v y có th d dàng x lý logic phế ằ ữ ậ ể ễ ử ức tạp như tính toán, truy xuất thông tin t h ừ ệ thống ngoài, ví d truy xu t giá sụ ấ ản phẩm, thời h n b o trì b o hành cạ ả ả ủa khách hàng, thông tin liên quan đến doanh
nghiệp…
Giả ử s sau khi người dùng nh p tên và s ậ ố điện tho i form liên h , h ạ ở ệ ệ thống s ẽ lưu lại thông tin vào Google Drive để nhân viên h ỗ trợ liên lạc và sau đó trả ại l người dùng ph n hả ồi. Để ả gi i quy t bài toán này không th s d ng Default action ế ể ử ụ
do đó ta sẽ ạ t o m t Custom action vộ ới tên hàm ActionSubmitSalesForm như hình
Hình 3. . Hàm x lý sau khi hoàn thành nh p Form liên h 10 ử ậ ệ
3.3.4 C u hình các thành ph n ấ ầ
Quá trình x lý ngôn ng t nhiên ử ữ ự là hành động d ữ liệu đầu vào được x lý ử qua m t lo t các thành ph n (component) theo th t g i là pipeline, ta có th thêm ộ ạ ầ ứ ự ọ ể hoặc b b t kì thành phỏ ấ ần nào trong pipeline đó. Ví dụ ệ ố h th ng không c n trích ầ chọn th c th ta có th lo i b thành ph n Entity extraction, ho c h th ng không ự ể ể ạ ỏ ầ ặ ệ ố
dùng thành phần mô hình được huấn luy n s n (pre-ệ ẵ trained model) như BERT,
spaCy ta có th không c n khai báo trong c u hình. ể ầ ấ
Tokenizer là quá trình chia nh ỏ câu đầu vào thành các t ừ hoặc c m t . Rasa ụ ừ có h ỗ trợ WhitespaceTokenizer t o các t cách nhau b ng d u cách ví d ạ ừ ằ ấ ụ câu “Tôi
s cho ra m t m ng các t ẽ ộ ả ừ [“Tôi”, “là”, “sinh”, “viên”, “trường”, “đại”, “học”, “Bách”, “Khoa”]. Trong hầu hết trường h p thì vi c chia t ợ ệ ừ này là đúng nhưng ở tiếng Vi t không ch g m các t ệ ỉ ồ ừ đơn mà còn được c u thành t các t ghép, ví d ấ ừ ừ ụ t ừ ghép “sinh viên” ở câu trên.
Thành ph n tách t ầ ừ Tiếng Vi t trong Chatbot ệ Nhất Nam sẽ ử ụng thư việ s d n Underthesea [25] c a tác gi ủ ả Vũ Anh và thư viện spaCy h ỗ trợ Tiếng Vi [15] ệt c a tác gi ủ ả Trần Vi t Trungệ , thư viện này giúp tách các t ng Vi t m t cách ừ tiế ệ ộ chính xác nh t bao g m c t ấ ồ ả ừ đơn và từ ghép. Ví d trong câu trên sau quá trình ụ tách t ừ ta được m t chu i các t ộ ỗ ừ [“Tôi”, “là”, “sinh_viên”, “trường”, “đại_ ọc”, h “Bách_Khoa”], do số t ừ được gi m cho nên quá trình training s ả ẽ được rút ng n và ắ thu được k t qu tế ả ốt hơn. Rasa không hỗ ợ tr s n vẵ ới thư viện Underthesea cho nên c n t o m t action tùy biầ ạ ộ ến được vi t trong file ế vietnamese_tokenizer.py.
Ứng d ng s d ng pretrained-model spaCy h tr Ti ng Viụ ử ụ ỗ ợ ế ệt đã được hu n ấ luy n d a trên 18GB các bài báo Ti ng Vi t. Cệ ự ế ệ ấu hình được khai báo trong file config.yml.
Hình 3. . Khai báo c u hình trong file config.yml 11 ấ
3.4 Cài đặt chương trình
Chương trình Chatb ot thử nghi m trên máy Window 10 v i các thông s ệ ớ ố ứng
dụng và môi trường như sau:
- H ệ điều hành Windows 10, Intel i7-6700HQ, Ram 16GB
- Python 3.6
- Rasa version 2.1.3 - Rasa X version 0.34.0
Chatbot tiếp c n v i c 2 cách thao tác v i các nút b m (Menu/button based) ậ ớ ả ớ ấ và cho phép người dùng nh p n i dung yêu c u, v i vi c cung c p giao di n nút ậ ộ ầ ớ ệ ấ ệ b m s ấ ẽ giúp người dùng l a chự ọn chính xác và nhanh hơn. Thử nghiệm đượ thực c hiện trên b d ộ ữ liệu gồm 36 intent với 1024 câu mẫu và 4 entity. Chatbot xây dựng các kịch ả để b n có th ể giải quyết được nh ng bài toán c ữ ụ thể ủ c a doanh nghiệp cũng như giải quyết các trường hợp gián đoạn của người dùng, dưới đây là các ví d cụ ủa thử nghiệm.
K ch b n h i giá ị ả ỏ
H i giá là câu hỏ ỏi thường g p cặ ủa người dùng các trang web bán hàng, ở Chatbot Nhất Nam có kh ả năng chào hỏi cũng như trích xuất th c th liên quan ự ể đến s n ph m, gi s n u trong câu h i cả ẩ ả ử ế ỏ ủa người dùng không bao g m entity cồ ủa s n ph m thì Chatbot s ả ẩ ẽ đưa ra các lựa chọn v s n phề ả ẩm, người dùng có th bể ấm nút để ả ờ tr l i ho c nh p tin nh n. ặ ậ ắ
Hình 3.13. Người dùng có th bể ấm nút để trả ờ l i (hình bên trái) hoặc nhập tin nh n (hình bên phải) ắ
K ch b n form nh p liị ả ậ ệu
Sau khi cung c p thông tin v giá s n phấ ề ả ẩm đến khách hàng, Chatbot sẽ thực hiện yêu cầu người dùng nh p form bao g m h tên và s đi n tho i đ nhân viên ậ ồ ọ ố ệ ạ ể h ỗ trợ liên h ệ trực tiếp tư vấn. Form được s d ng nhi u trong Chatbot ử ụ ề như hỏi người dùng v Ultraview n u gề ế ặp các trường h p c n truy c p tr c ti p máy khách ợ ầ ậ ự ế hàng ho c form nh p thông tin doanh nghiặ ậ ệp để tra cứu hóa đơn hoặc th i h n bờ ạ ảo trì, b o hành. ả
D ữ liệu người dùng nh p s ậ ẽ được trích xuất các entity để ưu vào các slot, l các slot s ẽ được action server x lý và gử ửi đến h ỗ trợ viên thông qua mail, socket hoặc Google Drive.
Hình 3. 14 Trường h p nhợ ập form liên h ệ
Trường h p form nh p li u b ợ ậ ệ ị gián đoạn do người dùng h i câu h i khác thì ỏ ỏ Chatbot s v n tr lẽ ẫ ả ời người dùng sau đó tiế ụp t c yêu cầu người dùng hoàn thành form. Hoặc nếu người dùng không muốn điền form liên h bệ ằng ý định t ừ chối thì Chatbot s không yêu cẽ ầu người dùng nh p nậ ữa.
Hình 3.15. Trường hợp form b ị gián đoạn (hình bên trái) Trường hợp t ừ chối nh p form (hình bên ph ậ ải)
K ch b n không hi u câu hị ả ể ỏi của người dùng
Trong th c t Chatbot s g p tình hu ng không th ự ế ẽ ặ ố ể giải quyết được nh ng ữ câu h i m p m ỏ ậ ờ hoặc câu h i khóỏ , để ả gi i quy t bài toán này ta s dế ẽ ựa vào ngưỡng d ự đoán ụ thể ở đây là dướ, c i 0.6, nguyên nhân của ngưỡng th p có th ấ ể do ý định của người dùng không rõ ràng ho c câu hặ ỏi đó chưa có trong tập d u huữ liệ ấn luyện, Chatbot s lẽ trả ời lại người dùng như sau.
Hình 3.16. Trường hợp Chatbot không hiểu ý người dùng
3.5 Thử nghi m và ệ đánh giá chương trình
Thử nghiệm được ti n hành trên chính t p d ế ậ ữ liệu training bao gồm 36 intent v i 1024 câu m u và 4 entity, viớ ẫ ệc đánh giá chất lượng Chatbot dựa trên độ chính xác c a ủ câu trả ờ l i khi hỏi các câu đơn lẻ trong t p d uậ ữ liệ . Để thực hi n quá trình ệ kiểm th tôi chia ng u nhiên d li u hu n luyử ẫ ữ ệ ấ ện ban đầu thành 768 câu mẫu dùng để hu n luy n và ấ ệ 256 câu mẫ dùng để ểu ki m th và 4 entity, hu n luy n d a theo ử ấ ệ ự c u hình ấ được trình bày trong 3.3.4 C u hình các thành ph nấ ầ . ếK t qu ả được đánh giá d a vào 3 thông s lự ố ần lượt là Precision, Recall và F1-score.
- Precision: là t l s ỉ ệ ố câu đúng (TP) trong số những câu được phân lo i là ạ đúng (TP + FP). ớ V i TP là true positive là nh ng câu d ữ ự đoán là đúng và kết qu ả là đúng, FP là false positive là những câu d ự đoán là sai nhưng kết qu ả là đúng. Precision càng cao thì chính xác các câu d độ ự đoán đúng càng cao.
- Recall: là t l s ỉ ệ ố câu đúng (TP) trong tổng s ố những câu th c s ự ự là đúng (TP + FN). V i FN là false negative là nh ng câu d ớ ữ ự đoán sai nhưng kết qu ả là đúng. Recall càng cao thì t lệ ỏỉ b sót các câu th c s ự ự đúng càng thấp.
- F1-score: là điểm trung bình điều hòa (harmonic mean) c a Precision và ủ Recall. Điểm F1-score càng cao thì mô hình d ự đoán càng chính xác và tin cậy.
−
Dưới đây là bảng k t qu ế ả thử nghi m cho intent và entity: ệ B ng 3.1. Thông s ả ố đo intent
Ý định (Intents) S câu test ố Thông s ố đo
Precision Recall F1-score
chao_hoi 6 1.00 0.83 0.91 bao_gia 7 1.00 1.00 1.00 loi_font_chu 7 1.00 0.86 0.92 bao_cao_ton_kho 8 0.90 1.00 0.95 nhap_tu_dien 5 0.80 0.80 0.80 tao_lai_so_phieu 8 1.00 1.00 1.00 cai_dat_phan_mem 14 0.82 1.00 0.90 doi_mat_khau 7 1.00 0.86 0.92 tao_du_lieu_moi 17 0.93 0.82 0.87 hoa_don_dien_tu 8 1.00 1.00 1.00 in_nhieu_phieu 7 0.88 1.00 0.93 copy_du_lieu 8 0.89 1.00 0.93 … … … … … Trọng s trung bình ố 256 0.92 0.91 0.91
B ng 3.2. Thông s ả ố đo entity
Thực thể (Entities) S câu ố
test
Thông s ố đo
Precision Recall F1-
score
tu dien tai khoan 23 0.85 1.00 0.92
so_dien_thoai 4 1.00 1.00 1.00
san_pham 4 1.00 1.00 1.00
ten_khach_hang 13 1.00 0.62 0.76
Hình 3. . Bi19 ểu đồ ma tr n nh m l n (Confusion matrix) gi a các ậ ầ ẫ ữ nhãn d ự đoán và nhãn đúng trong tác vụ phân lo i ý đ nh ạ ị
N hã n đú ng Nhãn d ự đoán
Hình 3. . Bi20 ểu đồ ma tr n nh m l n (Confusion matrix) gi a các ậ ầ ẫ ữ nhãn d ự đoán và nhãn đúng trong tác vụ trích xu t th c th ấ ự ể
K t qu ế ả chỉ ra rằng Chatbot d ự đoán chính xác khoảng 90%. Để lưa chọn được c u hình t t nh t và ấ ố ấ ổn định nhất tôi đã so sánh các biến th c u hình khác ể ấ nhau, v i c u hình u ti là c u hình mớ ấ đầ ên ấ ặc định được cung c p b i Rasa t tên ấ ở đặ là default-config, c u hình thấ ứ hai s d ng mô hình DIET v i thành phử ụ ớ ần tokenizer được tùy bi n s d ng ế ử ụ thư viện Underthesea [25] c a tác gi ủ ả Vũ Anh, và c u hình ấ thứ 3 cũng chính là c u hình ấ được s d ng cho ng d ng dùng ử ụ ứ ụ pretrained-model spaCy h ỗ trợ Tiếng Vi t [15] c a tác gi ệ ủ ả Trần Việt Trung đã được hu n luy n d a trên 18GB các bài báo Ti ng Viấ ệ ự ế ệt và được đặt tên là spaCy- config. K t qu ế ả thu được như sau:
Hình 3.21. Thang đo so sánh điểm intent c a 3 c u hình ủ ấ B ng 3.3ả . Kết qu ả so sánh điểm intent của 3 c u hình ấ
C u hình ấ Precision Recall F1-score
spaCy-config 0.9191 0.9102 0.9086
custom-tokenizer 0.8945 0.8867 0.8843
default-config 0.8657 0.8555 0.8520
Hình 3.22. Thang đo so sánh điểm entity c a 3 c u hình ủ ấ
B ng 3.4ả . Kết qu ả so sánh điểm entity của 3 c u hình ấ
C u hình ấ Precision Recall F1-score
spaCy-config 0.9226 0.8864 0.8878
custom-
tokenizer 0.8328 0.8333 0.8208
default-config 0.8028 0.8103 0.8028
Ở ấ c u hình mặc định c a Rasa default-config ủ đạt điểm th p nh t c nhi m ấ ấ ở ả ệ