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

báo cáo đề tài phân loại thư rác dùng thuật toán nave bayes cải tiến của paul

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 (529.15 KB, 22 trang )

ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
BÀI TẬP LỚN
HỌC PHẦN: XỬ LÍ NGÔN NGỮ TỰ NHIÊN
1. ĐỀ TÀI: PHÂN LOẠI THƯ RÁC DÙNG THUẬT TOÁN
NAÏVE BAYES CẢI TIẾN của PAUL GRAHAM
Giáo viên hướng dẫn: PGS. TS. Lê Thanh Hương
Sinh viên thực hiện
1. Nguyễn Đình Dũng 20086079
2. Nguyễn Thành Lâm 20081487
3. Vũ Đông Lâm 20081496
4. Đoàn Ngọc Sơn 20082211
5. Trần Huy Hưng 20081307
Lời nói đầu
Ngày nay sự phát triển không ngừng của công nghệ thông tin, đặc biệt
là sự ra đời của Internet đã đưa con người lên một tầm cao mới. Sự ra đời
của các dịch vụ trên Internet làm cho nhu cầu trao đổi thông tin, tìm kiếm
thông tin của con người được đáp ứng một cách tốt nhất và nhanh nhất. Có
rất nhiều dịch vụ mới phát triển cùng công nghệ thông tin nhằm giúp công
nghệ thông tin thân thiết với người dùng hơn. Một trong những dịch vụ góp
phần không nhỏ vào việc giúp con người trao đổi thông tin một cách nhanh
chóng đó là dịch vụ thư điện tử (electronic mail).
Tốc độ phát triển của các dịch vụ thư điện tử ngày nay và những lợi ích
mà nó mang lại cho chúng ta là rất lớn. Qua thư điện tử người dùng không
chỉ nhận được thông tin mong muốn mà còn có thể nhận được âm thanh hình
ảnh, đồ họa và cả những kho dữ liệu khổng lồ mà trước đây việc trao đổi thư
từ qua tay không bao giờ có được. Tuy nhiên, thư điện tử không chỉ mang
đến cho con người nhiều lợi ích mà còn rất nhiều tác hại vô bổ khác, có thể
gây ra những thiệt hại to lớn nếu không biết cách loại bỏ và phòng chống nó.
Một trong những vấn đề nghiêm trọng cần giải quyết hiện nay trong các thư
điện tử đó là nạn thư rác hay còn gọi là “spam”. Đó là những thư từ quảng


cáo, hay các thư điện tử mà nội dung của nó thường có hại cho người dùng.
Qua quá trình học tập và tìm hiểu về Xử lí ngôn ngữ tự nhiên, cụ thể là về các
phương pháp phân loại văn bản nhóm em đã chọn đề tài: “PHÂN LOẠI THƯ
RÁC DÙNG THUẬT TOÁN NAÏVE BAYES CẢI TIẾN của PAUL GRAHAM”. Qua đề
tài này, nhóm em cố gắng nắm bắt tốt phương pháp phân loại văn bản bằng
thuật toán Naive Bayes và từ đó có thể xây dựng các chương trình ứng dụng
lọc thư rác hiệu quả với các dịch vụ thư điện tử hiện nay.
2
2
I. Giới thiệu Bài toán phân loại thư rác
1. Khái niệm thư rác
1.1. Thư rác là gì?
Thư rác hay còn gọi là spam mail là các thư điện tử vô bổ
thường chứa các loại quảng cáo được gửi một cách vô tội vạ và
chất lượng của loại thư này thường thấp. Đôi khi, nó dẫn dụ
người nhẹ dạ, tìm cách đọc số thể tín dụng và các tin tức cá
nhân của họ.
Có thể nói thư rác là một hình thức “tra tấn người dùng thư
điện tử” bằng quảng cáo. Các thư rác có thể vô hại nhưng mỗi
ngày một người có thể vì các thư rác này mà bị đầy cả hộp thư
(có người đã từng nhận cả trăm thư rác trong một ngày mà chỉ
có đúng ba nội dung khác nhau!!!). Có thể chúng ta sẽ thắc mắc
tại sao người ta lại lặp đi lặp lại một cái thư quảng cáo cả chục
lần cho một người, cũng đơn giản là vì họ muốn dùng hiệu ứng
tâm lí… Khi hình ảnh sản phẩm nào đó cứ đập vào mắt mình
mãi thì đến lúc cần mua một thứ có chức năng tương tự (hay
cùng loại) thì chính hình ảnh thương hiệu của cái thư rác sẽ
hiện lên trong óc chúng ta trước tiên. Hoặc giả dụ đôi khi “lỡ
tay” hay chỉ vì tò mò người đọc sẽ “click” vào cái link và thế là
“lưới nhện đã giăng sẵn chỉ chờ con mồi ”

Như vậy, theo định nghĩa thì các thư rác có thể có hại cho máy
tính (hiểu theo nghĩa vật chất), đôi khi còn làm chúng ta bực
mình khó chịu hoặc làm cho các thư từ khác (nhất là các thư
gửi có nghĩa quan trọng) bị lẫn lộn trong một đống thư mà chủ
yếu là các thư rác. Khiến cho việc tìm kiếm cũng mất thời gian
và cũng có thể khi xoá thư rác lại xoá nhầm thư quan trọng.
1.2. Sự cần thiết phải phân loại thư rác
3
3
Spam đang được coi là một vấn đề “lớn” trên mạng Internet.
Con số các “spam” gia tăng hàng ngày được nghiện cứu và
chiếm tỉ lệ lớn trên tổng số lượng email được gửi đi trên toàn
thế giới
Tốc độ tăng trưởng của Spam được thống kê theo lược đồ sau:
Ngày nay, khi spam mail trở thành một hình thức quảng cáo
chuyên nghiệp, phát tán virus, ăn cắp thông tin … thì một
chương trình anti-spam cho email là rất cần thiết. Chúng ta sẽ
phải mất khá nhiều thời gian để xóa những email “không mời
mà đến”, nếu vô ý còn có thể bị nhiễm virus, trojan, spyware …
và nặng nề hơn là mất thông tin như thẻ tín dụng, tài khoản
ngân hàng qua các email dạng phishing. Đối với người dùng
khi “checkmail” mà gặp phải thư rác sẽ gây ra một cảm giác
khó chịu và làm tốn thời gian để xóa thư đôi khi còn gây ra
những hậu quả nghiệm trọng hơn đối với những người dùng có
4
4
tính tò mò… Vì vậy việc xây dựng một hệ thống lọc thư rác cá
nhân tự động là rất cần thiết
1.3. Phân loại thư rác
Tổ chức hợp tác phát triển kinh tế OECD (Organization for

Economic Co-operatation Development) khuyến nghị một số
biện pháp đối phó với spam, trong đó có việc thông qua các chế
tài pháp lý quốc tế, đầu tư mạnh vào hệ thống lọc thư rác, thiết
lập những trung tâm phản ứng nhanh liên kết các ISP (Internet
service Provider) toàn cầu, đồng thời tăng cường các chiến
dịch tuyên truyền cộng đồng về sự nguy hại và cách đối phó với
thư rác. Hiện giải pháp được sử dụng nhiều nhất là dùng các
phần mềm tích hợp với hệ thống thư hoạt động theo cơ chế “lọc
theo nội dung” và “lọc theo danh sách website chuyển tiếp”
- Lọc email qua nội dung: Một chương trình sẽ thu thập
thông tin nằm trong phần nội dung của email để giúp cho
các quản trị viên máy chủ email tách thư rác ra khỏi hệ
thống. Phần mềm sẽ lướt qua toàn bộ thông điệp để tìm
kiếm những từ khóa có liên quan đến thư rác. Chẳng hạn
nếu bạn không phải là một bác sĩ, những bức thư bạn mong
nhận được ít có liên quan đến các vấn đề giới tính. Vì vậy,
“viagra” có thể là một từ khóa lọc thư quan trọng. Các cơ
chế lọc thư phức tạp hơn có thể lọc nguyên cả một đoạn mã
lệnh đầu của thông điệp, những đoạn mã này bám theo suốt
quá trình luân chuyển của email và cung cấp thông tin về
chuyến đi đó. Nếu một site spam có tên trong lịch trình đó,
phần mềm sẽ tự động chặn bức thông điệp lại.
- Lọc theo danh sách website chuyển tiếp: Một công nghệ
lọc khác dựa trên danh sách các site chuyển tiếp. Công nghệ
lọc này kiểm tra và chặn các thông điệp được truyền tải qua
5
5
những điểm chuyển tiếp mở rộng, tức là các hệ thống trên
Internet cho phép người sử dụng dùng chúng như những
điểm quá cảnh thư. Những kẻ tấn công bằng spam

(spammer) thường xuyên sử dụng các điểm chuyển tiếp mở
này để che dấu tung tích xuất xứ của mình. Trong nhiều
trường hợp, tin tặc tận dụng các lỗ hổng bảo mật để “ra
lệnh” cho các máy chủ chuyển tiếp làm công việc của
spammer.
 Đối với các email cá nhân thì phương pháp lọc thư rác phổ
biến hiện nay là “phân loại qua nội dung của các email”
bằng việc ứng dụng các phương pháp phân loại văn bản.
Phân loại email thực chất là phương pháp “phân loại văn bản
hai lớp” dựa vào nội dung của các email được gửi đến. Trong
đề tài này nhóm em xin trình bày một phương pháp phân loại
văn bản khá phổ biến “Naive Bayes” và ứng dụng phương
pháp này để phân loại các email cá nhân trong một Email
Client.
2. Bài toán phân loại văn bản
2.1. Định nghĩa
Có nhiều cách định nghĩa khác nhau về phân loại văn bản
nhưng nói một cách ngắn gọn dễ hiểu: Phân loại văn bản là sự
phân loại không cấu trúc các tài liệu văn bản dựa trên một tập
hợp của một hay nhiều loại văn bản đã được định nghĩa trước.
Quá trình này thường được thực thi bằng một hệ thống tự
động gán cho các tài liệu văn bản một loại nào đó.
Trong thực tế ứng dụng quan trọng nhất của phân loại văn bản
là giới hạn phạm vi tìm kiếm thông tin (bởi thay cho việc phải
lục soát tất cả các tài liệu họ chỉ tập trung vào một số loại văn
bản có liên quan đến thông tin mà họ cần tìm kiếm). Phân loại
6
6
văn bản góp phần quan trọng trong việc tổ chức thông tin và
quản lí tài liệu. Ứng dụng phổ biến nhất của phân loại văn bản

là trợ giúp cho việc tìm kiếm và lọc văn bản do đó tăng tốc độ
truy cập thông tin. Phân loại văn bản cũng đóng vai trò quan
trọng trong việc đa dạng hóa và chuyên nghiệp hóa các công
việc quản lí thông tin như là: việc sắp xếp các loại thư điện tử
hoặc các file trong các hệ thống, xác minh chủ đề để trợ giúp
cho các tiến trình hoạt động xử lí, tìm kiếm hay duyệt các cấu
trúc, hoặc để tìm kiếm các loại tài liệu mà người dùng quan
tâm. Như vậy làm thế nào để phân loại văn bản? Câu trả lời sẽ
được làm rõ khi ta đi sâu vào tìm hiểu tiến trình phân loại văn
bản.
2.2. Tiến trình thực hiện phân loại văn bản
Vấn đề đặt ra cho các bài toán phân loại văn bản có thể bắt đầu
như sau:
Đưa ra một tập tài liệu mẫu D, cần được phân bổ thành
một số loại tài liệu nhất định - mỗi tài liệu đó cần được gán cho
một loại văn bản nào đó. Nhiệm vụ của chúng ta là tìm một hệ
thống phân hoạch, mà nó sẽ cung cấp cho ta một nhãn y phù
hợp cho một số tài liệu trong D vừa được đưa vào từ nguồn tài
nguyên giống nhau như các văn bản mẫu. Tổng quát hơn với
một hệ thống phân loại điển hình như mô tả ở sơ đồ sau gồm có
các tiến trình:
7
7
Trong thực tế khâu tiền xử lí cũng chính là khâu lựa chọn
đặc trưng cho các văn bản (đặc trưng ở đây là các dấu hiệu
quan trọng để nhận biết văn bản). Có thể coi khâu này là tiền
đề cần thiết cho việc học một bộ phân loại.
• Các bước trong tiến trình phân loại văn bản:
- Lựa chọn các đặc trưng văn bản
- Biểu diễn văn bản

- Học một bộ phân loại văn bản
- Tiến hành phân loại văn bản
Trong đó, lựa chọn đặc trưng văn bản là quá trình phân
tích văn bản thành các từ hay cụm từ. Biểu diễn văn bản là
cách thể hiện văn bản dưới dạng một vector mà không gian
của nó là tập các đặc trưng đã lựa chọn. Căn cứ vào các đặc
trưng đã chọn có thể học một bộ phân loại văn bản như Naive
Bayes hay kNN… Đầu ra của quá trình này sẽ là một máy dùng
để phân loại các tài liệu cần thiết (tiến hành phân loại văn
bản).
2.3. Phương pháp PLVB – Mô hình xác suất Naïve Bayes
Dựa trên các đặc trưng của văn bản đã xuất hiện nhiều chiến
lược phân loại văn bản đã được đề xuất và áp dụng trong các
tập tài liệu khác nhau. Hiệu quả của các phương pháp đó tuy
chỉ là tương đối nhưng đã hỗ trợ rất nhiều trong truy cập,
quản lí, lọc thông tin. Các phương pháp phân loại văn bản cho
kết quả tốt thường được sử dụng như:
- Nguyên mẫu (prototype)
- Mô hình xác suất Naive Bayes
- Phương pháp SVM (Support Vectors Machines)
- Phương pháp cây quyết định (Decision Trees)
8
8
- Phương pháp mạng neuron (Neuron Network)
Trong phạm vi đề tài, nhóm em chỉ xin trình bày cụ thể về
phương pháp phân loại văn bản sử dụng các mô hình xác
suất Naïve Bayes. Kĩ thuật phân hoạch của Naive Bayes dựa
trên cơ sở định lí Bayes và đặc biệt phù hợp cho các trường
hợp phân loại có kích thước đầu vào là lớn. Mặc dù Naive
Bayes khá đơn giản nhưng nó có khả năng phân loại tốt hơn

rất nhiều phương pháp phân hoạch phức tạp khác. Với mỗi loại
văn bản, thuật toán Naive Bayes tính cho mỗi lớp văn bản một
xác suất mà tài liệu cần phân hoạch có thể thuộc loại đó. Tài
liệu đó sẽ được gán cho lớp văn bản nào có xác suất cao nhất.
Chi tiết về thuật toán Naive Bayes sẽ được trình bày kĩ ở phần
sau.
3. Bài toán phân loại thư rác
Phân loại thư rác thực chất là bài toán phân loại văn bản hai
lớp, trong đó: tập tài liệu mẫu ban đầu là các thư rác (spam) và
các thư hợp lệ (ham), các văn bản cần phân lớp là các Email
được gửi đến client. Kết quả đầu ra của quá trình phân loại này
là hai lớp văn bản: Spam (thư rác), Ham (thư hợp lệ). Mô hình
phân loại thư rác tổng quát có thể mô tả như sau:
9
9
Tiến trình phân loại các thư điện tử trong máy lọc văn bản
được biểu diễn như sau:
10
10
Các thuật toán áp dụng để phân loại văn bản đều có thể áp
dụng để phân loại thư rác. Phương pháp Naive Bayes mặc dù
hiệu quả có thể nhỏ hơn các phương pháp khác nhưng đơn
giản.
11
11
II. Thuật toán Naïve Bayes và bộ lọc thư rác (Spam
Filter)
2. Thuật toán phân loại văn bản Bayes
Như đã trình bày ở phần trước “Naive Bayes” do những giả thuyết
nới lỏng phụ thuộc thống kê, coi các từ xuất hiện trong một văn

bản là độc lập thống kê. Cơ sở của phương pháp phân loại văn bản
Naive Bayes là chủ yếu dựa trên các giả định của Bayes. Giả thuyết
Bayes gán cho mỗi tài liệu văn bản cần phân loại một giá trị xác
suất.
Xác suất P(ck| di) gọi là xác suất mà tài liệu di có khả năng thuộc
vào lớp văn bản ck được tính toán như sau:
tài liệu di sẽ được gán cho loại văn bản nào có xác suất hậu
nghiệm cao nhất nên được biểu diễn bằng công thức:
trong đó N là tổng số tài liệu.
Tóm lại phân loại văn bản sử dụng thuật toán Naive Bayes có
thể diễn đạt một cách ngắn gọn như sau:
Với mỗi văn bản D (document), người ta sẽ tính cho mỗi loại một
xác suất mà tài liệu D có thể thuộc vào lớp tài liệu đó bằng việc sử
dụng luật Bayes:
12
12
Trong đó: D là tài liệu cần phân loại, Ci là một tài liệu bất kì. Theo
giả định của Naive Bayes xác suất của mỗi từ trong tài liệu D là
độc lập với ngữ cảnh xuất hiện các từ đồng thời cũng độc lập với
vị trí của các từ trong tài liệu. Xác suất P(D|Ci) được tính toán từ
tần suất xuất hiện của các từ đơn wj (word) trong tài liệu D
l là tổng số từ w trong tài liệu D:
Như vậy biểu thức (1) có thể được viết lại như sau:
Giá trị lớn nhất của xác suất P(Ci | D) được đưa ra bởi nguời làm
công tác phân loại. Giá trị này được gọi là ngưỡng hay ranh rới
giữa các lớp văn bản mà chúng có thể chứa tài liệu D.
3. Quá trình hoạt động của bộ lọc thư rác Bayes
Bộ lọc thư Bayes dựa trên một cơ sở tất yếu là hầu hết các sự kiện
đều phụ thuộc và đó là xác suất của các sự kiện xuất hiện trong
tương lai, có thể được suy luận ra từ những sự xuất hiện trước đó

của các sự kiện này.
3.1. Tạo một cơ sở dữ liệu từ Bayes thích hợp
13
13
Trước khi lọc thư cần áp dụng phương thức này, một người sử
dụng có thể cung cấp một cơ sở dữ liệu với tập các từ và các
tokens (ví dụ $, địa chỉ IP của các vùng ) tập hợp các mẫu thư
được coi là các thư rác (spam) và tập mẫu thư được coi là thư
hợp lệ
3.2. Tạo một cơ sở dữ liệu cho các thư hợp lệ
(Thích hợp với mỗi người sử dụng hay với công ty riêng): công
việc này có thể được thay đổi theo những người sử dụng ở các cơ
quan khác nhau. Nói ngắn gọn là có thể thêm vào một file dữ liệu
lưu trữ các cụm từ thường xuất hiện trong các thư hợp lệ của cơ
quan hay người dùng đó làm cơ sở phân loại các thư hợp lệ. Một
vấn đề quan trọng cần lưu ý là việc phân tích các thư hợp lệ chỉ có
hiệu quả trong các thư điện tử của một cơ quan.
3.3. Tạo một cơ sở dữ liệu cho thư rác
Ngoài các thư hợp lệ “ham” bộ lọc Bayes cũng dựa trên một file dữ
liệu thư rác. File dữ liệu thư rác này phải bao gồm một mẫu lớn để
hiểu về thư rác và phải luôn luôn được cập nhật với những thư
rác gần đây nhất. Điều này sẽ chắc chắn rằng bộ lọc Bayes có khả
năng nhận biết được các thủ thuật của những thư rác gần đây
nhất và đem lại một tỉ lệ tìm kiếm thư rác là lớn nhất. Ngắn gọn
hơn là tạo một file dữ liệu chứa các cụm từ mà thường xuất hiện
14
14
trong các thư rác ví dụ các loại thư rác bằng tiếng anh thì thường
chứa những từ như “Greeting card” hay “$$$” hoặc “Free money”.
Những cụm từ đó cũng được gán cho một độ tin cậy nhất định,

đây là cơ sở để phân loại các thư rác. Cũng giống như phân loại
thư hợp lệ khái niệm thư rác cũng tùy thuộc vào người sử dụng
rất nhiều.
3.4. Tính các giá trị xác suất bằng thuật toán Naïve Bayes
Máy lọc thư rác sử dụng thuật toán Naive Bayes cung cấp một
chức năng lọc thư tự rác tự động. Trên cơ sở sử dụng các xác suất
gần đúng để tính toán các khả năng một thư điện tử có thể là thư
rác hay không. Sự tính toán này là quá trình tìm kiếm các từ
thường xuất hiện trong các thư điện tử và so sánh chúng với tập
mẫu. Thuật toán bắt đầu bằng việc học các nội dung của các thư
điện tử hợp lệ và nội dung của những thư rác. Để sau đó khi nhận
vào một thư điện tử mới, các thông tin có sẵn từ tập mẫu, các tiến
trình tiền xử lí trước sẽ được áp dụng trên cơ sở nội dung của các
thư điện tử.
Nguyên tắc tính các xác suất bằng thuật toán Bayes:
- Giả sử nội dung của mỗi thư điện tử là: content
- Lớp thư rác kí hiệu là: spam
- Lớp thư hợp lệ kí hiệu là: ham
- Xác suất để một thư điện tử là thư rác: P(spam|content)
- Word1, word2, word3…wordm là các từ đặc trưng xuất hiện
trong content
Ta có:
15
15
Trong đó total được xác định như sau:
Total = P(content | spam)*P(spam) + P(content | ham)*P(ham)
P(spam) = total spam / total messages
P(ham) = total ham / total messages
Để đơn giản hóa công thức và tính toán chúng ta giả định rằng
xác suất của các từ đó được bao hàm trong một văn bản là độc lập

với các từ khác trong cùng một tài liệu. Một cách nhìn khác của
giả định này là sự không chính xác. Bởi vì sự chỉ dẫn có hiệu quả
để tính toán đơn giản và trả về kết quả vẫn là một một kết quả
gần đúng. Giả định này được gọi là giả định Naive Bayes.
4. Thuật toán Naïve Bayes cải tiến (theo phương
pháp của Pau Graham)
Phương pháp cài đặt thuật toán Naïve Bayes theo cách của Paul
Gram (trích trong bài viết A Plan For Spam tại link nguồn sau
/>Theo tác giả của bài viết Paul Graham, để giải quyết bài toán thư
rác, ta vẫn có thể sử dụng thuật toán Naïve Bayes với một vài thay
đổi hay cũng có thể gọi là cải tiến so với thuật toán ban đầu.
16
16
Ý tưởng cơ bản của thuật toán cải tiến này là sử dụng xác suất
kết hợp của các từ xuất hiện trong mail. Vẫn là cách tiếp cận theo
hướng xác suất thống kê của giải thuật Naïve Bayes, nhưng công
thức của nó có khác công thức ban đầu. Nhóm em sẽ trình bày
công thức chi tiết và giải thích công thức trong phần tiếp theo.
Dễ thấy, có những từ thường xuất hiện trong thư rác và chính sự
xuất hiện thường xuyên đó làm nó trở thành dấu hiệu để nhận biết
thư rác. Những từ này có xác suất xuất hiện trong thư rác lớn hơn
xác suất xuất hiện trong thư thường. Các xác suất này P(SPAM|w)
có giá trị lớn (gần 1) và khi có sự xuất hiện của các từ này trong
mail thì nó sẽ làm tăng thêm xác suất mail đó là spam, càng có
nhiều từ như thế trong thì mức độ nghi ngờ thư đó là thư rác
càng tăng.
Thêm một điều cần lưu ý là vấn đề “vứt nhầm thư đúng” – false
positives – có nghĩa là khi một email là thư thường (còn gọi là
HAM) lại bị gán nhầm mác là SPAM và thế là bị cho vào SPAM
Folder – là nơi mà người sử dụng email rất ít khi kiểm tra tới. Đối

với hầu hết người dùng, việc “vứt nhầm thư đúng” này có tác hại
nghiêm trọng hơn rất nhiều so với việc họ phải nhận thư rác.
Nếu một người nhận được càng nhiều thư rác thì anh ta càng khó
tìm và nhận ra được những thư thường bị “lạc” trong mục Thư
rác. Và dĩ nhiên, nếu một bộ lọc thư rác càng hiệu quả tức là xác
suất gán mác đúng cho mỗi bức thư càng lớn (cái này thì quá tốt
rồi) nhưng cũng đồng nghĩa với việc anh ta sẽ càng gặp nhiều khó
khăn trong việc lục lọi hòm thư rác để xem là có thư nào quan
trọng bị vứt nhầm ở đấy không!
Sau đây, nhóm em xin được trình bày chi tiết về thuật toán
Naïve Bayes cải tiến theo phương pháp của Paul Graham:
Cũng giống như giải thuật Naïve Bayes cơ bản, thuật toán cải tiến
17
17
này cũng dựa trên nguyên tắc sử dụng giải thuật học máy để làm
cơ sở:
4.1. PHA HUẤN LUYỆN (TRAINING PHRASE)
- Từ tập dữ liệu mẫu là các file text (mỗi file chứa nội dung của một
email) và một file index lưu giữ thông tin về nhãn đúng của từng
email (dùng cho việc tối ưu tham số và tạo báo cáo), ta chia các
file text (email) ra làm 2 tập: tập huấn luyện (Training Set) và tập
kiểm tra (Test Set)
- Đọc nội dung của các email trong Training Set, đọc file index để
tìm nhãn đúng của mỗi email. Nếu một email là SPAM thì ghi thêm
nội dung của mail này (không bao gồm tiêu đề và các thông tin
khác) vào file SPAM.txt, ngược lại nội dung của mail sẽ được ghi
thêm vào file HAM.txt.
- Sau khi tiến hành đọc này, ta thu được 2 file có kích thước tương
đối lớn. Mục đích của bước lưu tất cả nội dung mail của mỗi nhóm
(SPAM vs HAM) vào 1 file lớn là để tiện cho việc đếm tần số và tính

xác suất. Đến đây, ta bắt đầu đếm số lần xuất hiện của một từ
trong mỗi nhóm SPAM vs. HAM, từ đó tính ra xác suất từ đó xuất
hiện trong SPAM. Sau đó lưu các giá trị xác suất này vào một danh
sách được sắp xếp theo giá trị xác suất (kiểu SortedList) và gọi
danh sách này là Bảng xác suất.
- Tuy nhiên, đến đây thì vẫn chưa có gì khác so với thuật toán Naïve
Bayes ban đầu. Có vài lưu ý cần quan tâm khi thực hiện bước
đếm tần số và tính xác suất ở trên:
o Dịch chuyển (thay đổi) xác suất một chút để ngăn chặn False
Positives, bằng cách tăng gấp đôi số lần xuất hiện của mỗi từ
trong thư thường. Điều này làm xác suất P(spam|w) giảm đi một
ít.
o Chỉ lưu xác suất của những từ có tổng số lần xuất hiện trong cả
hai nhóm > một giá trị cho trước. Việc này để bỏ qua những từ
18
18
xuất hiện quá ít và không có ảnh hưởng đáng kể đến việc phân
loại. Bằng phép thử sai, tác giả Paul Graham đã chọn ra giá trị
này là 5.
o Nếu một từ xuất hiện trong một nhóm này và không xuất hiện
trong nhóm kia thì tác giả sẽ được gán cho 2 giá trị gần đúng là
0.01 và 0.99 chứ không phải xác suất là 0.0 và 1.0 tương ứng.
o Xác suất một từ xuất hiện trong thư rác được tính bởi công
thức:
P (SPAM|w) = P(w|SPAM) / ((P(w|SPAM) + P(w|HAM)
Trong đó:
- P(w|SPAM) = số lần xuất hiện của w trong SPAM / số từ trong tập
SPAM
- P(w|HAM) = 2 (trọng số) * số lần xuất hiện của w trong HAM / số
từ trong tập HAM

o Xác suất của toàn bộ email sẽ được tính dựa vào xác suất của 15
từ “đáng quan tâm” nhất trong thư đó (15 most interesting words)
chứ không phải của tất cả các từ trong thư. Trong đó, mức độ
đáng quan tâm của mỗi từ được tính dựa vào độ chênh lệch về xác
suất P(SPAM|w) với giá trị trung lập 0.5, tức là đây là 15 từ đặc
trưng cho email này, các giá trị xác suất này rất gần giá trị xác
suất tuyệt đối 0 hoặc 1 và có ảnh hưởng lớn đến việc phân loại
email đó. Con số 15 cũng được Paul Graham lựa chọn, có thể thay
đổi để đánh giá hiệu quả theo tham số này.
o Cuối cùng, phần quan trọng nhất là công thức tính xác suất của
toàn bộ email. Như đã trình bày ở phần trên, ý tưởng cơ bản của
thuật toán cải tiến này là sử dụng xác suất kết hợp của các từ
xuất hiện trong mail.
Để hiệu rõ hơn về xác suất kết hợp, ta có thể lấy ví dụ: Một người
có chiều cao trên 1m9 thì xác suất anh ta có chơi bóng rổ là 60%.
Một người đang cầm 1 quả bóng rổ thì xác suất anh ta chơi bóng
19
19
rổ lên đến 80%. Hỏi một người vừa cao trên 1m9, vừa cầm bóng
rổ trên tay thì xác suất anh ta chơi bóng rổ là bao nhiêu?
Bài toán trên cho ta một cách hiểu dễ dàng nhất về khái niệm xác
suất kết hợp. Trong phạm vi đề tài, nhóm em sẽ chỉ đưa ra công
thức tính xác suất này mà không giải thích về mặt toán học nữa.
Nếu gọi a, b là hai xác suất đơn. Thì xác suất kết hợp của chúng sẽ
được tính bằng:
ab / (ab + (1-a)*(1-b))
Trong ví dụ trên, ta có: a = 0.6, b = 0.8

Xác suất kết hợp = 0.6*0.8/(0.6*0.8 + 0.4*0.2) = 0.857 > hai
xác suất đơn

Tổng quát hóa công thức xác suất kết hợp của các xác suất đơn
p1, p2, …, pn:
p1*p2*…*pn / (p1*p2*…*pn +(1-p1)*(1-p2)*…*(1-pn))
Như vậy, áp dụng công thức trên vào bài toán phân loại thư rác,
xác suất của mỗi từ đáng quan tâm (interesting word) sẽ ứng với
các pi – các xác suất đơn
P(SPAM|Mail)
= xác suất kết hợp của các xác suất đơn p1, p2,…, p15
- Đến đây, ta đã tính được xác suất một email là SPAM. Nên nhớ
rằng ta vẫn đang ở pha huấn luyện, và việc ta đang làm ở đây là
tính ra tất cả các xác suất của các email trong tập huấn luyện và
phân loại hay gán nhãn cho chúng là SPAM hay là HAM. Cần một
giá trị ngưỡng để thực hiện điều này. Lẽ ra việc chọn ngưỡng sẽ
thuộc về pha tối ưu (Cross Validation) dựa vào việc đánh giá hiệu
quả của pha huấn luyện với các giá trị ngưỡng khác nhau (trong
20
20
bài toán Học máy thì ngưỡng là một tham số học – learning
parameter - cần được xác định trong pha Tối ưu) . Tuy nhiên vì
thời gian có hạn nên nhóm em xin bỏ qua bước này và lấy giá trị
ngưỡng được chọn = 0.9, nghĩa là xác suất một email là SPAM:
P(SPAM|Mail) > 0.9 thì thư đó sẽ được phân loại là thư rác, trái lại
nó sẽ là thư thường.
4.2. PHA KIỂM THỬ (TEST PHRASE)
- Công việc khó khăn nhất là huấn luyện hay học từ dữ liệu đã được
giải quyết ở trên. Việc còn lại dùng tập dữ liệu kiểm tra (Test Set)
để đánh giá hiệu quả của việc học đó.
- Công việc ở đây là nạp tất cả các email trong tập Test vào bộ lọc
thư rác, để bộ lọc phân loại và trả về nhãn của mỗi email dựa trên
kinh nghiệm của nó - những gì mà bộ lọc đã được “học” từ các ví

dụ trong tập huấn luyện - để đánh giá các email mới mà nó “chưa
được học”.
- Cuối cùng là so sánh kết quả nhãn mà bộ lọc trả về với nhãn đúng
của mỗi email được lưu trong file index để đưa ra đánh giá hiệu
quả thuật toán phân loại bằng cách thống kê và viết báo cáo.
III. Ứng dụng Demo bộ lọc thư rác SpamFilterSample
1. Giới thiệu;
SpamFilterSample là một chương trình ứng dụng C# để cài đặt
thuật toán phân loại thư rác Naïve Bayes theo cách của Paul
Graham. Chương trình nguồn được tham khảo trên Internet, phần
thuật toán của pha huấn luyện được nhóm em kế thừa và có thay
đổi chút ít. Về cơ bản, thuật toán được cài đặt trong chương trình
cũng chính là thuật toán cải tiến đã được trình bày ở trên. Tuy
nhiên, phần kiểm thử Testing Phrase còn khá đơn giản: không có
tập kiểm thử, chỉ kiểm tra được từng email nên khó thực hiện
đánh giá vì số lượng test nhỏ. Vì vậy, nhóm em đã thiết kế lại toàn
21
21
bộ phần Test: tìm tập mẫu khác, phân chia tập mẫu thành các tập
Training Set và Test Set có kích thước khác nhau để đánh giá và so
sánh hiệu quả của thuật toán, thiết kế thêm tính năng kiểm tra
hàng loạt Test Batch và tự động so khớp kết quả nhãn thu được để
đưa ra các chỉ số đặc trưng về hiệu năng: Precision và Recall, với
mỗi tập huấn luyện và tập kiểm thử xác định.
2. Chương trình:
Có 3 lớp cần quan tâm:
- Lớp Corpus: đọc file văn bản cần kiểm tra (coi như email chỉ ở
dạng văn bản thuần text), sau đó tiến hành lưu trữ các từ cùng với
tần số xuất hiện của chúng trong file văn bản đó.
- Lớp SpamFilter: là lớp cài đặt thuật toán Naïve Bayes. Nó sẽ đọc

dữ liệu huấn luyện (training data) từ hai file SPAM.txt và HAM.txt
tương ứng là các mẫu email đã được phân loại sẵn là thư rác và
không phải thư rác (ham). Dữ liệu lưu trữ trong hai file tương đối
lớn, để đảm bảo tính đúng đắn của việc phân loại. Sau khi đọc dữ
liệu, tiếp tục tiến hành tính toán các giá trị xác suất của các từ w
xuất hiện trong thư rác: P(SPAM|w) và lưu vào bảng Bảng xác
suất.
- Lớp Form1: lớp cài đặt giao diện và thiết kế phần kiểm thử hàng
loạt và đánh giá hiệu quả thuật toán.
3. Hướng dẫn sử dụng chương trình:
Để chương trình có thể chạy thì cần có thư mục \Test Data chứa:
- Tập dữ liệu mẫu: 6000 file, mỗi file lưu nội dung một email.
- File index.txt: lưu nhãn đúng của mỗi email trong tập mẫu,
22
22
- Các file SPAM.txt, HAM.txt, SPAM2000.txt, HAM2000.txt: lưu
các tập huấn luyện với kích thước tương ứng 4000 thư và 2000
thư đầu tiên trong tập mẫu.
- File ProbList.txt lưu trữ Bảng xác suất, sinh ra khi thực hiện nạp
dữ liệu huấn luyện.
- File Result.txt lưu kết quả gán nhãn do bộ lọc thực hiện khi kiểm
tra hàng loạt (Test Batch)
Giao diện chương trình:
Training Phrase:
Trước tiên, cần nạp dữ liệu huấn luyện bằng cách bấm vào một
trong 3 nút: “Load…”
Chọn 1 trong 2 nút Load Training Data để tiến hành nạp dữ liệu
huấn luyện với kích thước khác nhau. Đợi một vài giây để chương
trình tính toán các giá trị xác suất của từng từ và hiển thị ra Text
Box

Ngoài ra, thay vì nạp dữ liệu và tính toán trực tiếp như trên, có thể
nạp các giá trị xác suất này từ Bảng xác suất bằng cách bấm chọn
nút Load Processed Data, (nếu dữ liệu này đã được lưu trong file
ProbList.txt). Nếu chưa có dữ liệu này thì bấm chọn nút Save
Processed Data để lưu lại (tránh việc nạp dữ liệu từ đầu và tính
toán lại, gây mất thời gian)
23
23
Testing Phrase:
Có hai cách thực hiện kiểm thử: test hàng loạt và test thủ công
- Test hàng loạt: thực hiện bằng cách chọn bấm 1 trong 3 nút “Test
Batch…” để tiến hành test hàng loạt (các file chứa nội dung email)
với các kích thước khác nhau (các file này được chọn lấy từ 2000
thư cuối cùng – khác với các file của tập huấn luyện)
24
24
Các giá trị đánh giá hiệu quả của thuật toán được cài đặt sẽ được
hiện ra trong Text Box:
- Test thủ công: người dùng nhập hoặc dán toàn bộ nội dung thư
cần kiểm tra vào Text Box. Sau đó bấm nút Manual Test để kiểm
tra. Kết quả phân loại sẽ được hiện ra trong bảng thông báo ngay
sau đó.
25
25

×