You are on page 1of 33

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI

VIỆN ĐIỆN

--------------o0o--------------

THỰC TẬP TỐT NGHIỆP


ĐỀ TÀI: MACHINE LEARNING VÀ ỨNG DỤNG CHATBOT

Giảng viên hướng dẫn: GVC.THS Đào Đức Thịnh


Sinh viên thực hiện: Nguyễn Thị Hương
MSSV: 20162066
Hà Nội, 09/2020

MỤC LỤC

1) MACHINE LEARNING..............................................................................5

1.1) Khái quát chung............................................................................................5

1.2) Các thuâ ̣t toán trong Machine Learning.......................................................6

2) LỢI ÍCH CỦA CHATBOT........................................................................11

2.1) Lợi ích Chatbot có được khi tương tác trực tiếp với người dùng...............11

2.2) Lợi ích Chatbot đem lại cho khách hàng....................................................12

2.3) Lợi ích Chatbot đem lại cho các công ty, tổ chức......................................12

3) ỨNG DỤNG CHATBOT............................................................................12

3.1) Khái niê ̣m....................................................................................................12

3.2) Phân loại.....................................................................................................13

3.3) Cách thức hoạt đô ̣ng...................................................................................14

3.4) RASA..........................................................................................................18

4) XÂY DỰNG KỊCH BẢN CHAT VÀ CẤU HÌNH CHATBOT..............20

4.1) Cấu hình cho Rasa NLU.............................................................................20

4.2) Cấu hình cho Rasa Core.............................................................................23

4.3) Thực thi lệnh...............................................................................................28


DANH MỤC HÌNH ẢNH

Hình 1: Các khái niê ̣m về AI...............................................................................5

Hình 2: Noron thần kinh......................................................................................6

Hình 3: Cách thức hoạt đô ̣ng của Chatbot.........................................................16

Hình 4: Mạng noron nhân tạo............................................................................18

Hình 5: Cơ cấu Chatbot sử dụng NLU...............................................................19

Hình 6: Cơ cấu cơ bản của Chatbot sử dụng NLP và công nghê ̣ Machine Learning
..................................................................................................................................20

Hình 7: Kết quả train..........................................................................................30

Hình 8: Dự đoán mô hình..................................................................................31

Hình 9: Hình dung câu chuyện..........................................................................32

Hình 10: Kết quả khởi động máy chủ................................................................33

Hình 11: Kết quả đào tạo...................................................................................33

Hình 12: Kết quả trò chuyện..............................................................................34


MỞ ĐẦU

Những năm gần đây, AI - Artificial Intelligence (Trí Tuệ Nhân Tạo), và cụ thể hơn
là Machine Learning (Học Máy hoặc Máy Học) nổi lên như một bằng chứng của cuộc
cách mạng công nghiệp lần thứ tư (1 - động cơ hơi nước, 2 - năng lượng điện, 3 - công
nghệ thông tin). Trí Tuệ Nhân Tạo đang len lỏi vào mọi lĩnh vực trong đời sống mà có
thể chúng ta không nhận ra. Xe tự hành của Google và Tesla, hệ thống tự tag khuôn mặt
trong ảnh của Facebook, trợ lý ảo Siri của Apple, hệ thống gợi ý sản phẩm của Amazon,
hệ thống gợi ý phim của Netflix, máy chơi cờ vây AlphaGo của Google DeepMind, …,
chỉ là một vài trong vô vàn những ứng dụng của AI/Machine Learning.

Nhu cầu về nhân lực ngành Machine Learning (Deep Learning) đang ngày một cao,
kéo theo đó nhu cầu học Machine Learning trên thế giới và ở Việt Nam ngày một lớn.
Cá nhân em cũng muốn hệ thống lại kiến thức của mình về lĩnh vực này để chuẩn bị cho
tương lai. Ứng dụng Chatbot cũng đang được sử dụng phổ biến và có rất nhiều lợi ích
trong nhiều ngành trong cuô ̣c sống hiện nay. Vì thế nên em chọn đề tài về Machine
Learning và ứng dụng Chatbot để tìm hiểu cho môn học này.
1) MACHINE LEARNING

1.1) Khái quát chung

Hình 1: Các khái niê ̣m về AI

Để tìm hiểu về Machine Learning, em tìm hiểu 3 khái niê ̣m sau:

(1) AI (trí tuê ̣ nhân tạo)

Trí tuệ nhân tạo là khả năng mà máy có thể làm những thứ mà não bộ người làm
được.

- AI được chia làm 2 loại rộng, hẹp là: general AI và narrow AI

+ General AI gồm những đặc tính não bộ:  nhận diện được đồ vật, hình ảnh, âm
thanh, giao tiếp, điều khiển được cơ bắp, giải toán, suy luận,...

+ Narrow AI tức là máy chỉ có một khả năng duy nhất của não bộ người như nhận
dạng được hình ảnh.

(2) Machine Learning (máy học)

Máy học tức là cách để có được AI, máy tự học được mà không cần sử dụng hàng
triê ̣u dòng code phức tạp.  

Nghĩa là AI là mục tiêu, machine learning là phương tiê ̣n/cách thức để có được AI.
Máy sẽ được học bằng cách train nó một lượng data khổng lồ với một thuật toán, thuật
toán có khả năng điều chỉnh và xây dựng nên model (Model là ta cho input thì nó sẽ cho
output). 

(3) Deep Learning (học sâu)

Deep Learning là một trong nhiều cách tiếp cận của Machine Learning. Deep
learning mô phỏng lại bộ não người với nhiều lớp neurons ( nơron thần kinh ).

Hình 2: Noron thần kinh

 Kết luâ ̣n: Sau khi tìm hiểu, em đã phân biê ̣t được 3 khái niê ̣m về AI, Machine
Learning và Deep Learning.

1.2) Các thuâ ̣t toán trong Machine Learning


(1) Phân nhóm thuâṭ toán dựa trên phương thức học

Theo phương thức học, các thuật toán Machine Learning thường được chia làm 4
nhóm: Supervised learning, Unsupervised learning, Semi-supervised lerning và
Reinforcement learning. 

Trong phần này em tâ ̣p trung sâu vào Supervised Learning và Unsupervised
Learning.
◦ Supervised Learning (học có giám sát)

Supervised learning là thuật toán dự đoán đầu ra (outcome) của một dữ liệu mới
(new input) dựa trên các cặp (input, outcome) đã biết từ trước. Cặp dữ liệu này còn được
gọi là (data, label), tức (dữ liệu, nhãn). Supervised learning là nhóm phổ biến nhất trong
các thuật toán Machine Learning.

Một cách toán học, Supervised learning là khi chúng ra có một tập hợp biến đầu
vào X = {x1, x2, …, xN} và một tập hợp nhãn tương ứng Y = {y1, y2, …, yN}, trong đó xi,
yi là các vector. Các cặp dữ liệu biết trước (xi, yi) ∈ X×Y được gọi là tập training
data (dữ liệu huấn luyện). Từ tập training data này, chúng ta cần tạo ra một hàm số ánh
xạ mỗi phần tử từ tập X sang một phần tử (xấp xỉ) tương ứng của tập Y:

yi ≈ f(xi),  ∀i=1, 2,…, N. Mục đích là xấp xỉ hàm số f thật tốt để khi có một dữ
liệu x mới, chúng ta có thể tính được nhãn tương ứng của nó y = f(x).

Thuật toán supervised learning còn được tiếp tục chia nhỏ ra thành hai loại chính:

• Classification (Phân loại)

Một bài toán được gọi là classification nếu các label của input data được chia thành
một số hữu hạn nhóm. 

• Regression (Hồi quy)

Nếu label không được chia thành các nhóm mà là một giá trị thực cụ thể.

◦ Unsupervised Learning (Học không giám sát)

Trong thuật toán này, chúng ta không biết được outcome hay nhãn mà chỉ có dữ liệu
đầu vào. Thuật toán unsupervised learning sẽ dựa vào cấu trúc của dữ liệu để thực hiện
một công việc nào đó, ví dụ như phân nhóm (clustering) hoặc giảm số chiều của dữ liệu
(dimension reduction) để thuận tiện trong việc lưu trữ và tính toán.
Một cách toán học, Unsupervised learning là khi chúng ta chỉ có dữ liệu vào X mà
không biết nhãn Y tương ứng.

Những thuật toán loại này được gọi là Unsupervised learning vì không giống như
Supervised learning, chúng ta không biết câu trả lời chính xác cho mỗi dữ liệu đầu vào.

 Unsupervised learning chia nhỏ thành hai loại:

• Clustering (phân nhóm)

Một bài toán phân nhóm toàn bộ dữ liệu X thành các nhóm nhỏ dựa trên sự liên quan
giữa các dữ liệu trong mỗi nhóm.

• Association

Là bài toán khi chúng ta muốn khám phá ra một quy luật dựa trên nhiều dữ liệu cho
trước.

(2) Phân nhóm thuâṭ toán dựa trên chức năng

Có nhiều thuâ ̣t toán: Regression Algorithms, Classification Algorithms, Instance-


based Algorithms, Instance-based Algorithms, Regularization Algorithms, Bayesian
Algorithms, Clustering Algorithms, Artificial Neural Network Algorithms,...

Nhưng em sẽ tìm hiểu sâu về Bayesian Algorithms. Vì thuâ ̣t toán này sẽ sử dụng
trong ứng dụng Chatbot.

◦ Bayesian Algorithms

Đây là thuâ ̣t toán học máy có giám sát sử dụng định lý Bayes, dựa trên xác suất có
điều kiê ̣n hoă ̣c đó chính là khả năng 1 sự kiê ̣n A sẽ xảy ra khi 1 sự kiê ̣n B khác đã xảy
ra. Được biểu diễn bằng phương trình sau:

P ( B| A ) P ( A )
P ( A|B )=
P (B )
Trong đó:

P : xác suất (XS)

P(A|B) : XS xảy ra sự kiê ̣n A (giả thuyết) cho rằng B (bằng chứng) đã xảy ra.

P(B|A) : XS xảy ra sự kiê ̣n B (bằng chứng) cho rằng A (giả thuyết) đã xảy ra.

P(A) : XS xảy ra sự kiê ̣n A (giả thuyết).

P(B): XS xảy ra sự kiê ̣n B (bằng chứng).

Thuâ ̣t toán Bayes Algorithms chia làm 2 dạng chính:

• Naive Bayes Classifier

Xét bài toán classification với C classes 1, 2,…, C. Giả sử có một điểm dữ liệu x∈Rd.
Hãy tính xác suất để điểm dữ liệu này rơi vào class c:

p ( y=c|x ) (1 )

Tức tính xác suất để đầu ra là class c biết rằng đầu vào là vector x.

Biểu thức này, nếu tính được, sẽ giúp chúng ta xác định được xác suất để điểm dữ
liệu rơi vào mỗi class. Từ đó có thể giúp xác định class của điểm dữ liệu đó bằng cách
chọn ra class có xác suất cao nhất:

c=arg max p ( c|x )( 2 )


c ∈{1 ,… ,C }

Biểu thức (2) thường khó được tính trực tiếp. Thay vào đó, quy tắc Bayes thường
được sử dụng:

c=argmax p ( c|x )( 3 )
c

p ( x|c ) p ( c )
¿ arg max ( 4)
c p(x)

¿ arg max p ( x|c ) p ( c )( 5 )


c
p(x|c) thường rất khó tính toán vì x là một biến ngẫu nhiên nhiều chiều, cần rất rất
nhiều dữ liệu training để có thể xây dựng được phân phối đó. Để giúp cho việc tính toán
được đơn giản, người ta thường giả sử một cách đơn giản nhất rằng các thành phần của
biến ngẫu nhiên x là đô ̣c lâ ̣p với nhau, nếu biết c:
d
p ( x|c )= p ( x1 , x2 , ..., x d|c ) =∏ p ( x i|c ) ( 6 )
i=1

Giả thiết về sự độc lập của các chiều dữ liệu này được gọi là Naive Bayes. Cách xác
định class của dữ liệu dựa trên giả thiết này có tên là Naive Bayes Classifier (NBC), có
tốc độ training và test rất nhanh. Việc này giúp nó mang lại hiệu quả cao trong các bài
toán large-scale.

Ở bước training, các phân phối p(c) và p(xi|c), i=1,…,d sẽ được xác định dựa vào
training data.

Ở bước test, với một điểm dữ liệu mới x, class của nó sẽ được xác đinh bởi:
d
c=arg max p ( c ) ∏ p ( x i|c ) (7 )
c ∈{1 ,… ,C } i=1

Khi d lớn và các xác suất nhỏ, biểu thức ở vế phải của (7) sẽ là một số rất nhỏ, khi
tính toán có thể gặp sai số. Để giải quyết việc này, (7) thường được viết lại dưới dạng
tương đương bằng cách lấy log của vế phải:
d
c=arg max ¿ log ( p ( c ) ) + ∑ log ( p ( x i|c ) ) ( 7.1 )
c ∈{1 ,… ,C } i=1

• Gaussian Naive Bayes

Mô hình này được sử dụng chủ yếu trong loại dữ liệu mà các thành phần là các biến
liên tục.

Với mỗi chiều dữ liệu i và một class c, xi tuân theo một phân phối chuẩn có kỳ
vọng và phương saiσ 2ci:
1 −( x i−μci ) 2
2
p ( x i|c )= p ( x i|μci , σ )=
ci
√2 π σ 2ci
exp
( 2 σ 2ci
(8 )
)
Trong đó, bộ tham số θ={ μci, σ 2ci } được xác định bằng Maximum Likelihood:
N
( μ¿¿ ci , σ 2ci )=argmax ∏ p ( x i(n)|μci , σ 2ci ) ( 9 ) ¿
μ ci ,σ 2ci n=1

2) LỢI ÍCH CỦA CHATBOT

2.1) Lợi ích Chatbot có được khi tương tác trực tiếp với người dùng
◦ Hỗ trợ trực tiếp cho người dùng: khi khách hàng ghé thăm website, hay fanpage sẽ
chat với Chatbot để giải đáp và hỗ trợ thắc mắc của khách hàng.

◦ Chatbot tương tác trực tiếp khách hàng trong các lĩnh vực:

o Thương mại điện tử: Hỗ trợ thông báo giá cả sản phẩm, thông tin
hình ảnh sản phẩm đến khách hàng, hỗ trợ thông tin đơn hàng,...
o Ngành du lịch: Hỗ trợ thông tin về địa điểm du lịch, thời tiết, đặt
phòng, vé.
o Ngành tài chính, ngân hàng: Hỗ trợ khách hàng về thông tin tài
khoản, các dịch vụ sử dụng,...
o Y tế: Hỗ trợ các giải pháp trị liệu, xử lý các yêu cầu liên quan đến
bảo hiểm, chăm sóc sức khỏe.
o Truyền thông: Hỗ trợ cung cấp tin tức, tạo cuộc khảo sát người dùng.

◦ Giải quyết các khiếu nại, quản lý các tin đồn: tránh việc khách hàng khiếu nại và
chờ đợi quá lâu việc phản hồi.

2.2) Lợi ích Chatbot đem lại cho khách hàng


◦ Hỗ trợ cung cấp tin 24/7.
◦ Nhận câu trả lời nhanh chóng.

◦ Các phản hồi của Chatbot là cố định, đầy đủ, đảm bảo độ tin cậy.

◦ Có thể lưu lại lịch sử đối thoại.

◦ Kiểm tra thông tin.

2.3) Lợi ích Chatbot đem lại cho các công ty, tổ chức
◦ Linh hoạt thiết kế phục vụ cho từng lĩnh vực, ngành nghề đặc thù.

◦ Cải thiện trải nghiệm, thỏa mãn khách hàng.

◦ Giảm nguồn nhân lực, tăng khả năng hỗ trợ khách hàng.

◦ Giảm chi phí.

◦ Gia tăng số lượng khách hàng mới và giữ chân các khách hàng cũ.

◦ Tăng doanh số bán hàng.

3) ỨNG DỤNG CHATBOT

3.1) Khái niêm


̣
- “Bot” là mô ̣t phần mềm thực hiê ̣n các nhiê ̣m vụ, công viê ̣c con người yêu cầu mô ̣t
cách tự đô ̣ng. Hoặc “Bot” cũng có thể là mô ̣t chương trình máy tính (computer program)
được thiết kế để “giao tiếp” với người dùng thông qua kết nối Internet.

- “Chat” là trò chuyê ̣n, giao tiếp qua lại giữa 2 người. Chatbot là hê ̣ thống Bot ở
trong trạng thái trực tuyến, trên các website hoă ̣c trên các nền tảng, giao diê ̣n chat khác
của social media để “chat tự đô ̣ng” với người dùng.

Chatbot là một chương trình kết hợp với trí tuệ nhân tạo (AI) để tương tác với con
người. Công cụ này thay thế cho nhân viên để tư vấn trả lời những gì khách hàng thắc
mắc. Chatbot thường trao đổi với người dùng qua hình thức tin nhắn (Textual) hoặc âm
thanh (Audiotory).

Chatbot tương tác với chúng ta như mô ̣t hê ̣ thống trả lời tin nhắn nhanh chóng, tự
đô ̣ng. Bằng cách xây dựng, giả lâ ̣p các mô hình tương tác, kịch bản tương tác như của
con người, sử dụng phương pháp trong Machine Learning.

Hê ̣ thống Chatbot có thể “tự học”, “tự hiểu” các câu hỏi, nhu cầu người dùng, khách
hàn và thực hiê ̣n, đưa ra các phản hồi sao cho phù hợp.

Chatbot sau khi được lâ ̣p trình và huấn luyê ̣n sẽ tự đô ̣ng làm viê ̣c mô ̣t cách đô ̣c lâ ̣p
như mô ̣t con người. Chỉ những câu hỏi, tin nhắn của người dùng được cấu trúc lại thành
các câu, ý định ngắn gọn với ngôn ngữ tự nhiên (natural language) và thêm vào hê ̣ thống
kèm theo các kịch bản đối thoại tương ứng đã xây dựng trước đó thì Chatbot mới có khả
năng đưa ra phản hồi.

3.2) Phân loại


Theo tương tác với người dùng, chatbot chia làm 2 loại:

(1) Audiotory (âm thanh):

◦ Siri (Apple)

◦ Google Assistant (Google)

◦ Cortana (Microsoft)

◦ Javis của Tony-Stark

(2) Textual (tin nhắn):

◦ Thời trang – tư vấn quần áo (H&M)

◦ Thực phẩm – order pizza (Dominos Pizza)

◦ Làm đẹp – stylish cá nhân (Sephora0


◦ Giao thông – thông tin tàu điê ̣n vùng Kanto (qmau.me)

3.3) Cách thức hoạt đô ̣ng

Hình 3: Cách thức hoạt động của Chatbot

Chatbot tương tác với con người qua âm thanh hoặc văn bản và sử dụng các
platform để giao tiếp với bot. Phần mà các lập trình viên cần phát triển nằm toàn bộ ở
phía sau bao gồm:

o Translator: Dịch yêu cầu của user, giúp máy tính hiểu được yêu cầu mình
cần thực hiện → quyết định việc Chatbot có thông minh hay không.
o Processor: Xử lý yêu cầu, thành phần này giúp khả năng
của Chatbot không bị giới hạn, máy tính làm được gì thì Chatbot cũng làm được
như vậy.
o Respondent: Nhận output và đóng gói gửi trả lại messenger platform, trả
lại cho người dùng kết quả.

Chatbot sử dụng phương pháp Pattern matchers (phát hiê ̣n trùng khớp các mẫu câu)
để tìm kiếm các mẫu câu có trong câu hỏi người dùng và xem khớp với các câu hỏi đã
được “huấn luyê ̣n” lưu trữ thống để đưa ra câu trả lời phù hợp nhất.

(1) Multinational Naive Bayes

Multinational Naive Bayes là thuâ ̣t toán phổ biến nhất để phân loại các text (văn
bản) trong NLP (Natural language processing – lâ ̣p trình ngôn ngữ tự nhiên).

(2) Artificial Neural Network (ANN): mạng nơron nhân tạo

Mô ̣t mạng noron là mô ̣t nhóm các nút nối với nhau, là mô hình toán học hay mô
hình tính toán được xây dựng dựa trên các mạng noron sinh học.

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.

Hình 4: Mạng noron nhân tạo

Mỗi câu sẽ được phân thành từng từ và mỗi từ chính là dữ liê ̣u đầu vào input đưa
vào ANN. Các từ sẽ được kết nối với nhau và khi huấn luyê ̣n dữ liê ̣u cho Chatbot, các
kết nối này sẽ được đo bằng trọng số hàng ngàn lần lă ̣p lại ở các thời điểm khác nhau.
Mỗi lần lă ̣p lại trọng số sẽ tăng, đô ̣ chính xác sẽ cao.

(3) Natural Language Understanding (NLU)

NLU là phương pháp giúp hê ̣ thống máy tính ví dụ như Chatbot hiểu được các câu
lê ̣nh người dùng mà không phải dựa trên bất kỳ ngôn ngữ, câu thoại, cấu trúc nào được
format sẵn trong hê ̣ thống, giúp Chatbot phản hồi nhanh chóng đến người dùng.

NLU là phương pháp để xác minh liê ̣u Chatbot có hiểu những gì ta đang nói?

Hình 5: Cơ cấu Chatbot sử dụng NLU

NLU giúp giải quyết mô ̣t trong những vấn đề: làm thế nào xử lý những dữ liê ̣u đầu
vào (input) mà không có cấu trúc cụ thể, định dạng rõ ràng, không có thuâ ̣t toán, quy tắc
quản lý chă ̣t chẽ; biến chúng thành các nhóm cấu trúc nhất định để hê ̣ thống có thể hiểu
được và tương tác lại với con người.

(4) Natural Language Processing (NLP)

Thuâ ̣t ngữ NLP là tâ ̣p hợp cha của NLU. Xử lý ngôn ngữ tự nhiên (NLP) đề câ ̣p đến
tất cả các hê ̣ thống phối hợp lại với nhau để xử lý mọi tương tác giữa hê ̣ thống và con
người bằng ngôn ngữ của con người. NLP cho phép mọi người và hê ̣ thống nói chuyê ̣n
với nhay mô ̣t cách tự nhiên.

NLP Chatbot xử lý ngôn ngữ tự nhiên bằng cách chuyển đổi lời nói hoă ̣c văn bản
của người dùng thành dữ liê ̣u có cấu trúc và đưa ra các câu trả lời tương ứng.

Hình 6: Cơ cấu cơ bản của Chatbot sử dụng NLP và công nghê ̣ Machine Learning

Khi người dùng gửi tin nhắn đến Chatbot trên nền tảng nhắn tin (Messaging
platform) thì thông tin sẽ được đưa đến hê ̣ thống NLP phân tích và hiểu được ý định
người dùng (Bot Logic). Sau khi nắm được ý định người dùng, Chatbot sẽ phân loại và
gửi đến cơ sở thông tin (Information Sources) để chọn ra câu trả lời tương ứng, chính
xác và ra lê ̣nh (Actions) để phản hồi lại người dùng.

3.4) RASA
(1) Tổng quan

Rasa là một công cụ Machine Learning mã nguồn mở dành cho các nhà phát triển và
nhóm sản phẩm để mở rộng các bot ngoài việc trả lời các câu hỏi đơn giản. Khi cài đă ̣t
Rasa Framwork có 3 thành phần chính cấu thành nên bao gồm:
◦ Rasa NLU: phân tích những thông tin có trong tin nhắn mà con người gửi đến cho
chatbot. Các thông tin bao gồm ý định của người dùng (intent) và các đối tượng, thực
thế được nhắc đến cần trích xuất (Entities).

◦ Rasa Core: Sau khi đã phân tích được các thông tin cần thiết có trong tin nhắn của
người dùng gửi tới chatbot, việc tiếp theo là dự đoán hành động tiếp theo mà chatbot
cần làm để phản hồi lại người dùng. Cái này bao có thể là phản hồi lại tin nhắn hoặc
truy vấn database hay bất cứ hành động nào ta có thể định nghĩa. Và Rasa Core được
sinh ra để làm nhiệm vụ dự đoán này.

◦ Rasa X: giao diện của toàn Rasa. Tạo dữ liệu traning, train model, test trên này với
một giao diện chatbot cực kỳ thân thiện, gửi URL cho người khác test, thu thập dữ
liệu test để training lại,...

(2) Đặt vấn đề

Các cửa hàng bán quần áo hiện nay thịnh hành bán online thì không thể thiếu
Chatbot (trả lời tự động) khi chủ hay nhân viên cửa hàng không trực tiếp trả lời câu hỏi
của khách hàng.

Vì vậy em sẽ tạo Chatbot với câu trả lời nhỏ về “Những loại quần áo có trong cửa
hàng?”

(3) Cài đă ̣t

• Cài đặt môi trường phát triển Python:

pip3 install -U pip

• Cài đặt mã nguồn mở Rasa:

pip3 install rasa


rasa init
Sau khi khởi tạo thành công project, trong thư mục gồm:

◦ actions.py: Nơi tất cả mọi hành động tùy chỉnh mà muốn bot làm.

◦ _ _init_ _.py: tệp trống giúp python tìm thấy hành động của bạn.

◦ config.yml: Nơi cấu hình các thông tin liên quan tới mô hình NLU và Core, cách
mà chúng hoạt động.

◦ credentials.yml: Thông tin chi tiết về cách kết nối chatbot với các dịch vụ như
Facebook, Slack, Telegram,...

◦ data/nlu.md: Dữ liệu huấn luyện cho NLU, bao gồm các câu được gán
nhãn intent và entities theo định dạng cho trước.

◦ data/stories.md: Dữ liệu huấn luyện cho Rasa core, là các kịch bản mà muốn bot
làm theo.

◦ domain.yml: Đây coi như phần khai báo tất cả mọi thứ mà chatbot sử dụng, bao
gồm các intent, entities, actions,...

◦ endpoints.yml: Các endpoints mà muốn chatbot trả ra.

◦ models/<timestamp>.tar.gaz: Nơi lưu trữ các model đã huấn luyện.

• Cài đặt thư viện:

pip install rasa_core sklearn_crfsuite spacy rasa_nlu

• Cài ngôn ngữ cho spacy:

python -m spacy download en

4) XÂY DỰNG KỊCH BẢN CHAT VÀ CẤU HÌNH CHATBOT

4.1) Cấu hình cho Rasa NLU


(1) Lựa chọn pipeline phù hợp trong file config.yml
pipeline: supervised_embeddings
Pipeline này hỗ trợ bất kỳ ngôn ngữ nào có thể được mã hóa khoảng trắng. Theo
mặc định, nó sử dụng khoảng trắng để mã hóa. Ngôn ngữ “vi” được mã hóa bằng
khoảng trắng, nên em sử dụng pipeline này.

Có 2 trường hợp sử dụng CountVectorsFeaturizer:

◦ Cái đầu tiên có văn bản dựa trên các từ.

◦ Cái thứ hai làm nổi bật văn bản dựa trên ký tự n-gram, bảo toàn ranh giới từ.

(2) Xây dựng dữ liệu đào tạo NLU

Trong file data/nlu.md, đây là nơi chuyển thông điệp của người dùng thành dữ liệu
có cấu trúc.

## intent:greet
- chào bạn
- hello bạn
- hi bạn
- shop cho mình hỏi
- shop ơi

## intent:goodbye
- bye
- goodbye
- tạm biệt
- hẹn gă
̣p lại

## intent:affirm
- đúng rồi.
- được.
- tất nhiên rồi.
- đó là mô
̣t ý tưởng hay
- chuẩn luôn

## intent:deny
- không
- không thích
- Tôi không nghĩ vậy
- không chắc chắn nữa

## intent:mood_great
- ôi! Thâ ̣t tuyê
̣t
- rất tốt
- tuyệt vời
- thật đẹp
- shop rất tuyệt
- quần áo đẹp quá!
- Cái này được.

## intent:mood_unhappy
- buồn
- không đẹp
- không vui chút nào
- xấu
- rất tồi tê
̣
- xấu thế
- thật khủng khiếp
- không vừa
- màu này không đẹp
- quá tê
̣
- chán thật
- thế mà cũng hết

## intent:bot_challenge
- bạn có phải shop abc không?
- shop có những mặt hàng nào?
- shop có quần nam không?
- shop còn size S không?
- cho mình xem thử bộ này?
- Không còn kiểu khác à?

## intent:thankyou
- cảm ơn nhé!
- thank you
- good job
- thank shop

Các dòng bắt đầu bằng ## xác định tên các intents (ý định) của người dùng, là các
nhóm thông báo có cùng ý nghĩa. Công việc của Rasa sẽ là dự đoán mục đích chính xác
khi người dùng gửi các tin nhắn mới, chưa thấy cho trợ lý của mình.

Cấu trúc:

## intent: <tên ý định>

4.2) Cấu hình cho Rasa Core


(1) Viết trong file config.yml

Em sử dụng policy như:

◦ MemoizationPolicy: quyết định message đầu ra dựa vào thông tin của những đoạn
hội thoại trước đó.

◦ KerasPolicy: sử dụng mạng LSTM để tính xác suất đưa ra lựa chọn cho message
tiếp theo.

◦ MappingPolicy: quyết định message dựa vào dữ liệu đã mapping, trong trường
hợp, việc tính xác suất đầu ra không thể vượt được ngưỡng mà FallbackPolicy đề ra,
message trả ra sẽ là một utter_fallback kiểu như: “ Shop xin lỗi, shop không hiểu ý
của quý khách. Quý khách có thể nói lại không? “

(2) Trong file domain.yml

session_config:
  session_expiration_time: 60
  carry_over_slots_to_new_session: true
intents:
# ý đồ khách hàng
  - greet
  - goodbye
  - affirm
  - deny
  - mood_great
  - mood_unhappy
  - bot_challenge
  - thankyou

responses:
  # trả lời của bot
  utter_greet:
  - text: "Shop abc xin kính chào quý khách. Quý khách để lại tên và số điện 
thoại để shop tư vấn ạ?"
  utter_answer:
  - text: "Quý khách muốn mua gì ạ?"
  - text: "Đúng rồi ạ."
  utter_cheer_up:
  - text: "Đây là món quà mình muốn tă
̣ng đến bạn: ting ting:"
    image: "https://i.pinimg.com/originals/3a/41/07/3a4107fdf3823baa7268a9e1a918b94b.j
pg"
  - text: "Quý khách còn muốn loại khác không ạ?"
  utter_did_that_help:
  - text: "Shop có thể giúp gì cho bạn không?"
    image: "https://thuthuatnhanh.com/wp-content/uploads/2020/03/hinh-ve-de-thuong-
cute.jpg"
  utter_happy:
  - text: "Cảm ơn  quý khách!"
    image: "https://i.pinimg.com/originals/69/41/e8/6941e887d904a8be2cc2e9097df53678.j
pg" 
  utter_goodbye:
  - text: "Shop cảm ơn và hẹn gặp lại quý khách!"
    image: "https://media.tenor.com/images/a1a33cc6ab3850913ab4d4577705f386/tenor.png"
  utter_fallback:
  - text: "Shop xin lỗi, shop không hiểu ý của quý khách. Quý khách có thể nói 
lại được không?"
actions:
- utter_greet
- utter_cheer_up
- utter_did_that_help
- utter_happy
- utter_goodbye
- utter_fallback
- utter_answer
- action_recommend

◦ intents là các thông tin đã nếu trong file nlu.md.

◦ action là phần liệt kê các hành động, message đầu ra mà chúng ta định nghĩa.

◦ responses là phần chúng ta định nghĩa các message dạng text, hoặc hình ảnh, ...
(các responses này thường có dạng utter_{})

◦ actions cần thao tác với database, chúng ta định nghĩa trong file actions.py.

◦ session_config là phần cấu hình cho một session như thời gian (VD: 60s) để restart
lại một session, có mang slot từ session cũ sang session mới hay không,...

(3) Xây dựng câu chuyện của bot trong file data/stories.md

## happy path
* greet     
<!-- tin nhắn do người dùng gửi đến bắt đâu bằng dấu * -->
  - utter_greet
  <!-- Các hành động được thực hiện bởi bot được hiển thị dưới dạng các dòng bắt đầu b
ằng dấu - và chứa tên của hành động. -->
* mood_great
  - utter_happy
* bot_challenge
  - action_recommend
* deny
  - utter_goodbye
* affirm
  - utter_happy
## sad path 1
* greet
  - utter_greet
* mood_unhappy
  - utter_cheer_up
  - utter_did_that_help
* affirm
  - utter_happy

## sad path 2
* greet
  - utter_greet
* mood_unhappy
  - utter_cheer_up
  - utter_did_that_help
* deny
  - utter_goodbye

## say goodbye
* goodbye
  - utter_goodbye

## bot challenge
* bot_challenge
  - utter_answer
  - action_recommend

Cấu trúc:

## <tên câu chuyện>

* <tên ý định>

- <bot trả lời>

Khi có ý định của người dùng đến thuộc #intent: greet thì bot sẽ trả lời theo
utter_greet. Tương tự như vậy cho đến hết câu chuyện.

(4) Trong actions.py

Về cơ bản, một chatbot sẽ luôn cần có một database để lưu trữ thông tin. Rasa hỗ trợ
điều đó trong file actions.py:

from typing import Any, Text, Dict, List
import random
from rasa_sdk import Action, Tracker
from rasa_sdk.executor import CollectingDispatcher
DATABASE = [
    "quần jean size S, M, L,XL",
    "quần đùi",
    "váy xòe",
    "váy thân dài"
]
class ActionHelloWorld(Action):

    def name(self) -> Text:
        return "action_recommend"

    def run(self, dispatcher: CollectingDispatcher,
            tracker: Tracker,
            domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
        clothes = []
        for i in range(2):
            clothes_number = random.randrange(len(DATABASE))
            clothes.append(DATABASE[clothes_number])
        dispatcher.utter_message(text="Bạn thích loại '{}' không? Hay loại '{}'!".form
at(clothes[0], clothes[1]))
        return []

Mỗi action xây dựng riêng một class. Class này có đặc điểm sau: chỉ bao gồm 2
method là name() và run():

◦ name() sẽ trả về tên của action, cái khai báo trong file domain và file stories.

◦ run() là nơi code những việc làm mình muốn.

(5) Trong file endpoints.yml

Vì Rasa chạy trên cổng 5005, mà action chạy trên cổng 5055. Action sẽ chạy riêng
biệt với Rasa nên chúng ta cần code trong file endpoints.yml:

action_endpoint:
  url: "http://localhost:5055/webhook"
4.3) Thực thi lệnh
(1) Train model

Ta thực hiện lệnh:

rasa train

Kết quả:

Hình 7: Kết quả train

Sau khi train xong sẽ thông báo thành công và được lưu trong thư mục:

(2) Dự đoán mô hình

Khi đã có kết quả train model, dự đoán mô hình bot học bằng lệnh:

rasa shell nlu


Hình 8: Dự đoán mô hình

Ta nhận thấy khi input với ý định người dùng hỏi: “shop có mặt hàng nào”

thì dự đoán vào ý định khách hàng thuộc # intent: bot_challenge với confidence:
0.98

 Điều này chứng tỏ bot phát hiện ý định người dùng với câu hỏi trên là khá cao và
chính xác.

(3) Hình dung câu chuyện

Thực hiện lệnh:


rasa visualize

Kết quả thực hiện:

Hình 9: Hình dung câu chuyện

(4) Khởi động máy chủ hành động bằng SDK Rasa

Thực hiện lệnh:

rasa run actions

Đây là kết quả sau khi chạy lệnh:


Hình 10: Kết quả khởi động máy chủ

(5) Tải mô hình được đào tạo và cho phép nói chuyện với trợ lý của mình trên
dòng lệnh

Thực hiện lệnh:

rasa shell

Em thử nhập input với các ý định người dùng và kết quả trả lời từ bot:

Hình 11: Kết quả đào tạo

(6) Bắt đầu một phiên học tập tương tác để tạo dữ liệu đào tạo mới bằng cách trò
chuyện

Thực hiện lệnh:

rasa interactive

Kết quả cuộc trò chuyện:


Hình 12: Kết quả trò chuyện

◦ Cột bên phải là câu hỏi hoặc ý định người dùng nhập vào

◦ Cột bên trái là bot trả lời

Khi em nhập “bye” thì bot sẽ xác định đây thuộc #intent: goodbye với sự trùng và
tương thích lên đến 99%. Sau đó bot sẽ dựa vào câu chuyện được tạo sẵn và trả lời trong
utter_goodbye.
KẾT LUẬN

Sự kết hợp giữa ChatBot với trí tuệ nhân tạo (AI) và các công nghệ tiên tiến khác sẽ
là một xu hướng phát triển mạnh mẽ cho ChatBot trong tương lai như có thể phát triển
chúng thành một nền tảng riêng như hệ điều hành.

Trong thời đại của Facebook Messenger, Whatsapp, Slack và trợ lý AI (Cortana,
Siri, Ok Google) cuối cùng chúng ta đã có thể giao tiếp với nhau dễ dàng, nhanh chóng
và chính xác thông qua ChatBot. Người dùng không cần phải đi qua các trang web và
ứng dụng khác để có thông tin bổ sung liên quan. Chatbot sẽ có thể cung cấp tất cả
thông tin cần thiết trong ứng dụng nhắn tin, tìm kiếm sản phẩm, địa điểm, thực phẩm và
thậm chí giải quyết các vấn đề về dịch vụ khách hàng làm cho nó trở thành một trải
nghiệm thú vị cho người dùng Chatbot giúp cho cuộc sống của chúng trở nên tiện lợi, dễ
dàng hơn, sẽ là là phương tiện mới, hoạt động hiệu quả và nhanh chóng phổ biến, thay
thế các ứng dụng trong tương lai.

TÀI LIỆU THAM KHẢO

[1] "statista," [Online]. Available: statista.com.

[2] "rasa," [Online]. Available: https://rasa.com/docs/rasa/api/rasa-sdk/.

[3] [Online]. Available: https://medium.com/@itsromiljain/build-a-


conversational-chatbot-with-rasa-stack-and-python-rasa-nlu-b79dfbe59491.

You might also like