Tải bản đầy đủ (.pdf) (22 trang)

BÁO CÁO MÔN: TRÍ TUỆ NHÂN TẠO Đề tài: Mô hình phân loại cảm xúc nội dung trên chatbot

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.2 MB, 22 trang )

ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ

BÁO CÁO
MƠN: TRÍ Ṭ NHÂN TẠO
Đề tài: Mơ hình phân loại cảm xúc nội dung trên chatbot

H
ọc viên:
T
rần Đình Nam Sơn

HÀ NỘI - 2022

1


MỤC LỤC
I.

Tổng quan dự án

3

1. Đặt vấn đề

3

2. Báo cáo vấn đề

3



II. Xử lý dữ liệu

4

1. Mô tả dữ liệu

4

2. Xử lý dữ liệu

7

3. Mơ hình hóa

15

4. Áp dụng mơ hình

19

5. Triển khai và đánh giá mơ hình

20

6. Demo

21

Kết ḷn


22

2


I.
Tổng quan dự án
1. Đặt vấn đề
Xử lý ngôn ngữ tự nhiên (natural language processing - NLP) là một nhánh của
trí tuệ nhân tạo tập trung vào các ứng dụng trên ngơn ngữ của con người. Trong trí tuệ
nhân tạo thì xử lý ngôn ngữ tự nhiên là một trong những phần khó nhất vì nó liên quan
đến việc phải hiểu ý nghĩa ngơn ngữ-cơng cụ hồn hảo nhất của tư duy và giao tiếp.
Trong NLP có 2 quan điểm cơ bản:
1. Xử lý các từ ngữ bằng máy tính.
2. Làm cho máy tính hiểu được các từ ngữ.
Hiện tại, cả 2 hướng này đều đang được tích cực nghiên cứu và phát triển, nhờ
đó rất nhiều các hệ thống hiệu quả đã và đang được tạo ra.
Với một hệ thống có sự giao tiếp trực tiếp với khách hàng qua công nghệ AI –
chatbot thì yếu tố xử lý ngôn ngữ tự nhiên được đánh giá là rất quan trọng, đặc biệt là
phân loại cảm xúc tích cực của khách hàng.
Chatbot được ứng dụng trong app và website công ty, thực hiện việc trao đổi
thông tin với khách hàng trực tiếp mà không cần telesale hay tư vấn viên.
Vấn đề đặt ra là khi muốn tối ưu chatbot thì sẽ làm gì? Ngoài các vấn đề về kỹ
thuật để nâng cao trải nghiệm tương tác thì tính chính xác cũng như mức đợ hài lịng
của khách hàng với chatbot sẽ là đánh giá khách quan và chính xác nhất.
Mục tiêu đặt ra là xây dựng hệ thống nhận diện cảm xúc khách hàng gửi vào
chatbot
Bài toán phân loại văn bản là mợt bài tốn học giám sát (supervised learning)
trong học máy (machine learning), bởi vì nội dung của văn bản đã được gán nhãn, và

được sử dụng để thực hiện phân loại.
Để giải qút mợt bài tốn phân loại văn bản, ta thực hiện 4 bước:

Chuẩn bị dữ liệu (Dataset Preparation)

Xử lý tḥc tính của dữ liệu (Feature Engineering)

Xây dựng mô hình (Build Model)

Tinh chỉnh mô hình và cải thiện hiệu năng (Improve Performance)
2. Báo cáo vấn đề
Bài toán xác định cảm xúc của đoạn chat là tiêu cực, tích cực hay trung tính. Mợt
đoạn chat được phân tích và dự đốn mang mợt nhãn nhất định nên bài tốn đưa về mơ
hình phân loại (classification)
Đầu vào: đoạn chat khách hàng gửi đến
Đầu ra: nhãn cảm xúc của đoạn chat

3


Với việc nhận diên được cảm xúc của đoạn chat khách hàng trao đổi, có thể cung
cấp cho nhà mạng thông tin về nhu cầu thực tế của khách hàng, nhận diên cảm xúc của
chính đoạn thơng tin đó và đánh giá mức độ phục vụ của chatbot để điịnh hướng cải
tiến.

II.
Xử lý dữ liệu
1. Mô tả dữ liệu
Dữ liệu được lưu trên hệ thống quản lý chatbot lưu trữ lịch sử giao dịch vào thao
tác trên app của khach hàng thông qua chatbot

Cấu trúc dữ liệu gồm 2 thông tin: mã giao dịch và nội dung trao đổi
id sentences
1
bạn ơi sao mình chuyển mạng giữ lại số khôg được vậy???
2
tết
3
chị ơi
4
tài khoản của em đã đăng kí mạng chưa ạ
5
chị có biết gói nào đăng kí gói gb lớn không ạ
minh mua the cao nhung quen menh gia,con so seri va so ma nap,giup minh de
6
biet menh gia bao nhieu.
7
mình qn mật khẩu đăng nhập
8
mình bị khóa mợt chiều
9
data
10 Happy New Year
11 Chúc Mừng Năm mới =))

4


Dữ liệu được viết bằng tiếng Việt, chưa được chuẩn hóa và chưa được phân loại
thành các nhóm
❖ Exploration Data Analytic

Thực hiện phân tích, đánh giá khai phá dữ liệu base
Đầu tiên là xây dựng wordcloud

5


6


2. Xử lý dữ liệu
a. Tạo nhãn
Dữ liệu khởi tạo chưa được đánh nhãn, chưa xác định được ý nghĩa câu. Các
nội dung này cần được xử lý nhãn. Việc đánh nhãn được đánh nhãn trực tiếp thông
qua các bước đọc, nhận xét và đưa ra nhãn phù hợp
Dữ liệu ban đầu
id
sentences
1
bạn ơi sao mình chuyển mạng giữ lại số khơg được vậy???
2
tết
3
chị ơi
4
tài khoản của em đã đăng kí mạng chưa ạ
5
chị có biết gói nào đăng kí gói gb lớn không ạ
minh mua the cao nhung quen menh gia,con so seri va so ma nap,giup minh
6
de biet menh gia bao nhieu.

7
mình quên mật khẩu đăng nhập
8
mình bị khóa một chiều
9
data
10
Happy New Year
11
Chúc Mừng Năm mới =))
Dữ liệu sau khi được đánh nhãn
7


id
1
2
3
4
5
6
7
8
9
10
11

sentences
bạn ơi sao mình chuyển mạng giữ lại số khôg được vậy???
tết

chị ơi
tài khoản của em đã đăng kí mạng chưa ạ
chị có biết gói nào đăng kí gói gb lớn không ạ
minh mua the cao nhung quen menh gia,con so seri va so ma nap,giup
minh de biet menh gia bao nhieu.
mình qn mật khẩu đăng nhập
mình bị khóa mợt chiều
data
Happy New Year
Chúc Mừng Năm mới =))

label
-1
1
1
0
0
1
0
-1
0
1
1

Có 3 loại nhãn: -1 : tiêu cực , 0 : trung tính , 1 : tích cực
b. Tách từ (tokenize)
Tiếng Việt khơng sử dụng các hình thái (morpheme) để tạo ra các ý nghĩa của từ
(trong tiếng Anh, cup->cups thì 's' là hình thái số nhiều).
Vì thế trong tiếng Việt, các từ không bị thay đổi. Để tạo ra các sắc thái ý nghĩa
khác nhau, tiếng Việt phụ thuộc vào trật tự của từ.

Ví dụ: với năm âm tiết (năm từ đơn): "sao, nó, bảo, khơng, đến" khi sắp xếp theo
các trật tự khác nhau sẽ cho ra các nghĩa khác nhau.
Sao Nó Bảo Đến Khơng Sao nó khơng đến bảo ? Sao? Nó bảo đến khơng? Sao
nó đến khơng bảo? Sao bảo nó khơng đến? Sao? bảo nó đến khơng? Sao? Bảo nó đến
khơng? Sao bảo khơng đến nó? Sao? Đến bảo nó khơng? Sao đến khơng bảo nó? Sao
đến nó bảo khơng? Sao khơng đến bảo nó? Sao khơng bảo nó đến?
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 tốn rất khó giải qút.
Chính vì lý do đó tách từ được xem là bước xử lý quan trọng đối với các hệ thống
Xử Lý Ngôn Ngữ Tự Nhiên, đặc biệt là đối với các ngôn ngữ thuộc vùng Đông Á theo
loại hình ngơn ngữ đơn lập, ví dụ: tiếng Trung Quốc, tiếng Nhật, tiếng Thái, và tiếng
Việt. Với các ngôn ngữ thuộc loại hình này, ranh giới từ không chỉ đơn giản là những
khoảng trắng như trong các ngôn ngữ thuộc loại hình hịa kết như tiếng Anh…, mà có
sự liên hệ chặt chẽ giữa các tiếng với nhau, một từ có thể cấu tạo bởi mợt hoặc nhiều
8


tiếng. Vì vậy đối với các ngôn ngữ thuộc vùng Đơng Á, vấn đề của bài tốn tách từ là
khử được sự nhập nhằng trong ranh giới từ.
Các hướng tiếp cận
Mợt cách tổng qt có thể thấy rằng bài tốn tách từ có 3 phương pháp tiếp cận
chính:
+ Tiếp cận dựa vào từ điển cố định.
+ Tiếp cận dựa vào thống kê thuần túy.
+ Tiếp cận dựa trên cả hai phương pháp trên.
Đặc biệt việc tách từ trong tiếng việt sẽ phức tạp do một từ, một cụm từ sẽ mang

nhiều ý nghĩa với hồn cành khác nhau, tùy tḥc vào ngữ cảnh dựa vào các từ liền
trước và liền sau.
Trong khn khổ bài tốn, tơi sử dụng thư việc tokenization được xây dựng sẵn
là VnCoreNLP
c. Xử lý từ viết tắt
Từ viết tắt sẽ được thay thế theo bộ từ điển từ viết tắt được xây dựng từ dữ liệu
đầu vào và kết hợp với hiểu biết cũng như tham khảo các bộ từ điển viết tắt để ngày
càng cải thiện hiệu quả trong việc nhận diện và thay thế các từ viết tắt.
Ví dụ về từ điển viết tắt:
tu_viet_tat
pị

te
re
bi
co
se
re
pị
re
wa
lm

vs

ms
sơj
cj

tu_da_sua_viet_tat

bị
tệ
tệ
rẻ
bị

sẽ
rẻ
bị
rẻ
q
lắm
q
với
q
mới
sợ
chị
9




wa
vs
nx
0k

ht
đc

bt
dep

quá
quá
quá
với
nữa
tốt
quá
hết
được
biết
đẹp

Code xử lý trong bài toán:
def thay_the_tu_viet_tat(cls, text_input):
s = text_input.split()
max_length = -1
for word in constant.tu_viet_tat['tu_da_sua_viet_tat'].values:
max_length = max(max_length, len(word))
if len(s) != 0:
for i, w in enumerate(constant.tu_viet_tat['tu_viet_tat'].values):
w = " ".join(w.split())
for k in range(0, len(s) - len(w.split())):
s_compare = s[k]
if len(w.split()) == 1:
if s_compare == w:
text_input = text_input.replace(w,
constant.tu_viet_tat['tu_da_sua_viet_tat'].values[i])

else:
for j in range(k + 1, k + len(w.split())):
s_compare = s_compare + " " + s[j]
if s_compare == w:
text_input = text_input.replace(w,
constant.tu_viet_tat['tu_da_sua_viet_tat'].values[i])
return text_input
d. Xử lý từ lặp lại

10


Khi xử lý dữ liệu trước khi đưa vào model, các câu văn cần được xử lý chính xác
đưa về dạng chuẩn là khơng có từ bị lặp, đảm bảo từ có nghĩa, khơng sai cấu trúc ngữ
pháp
def xoa_cac_ky_tu_lap_cuoi_tu(cls, word):
if word in constant.SPECIAL_NAME:
word = word.lower()
else:
word = re.sub(r'([A-Z])\1+', lambda m: m.group(1).upper(), word,
flags=re.IGNORECASE)
return word
e. Xử lý các ký tự dừng, các ký tự đặc biệt
Các bước xử lý khác với đoạn văn bản là xử lý từ dung và các ký tự đặc biệt
Với từ dừng:
@classmethod
def xoa_cac_ky_tu_lap_cuoi_tu(cls, word):
if word in constant.SPECIAL_NAME:
word = word.lower()
else:

word = re.sub(r'([A-Z])\1+', lambda m: m.group(1).upper(), word,
flags=re.IGNORECASE)
return word
@classmethod
def remove_stop_word(cls, text_input):
text_input = " ".join([y for y in text_input.split() if y not in constant.stop_words])
return text_input
Với các ký tự đặc biệt:
Đầu tiên là xác định đâu là các từ, ký tự đặc biệt
"👹": "tiêu cực", "👹": "tích cực", "👹": "tích cực",'👹': 'tích cực ', '👹': 'tích cực ',
"👹": "tích cực", "👹": "tích cực", "👹": "tích cực","👹": "tiêu cực", "👹": "tiêu cực", "👹": "tích
cực",
"👹": "tiêu cực", "👹": "tiêu cực", "👹": "tiêu cực","👹": "tích cực", "👹": "tích cực",'👹':'tích cực
',
'👹': ' tiêu cực ', '👹': ' tiêu cực ','✨': 'tích cực ', '❣ ': 'tích cực ','☀': 'tích cực ',
'♥': 'tích cực ', '👹': 'tích cực ', 'like': 'tích cực ', '👹': 'tích cực ',
'👹': 'tích cực ', '👹': 'tích cực ', '👹': 'tích cực ', ':(': ' tiêu cực ', '👹': ' tiêu cực ',
11


'❤': 'tích cực ', '👹': 'tích cực ', '👹': 'tích cực ', '👹': ' tiêu cực ', '👹': 'tích cực ',
'?': ' ? ', '👹': 'tích cực ', '👹': 'tích cực ', '👹': ' tiêu cực ', '👹': ' tiêu cực ',
'👹': 'tích cực ', '👹': 'tích cực ', '♡': 'tích cực ', '👹': 'tích cực ', '👹': 'tích cực ',
'^^': 'tích cực ', '👹': ' tiêu cực ', '☺': 'tích cực ', '👹': 'tích cực ', '👹': 'tích cực ',
'👹': ' tiêu cực ', '👹': 'tích cực ', ':((': ' tiêu cực ', '👹': ' tiêu cực ', '👹': ' tiêu cực ',
'👹': ' tiêu cực ', '👹': 'tích cực ', '👹': ' tiêu cực ', '👹': 'tích cực ', '👹': 'tích cực ',
'👹': 'tích cực ', '👹': ' tiêu cực ', '👹': 'tích cực ', '👹': 'tích cực ', '👹': 'tích cực ',
'✌ ': 'tích cực ', '👹': 'tích cực ', '👹': ' tiêu cực ', '👹': ' tiêu cực ', '️👹': 'tích cực ',
'👹': 'tích cực ', '👹': 'tích cực ', ':v': ' tích cực ', '=))': ' tích cực ', '👹': 'tích cực ',
'👹': 'tích cực ', '👹': ' tiêu cực ', ':3': 'tích cực ', '👹': ' tiêu cực ', '👹': ' tiêu cực ',

'👹': 'tích cực ', '👹': ' 👹 ', '👹': ' 👹 ', '👹': 'tích cực ', '👹': 'tích cực ', '👹': 'tích cực ',
'👹': 'tích cực ', '👹': ' tiêu cực ', '👹': ' tiêu cực ', '👹': ' tiêu cực ', '👹': ' tiêu cực ',
'👹': 'tích cực ', '👹': 'tích cực ', '👹': 'tích cực ', '👹': 'tích cực ',
'👹': 'tích cực ', '❌': ' tiêu cực ', '👹': 'tích cực ', ';)': 'tích cực ', '<3': 'tích cực ',
'👹': 'tích cực ', '👹': 'tích cực ', '👹': 'tích cực ', '👹': 'tích cực ',
'👹': 'tích cực ', '👹': 'tích cực ', '👹': 'tích cực ', '👹': 'tích cực ', '👹': 'tích cực ',
'👹': 'tích cực ', '👹': 'tích cực ', '👹': 'tích cực ', '👹': 'tích cực ',
'👹': 'tích cực ', '👹': 'tích cực ', '👹': 'tích cực ', '👹': 'tích cực ',
'👹': 'tích cực ', '👹': 'tích cực ', '👹': 'tích cực ','☹': ' tiêu cực ', '👹': ' tiêu cực ',
'👹': ' tiêu cực ', '👹': ' tiêu cực ', '👹': ' tiêu cực ', '👹': ' tiêu cực ', '👹': ' tiêu cực ',
'👹': ' tiêu cực ', '👹': ' tiêu cực ', '👹': ' tiêu cực ',
Sau đó khi gặp các ký tự đặc biệt này, sẽ thay thế để hoàn tiện câu văn cho phù
hợp và có thế nhận diện
@classmethod
def chuan_hoa_cac_ky_tu_dac_biet(cls, text_input): # tu dien replace list
for k, v in constant.replace_list.items():
k = k.split()
split_str_input = text_input.split()
for i in range(len(split_str_input)):
if k[0] == split_str_input[i].split()[0]:
split_str_input[i] = v
text_input = ' '.join(split_str_input)
return text_input
f. Embedding

12


Word Embedding là tên gọi chung của các mô hình ngôn ngữ và các phương
pháp học theo đặc trưng trong Xử lý ngơn ngữ tự nhiên (NLP), ở đó các từ hoặc cụm từ

được ánh xạ sang các vector số (thường là số thực). Đây là mợt cơng cụ đóng vai trị
quan trọng đối với hầu hết các tḥt tốn, kiến trúc Machine Learning, Deep Learning
trong việc xử lý Input ở dạng text, do chúng chỉ có thể hiểu được Input ở dạng là số, từ
đó mới thực hiện các công việc phân loại, hồi quy,vv…
Word Embedding được phân chủ yếu thành 2 loại:
❖ Frequency-based embedding.
Đúng như tên gọi của nó, Frequency-based Embedding dựa vào tần số xuất hiện
của các từ để tạo ra các vector từ, trong đó có 3 loại phổ biến nhất:
+ Count Vector.
+ tf-idf Vector.
+ Co-occurrence Matrix.
Count Vector là dạng đơn giản nhất của Frequencey-based Embedding, giả sử ta
có D documents d1,d2,…dD và N là đợ dài của từ điển, vector biểu diễn của một từ là
mợt vector số ngun và có đợ dài là D, ở đó phần tử tại vị trí i chính là tần số của từ
đó xuất hiện trong document di. Trong mợt số trường hợp, ta có thể lượt bớt các từ có
tần số xuất hiện thấp hoặc thay đổi mục nhập của vector (thay vì tần số có thể thay bằng
một giá trị nhị phân biểu thị sự xuất hiện của từ) tùy vào mục đích cụ thể.
Khác với Count Vector chỉ xét đến tần số xuất hiện của từ trong một document,
tf-idf Vector quan tâm cả tần số xuất hiện của từ trong tồn bợ tập dữ liệu, chính do đặc
điểm này mà tf-idf Vector có tính phân loại cao hơn so với Count Vector. tf-idf (Term
Frequency-Inverse Document Frequency) Vector là mợt vector số thực cũng có đợ dài
D với D là số văn bản, nó được tính bằng tích của 2 phần bao gồm tf và idf, cơng thức
của mỗi phần tử của vector được tính như sau:

13


Như đã đề cập ở trên, tf-idf Vector có tính phân loại cao hơn so với Count
Vector chính là bởi nó được điều chỉnh bởi trọng số idf, dựa trên cơng thức của nó
ta có thể hiểu rằng nếu từ xuất hiện ở càng nhiều văn bản (tính phân loại thấp) thì

giá trị của nó càng nhỏ, từ đó kết quả cuối cùng sẽ bị nhỏ theo.
❖ Prediction-based embedding.
Prediction-based Embedding xây dựng các vector từ dựa vào các mô hình dự
đốn. Tiêu biểu nhất chính là Word2vec, nó là sự kết hợp của 2 mô hình: CBOW
(Continous Bag Of Words) và Skip-gram. Cả hai mô hình này đều được xây dựng
dựa trên một mạng neuron gồm 3 lớp:1 Input Layer,1 Hidden Layer và 1 Output
Layer. Mục đích chính của các mạng neuron này là học các trọng số biểu diễn vector
từ.
CBOW hoạt đợng dựa trên cách thức là nó sẽ dự đốn xác suất của mợt từ
được đưa ra theo ngữ cảnh (mợt ngữ cảnh có thể gồm mợt hoặc nhiều từ), với input
là một hoặc nhiều One-hot vector của các từ ngữ cảnh có chiều dài V (với V là độ
lớn của từ điển), output sẽ là một vector xác suất cũng với chiều dài V của từ liên
quan hoặc cịn thiếu, Hidden Layer có chiều dài N, N cũng chính là đợ lớn của vector
từ biểu thị. Dưới đây là mô hình CBOW với ngữ cảnh là 1 từ đơn:

14


Về bộ dữ liệu dùng để train, Input sẽ bao gồm các bộ One-hot vectors ngữ cảnh
và các One-hot vectors của từ mong muốn.
Về cách thức hoạt động, ban đầu hai ma trận trọng số Input-Hidden Weights
Matrix và Hidden-Output Weights Matrix được khởi tạo ngẫu nhiên, Input sẽ được nhân
với Input-Hidden Weights Matrix ra được một kết quả gọi là Hidden Activation, kết
quả này sẽ được nhân tiếp với Hidden-Output Weights Matrix và cuối cùng được đưa
vào một hàm softmax để ra được Output là 1 vector xác suất, Output này sẽ được so
sánh với Output mong muốn và tính tốn đợ lỗi, dựa vào đợ lỗi này mà mạng neuron sẽ
lan truyền ngược trở lại để cập nhật các giá trị của các ma trận trọng số. Đối với mô
hình CBOW nhiều Input, các thức hoạt động là tương tự, chỉ khác ở chỗ các kết quả thu
được khi nhân các Input với Input-Hidden Weights Matrix sẽ được lấy trung bình để ra
được Hidden Activation cuối cùng. Các trọng số của Hidden-Output Weights Matrix

sau khi học xong sẽ được lấy làm biểu diễn của các vector từ.
Trong khuôn khổ bài tìm hiểu và quy mơ dữ liệu, nhóm sử dụng phương pháp
TF-IDF để embedding.
from sklearn.feature_extraction.text import TfidfVectorizer
3. Mơ hình hóa
Trong q trình phân tích, triển khai bài tốn đã thực hiện thử nghiệm 3 mơ hình
học máy chính:
15




Random forest
Ramdon Forest là một phương pháp học tập tổng hợp để phân loại, hồi quy và các
nhiệm vụ khác hoạt động bằng cách xây dựng vô số cây quyết định tại thời điểm đào
tạo. Đối với các nhiệm vụ phân loại, đầu ra của Ramdon Forestlà loại được chọn bởi
hầu hết các cây. Đối với các nhiệm vụ hồi quy, giá trị trung bình hoặc dự đoán trung
bình của các cây riêng lẻ được trả về. Rừng quyết định ngẫu nhiên phù hợp với thói
quen thích nghi q mức của cây quyết định đối với tập huấn luyện của chúng. Ramdon
Forest thường hoạt động tốt hơn cây quyết định, nhưng đợ chính xác của chúng thấp
hơn cây được tăng cường đợ dốc. Tuy nhiên, đặc điểm dữ liệu có thể ảnh hưởng đến
hiệu suất của chúng.

Để xây dựng mỗi cây quyết định mình sẽ làm như sau:
1. Lấy ngẫu nhiên n dữ liệu từ bộ dữ liệu với kĩ thuật Bootstrapping, hay còn gọi
là random sampling with replacement. Tức khi mình sample được 1 dữ liệu
thì mình không bỏ dữ liệu đấy ra mà vẫn giữ lại trong tập dữ liệu ban đầu, rồi
tiếp tục sample cho tới khi sample đủ n dữ liệu. Khi dùng kĩ thuật này thì tập n
dữ liệu mới của mình có thể có những dữ liệu bị trùng nhau.
2. Sau khi sample được n dữ liệu từ bước 1 thì mình chọn ngẫu nhiên ở k tḥc tính

(k < n). Giờ mình được bộ dữ liệu mới gồm n dữ liệu và mỗi dữ liệu có k tḥc
tính.
3. Dùng tḥt tốn Decision Tree để xây dựng cây quyết định với bộ dữ liệu ở bước
2.

16


Do quá trính xây dựng mỗi cây quyết định đều có yếu tố ngẫu nhiên (random)
nên kết quả là các cây qút định trong tḥt tốn Random Forest có thể khác nhau.
Thuật toán Random Forest sẽ bao gồm nhiều cây quyết định, mỗi cây được xây
dựng dùng thuật toán Decision Tree trên tập dữ liệu khác nhau và dùng tập tḥc tính
khác nhau. Sau đó kết quả dự đốn của thuật toán Random Forest sẽ được tổng hợp từ
các cây quyết định.
Khi dùng thuật toán Random Forest, mình hay để ý các tḥc tính như: số lượng
cây qút định sẽ xây dựng, số lượng tḥc tính dùng để xây dựng cây. Ngồi ra, vẫn
có các tḥc tính của tḥt tốn Decision Tree để xây dựng cây như độ sâu tối đa, số
phần tử tối thiểu trong 1 node để có thể tách
❖ SVM
SVM - viết tắt tên tiếng Anh support vector machine) là một khái niệm
trong thống kê và khoa học máy tính cho mợt tập hợp các phương pháp học có giám
sát liên quan đến nhau để phân loại và phân tích hồi quy. SVM dạng chuẩn nhận dữ liệu
vào và phân loại chúng vào hai lớp khác nhau. Do đó SVM là mợt tḥt tốn phân
loại nhị phân. Với mợt bợ các ví dụ luyện tập tḥc hai thể loại cho trước, thuật toán
luyện tập SVM xây dựng mợt mơ hình SVM để phân loại các ví dụ khác vào hai thể
loại đó. Mợt mơ hình SVM là một cách biểu diễn các điểm trong không gian và lựa
chọn ranh giới giữa hai thể loại sao cho khoảng cách từ các ví dụ luyện tập tới ranh giới
là xa nhất có thể. Các ví dụ mới cũng được biểu diễn trong cùng mợt khơng gian và
được tḥt tốn dự đốn tḥc mợt trong hai thể loại tùy vào ví dụ đó nằm ở phía nào
của ranh giới


Là mợt kĩ thuật phân lớp khá phổ biến, SVM thể hiện được nhiều ưu điểm trong
số đó có việc tính tốn hiệu quả trên các tập dữ liệu lớn. Có thể kể thêm một số Ưu
điểm của phương pháp này như:

Xử lý trên không gian số chiều cao: SVM là một cơng cụ tính tốn hiệu quả trong
khơng gian chiều cao, trong đó đặc biệt áp dụng cho các bài tốn phân loại văn bản và
phân tích quan điểm nơi chiều có thể cực kỳ lớn.
17



Tiết kiệm bợ nhớ: Do chỉ có mợt tập hợp con của các điểm được sử dụng trong
quá trình huấn luyện và ra quyết định thực tế cho các điểm dữ liệu mới nên chỉ có những
điểm cần thiết mới được lưu trữ trong bợ nhớ khi ra qút định.

Tính linh hoạt - phân lớp thường là phi tuyến tính. Khả năng áp dụng Kernel mới
cho phép linh động giữa các phương pháp tuyến tính và phi tuyến tính từ đó khiến cho
hiệu suất phân loại lớn hơn.
Nhược điểm:

Bài tốn số chiều cao: Trong trường hợp số lượng tḥc tính (p) của tập dữ liệu
lớn hơn rất nhiều so với số lượng dữ liệu (n) thì SVM cho kết quả khá tồi.

Chưa thể hiện rõ tính xác suất: Việc phân lớp của SVM chỉ là việc cố gắng tách
các đối tượng vào hai lớp được phân tách bởi siêu phẳng SVM. Điều này chưa giải thích
được xác suất xuất hiện của mợt thành viên trong mợt nhóm là như thế nào. Tuy nhiên
hiệu quả của việc phân lớp có thể được xác định dựa vào khái niệm margin từ điểm dữ
liệu mới đến siêu phẳng phân lớp mà chúng ta đã bàn luận ở trên.
SVM là một phương pháp hiệu quả cho bài tốn phân lớp dữ liệu. Nó là mợt

cơng cụ đắc lực cho các bài tốn về xử lý ảnh, phân loại văn bản, phân tích quan điểm.
Mợt yếu tố làm nên hiệu quả của SVM đó là việc sử dụng Kernel function khiến cho
các phương pháp chuyển không gian trở nên linh hoạt hơn.
❖ Naive Bayes
Bộ phân lớp Naive bayes hay bộ phân lớp Bayes (simple byes classifier) hoạt
động như sau:
1. Gọi D là tập dữ liệu huấn luyện, trong đó mỗi phần tử dữ liệu X được biểu diễn
bằng một vector chứa n giá trị thuộc tính A1, A2,...,An = {x1,x2,...,xn}
2. Giả sử có m lớp C1, C2,..,Cm. Cho một phần tử dữ liệu X, bộ phân lớp sẽ gán
nhãn cho X là lớp có xác suất hậu nghiệm lớn nhất. Cụ thể, bộ phân lớp Bayes
sẽ dự đốn X tḥc vào lớp Ci nếu và chỉ nếu:
P(Ci|X) > P(Cj|X) (1<= i, j <=m, i != j)
Giá trị này sẽ tính dựa trên định lý Bayes.
3. Để tìm xác suất lớn nhất, ta nhận thấy các giá trị P(X) là giống nhau với mọi lớp
nên không cần tính. Do đó ta chỉ cần tìm giá trị lớn nhất của P(X|Ci) * P(Ci). Chú
ý rằng P(Ci) được ước lượng bằng |Di|/|D|, trong đó Di là tập các phần tử dữ liệu
thuộc lớp Ci. Nếu xác suất tiền nghiệm P(Ci) cũng không xác định được thì ta
coi chúng bằng nhau P(C1) = P(C2) = ... = P(Cm), khi đó ta chỉ cần tìm giá trị
P(X|Ci) lớn nhất.
4. Khi số lượng các tḥc tính mơ tả dữ liệu là lớn thì chi phí tính tồn P(X|Ci) là
rất lớn, dó đó có thể giảm đợ phức tạp của tḥt tốn Naive Bayes giả thiết các
tḥc tính đợc lập nhau. Khi đó ta có thể tính: P(X|Ci) = P(x1|Ci)...P(xn|Ci)
Ví dụ: Phân các bệnh nhân thành 2 lớp ung thư và không ung thư. Giả sử xác
suất để một người bị ung thư là 0.008 tức là P(cancer) = 0.008; và P(nocancer) = 0.992.
18


Xác suất để bệnh nhân ung thư có kết quả xét nghiệm dương tính là 0.98 và xác suất để
bệnh nhân khơng ung thư có kết quả dương tính là 0.03 tức là P(+/cancer) = 0.98,
P(+/nocancer) = 0.03. Bây giờ giả sử mợt bệnh nhân có kết quả xét nghiệm dương tính.

Ta có: P(+/canncer)P(cancer) = 0.98 * 0.008 = 0.0078
P(+/nocancer)P(nocancer) = 0.03 * 0.992 = 0.0298
Như vậy, P(+/nocancer)P(nocancer) >> P(+/cancer)P(cancer).
Do đó ta xét đốn rằng, bệnh nhân là khơng ung thư.
Ưu điểm
Giả định độc lập: hoạt động tốt cho nhiều bài toán/miền sữ liệu và ứng dụng.
Đơn giản nhưng đủ tốt để giải quyết nhiều bài toán như phân lớp văn bản, lọc
spam,..
Cho phép kết hợp tri thức tiền nghiệm (prior knowledge) và dữ liệu quan sát
được (obserwed data).
Tốt khi có sự chệnh lệch số lượng giữa các lớp phân loại.
Huấn luyện mô hình (ước lượng tham số) dễ và nhanh.
Nhược điểm
Giả định đợc lập (ưu điểm cũng chính là nhược điểm)
hầu hết các trường hợp thực tế trong đó có các tḥc tính trong các đối tượng
thường phụ tḥc lẫn nhau.
Vấn đề zero (đã nêu cách giải quyết ở phía trên)
Mơ hình khơng được huẩn luyện bằng phượng pháp tối ưu mạnh và chặt chẽ.
Tham số mủa mô hình là các ước lượng xác suất điều kiện đơn lẻ.
Không tính đến sự tương tác giữa các ước lượng này.
4. Áp dụng mơ hình
Thực hiện thử nghiệm các tḥt tốn với cùng một bộ dũ liệu, cùng một thiết
bị phần cứng
Kết quả được ghi nhận qua các lần thực hiện build và cải tiến
Verson 1
ramdon forest Test accuracy :
0.4184241106198663

Verson 2
SVM

Test accuracy : 0.982
Classification report :
-1 : tiêu cực , 0 : trung tính , 1 : tích cực
precision recall f1-score support
-1
0.88
0.86
0.87
5899
19


0
0.93
0.94
0.93 18873
1
0.76
0.69
0.72
2451
accuracy
0.90 27223
macro avg
0.85
0.83
0.84 27223
weighted avg
0.90
0.90

0.90 27223

Verson 3
Naïve bayes
Test accuracy : 0.942
Classification report :
-1 : tiêu cực , 0 : trung tính , 1 : tích cực
precision recall f1-score support
-1
0.86
0.81
0.83
5899
0
0.89
0.96
0.92 18873
1
0.92
0.47
0.62
2451
accuracy
0.88 27223
macro avg
0.89
0.75
0.79 27223
weighted avg
0.88

0.88
0.88 27223
Từ kết quả 3 lần thử nghiệm, lựa chọn mô hình SVM với accuracy cao nhất và
tỷ lệ precision recall giữa các nhãn không quá chênh lệnh.
5. Triển khai và đánh giá mơ hình
Từ kết quả các lần thử nghiệm, nhận thấy với verson 4 đem lại hiểu quả và chỉ
số tốt nhất, thống nhất ứng dụng mơ hình nạve bayes
Đợ chính xác với những ví dụ khác:

20


6. Demo
- Màn hình chính:
Bao gồm textbox nhập đoạn văn cần phân loại và button Run để thực hiên
predict với đầu vào là câu văn vừa nhập

-

Màn hình kết quả: hiện thơng tin kết quả dự đốn.

21


Kết luận
Bài báo cáo của em đã trình bày tổng quát được về bài toán phân loại cảm xúc và
ứng dụng của bài toán này vào việc phân loại cảm xúc nợi dung của khách hàng trên
chatbot. Qua đó, bài báo cáo đã đưa ra được:
 Các nguyên lý, tính chất được xây dựng bằng 3 mô hình Random Forest, SVM,
Naive Bayes.

 Áp dụng các nguyên lý, tính chất của mơ hình để giải qút bài tốn phân loại
cảm xúc
 Cài đặt được chương trình phân loại cảm xúc nội dung trên chatbot dựa vào các
mô hình đã trình bày ở trên.
Tuy thời gian tìm hiểu không được dài, nhưng với việc tìm hiểu về phân loại cảm
xúc nội dung và các mơ hình qua đó cài đặt được chương trình phân loại cảm xúc, em
nhận thấy đã học học được và có thêm mợt số kiến thức nhất định về việc xử lý dữ liệu
đầu vào cũng như việc mơ hình hóa dữ liệu, am hiểu hơn về các ứng dụng của bài tốn
và đã mợt phần nào đó áp dụng được vào để giải quyết một ứng dụng.

22



×