D a trên ự thực nghi m c a tác gi mô hình DIET [13] v i b d u NLU-ệ ủ ả ớ ộ ữ liệ Benchmark [21] bao g m 25,716 câu tho i v i 64 intent và 54 entity t k t qu ồ ạ ớ đạ ế ả
tốt hơn đáng kể khi so sánh v i mô hình HERMIT [22]ớ , mô hình đã được ch ng ứ
Hình 2.8. So sánh mô hình DIET và mô hình HERMIT [13] Mô hình DIET s d ng ki n trúc linh ho t có th d ử ụ ế ạ ể ễ dàng thay đổi các thành phần bên trong, do đó ếk t qu ả đánh giá mô hình được th hi n qua các ể ệ bi n ế thể ằ b ng s ự thay đổi trong thành phầ Sparse feature, Dense feature, n Mask loss, k t qu và ế ả được so sánh thông qua điểm F1-score:
Hình 2.9. Đánh giá các biến th cể ủa mô hình DIET [13]
Qua b ng trên có th ả ể nhận th y DIET ấ có s d ng Spare feature và Dense ử ụ feature v i Dớ ense feature là ConveRT cho được k t qu t t nhế ả ố ất và đặc biệt thời gian hu n luy n ấ ệ ít hơn 6 lần so với sử ụ d ng mô hình BERT.
CHƯƠNG 3: XÂY DỰNG VÀ CÀI ĐẶ ỨT NG D NG Ụ CHATBOT
3.1 Gi i thiớ ệu Rasa Framework
Rasa Framework (23) là m t mã ngu n m giúp xây d ng Chatbot s dộ ồ ở ự ử ụng trí tu nhân t oệ ạ . Được ra đời vào năm 2016 và được vi t b ng ngôn ng l p trình ế ằ ữ ậ Python, v i s h ớ ự ỗ trợ ủ c a cộng đồng người dùng và được c p nh liên t c Rasa ậ ật ụ đang ngày càng phát triển và tr thành m t trong nh ng nở ộ ữ ền t ng xây d ng Chatbot ả ự l n nh và hoàn toàn mi n phí. ớ ất ễ
Rasa bao g m ồ nhiều thành phần trong đó có 2 thành ph n chính là thành phầ ần x lý ngôn ng t nhiên (NLU) và thành ph n qu n lý h i tho i (DM). ử ữ ự ầ ả ộ ạ
Hình 3.1. Sơ đồ các thành ph n trong Rasa Framework ầ
- NLU: là ph n x lý phân loầ ử ại ý định và trích xu t th c thấ ự ể. Được th ể hiện ở kh i NLU Pipeline, tin nh n cố ắ ủa người dùng được x lý qua m t quy trình g m ử ộ ồ nhi u ề bước g i là pipeline. ọ
- Dialogue management: là thành ph n quyầ ết định s ự kiện ti p theo trong ế cuộc h i tho i d a vào ng c nh hi n tộ ạ ự ữ ả ệ ại. DM được th hi n b i kh i Dialogue ể ệ ở ố Policies.
Bên cạnh đó Rasa bao gồm các thành ph n khác: ầ
- Rasa Action Server: là thành ph n tùy ch n, n u h ầ ọ ế ệ ốth ng c n x lý các ầ ử tác v ụ logic như tiền x ử lý trước khi tr lả ời người dùng ho c gặ ọi đến server khác thông qua API để ấ l y d li u. Rasa Action Server s d ng Rasa SDK vi t b ng ữ ệ ử ụ ế ằ Python để xây d ng. ự
- Tracker stores: thành phần lưu trữ ị l ch s tin nh n, slot trong database ử ắ hoặc b ộ nhớ t m, cung cạ ấp thông tin để Rasa action server x ử lý như trích xuất liên k t các tin nhế ắn trước để trả ời ngườ l i dùng m t cách chính xác nh t, ho c phân ộ ấ ặ tích cuộc hội thoại.
Hiện nay có r t nhiấ ều phương pháp làm Chatbot do bên th ba cung cứ ấp như
Chatfuel, Sparrow, ManyChat…nhưng trong đề tài luận văn này, tôi sẽ ử ụng s d
Rasa framework để xây dựng chương trình và dưới đây là những lý do s d ng ử ụ
Rasa xây d ng Chatbot: để ự
- D dàng tích h p, ch nh s aễ ợ ỉ ử : ta có th t c u hình b t kì pipeline nào trong ể ự ấ ấ phần NLU pipeline để phù h p v i ngôn ng t ng qu c gia ho c mợ ớ ữ ừ ố ặ ục đích cụ ể th , Rasa cung cấp các tính năng có sẵn thêm vào đó người dùng có th t tể ự ạo tính năng riêng, chính vì Rasa là mã ngu n m cho nên s d dàng ch nh s a framework, có ồ ở ẽ ễ ỉ ử thể tùy ý tích hợp các tính năng bên ngoài và hàm xử lý nào đó.
- Tích h p v i các h ợ ớ ệ thống có s nẵ : Rasa cung c p Rasa Action giúp ấ Chatbot có th k t nể ế ối đến các h ệ thống khác thông qua API ho c truy c p vào ặ ậ database, gi s Chatbot bán hàng có th l y giá m i nh t trên h ả ử ể ấ ớ ấ ệ thống qu n lý ả bán hàng c a doanh nghiủ ệp.
- Khả năng học qua tương tác: thay vì vi c li t kê t t c ệ ệ ấ ả ý định và câu tr ả lời tương ứng, trong quá trình hu n luyấ ện người dùng có th giao ti p tr c ti p vể ế ự ế ới Chatbot đánh giá và cung cấp câu tr l i phù h p vả ờ ợ ới ý định của người dùng.
- K t n i d dàng v i các ng d ng chat khácế ố ễ ớ ứ ụ : Rasa cho phép ng d ng ứ ụ liên k t v i các n n tế ớ ề ảng chat n i tiổ ếng như Facebook Messenger, Slack, Telegram,
- Hiệu su t cao: v i viấ ớ ệc tích h p nhi u ki n trúc hiợ ề ế ện đại nhất như DIET, TED s d ng mô hình Transformer giúp cho Chatbot c a Rasa tr nên thông minh ử ụ ủ ở hơn và tối ưu hóa được th i gian ờ huấn luy n mệ ột cách đáng kể khi so sánh v i các ớ n n t ng khác. ề ả
- Miễn phí và c ng ng l nộ đồ ớ : Rasa là mã ngu n m cho nên s không mồ ở ẽ ất phí để xây d ng ng dự ứ ụng, cũng chính vì lý do đó nhiều người d dàng tiễ ếp c n và ậ xây dựng được các cộng đồng chia s ẻ kiến th c, thu t toán tứ ậ ối ưu và thậm chí d ữ liệu m u có s n, giúp Rasa ngày phát tri n và ổn định. ẫ ẵ ể
3.2 C u trúc cấ ủa Chatbot Nhất Nam
3.2.1 Thi t k t ng quát ế ế ổ
Ứng d ng Chatbot ụ Nhất Nam hướng đến người dùng chưa dùng sản ph m k ẩ ế
toán Nh t Nam c n tham kh o thông tin s n phấ ầ ả ả ẩm, thông tin liên quan đến doanh nghiệp, và hướng đến người dùng đã sử ụ d ng c n hầ ỏi đáp về cách dùng s n phả ẩm và truy xu t thông tin b o trì, b o hành c a h . Bài toán mà tôi xây d ng s tấ ả ả ủ ọ ự ẽ ập trung vào các chức năng tư vấn, h ỗ trợ bán hàng, hướng d n s d ng và truy xuẫ ử ụ ất
thông tin liên quan đến doanh nghi p. Các chệ ức năng chính bao gồm:
- Thông tin các loại sản ph m k toán ẩ ế - H i giá s n ph m ỏ ả ẩ
- Tư vấn bán hàng
- Thông tin doanh nghi p ệ - T o liên h n tạ ệ đế ổng đài viên - Thông tin b o trì, b o hành ả ả - Hỏi đáp kiến th c ứ
Hình 3.2. Cấu trúc h ệ thống Chatbot Nh t Nam ấ
Ở website Nh t Nam sấ ẽ thi t k giao di n dành cho Chatbotế ế ệ , người dùng có thể nh p tin nh n, tin nh n s đư c gậ ắ ẵ ẽ ợ ửi đến Rasa thông qua Api. Các thành ph n ầ bên trong Chatbot Rasa s ẽ được đ m nhiả ệm như sau:
- Agent: là thành ph n trung gian giao ti p, truy n tầ ế ề ải thông điệp đến các thành ph n khác, các tin nhầ ắn đầu vào s ẽ đi qua Agent sau đó từ Agent s chuyẽ ển
đến các thành phần NLU, Dialog management, Rasa action server để ử x lý tin
nh n.ắ
- NLU: có nhi m v vector hóa d ệ ụ ữ liệu để máy có th ể hiểu ngôn ng con ữ ngườ ừ đó có thểi t phân loại ý định và trích xu t ra các thông tin. Ví d ấ ụ câu đầu vào người dùng h i “Giá phầỏ n m m k toán doanh nghiề ế ệp bao nhiêu?” thì h ệ thống s vector hóa nó rẽ ồi đối chi u v i t p d ệu training đã được gán nhãn để ế ớ ậ ựli đưa ra ý định “bao_gia” (ý định h i v giá s n ph m). Ti p theo nỏ ề ả ẩ ế ếu câu đầu vào chứa entity h thốệ ng s trích xu t ra, ví d câu trên có entity là s n phẽ ấ ụ ả ẩm “kế toán doanh nghiệp”.
- Dialog management (DM): d a vào các luự ật quy định trong h ệ thống hoặc so sánh ng c nh h i thoữ ả ộ ại với các ng cữ ảnh dùng để hu n luy n trưấ ệ ớc đó, DM s ẽ quyết định hành động ti p theo là gì. Ví d v i intent ế ụ ớ “bao_gia” ự d a vào các cuộc
h i thoộ ại được khai báo trong story h ệ thống s d ẽ ự đoán được hành động ti p theo ế là “utter_bao_gia” (trả ờ l i giá s n ph m cho khách hàng). ả ẩ
- Rasa action server: là thành ph n quan tr ng trong x ầ ọ ử lý logic, để ử x lý các nghi p v ệ ụ phức tạp mà DM không th x ể ử lý như lấy giá s n ph m t h ả ẩ ừ ệ thống khác, x lý tính toán ph c t p khi hoàn thành form nh p li u. Trong ử ứ ạ ậ ệ ứng d ng này, ụ Rasa action server s có nhi m v trích xu t d u t h ẽ ệ ụ ấ ữ liệ ừ ệ thống qu n lý bán hàng ả và điều hướng thông tin liên h n h tr ệ đế ỗ ợ viên ngay khi có người dùng đăng kí thông tin.
3.2.2 Sơ đồ quy trình hoạt động c a Chatbot Nh t Nam ủ ấ
Hình 3.3. Sơ đồ quy trình hoạt động c a Chatbot Nh t Nam ủ ấ
Mô t chi tiả ết các thành phần:
b. Tiền x lý: thành ph n này Rasa s x lý câu u vào cử Ở ầ ẽ ử đầ ủa người dùng
qua thành ph n ầ Tokenizer để tách câu đầu vào thành các token như sau “Giá”,
“kế_toán”, “doanh_nghiệp”, “bao_nhiêu”. Bước ti p theo chuy n các token ế ể thành d ng vector qua thành phạ ần đặc trưng hóa (Featurizer) để Chatbot có th ể phân loại ý định và trích xuất thực th . ể
c. Phân loại ý định: phân tích và d ự đoán ý định d a trên tự ập ý định đã được định nghĩa trước. Ví d câu h i “Giá kếụ ỏ toán doanh nghi p bao nhiêu? Chatbot ệ ” d ự đoán ý định “bao_gia” ớ ộv i đ ự tin (confidence) là 98%. t
d. Trích xu t th c th :ấ ự ể Chatbot s ẽ nhận d ng các th c th trong câu h i nh ạ ự ể ỏ ờ vào t p các th c th ậ ự ể đã được định nghĩa trước. Ví d trong câu h i trên, Chatbot ụ ỏ s trích xuẽ ất được “kế toán doanh nghiệp” là một thực thể ủa c “san_pham”.
e. Chính sách (Policy): Chatbot s dẽ ựa vào ý định và th c th ự ể để quyết định hành động ti p theo các chính sách, có 3 chính sách là chính sách d a vào quy tế ự ắc
(Rule-based policy), chính sách ghi nh (Memorization policy) và chính sách TED ớ
(TED policy), trong đó Rule-based policy s ẽ được ưu tiên nhấ ếp đót ti là Memory policy và TED policy
- Rule-based policy: là chính sách quyết định hành động ti p theo d a vào ế ự các quy tắc được khai báo s n, gi s ẵ ả ử người dùng g i tin nhử ắn ý định chào h i, bot ỏ s luôn chào lẽ ại bất kể ở ngữ ả c nh nào.
- Memorization policy: n u h th ng không phát hi n h i tho i trùng khế ệ ố ệ ộ ạ ớp v i b t kì quy tớ ấ ắc được định nghĩa sẵn nào Chatbot s d a vào các kẽ ự ịch b n có sả ẵn đã đượ khai báo để ự đoán hành độc d ng ti p theo. ế
- TED policy: nếu hành động ti p theo không tìm th y trong Rule policy ế ấ hoặc Memorization policy, h th ng s s d ng k thu t có tên Transformer ệ ố ẽ ử ụ ỹ ậ Embedding Dialogue (TED) (24) d để ự đoán hành động đúng nhấ ựt d a theo ng ữ cảnh trước đó và các kịch bản được khai báo
f. Hành động (Action): Là quá trình Chatbot t ng h p k t qu c a các thành ổ ợ ế ả ủ phần trên d a theo các chính sách tr v k t qu ự để ả ề ế ả cho người dùng. Đố ới v i câu hỏi “Giá kế toán doanh nghiệp bao nhiêu” Chatbot s ẽ đưa ra câu trả ờ l i phù hợp nhất là “utter_bao_gia_phan_mem_ke_toan_doanh_nghiep”, k t h p v i viế ợ ớ ệc truy xuất dữ liệ ừ ệ thố u t h ng doanh nghiệp để có th lể ấy được giá s n ph m chính ả ẩ
xác nh t, Chatbot s v ấ ẽ trả ề cho người dùng câu tr lả ời tương ứng “Phần m m k ề ế toán doanh nghiệp giá 6.000.000 đồng”.
3.3 Xây d ng d ự ữ liệu Chatbot
Do ng d ng Chatbot ứ ụ Nhất Nam ch ỉ phục v cho m t doanh nghi p c ụ ộ ệ ụ thể nên s s d ng mi n d ẽ ử ụ ề ữ liệu đóng được thu th p t ậ ừ những cu c h i tho i c a khách ộ ộ ạ ủ hàng trước đó và câu trả l i s ờ ẽ được chuyên viên tư vấn t o ra. Trong quá trình xây ạ d ng Chatbot k ch bự ị ản ẽ đượs c vi t b ng tay ho c thông qua hế ằ ặ ọc tương tác (Interactive Learning) s d ng công c Rasa X h ử ụ ụ ỗ trợ giao di n tr c quan giúp các ệ ự chuyên viên tạo được k ch bị ản m t cách nhanh nh ộ ất.
Hình 3.4. Giao di n Rasa X s d ng tệ ử ụ ạo k ch b n ị ả
Quy trình xây d ng h ự ệ thống Chatbot s bao gẽ ồm các bước chính sau đây:
3.3.1 Xây dựng ý định (intent)
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 đó