You are on page 1of 18

Bài tiểu luận

Đề tài: Phân loại văn bản


(Text classification)

Môn học: Xử lý ngôn ngữ tự nhiên


Giảng viên: PGS. TS. Đinh Điền

Học viên: Nhóm 11


Trần Thị Minh Trang (20C29040)
Nghiêm Thị Thanh Ngọc (20C29030)
Ngành: Cao học Khoa học dữ liệu K30

TP HCM 03-2021
Mục lục
1. Mở đầu và ứng dụng của phân loại văn bản ............................................................................ 3
2. Định nghĩa của phân loại văn bản ........................................................................................... 3
3. Các phương pháp thực hiện ..................................................................................................... 4
a) Phân loại bằng tay (Hand-coded rule-based classification) ................................................. 4
b) Phân loại bởi các hệ thống máy học (Machine learning-based systems)............................. 4
i) Naïve Bayes classification ............................................................................................... 7
ii) Support vector machine ................................................................................................... 9
c) Phân loại bởi các hệ thống học sâu (Deep learning-based systems) .................................. 10
d) Một số vấn đề với phân loại văn bản ................................................................................. 12
i. Vấn đề chung của phân loại văn bản ............................................................................. 12
ii. Vấn đề riêng với tiếng Anh ............................................................................................ 15
iii. Vấn đề riêng với tiếng Việt ............................................................................................ 16
4. Kết quả thực nghiệm .............................................................................................................. 17

Bảng phân công


1. Mở đầu và ứng dụng của phân loại văn bản Ngọc
2. Định nghĩa của phân loại văn bản
3. Các phương pháp thực hiện
a) Phân loại bằng tay (Hand-coded rule-based classification)
b) Phân loại bởi các hệ thống máy học (Machine learning-based systems)
i) Naïve Bayes classification
ii) Support vector machine Trang
c) Phân loại bởi các hệ thống học sâu (Deep learning-based systems)
LSTM
d) Một số vấn đề với phân loại văn bản
i. Vấn đề chung của phân loại văn bản
ii. Vấn đề riêng với tiếng Anh
iii. Vấn đề riêng với tiếng Việt Ngọc
4. Kết quả thực nghiệm Ngọc, Trang

2
1. Mở đầu và ứng dụng của phân loại văn bản

Cùng với sự phát triển của máy học cùng học sâu, phân loại văn bản (PLVB) đã có nhiều phát
triển trong những năm gần đây nhằm đơn giản hóa các quá trình bằng tay, đồng thời tiết kiệm thời
gian, công sức của con người. Hiện nay dù là một người không ở trong lĩnh vực công nghệ thì
cũng biết tới một trong những ứng dụng phổ biến nhất của phân loại văn bản, đó là lọc thư rác.
Khi hòm thư của chúng ta nhận được email mới, email này sẽ được phân loại tự động ngay tức
khắc để xếp chúng vào thư mục Spam/ Thư rác hay không. Ngoài ứng dụng này, PLVB còn được
sử dụng cho các vấn đề dưới đây:

 Phân loại emails là có phải là thư rác hay không


 Phân loại chủ đề cho các bài báo thành các danh mục tương ứng như chính trị, kinh doanh,
công nghệ, thể thao, giải trí, v.v…
 Tìm kiếm các thông tin về tác giả dựa trên phong cách văn bản
 Đánh giá cảm xúc của người dùng qua các bình luận trên mạng xã hội
 Và còn nhiều hơn nữa…

Do PLVB có nhiều ứng dụng trong cuộc sống mà ta không thể nêu ra toàn bộ trong bài tiểu
luận này, nên song song với việc đề cập tới các lý thuyết chung về PLVB, ta sẽ tìm hiểu kỹ hơn
một ứng dụng cụ thể của nó, đó là phân loại chủ đề cho các bài báo điện tử.
Trước hết, để hiểu rõ hơn về PLVB, chúng ta sẽ tìm hiểu từ định nghĩa của nó tại phần tiếp
theo.

2. Định nghĩa của phân loại văn bản

Phân loại văn bản là một trong những vấn đề căn bản nhất của xử lý ngôn ngữ tự nhiên, với
những ứng dụng đa dạng như đã đề cập tới ở phần một. Bài toán phân loại văn bản là bài toán giải
quyết việc phân loại tự động một văn bản cho trước, để xác định xem văn bản đó thuộc thể loại
nào.
Ban đầu ta sẽ có đầu vào là một văn bản d, và tập C gồm j lớp 𝑐1 , 𝑐2 , 𝑐3 ,…, 𝑐𝑗 , với đầu ra là
một lớp c thuộc tập C. Vậy qua bài toán này, một văn bản sẽ được phân loại vào một lớp nào đó.
Ta có thể tóm tắt như sau:

3
Nguồn: Stanford University1
Cụ thể với việc phân loại các bài báo điện tử vào chủ đề tương ứng với nó, thì ta sẽ có đầu
vào là một văn bản d và kết quả trả về sẽ là chủ đề của d (ví dụ bài báo d sẽ thuộc mục thể thao,
kinh doanh, công nghệ thông tin, v.v…).

3. Các phương pháp thực hiện

Để giải bài toán PLVB ta có thể sử dụng phương pháp bằng tay (manual) hoặc tự động phân
loại bởi máy (automatic classification).

a) Phân loại bằng tay (Hand-coded rule-based classification)


Với một số trường hợp đơn giản hoặc cần độ chính xác cao thì ta có thể phân loại văn bản
bằng tay khi biết trước được các quy tắc cho việc phân loại. Ví dụ như để lọc thư rác, ta sẽ có
một số dấu hiệu biết trước một thư rác (thường chứa từ “Great news”, dấu chấm than “!”, hay
có đường dẫn trong phần nội dung v.v…), hoặc danh sách những địa chỉ email “xấu” mà dựa
vào đó ta sẽ tạo bằng tay bộ lọc thư rác.
Do đó, nếu các quy tắc để phân loại được xây dựng bởi chuyên gia trong ngành thì phương
pháp này có thể có độ chính xác cao, tuy nhiên vì yêu cầu có sự can thiệp của con người khá
nhiều ở việc thường xuyên kiểm tra, cũng như cập nhật bộ lọc, nên nó có nhược điểm lớn là
tốn thời gian xây dựng và có chi phí cao cho việc duy trì.
Vậy để thay thế cho sức người và tăng tốc độ quá trình phân loại, các hệ thống tự động
phân loại được đưa vào sử dụng. Những hệ thống tự động này còn có thể giải quyết nhiều vấn
đề mà con người khó có thể làm bằng tay được, mà ta sẽ tìm hiểu về chúng ở phần b, c.
b) Phân loại bởi các hệ thống máy học (Machine learning-based systems)
Trong máy học, bài toán PLVB là một bài toán học giám sát (supervised learning) vì ta sẽ
có tập dữ liệu gồm các văn bản được gán nhãn, và được sử dụng để thực hiện phân loại. Một
số thuật toán PLVB phổ biến nhất trong máy học phải kể đến thuật toán phân loại Logistic

1
https://web.stanford.edu/~jurafsky/slp3/slides/7_NB.pdf

4
regression, Naïve Bayes, Support vector machines. Do đều là học có giám sát nên chúng theo
cấu trúc chung như sau:

Hình 1: Giai đoạn huấn luyện trong học có giám sát


Bước huấn luyện (training) là giai đoạn học tập của mô hình PLVB. Ở bước này, mô hình
sẽ học từ dữ liệu gồm văn bản và các nhãn gán sẵn của nó. Đầu tiên, do máy tính chỉ hiểu dữ
liệu dạng số nên ta sẽ có bước số hóa dữ liệu dạng văn bản thành dạng véc tơ nhiều chiều mà
các chiều là các đặc trưng, thông qua bộ trích xuất đặc trưng (feature extractor) (phần số hóa
văn bản được đề cập tới tại mục 3d trong bài này). Từ các đặc trưng thu thập được đó, các thuật
toán máy học sẽ học đưa ra mô hình để tự động phân loại được kết quả tốt trên tập dữ liệu.
Bằng các phương pháp phân tích kết quả huấn luyện dựa trên đánh giá hệ thống phân lớp qua
độ chính xác/ độ bao phủ (precicion/ recall) mà mô hình máy học sẽ được tối ưu hóa.

Hình 2: Dự đoán cho dữ liệu mới trong học có giám sát


Tiếp theo, bước dự đoán (prediction) là giai đoạn ta sử dụng mô hình PLVB sau khi huấn
luyện trước đó. Đầu vào là dữ liệu cần dự đoán, cũng vẫn thực hiện các bước trích xuất đặc
trưng và mô hình máy học sẽ đưa ra được kết quả phân loại mà nó dự đoán.2
Cụ thể hơn, ta xem xét ví dụ về mô hình phân loại bởi máy học cho bài toán phân loại chủ
đề cho các bài báo điện tử như bên dưới đây. Việc tự động phân loại văn bản vào một chủ đề

2
https://monkeylearn.com/text-classification/

5
nào đó giúp cho việc sắp xếp, lưu trữ và truy vấn tài liệu dễ dàng hơn về sau, giúp các biên tập
viên tổng hợp thông tin, tóm tắt tin tức nhanh chóng v.v…

Dữ liệu huấn luyện Bài báo


(các bài báo và chủ mới
đề)
Dự đoán

Tiền xử lý Thuật toán Bài báo đã


dữ liệu phân loại phân loại
văn bản

Trích xuất đặc


trưng (features)

Huấn luyện

Hình 3: Phân loại chủ đề cho bài báo điện tử bằng máy học
Ở bước huấn luyện, ta có dữ liệu đầu vào là các bài báo điện tử và các chủ đề tương ứng
với nó. Sau đó bài báo sẽ được áp dụng các kỹ thuật về tiền xử lý dữ liệu cơ bản, ví dụ như
như bỏ các từ xuất hiện nhiều trong văn bản mà không có ý nghĩa lớn (như từ: “a”, “an”, “the”
trong tiếng Anh). Những từ này được gọi là stopwords, và sau khi loại bỏ chúng thì ta có thể
trích xuất các đặc trưng của bài báo dựa trên việc tách từ. Kết quả của bước này là một véc tơ
có chứa các đặc trưng của bài báo, đó là tập hợp các từ “quan trọng” để biểu diễn bài báo đó.
Lấy một ví dụ cho véc tơ đặc trưng đơn giản như sau: ta có một từ điển gồm các từ
{Vietnam, is, an, emerging, economy, world, domination}, và văn bản “Vietnam is an
emerging economy.” Sau khi tách từ, ta được véc tơ các đặc trưng là (1, 1, 1, 1, 1, 0, 0). Véc
tơ này sẽ được sử dụng làm dữ luyện huấn luyện cho thuật toán máy học mà ta chọn, mà trong
bài viết này chúng ta sẽ tìm hiểu hai thuật toán máy học cho PLVB là Naïve Bayes và Support
vector machine.
Cuối cùng, ta sẽ có được mô hình dự đoán chủ đề cho bài báo điện tử sau bước huấn luyện
bên trên, và khi ta đưa dữ liệu là một bài báo mới vào, thì mô hình có thể cho ta kết quả nó dự
đoán được về chủ đề của bài báo mới đó.

6
Sau đây ta sẽ tìm hiểu về hai thuật toán máy học thường dùng và có hiểu quả cao cho PLVB,
đó là Naïve Bayes và Support vector machines.
i) Naïve Bayes classification

Xét bài toán phân loại với C lớp 1, 2…, c. Giả sử có một văn bản d và cần tính xác suất
mà văn bản d rơi vào lớp c, vậy ta cần tính xác suất có điều kiện bên dưới:
𝑃(𝑦 = 𝑐|𝑑)
hoặc viết gọn thành P(c | d).
Nghĩa là tính xác suất để đầu ra là lớp c biết rằng đầu vào là véc tơ d. Một phương pháp
phổ biến trong máy học để tính xác suất này đó là Naïve Bayes, dựa trên quy tắc Bayes từ
tác giả cùng tên. Đầu tiên ta sử dụng các ký hiệu sau:

 P(c): Xác suất xảy ra lớp c của riêng nó, không quan tâm đến văn bản d.

Giá trị này có thể được tính bằng cách lấy tỉ lệ số điểm dữ liệu trong tập huấn luyện rơi
vào lớp này chia cho tổng số lượng dữ liệu trong tập huấn luyện. Dưới đây là một ví dụ
đơn giản để tính P(c) theo cách này:
Huấn luyện Doc no. Words Lớp
1 apple green apple fruit P(fruit) = 2/3
2 orange orange fruit
3 rose red red flower P(flower) = 1/3

Lớp “fruit” xuất hiện 2 lần trong 3 văn bản nên xác suất xảy ra của nó là P(fruit) = 2/3
Lớp “flower” xuất hiện 1 lần trong 3 văn bản nên xác suất xảy ra của nó là P(flower) = 1/3

 P(d): Xác suất xảy ra d của riêng nó, không quan tâm đến lớp c
 P(c | d) như đã nói ở trên, là xác suất xảy ra c khi biết d xảy ra

Với quy tắc Bayes ta có:


𝑃(𝑑|𝑐)𝑃(𝑐)
𝑃(𝑐|𝑑) =
𝑃(𝑑)
Biểu thức trên giúp chúng ta tính được xác suất để văn bản d rơi vào mỗi lớp. Sau đó ta
có thể chọn lớp có xác suất cao nhất làm kết quả dự đoán cho lớp của d.
Dưới dạng công thức, với 𝑐𝑀𝐴𝑃 (lớp có xác suất cao nhất), ta viết:

7
Do P(d) không đổi nên để tìm lớp có xác suất cao nhất ta có thể bỏ đi phần mẫu số P(d).
Tùy vào loại dữ liệu mà ta sẽ có cách tính P(d|c) khác nhau. Với dữ liệu dạng số hoặc
nhị phân, ta có thể dùng mô hình Gaussian Naïve Bayes và Bernoulli Naïve Bayes. Còn
với dạng văn bản có nhiều đặc trưng thì mô hình Multinomial Naïve Bayes thường được
sử dụng.
Khi văn bản d có n đặc trưng (features): 𝑥1 , 𝑥2 , … , 𝑥𝑛 thì để giúp cho việc tính toán được
đơn giản, người ta thường đặt ra giả thiết rằng thứ tự của các từ không quan trọng trong
văn bản d (Bag of Word assumption) và các n đặc trưng của d là độc lập với nhau, nếu
biết c. Lúc đó, xác suất xảy ra của tất cả các đặc trưng của d, nếu biết lớp c, sẽ là tích các
xác suất có điều kiện của chúng với nhau, nếu biết c:

Vậy 𝑐𝑀𝐴𝑃 (lớp có xác suất cao nhất) được tính bằng:

Nguồn: Stanford University3


Tất nhiên giả thiết các thành phần của dữ liệu độc lập với nhau là khó xảy ra trong thực
tế, nhưng giả thiết đơn giản này lại khiến tốc độ huấn luyện nhanh hơn và mang lại những
kết quả tốt bất ngờ. Đặc biệt trong bài toán PLVB, phương pháp Naïve Bayes hoạt động
rất tốt.
Một vấn đề xảy ra khi tính xác suất văn bản d thuộc lớp c bằng phương pháp Multinomial
Naïve Bayes đó là một đặc trưng nào đó có khả năng sẽ có tần suất xuất hiện là 0 (ví dụ
𝑃(𝑥𝑖 |𝑐) = 0). Như vậy đặc trưng này sẽ ảnh hưởng tới kết quả xác suất cuối cùng, khiến
kết quả bằng 0 (vì bất kỳ số nào nhân với 0 cũng bằng 0). Một kỹ thuật phổ biến để tránh
trường hợp xác suất 0 đó là cách làm mịn Laplace (Laplace smoothing). Khi sử dụng, ta sẽ

3
https://web.stanford.edu/~jurafsky/slp3/slides/7_NB.pdf

8
cộng một số dượng bất kỳ, thường là 1, vào tần suất của các quan sát. Như vậy các giá trị
0 sẽ được thay đổi thành một giá trị dương khác và không khiến kết quả bị ảnh hưởng nhiều.

ii) Support vector machine

Phần này chúng ta tìm hiều về thuật toán Máy véc tơ hỗ trợ (Support vector machines –
SVM). Đầu tiên ta tìm hiểu về khái niệm siêu phẳng: siêu phẳng là ranh giới quyết định
giúp phân loại các điểm dữ liệu. Các điểm dữ liệu rơi ở hai bên của siêu phẳng có thể được
quy cho các lớp khác nhau. Ngoài ra, kích thước của siêu phẳng phụ thuộc vào số lượng
tính năng. Nếu số lớp đầu vào là hai, thì siêu phẳng chỉ là một đường thẳng. Nếu số lớp
đầu vào là ba, thì siêu phẳng trở thành mặt phẳng hai chiều. Chúng ta rất khó tưởng tượng
ra siêu phẳng khi số lớp vượt quá ba.
SVM là thuật toán giúp chúng ta tìm một siêu phẳng trong không gian N chiều (N - số
đối tượng) phân loại rõ ràng các điểm dữ liệu. Để phân tách các lớp điểm dữ liệu, có nhiều
siêu mặt phẳng có thể được chọn. Mục tiêu của SVM là cố gắng cực đại hóa margin (khoảng
cách giữa siêu phẳng đến hai điểm dữ liệu gần nhất tương ứng với các phân lớp), từ đó thu
được một siêu phẳng tạo khoảng cách xa nhất so với điểm gần nó nhất. Nhờ vậy, SVM có
thể giảm thiểu việc phân lớp sai (misclassification) đối với điểm dữ liệu mới đưa vào.

Hình 4: Phân lớp với thuật toán SVM

Ưu điểm:

 Xử lý trên không gian số chiều cao


 Tiết kiệm bộ 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.

9
Nhược điểm:

 Bài toán số chiều cao: trong trường hợp số lượng thuộ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ông tốt.
 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.

c) Phân loại bởi các hệ thống học sâu (Deep learning-based systems)
Các phương pháp phân loại văn bản truyền thống dựa trên máy học gặp một số khó khăn
như dữ liệu quá lớn, dữ liệu quá thưa thớt và bị bùng nổ số chiều của các đặc trưng (dimension
explosion). Vì vậy gần đây, nhiều phương pháp học sâu được áp dụng để giải quyết các bài
toán PLVB, như mạng nơ ron tích chập (Convolution Neural Network - CNN), mạng nơ ron
hồi quy (Recurrent neural network - RNN) mà trong bài này ta sẽ tìm hiều sâu hơn về một loại
mạng mở rộng của RNN, đó là Long Short-Term memory network (LSTM).
Trước hết, RNN là một mạng nơ ron hồi quy có thể giải quyết các bài toán có dữ liệu mang
tính tuần tự như chuỗi thời gian time-series, nhận dạng giọng nói, sáng tác nhạc và trong xử lý
ngôn ngữ tự nhiên NLP: nó có thể dự đoán từ tiếp theo, dịch máy v.v… Vì vậy, RNN là một
mạng sẽ lưu lại thông tin từ những bước tính toán xử lý trước để dựa vào nó có thể đưa ra dự
đoán chính xác nhất cho bước dự đoán hiện tại.

Hình 5: Cấu trúc RNN


RNN có thể sử dụng được thông tin của một văn bản rất dài, tuy nhiên thực tế thì nó chỉ có
thể nhớ được một vài bước trước đó và dần quên đi các bước đầu tiên. Vì thế mô hình LSTM
ra đời để khắc phục nhược điểm trên.

10
Về cơ bản, mô hình của LSTM không khác mô hình truyền thống của RNN, nhưng chúng
sử dụng hàm tính toán khác ở các trạng thái ẩn. Bộ nhớ của LSTM được gọi là Cell và có thể
tưởng tượng rằng chúng là các hộp đen nhận đầu vào là trạng thái phía trước ℎ𝑡−1 và đầu vào
hiện tại 𝑥𝑡 . Bên trong hộp đen này sẽ tự quyết định cái gì cần phải nhớ và cái gì sẽ xoá đi. Sau
đó, chúng sẽ kết hợp với trạng thái phía trước, nhớ hiện tại và đầu vào hiện tại. Vì vậy mà ta
ta có thể truy xuất được quan hệ của các từ phụ thuộc xa nhau rất hiệu quả.

Hình 6: Cấu trúc của LSTM


Chìa khóa của LSTM là trạng thái của Cell state - chính đường chạy thông ngang phía trên
của sơ đồ hình vẽ. Nó là một dạng giống như băng truyền. Nó chạy xuyên suốt tất cả các mắt
xích (các nút mạng) và chỉ tương tác tuyến tính đôi chút. Vì vậy mà các thông tin có thể dễ
dàng truyền đi thông suốt mà không sợ bị thay đổi.
Một LSTM gồm có ba cổng như vậy để duy trì và điều hành trạng thái của Cell state. Nhờ
vậy LSTM có khả năng bỏ đi hoặc thêm vào các thông tin cần thiết cho trạng thái của Cell
state, chúng được điều chỉnh cẩn thận bởi các nhóm được gọi là cổng (gate).

Hình 7: Một cổng của LSTM


Các cổng là nơi sàng lọc thông tin đi qua nó, chúng được kết hợp bởi một tầng mạng
sigmoid và một phép nhân. Nhưng nhược điểm lớn nhất của các mạng RNN là thời gian chạy
lâu và tốn khá nhiều bộ nhớ.

11
d) Một số vấn đề với phân loại văn bản
Trong xử lý ngôn ngữ tự nhiên, hầu hết văn bản và tài liệu chứa nhiều từ thừa thãi và không
có nhiều ý nghĩa cho việc phân loại văn bản, chẳng hạn như từ dừng, cách viết sai, tiếng lóng,
v.v… Tại phần này, một số kỹ thuật và phương pháp cho việc tiền xử lý văn bản sẽ được giải
thích ngắn gọn. Trong nhiều thuật toán như phương pháp học thống kê và xác suất, nhiễu và
các đặc trưng không cần thiết có thể ảnh hưởng tiêu cực đến hiệu suất tổng thể. Vì vậy, việc
loại bỏ các đặc trưng này là vô cùng quan trọng.
i. Vấn đề chung của phân loại văn bản
Chữ viết hoa và viết thường
Đối với các nhóm ngôn ngữ sử dụng chữ Latin, trong một văn bản có thể có nhiều câu,
các câu có thể chứa hỗn hợp chữ hoa và chữ thường: như đầu dòng, tên riêng v.v… phải
viết hoa. Việc này có thể ảnh hưởng đến kết quả của bài toán. Để giảm không gian vấn đề,
cách tiếp cận phổ biến nhất là chuyển đổi tất cả thành chữ thường.
Tokenization
Hiện nay, với một số hạn chế về cấu hình của máy tính, việc đưa một câu vào và tính
toán, sẽ gây tốn rất nhiều tài nguyên và gần như là không thể. Nên kĩ thuật tokenization ra
đời để tối ưu quá trình này. Tokenization là quá trình chia nhỏ dòng văn bản thành các từ,
cụm từ, ký hiệu hoặc bất kỳ yếu tố có ý nghĩa nào khác được gọi là mã thông báo. Mục
tiêu chính của bước này là trích xuất các từ riêng lẻ trong một câu. Cùng với phân loại văn
bản, trong khai thác văn bản, cần phải kết hợp một trình phân tích cú pháp trong đường
ống thực hiện mã hóa tài liệu.
Trong bài này, chúng ta sẽ sử dụng chức năng word_tokenize của thư viện nltk để
tokenize các câu thành các từ riêng lẻ, dựa trên khoảng trắng và dấu câu để phân tách. Tuy
việc này có thể không đảm bảo ý nghĩa của câu, vì nghĩa của từ phụ thuộc vào ngữ cảnh,
nhưng tokenization giúp máy tính toán nhanh và đơn giản hơn. Ví dụ:
“After sleeping for four hours, he decided to sleep for another four”
Trong trường hợp này, sau khi tokenization câu sẽ có dạng:
{'After', 'sleeping', 'for', 'four', 'hours', 'he', 'decided', 'to', 'sleep', 'for', 'another', 'four'}
Ngoài cách trên, còn có thể dùng phương pháp n-gram, tức là tách câu theo số lượng
từ đã quy định sẵn như one-gram, bi-gram, tri-gram... Tuy hai cách vừa nêu có tốc độ khá
nhanh và dùng được cho nhiều loại ngôn ngữ khác nhau, nhưng lại cho kết quả không tốt

12
vì một từ có nghĩa có thể có nhiều chữ. Để khắc phục nhược điểm trên, chúng ta có thể
tokenize theo các từ có sẵn trong bộ từ điển, nhưng để tìm một bộ từ điển có chất lượng
không phải là chuyện dễ.
Stopwords và punctuation
Văn bản thường chứa các ký tự như dấu chấm câu, ký tự đặc biệt hoặc những từ không
có ý nghĩa (trợ từ) và chúng không cần thiết cho mục đích khai thác hoặc phân loại văn
bản. Mặc dù dấu câu rất quan trọng để hiểu ý nghĩa của câu, nhưng nó có thể ảnh hưởng
tiêu cực đến các thuật toán phân loại. Vì thế, trong trường hợp này, chúng ta sẽ loại bỏ các
yếu tố ảnh hưởng này thông qua bộ stopwords và dấu câu được cung cấp sẵn.
Sai chính tả
Một phần của bước tiền xử lý là sửa các từ sai chính tả. Có các kỹ thuật khác nhau,
chẳng hạn như kỹ thuật sửa lỗi chính tả dựa trên hashing và context-sensitive, hoặc sử dụng
trie và damerau-levenshtein distance bigram để giải quyết vấn đề này.
Word embedding
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 NLP, ở đó các từ hoặc cụm từ được ánh xạ sang các véc tơ số (thường
là số thực). Word embedding được phân chủ yếu thành hai loại:
 Frequency-based embedding
 Prediction-based embedding
Trong bài này, chúng ta sử dụng kĩ thuật TF-IDF để chuyển đổi dữ liệu thành véc tơ.
Đây là kĩ thuật embedding thuộc Frequency, nghĩa là dựa vào tần số xuất hiện của các từ
để tạo ra các véc tơ từ.
TF-IDF là trọng số được sử dụng để đánh giá tầm quan trọng của một từ trong một văn
bản. Giá trị cao thể hiện độ quan trọng cao và nó phụ thuộc vào số lần từ xuất hiện trong
văn bản nhưng bù lại bởi tần suất của từ đó trong tập dữ liệu. Một vài biến thể của TF-IDF
thường được sử dụng trong các hệ thống tìm kiếm như một công cụ chính để đánh giá và
sắp xếp văn bản dựa vào truy vấn của người dùng. TF-IDF cũng được sử dụng để lọc những
từ stopwords trong các bài toán như tóm tắt văn bản và phân loại văn bản.
a. TF là gì?
TF: Term frequency (tần suất xuất hiện của từ) là số lần từ xuất hiện trong văn bản. Vì
các văn bản có thể có độ dài ngắn khác nhau nên một số từ có thể xuất hiện nhiều lần trong

13
một văn bản dài hơn là một văn bản ngắn. Như vậy, term frequency thường được chia cho
độ dài văn bản (tổng số từ trong một văn bản).

𝑓(𝑡,𝑑)
tf (t,d) =
max{𝑓(𝑤,𝑑): 𝑤 𝜖 𝑑}

Trong đó:

 tf(t, d): tần suất xuất hiện của từ t trong văn bản d
 f(t, d): số lần xuất hiện của từ t trong văn bản d
 max({f(w, d) : w ∈ d}): số lần xuất hiện của từ có số lần xuất hiện nhiều nhất trong
văn bản d
b. IDF là gì?

IDF: Inverse document frequency (nghịch đảo tần suất của văn bản), giúp đánh giá tầm
quan trọng của một từ. Khi tính toán TF, tất cả các từ được coi như có độ quan trọng bằng
nhau. Nhưng một số trợ từ thường xuất hiện rất nhiều lần nhưng độ quan trọng là không
cao. Như thế chúng ta cần giảm độ quan trọng của những từ này xuống.

|𝐷|
idf (t,D) =
|{𝑑𝜖𝐷: 𝑡𝜖𝐷|

Trong đó:

 idf(t, D): giá trị idf của từ t trong tập văn bản
 |D|: Tổng số văn bản trong tập D
 |{d ∈ D : t ∈ d}|: thể hiện số văn bản trong tập D có chứa từ t

Cuối cùng, ta có công thức tính TF-IDF như sau:

TF-IDF (t, d, D) = tf(t, d) * idf(t, D)

Khi đó, những từ có giá trị TF-IDF cao là những từ xuất hiện nhiều trong văn bản này,
và xuất hiện ít trong các văn bản khác. Việc này giúp lọc ra những từ phổ biến và giữ lại
những từ có giá trị cao (từ khoá của văn bản đó).

14
ii. Vấn đề riêng với tiếng Anh
Stemming
Trong tiếng Anh, một từ có thể có nhiều dạng, phụ thuộc vào ngữ cảnh của câu (hiện
tại, quá khứ, tương lai) hay chủ ngữ đi cùng. Ví dụ như từ: “goes”, “went”, “going” là biến
thể của từ gốc “go”. Từ đó dẫn đến việc máy tính đưa ra những nhận định sai về ý nghĩa
của các từ. Vì thế, stemming ra đời, để biến đổi một từ về dạng gốc (được gọi là stem hoặc
root form) bằng cách cực kỳ đơn giản là loại bỏ một số ký tự nằm ở cuối từ mà nó là biến
thể của từ khác.
Stemming thường đề cập đến một quá trình xử lý sử dụng tri thức con người bằng cách
cắt phần cuối của từ và hy vọng đạt được độ chính xác trong hầu hết các lần chạy, và
thường nó bao gồm việc loại bỏ các yếu tố phụ phát sinh như “ing”, “ed”, “s”... Hiện tại có
khá nhiều giải thuật cho tiếng anh, trong đó giải thuật phổ biến nhất và có kết quả tốt trong
thực nghiệm đó là giải thuật Porter stemmer. Giải thuật Porter bao gồm năm giai đoạn và
được áp dụng tuần tự. Trong mỗi giai đoạn có các quy ước khác nhau để chọn quy tắc,
chẳng hạn như chọn quy tắc từ một nhóm các quy tắc và ứng dụng cho hậu tố dài nhất, ví
dụ trong giai đoạn đầu tiên, quy ước được sử dụng theo nhóm các quy tắc sau:

Dạng của từ Biến đổi


SSES SS
IES I
SS SS
S bỏ
Lemmatization
Lemmatization là quá trình nhóm các từ biến dạng của một từ để chúng có thể được
phân tích thành một mục duy nhất, được xác định bởi bổ đề của từ (lemma) hoặc dưới dạng
từ điển. Trong computational linguistics, lemmatization là giải thuật để xác định bổ đề của
một từ dựa trên ý nghĩa dự định của nó. Không giống như stemming, lemmatization phụ
thuộc vào việc xác định chính xác từ loại và ý nghĩa của từ trong câu. Ví dụ với từ “go” có
thể xuất hiện dưới dạng như “goes”, “went”, “gone”. Với hình thức cơ bản của từ “go”, ta
có thể tra cứu trong một từ điển được gọi là lemma của từ đó. Lemmatization có mối liên
hệ chặt chẽ với stemming. Sự khác biệt là stemming hoạt động trên một từ duy nhất mà

15
không có kiến thức gì về ngữ cảnh, do đó không thể phân biệt giữa các từ có ý nghĩa khác
nhau tùy thuộc vào từ loại của chúng. Ví dụ:
 Từ “better” sẽ có lemma là từ “good”. Với trường hợp này stemming sẽ bỏ qua.
 Từ “walk” sẽ là dạng cơ bản của từ “walking”, cả hai giải thuật stemming và
lemmatization đều phù hợp để sử dụng.
 Từ “meeting” có thể có dạng cơ bản là một danh từ hoặc là một động từ (“to meet”)
tùy thuộc vào từng ngữ cảnh cụ thể, ví dụ “in our last meeting” hoặc “We are meeting
again tomorrow”. Không giống stemming, lemmatization sẽ cố gắng lựa chọn chính
xác lemma để phù hợp với ngữ cảnh nhất có thể.

Lemmatization thường cho kết quả tốt hơn so với stemming nhưng nhược điểm của nó
là tốc độ xử lý khá chậm vì phải thực hiện tra cứu trong tập từ điển. Nếu trong thực tế vấn
đề thời gian không quan trọng thì lemmatization vẫn là một lựa chọn tốt.

iii. Vấn đề riêng với tiếng Việt


Nhập nhằng

Thứ nhất, khó khăn trong việc tách từ ở tiếng Việt là khá rõ ràng khi ta không thể sử dụng
khoảng trắng như một dấu hiệu phân tách giữa các từ với nhau. Điều đó là do một trong những
điểm khác nhau giữa tiếng Anh và tiếng Việt đó là các cấp độ trong hai loại ngôn ngữ. Trong
khi tiếng Anh có sáu cấp độ lần lượt là âm vị (phoneme), hình vị (morpheme), từ (word), ngữ
(phrase), câu (sentence), văn bản (text), thì tiếng Việt có thêm một cấp độ nữa. Giữa hình vị
và từ còn có cấp độ chữ. Vậy một từ có thể gồm nhiều chữ trong tiếng Việt, ví dụ như “hợp
tác xã”, “câu lạc bộ” v.v… Điều này khiến cho việc tách từ khó khăn hơn so với các thứ tiếng
khác, bao gồm tiếng Anh. Thay vì dựa vào khoảng trắng để tách thì ta cần phải có một kỹ
thuật khác phù hợp hơn với đặc trưng tiếng Việt.
Việc xác định từ có thể dựa vào thuật toán so khớp từ dài nhất (longest matching) và từ
điển. Như tên của nó, thuật toán này sẽ bắt đầu từ chữ đầu tiên và ghép dần các chữ tiếp theo
vào cho tới khi không tìm thấy từ đó trong từ điển. Ví dụ cho một câu được tách theo thuật
toán trên:
Việc nhận diện ranh giới từ là quan trọng và là tiền đề cho các xử lý tiếp theo.
Kết quả tách từ:
Việc/ nhận diện/ ranh giới/ từ/ là/ quan trọng/ và/ là/ tiền đề/ cho/ các/ xử lý/ tiếp theo.

16
Thuật toán so khớp từ dài nhất cho kết quả tách từ có độ chính xác cao và có giải thuật đơn
giản nên ta có thể áp dụng nó trong quá trình xử lý tiếng Việt. Tuy nhiên phương pháp này
phụ thuộc rất nhiều vào chất lượng của từ điển, đồng thời nó vẫn chưa thể giải quyết một số
trường hợp nhập nhằng khi hai chữ là một từ và cũng là hai từ. Như từ “chanh chua” có thể là
tính từ “chanh chua”, hoặc là hai chữ riêng biệt: (quả) “chanh” “chua”.4 Vì vậy thuật toán này
còn cần cải thiện thêm để có thể xử lý những vấn đề nhập nhằng này.

Chuẩn hóa

Kế đến, việc chuẩn hóa phông chữ và chuẩn hóa kiểu gõ dấu cũng là đặc trưng riêng trong
xử lý ngôn ngữ tiếng Việt. Hiện tại các bảng mã như Unicode “tổ hợp” và Unicode “dựng sẵn”
tuy có kết quả hiển thị một chuỗi như nhau nhưng máy tính sẽ không hiểu rằng hai chuỗi là
khớp nhau.5 Do vậy ta cần phải quy dữ liệu về một chuẩn chung là Unicode dựng sẵn. Tương
tự như thế, kiểu bỏ dấu6 trong tiếng Việt cũng khiến một từ được hiển thị khác nhau như bảng
dưới:
Cũ Mới
òa, óa, ỏa, õa, ọa oà, oá, oả, oã, oạ
òe, óe, ỏe, õe, ọe oè, oé, oẻ, oẽ, oẹ
ùy, úy, ủy, ũy, ụy uỳ, uý, uỷ, uỹ, uỵ

Vậy để giảm độ phức tạp, ta cần phải quy chúng về một chuẩn, tức là sử dụng cùng một
kiểu bỏ dấu. Phần lập trình xử lý vấn đề này có thể tìm kiếm được trên các diễn đàn xử lý
ngôn ngữ tiếng Việt.

4. Kết quả thực nghiệm

Trong bài viết này, bộ dữ liệu các bài báo điện tử của Reuters được sử dụng để thực hành giải
bài toán phân loại bài báo theo chủ đề. Đây là bộ dữ liệu khá phổ biến trong nghiên cứu xử lý ngôn
ngữ tự nhiên. Reuters được lấy từ trang UCI Machine Learning Resipotory. 7 Bộ dữ liệu gốc gồm
90 lớp, 7769 training documents, 3019 testing documents, và tổng cộng có 1.3 triệu chữ. Với thư
viện NLTK của python, ta có thể tải dữ liệu và xem các chủ đề dễ dàng như sau:

4
https://techinsight.com.vn/en/vietnamese-word-segmentation-part-i
5
https://nguyenvanhieu.vn/phan-loai-van-ban-tieng-viet/
6
https://vi.wikipedia.org/wiki/Quy_tắc_đặt_dấu_thanh_trong_chữ_quốc_ngữ
7
https://archive.ics.uci.edu/ml/datasets/reuters-21578+text+categorization+collection

17
from nltk.corpus import reuters
reuters.categories()
>>>['acq', 'alum', 'barley', 'bop', 'carcass', 'castor-oil', 'cocoa',
'coconut', 'coconut-oil', 'coffee', 'copper', 'copra-cake', 'corn',
'cotton', 'cotton-oil', 'cpi', 'cpu', 'crude', 'dfl', 'dlr', ...]

Ta lần lượt sử dụng các mô hình máy học Naïve Bayes, SVM và Logistic regression để giả bài
toán phân loại. Kết quả được ghi lại như bảng dưới:
Model Accuracy score
SVM 0.771
Logistic regression 0.769
Naïve Bayes 0.387

Nhận xét: Thuật toán SVM cho kết quả tốt nhất, sau đó tới Logistic regression. Cuối cùng
Naïve Bayes có kết quả khá tệ. Các kết quả này có thể cải thiện bằng cách chuẩn hóa lại dữ liệu,
giảm chiều véc tơ đặc trưng v.v… mà ta cần thêm thời gian nghiên cứu.
Qua bài tiểu luận về bài toán phân loại văn bản, chúng ta thấy được nhiều ứng dụng của nó
trong thực tế và một số phương pháp phổ biến để giải bài toán. Các kỹ thuật tiền xử lý dữ liệu và
những khó khăn riêng trong xử lý ngôn ngữ tiếng Việt được đề cập trong bài này. Ở phần thực
nghiệm, bộ dữ liệu Reuters đã sử dụng để thực hành bài toán phân loại chủ đề cho các bài báo điện
tử. Các kết quả từ máy học truyền thống là có thể tạm chấp nhận được nhưng không quá tốt. Điều
này có thể do vấn đề đa nhãn ở nhiều mẫu, tức là một bài báo có nhiều hơn một chủ đề và điều này
khiến giải thuật của máy học làm việc không hiệu quả. Trong tương lai, ta có thể làm sạch dữ liệu
và tiếp cận bài toán này với nhiều phương pháp khác, ví dụ như học sâu, để đưa ra kết quả tốt hơn.

18

You might also like