BÀI TIỂU LUẬN
ĐỀ TÀI:
NGHIÊN CỨU XÂY DỰNG CHƯƠNG TRÌNH PHÂN
LOẠI VĂN BẢN DÙNG GIẢI THUẬT K-NEAREST
NEIGHBORS BẰNG NGÔN NGỮ PYTHON
Hồ Chí Minh, tháng 8 năm 2021
Mục lục
CHƯƠNG 1: TỔNG QUAN BÀI TOÁN PHÂN LOẠI VĂN BẢN
1.1. Khái niệm phân lớp văn bản
1.1.1. Khái niệm
Phân lớp văn bản (Text classification) là quá trình gán nhãn (tên lớp / nhãn lớp)
các văn bản ngôn ngữ tự nhiên một cách tự động vào một hoặc nhiều lớp cho truớc. Phân
lớp văn bản là bài toán cơ bản trong khai phá dữ liệu văn bản. Bài toán phân lớp văn bản
là việc gán tên các chủ đề (tên lớp/nhãn lớp) đã được xác định trước, vào các văn bản dựa
trên nội dung của chúng.
Phân lớp văn bản là công việc được sử dụng để hỗ trợ trong quá trình tìm kiếm
thơng tin, chiết lọc thơng tin, lọc văn bản hoặc tự động dẫn đường cho các văn bản tới
những chủ đề xác định trước. Phân lớp văn bản có thể thực hiện thủ công hoặc tự động sử
dụng các kỹ thuật học máy có giám sát. Các hệ thống phân lớp có thể ứng dụng trong
việc phân loại tài liệu của các thư viện điện tử, phân loại văn bản báo chí trên các trang
tin điện tử… những hệ thống tốt, cho ra kết quả khả quan, giúp ích nhiều cho con người.
1.1.2. Phân loại bài toán phân lớp văn bản
- Phân lớp văn bản nhị phân / đa lớp: Bài toán phân lớp văn bản được gọi là nhị
phân nếu số lớp là 2, gọi là đa lớp nếu số lớp lớn hơn 2.
-Phân lớp văn bản đơn nhãn / đa nhãn: Bài toán phân lớp văn bản được gọi là đơn
nhãn nếu mỗi tài liệu được gán vào chính xác mộtlớp. Bài tốn phân lớp văn bản được
gọi là đa nhãn nếu một tài liệu có thể được gán nhiều hơn một nhãn.
1.2. Mục tiêu
Mục tiêu của một hệ thống phân loại văn bản là nó có thể tự động phân loại một
văn bản cho trước, để xác định xem văn bản đó thuộc thể loại nào. Một số ứng dụng của
hệ thống phân loại như:
•
•
•
•
Hiểu được ý nghĩa, đánh giá, bình luận của người dùng từ mạng xã hội.
Phân loại emails là spam hay không spam.
Tự động gắn thẻ cho những truy vấn, tìm kiếm của người dùng.
Phân loại các bài báo điện tử.
1.3. Mơ hình phân lớp văn bản dùng tiếp cận học máy
Hình 1 mơ tả quy trình xây dựng mơ hình phân loại văn bản sử dụng các thuật
toán học máy, gồm hai q trình: huấn luyện và dự đốn.
Hình 1. Quy trình xây dựng mơ hình phân loại văn bản sử dụng các thuật toán máy học
Phân lớp văn bản được các nhà nghiên cứu định nghĩa thống nhất như là việc gán
tên các chủ đề (tên lớp / nhãn lớp) đã được xác định cho trước vào các văn bản text dựa
trên nội dung của nó. Để phân loại văn bản, người ta sử dụng phương pháp học máy có
giám sát. Tập dữ liệu được chia ra làm hai tập là tập huấn luyện và tập kiểm tra, trước hết
phải xây dựng mơ hình thơng qua các mẫu học bằng các tập huấn luyện, sau đó kiểm tra
sự chính xác bằng tập dữ liệu kiểm tra.
Đầu vào của quá trình huấn luyện là các dữ liệu văn bản và các nhãn tương ứng
với chủ đề cần phân loại. Quá trình này gồm 3 bước: tiền xử lý văn bản, trích xuất đặc
trưng và huấn luyện sử dụng các thuật tốn học máy.
Đầu ra của q trình huấn luyện là mơ hình được xây dựng và các tham số tối ưu
tương ứng cho mơ hình.
1.3. Các bước thực hiện
Bài toán phân loại văn bản là một bài toá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 quyết một bài toá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ý thuộ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)
1.4. Tiền xử lý văn bản
Bước đầu tiên và không thể thiếu trong việc xử lý ngôn ngữ tự nhiên là tiền xử lý.
Vì văn bản vốn dĩ được liệt kê mà khơng có cấu trúc, để ngun vậy để xử lý là rất khó
khăn. Đặc biệt là loại văn bản trên web có lẫn các HTML tag, code JS, đó chính là noise.
Vì vậy, ta phải biến đổi các tài liệu sang một khuôn dạng phù hợp với các giải thuật phân
loại. Phép xử ý như vậy được gọi là tiền xử lý văn bản (text preprocessing)
Bước tiền xử lý văn bản gồm 4 công đoạn:
1. Thực hiện làm sạch dữ liệu để loại bỏ tạp nhiễu nhằm có kết quả xử lý dữ liệu
tốt. Đa phần tạp nhiễu là các thẻ HTML, JavaScript.
2. Thực hiện tách từ - một công đoạn quan trọng bậc nhất trong xử lý ngơn ngữ tự
nhiên, do Tiếng Việt có độ phức tạp hơn ngơn ngữ khác (bởi có các từ ghép). Việc tách từ
theo nhiều cách khác nhau có thể gây ra sự hiểu nhầm về mặt ngữ nghĩa. Tuy nhiên, có
một số công cụ hỗ trợ thực hiện việc này, phổ biến nhất là VnTokenizer.
3. Chuẩn hóa từ để đưa văn bản từ các dạng không đồng nhất về cùng một dạng
(ví dụ tất cả đều chuẩn về chữ thường). Việc tối ưu bộ nhớ lưu trữ và tính chính xác cũng
rất quan trọng. Có nhiều cách viết, mỗi cách viết khi lưu trữ sẽ tốn dung lượng bộ nhớ
khác nhau (như half size chỉ tốn 1/2 dung lượng so với full size). Do đó, tuỳ theo nhu
cầu, tình hình thực tế để đưa văn bản về một dạng đồng nhất.
4. Loại bỏ những từ khơng có ý nghĩa (stop words) mà xuất hiện nhiều trong ngơn
ngữ tự nhiên. Có 2 cách chính để loại bỏ stop words, đó là dùng từ điển hoặc dựa theo tần
suất xuất hiện. Bài báo này sử dụng phương pháp từ điển là phương pháp đơn giản nhất
tạo một từ điển gồm những từ không có ý nghĩa và tiến hành lọc các tệp tin văn bản để
loại bỏ những từ xuất hiện trong từ điển stop words.
1.5. Thuận toán phân loại văn bản
Dưới đây là một số thuật toán phổ biến được dùng trong khai phá dữ liệu:
•
•
•
•
•
•
Naive Bayes
Cây quyết định: Decision tree
Láng giềng gần nhất: Nearest Neighbor
Mạng Neural: Neural Network
Luật quy nạp: Rule Induction
Thuật tốn K-Means: K-Means
CHƯƠNG 2: THUẬT TỐN K-NEAREST NEIGHBORS
2.1. Giới thiệu chung
KNN là một trong những thuật tốn học có giám sát đơn giản nhất mà hiệu quả
trong một vài trường hợp trong học máy. Khi huấn luyện, thuật toán này khơng học một
điều gì từ dữ liệu huấn luyện (đây cũng là lý do thuật toán này được xếp vào loại lazy
learning), mọi tính tốn được thực hiện khi nó cần dự đốn kết quả của dữ liệu mới. KNN
có thể áp dụng được vào cả hai loại của bài toán học có giám sát là phân lớp và hồi quy.
KNN cịn được gọi là một thuật tốn instance-based hay memory-based learning.
Một cách ngắn gọn, KNN là thuật tốn đi tìm đầu ra của một điểm dữ liệu mới
bằng cách chỉ dựa trên thông tin của K điểm dữ liệu gần nhất trong tập huấn luyện.
2.2. Nội dung thuật tốn
Mơ tả thuật toán:
Xác định giá trị tham số K (số láng giềng gần nhất).
Tính khoảng cách giữa điểm truy vấn phân lớp với tất cả các đối tượng trong tập
dữ liệu huấn luyện.
• Sắp xếp khoảng cách theo thứ tự tăng dần và xác định K-nearest neighbors với
điểm truy vấn phân lớp.
• Lấy tất cả các lớp của K-nearest neighbors đã xác định.
• Dựa vào phần lớn lớp của láng giềng gần nhất để xác định lớp cho điểm truy vấn
phân lớp, lớp của điểm truy vấn phân lớp được định nghĩa là lớp chiếm đa số trong
K-nearest neighbors.
•
•
2.3. Ý tưởng của thuật toán KNN
Thuật toán KNN cho rằng những dữ liệu tương tự nhau sẽ tồn tại gần nhau trong
một khơng gian, từ đó cơng việc của chúng ta là sẽ tìm k điểm gần với dữ liệu cần kiểm
tra nhất. Việc tìm khoảng cách giữa 2 điểm củng có nhiều cơng thức có thể sử dụng, tùy
trường hợp mà chúng ta lựa chọn cho phù hợp. Đây là 3 cách cơ bản để tính khoảng cách
2 điểm dữ liệu x, y có k thuộc tính:
Việc tính khoảng cách giữa các đối tượng cần phân lớp với tất cả các đối tượng trong tập
dữ liệu huấn luyện được thường được sử dụng với công thức tính khoảng cách Euclidean.
Cho 2 điểm P1(x1, y1) và P2(x2, y2) thì khoảng cách Euclidean distance sẽ được tính
theo cơng thức:
2.4. Ví dụ
Ví dụ đơn giản nhất
Bài tốn đặt ra: Bạn có điểm của một mơn học nhưng bạn khơng biết thuộc loại nào
(Giỏi, khá, trung bình, yếu). Giả sử bạn khơng biết bất kì quy tắc nào để phân loại cả.
Có một cách giải quyết là bạn phải đi khảo sát những người xung quanh. Để biết điểm
của mình thuộc loại nào thì bạn phải đi hỏi những đứa có điểm gần số điểm mình nhất.
Giả sử trong lớp 50 đứa, mình khảo sát 5 đứa gần điểm mình nhất và được dữ liệu như
sau:
Điểm của tôi: 7
Điểm của bạn tôi:
7.1 => Khá 7.2 => Khá 6.7 => Khá
6.6 => Khá 6.4 => Trung bình
Qua kết quả trên thì ta sẽ dễ đốn được điểm của tơi là loại Khá? Với cách này chúng ta
có thể phân loại dữ liệu 1 chiều (1 feature) bằng cách làm khá đơn giản. Và nhận thấy
rằng dữ liệu mình khảo sát càng nhiều, càng rộng thì dự đốn đưa ra càng chính xác (Giả
sử lớp bạn khơng có ai loại khá ngồi bạn thì cho dù bạn lấy bao nhiêu người gần điểm
bạn nhất củng sẽ ra kết quả sai).
Với KNN, trong bài toán Classification, label của một điểm dữ liệu mới (hay kết
quả của câu hỏi trong bài thi) được suy ra trực tiếp từ K điểm dữ liệu gần nhất trong
training set. Label của một test data có thể được quyết định bằng major voting (bầu chọn
theo số phiếu) giữa các điểm gần nhất, hoặc nó có thể được suy ra bằng cách đánh trọng
số khác nhau cho mỗi trong các điểm gần nhất đó rồi suy ra label.
Trong bài toán Regresssion, đầu ra của một điểm dữ liệu sẽ bằng chính đầu ra của điểm
dữ liệu đã biết gần nhất (trong trường hợp K=1), hoặc là trung bình có trọng số của đầu ra
của những điểm gần nhất, hoặc bằng một mối quan hệ dựa trên khoảng cách tới các điểm
gần nhất đó.
Một cách ngắn gọn, KNN là thuật tốn đi tìm đầu ra của một điểm dữ liệu mới
bằng cách chỉ dựa trên thông tin của K điểm dữ liệu trong training set gần nó nhất (K-lân
cận), khơng quan tâm đến việc có một vài điểm dữ liệu trong những điểm gần nhất này là
nhiễu.
Ví dụ trên đây là bài toán Classification với 3 classes: Đỏ, Lam, Lục. Mỗi điểm dữ
liệu mới (test data point) sẽ được gán label theo màu của điểm mà nó thuộc về. Trong
hình này, có một vài vùng nhỏ xem lẫn vào các vùng lớn hơn khác màu. Ví dụ có một
điểm màu Lục ở gần góc 11 giờ nằm giữa hai vùng lớn với nhiều dữ liệu màu Đỏ và
Lam. Điểm này rất có thể là nhiễu. Dẫn đến nếu dữ liệu test rơi vào vùng này sẽ có nhiều
khả năng cho kết quả khơng chính xác.
Hình dưới đây là một ví dụ về KNN trong classification với K = 1.
2.5. Ưu điểm và nhược điểm của KNN
- Ưu điểm
Độ phức tạp tính tốn của q trình huấn luyện là bằng 0.
Việc dự đoán kết quả của dữ liệu mới rất đơn giản (sau khi đã xác định được các điểm
lân cận).
• Khơng cần giả sử về phân phối của các lớp.
•
•
- Nhược điểm
•
KNN rất nhạy cảm với nhiễu khi K nhỏ.
•
Như đã nói, KNN là một thuật tốn mà mọi tính tốn đều nằm ở khâu kiểm thử, trong
đó việc tính khoảng cách tới từng điểm dữ liệu trong tập huấn luyện tốn rất nhiều thời
gian, đặc biệt là với các cơ sở dữ liệu có số chiều lớn và có nhiều điểm dữ liệu. Với K
càng lớn thì độ phức tạp cũng sẽ tăng lên. Ngoài ra, việc lưu toàn bộ dữ liệu trong bộ
nhớ cũng ảnh hưởng tới hiệu năng của KNN.
2.6. Các tham số quan trọng của thuật toán KNN
Các tham số quan trọng đối với thuật tốn KNN:
- Giá trị K: K càng lớn thì thuật tốn càng ít nhạy cảm với nhiễu, nhưng nếu K lớn q
một ngưỡng nào đó thì độ chính xác của thuật tốn có thể giảm vì K-nearest neighbors
này có thể thuộc về nhiều lớp khác nhau, dẫn đến độ tin cậy của việc phân lớp giảm.
- Hàm khoảng cách: để tính khoảng cách giữa điểm cần phân loại và điểm trong tập dữ
liệu huấn luyện. Có nhiều hàm khoảng cách và em chọn hàm khoảng cách Euclidean vì
sự đơn giản và phổ biến của nó.
- Cách đánh trọng số các điểm lân cận: có nhiều cách đánh trọng số cho các điểm lân cận
nhưng em chọn phương pháp đồng nhất (uniform) vì tính đơn giản.
Ngồi các tham số trên của thuật tốn KNN thì độ chính xác của thuật tốn còn phụ thuộc
vào số chiều của vectơ đặc trưng biểu diễn mỗi điểm dữ liệu (trong trường hợp này là
một văn bản).
2.7. Làm thế nào để chọn một giá trị K
Giá trị K cho biết số lượng các hàng xóm gần nhất. Ta phải tính tốn khoảng cách
giữa các điểm kiểm tra và các điểm nhãn được đào tạo. Việc cập nhật số liệu khoảng cách
với mỗi lần lặp lại rất tốn kém về mặt tính tốn và đó là lý do tại sao KNN là một thuật
toán lười học.
Ta có thể xác minh từ hình trên, nếu chúng ta tiếp tục với K = 3, thì chúng ta dự đoán đầu
vào bài kiểm tra thuộc Class B và nếu chúng ta tiếp tục với K = 7, thì chúng ta dự đoán
đầu vào bài kiểm tra thuộc Class A.
Cho nên giá trị K có ảnh hưởng mạnh mẽ đến hiệu suất KNN.
Khi đó làm thế nào để chọn giá trị K tối ưu?
Khơng có phương pháp thống kê nào được xác định trước để tìm giá trị thuận lợi nhất
của K.
• Khởi tạo một giá trị K ngẫu nhiên và bắt đầu tính tốn.
• Việc chọn một giá trị nhỏ của K dẫn đến ranh giới quyết định khơng ổn định.
• Giá trị K đáng kể sẽ tốt hơn cho việc phân loại vì nó dẫn đến việc làm dịu các ranh
giới quyết định.
•
Bài học rút ra là:
•
•
•
•
•
Các giá trị K nhỏ không phù hợp để phân loại.
Giá trị K tối ưu thường được tìm thấy là căn bậc hai của N, trong đó N là tổng số mẫu.
Sử dụng biểu đồ sai số hoặc biểu đồ độ chính xác để tìm giá trị K có lợi nhất.
KNN hoạt động tốt với các lớp đa nhãn, nhưng ta phải lưu ý những điểm khác biệt.
KNN được sử dụng rộng rãi trong lĩnh vực nhận dạng mẫu và đánh giá phân tích .
CHƯƠNG 3: GIỚI THIỆU NGƠN NGỮ LẬP TRÌNH PYTHON
3.1 Python
Python là một ngơn ngữ lập trình bậc cao cho các mục đích lập trình đa năng, do
Guido van Rossum tạo ra và lần đầu ra mắt vào năm 1991. Python được thiết kế với ưu
điểm mạnh là dễ đọc, dễ học và dễ nhớ. Python là ngôn ngữ có hình thức rất sáng sủa,
cấu trúc rõ ràng, thuận tiện cho người mới học lập trình và là ngơn ngữ lập trình dễ học.
được dùng rộng rãi trong phát triển trí tuệ nhân tạo hoặc AI
3.2 Cài đặt Python
Tải python tại đây: />Khi đã cài xong, mở IDLE và chạy thử
Như vậy đã hoàn thành xong việc cài đặt Python, việc còn lại là cài đặt những thư viện
cần thiết để hỗ trợ bài toán
Việc hỗ trợ xử lý văn bản của Python rất mạnh, nhiều thư viện và thuật toán cho phân loại
văn bản, Machine learning. Ở đây, bài toàn cần các thư viện sau: numpy, sklearn, nltk, …
Sử dụng cmd để cài đặt:
- Nếu pip chưa có sẵn gói thì ta phải cài đặt cho nó, ta thực hiện như sau:
- Sau khi cài đặt thành cơng gói pip ta sẽ tiếp tục cài đặt thư viện numpy:
- Tương tự ta cài đặt thư viện sklearn và các thư viện cần thiết:
Như vậy là đã hoàn thành việc cài đặt các thư viện hỗ trợ cho python cũng như bài tốn
Tìm hiểu một chút về thư viện Sklearn:
Sklearn là thư viện phổ biến nhất của python. Nó viết sẵn các thuật toán phức tạp, ta chỉ
cần nhét dữ liệu vào rồi chờ nó tính tốn rồi lấy kết quả
CHƯƠNG 3: TRIỂN KHAI THUẬT TOÁN K-NEAREST NEIGHBOR TRÊN NGÔN
NGỮ PYTHON
3.1. Chuẩn bị dữ liệu
Dưới đây là các file văn bản theo 05 chủ đề được dùng trong thực nghiệm:
3.2. Triển khai thử nghiệm
Một quy trình từng bước rất đơn giản để xây dựng đường ống để đào tạo mơ hình
học máy cho các ứng dụng phân tích văn bản có thể được tuân theo như thế này:
Texts ==> Stop words removal ==> Punctuation free ==> Word Lemmatization ==>
Digit removal ==> Feature Extraction (Tf-Idf) ==> Model training
Em sẽ sử dụng kỹ thuật TF-IDF để biến văn bản thành một vector và sử dụng thuật toán
KNN trong thư viện sklearn để tiến hành phân lớp.
3.2.1. Khai báo các thư viện cần thiết
3.2.2. Tiền xử lý văn bản
Đây là 1 trong những bước quan trọng nhất. Mục đích là loại bỏ bất kỳ từ hoặc ký tự
không mong muốn được viết cho khả năng đọc của con người. Nói chung, chủ yếu có 4
bước vệ sinh cần được thực hiện trên các câu văn bản:
Loại bỏ các Stop words: Những Stop words như “and”, “if”, “the”, etc. rất phổ
biến trong tất cả các câu tiếng Anh và khơng có nhiều ý nghĩa trong việc quyết
định chủ đề của bài viết, vì vậy những từ này có thể bị loại bỏ khỏi bài viết.
• Loại bỏ các ký tự dấu chấm câu: Loại trừ tất cả các dấu câu khỏi tập hợp (['!', '#',
'"', '%', '$'," '",' & ',') ',' (',' + ',' * ',' - ',', ',' / ','. ','; ',': ',' = ',' <','? ','> ',' @ ',' [' , ']', '\\',
'_', '^', '' ',' {','} ',' | ',' ~ ']).
• Bổ sung: Đây là q trình nhóm các dạng từ được hiểu khác nhau lại với nhau để
chúng có thể được phân tích thành một mục duy nhất. Ví dụ: “include”,
“includes,” và “included” tất cả sẽ được biểu thị là “include”. Ngữ cảnh của câu
cũng được duy trì theo cách bổ ngữ thay vì từ gốc
• Loại bỏ các chữ số khỏi câu văn bản
•
3.2.3. Trích xuất thuộc tính đặc trưng với TF-IDF
TF-IDF (Term Frequency – Inverse Document Frequency) là 1 kĩ thuật sử dụng trong
khai phá dữ liệu văn bản. Trọng số này đượ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 phân loại văn bản.
Đây là cơ sở quan trọng để tạo ra các đặc trưng đầu vào cho việc train mơ hình phân loại
văn bảo về sau
3.2.4. Đào tạo Phân loại (K-NN)
Ở đây giá trị K thử nghiệm là K=5
3.2.5. Kết quả