Professional Documents
Culture Documents
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
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:
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.
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…).
Để 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).
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:
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…
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
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:
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.
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.
Ưu điểm:
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.
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ả.
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
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:
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.
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.
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