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

báo cáo đề tài viết chương trình phân loại thư rác

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 (487.89 KB, 27 trang )

TRƯỜNG ĐẠ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
XỬ LÝ NGÔN NGỮ TỰ NHIÊN
Đề Tài:
Viết chương trình phân loại thư rác
Sinh viên thực hiện:
Bùi Vũ Hải 20070984
Đỗ Hoài Nam 20072001
Lê Văn Đạo 20070700
Nguyễn Minh Quang 20062495
Lớp : Hệ thống thông tin – K52
Giảng viên hướng dẫn: PGS. Lê Thanh Hương
MỤC LỤC:
1. Đặt vấn đề:
Thời đại ngày nay là thời đại bùng nổ thông tin, Internet đã trở nên quen thuộc và không
thể thiếu đối với mỗi quốc gia và xã hội. Liên lạc qua Internet đã trở nên phổ biến, và email là
một phương tiện liên lạc có chi phí thấp, nhanh chóng và hiệu quả nhất trên Internet. Hằng ngày
mỗi người sử dụng email đều nhận được một lượng lớn email, tuy nhiên không phi tất cả các
email mà ta nhận được đều chứa thông tin mà ta quan tâm. Những email mà ta không muốn nhận
ấy là email Spam. Ngược lại, những email không phải là spam gọi là non-spam – email hợp lệ
được người dùng chấp nhận.
Nhiều người trong chúng ta nghĩ rằng spam là một vấn đề mới, nhưng thực ra nó đã xuất
hiện khá lâu – ít nhất là từ năm 1975. Vào lúc khởi thủy, người dùng hầu hết là các chuyên gia về
máy tính, họ có thể gửi hàng tá thậm chí hàng trăm email đến các nhóm tin (newsgroup) và spam
hầu như chỉ liên quan đến các email gửi đến các nhóm tin Usenet, gây ra tình trạng không thể
kiểm soát được các email nhận. Sau đó các biện pháp trừng trị về mặt xã hội và hành chính đã có
tác dụng, thủ phạm đã bị trừng phạt , công khai hay bí mật, những người này nhanh chóng được
đưa vào một danh sách, và một kỹ thuật lọc spam sớm nhất xuất hiện đó là ”bad sender” – lọc
email của những người gởi được xem là xấu.


WWW(World-Wide Web) đã mang thế giới Internet đến nhiều người, và hệ quả của nó là
nhiều người không phải là chuyên gia trong thế giới máy tính cũng được tiếp xúc nhiều với
Internet, nó cho phép truy cập đến những thông tin và dịch vụ mà trước đây là không được phép.
Chỉ trong vòng 2-3 năm chúng ta đã chứng kiến sự bùng nổ số người sử dụng Internet và tất
nhiên là những cơ hội quảng cáo trên đấy. Và spam đã phát triển một cách nhanh chóng từ đây,
những kỹ thuật ngăn chặn spam trước đây đã không còn thích hợp. Spam thường theo sau những
quảng cáo thương mại chèo kéo khách hàng ( những email quảng cáo thương mại được gửi mà
không có yêu cầu ). Spam đã và đang gây tác hại đến người sử dụng Internet và tốc độ đường
truyền Internet. Với người sử dụng email, spam gây cho họ cảm giác bực bội và phải mất thời
gian và tiền bạc xóa chúng, đôi khi họ có thể bị mất những email quan trọng chỉ vì xóa nhầm, tốc
độ trên mạng xương sống của Internet (Internet Backbone) cũng bị spam làm cho chậm lại vì số
lượng spam được chuyển đi trên mạng là cực lớn. Theo thống kê của ZDNet ở thời điểm năm
2004, mỗi ngày có khoảng 4 tỷ email spam được phát tán qua Internet, trên 40% lượng email
trên mạng là spam, gần đây đã đạt con số 50% . Cho dù được nhận diện là “kẻ thù của cộng
đồng“(“public enemy”) Internet, nhưng spam đã và đang mang lại lợi nhuận. Trong số 100.000
email spam phát tán, chỉ cần một email có phản hồi là đã có thể bù đắp chi phí đầu tư.
Để ngăn chặn spam, nhiều nhà khoa học, các tổ chức, các cá nhân đã nghiên cứu và phát
triển những kỹ thuật phân loại và lọc email, tuy nhiên các spammer – những người tạo nên spam
và phát tán chúng cũng tìm mọi cách vượt qua các bộ lọc này. Cuộc chiến giữa các spammer và
những người chống spam vẫn còn đang tiếp diễn và dường như không có hồi kết. Thực tế cho
thấy, nhu cầu có một phương pháp và công cụ chống spam hữu hiệu là rất cần thiết.
Xuất phát từ thực trạng đó, nhóm BTL chọn hướng nghiên cứu “Xây dựng một chương
trình lọc thư rác bằng việc ứng dụng phương pháp phân loại văn bản Naive Bayes” “ với mục
đích tìm hiểu, thử nghiệm các phương pháp tiếp cận cho bài toán phân loại email, từ đó thực hiện
phân loại email giúp ngăn chặn email spam hiệu quả.
Yêu cầu hệ thống:
Yêu cầu đối với một hệ thống phân loại email và ngăn chặn email spam đương nhiên là
phân loại được email là spam hay non-spam, từ đó sẽ có biện pháp ngăn chặn email spam, hiệu
quả phân loại email phải khách quan, tuy nhiên không thể đánh đổi hiệu quả phân loại email
spam cao mà bỏ qua lỗi sai cho rằng email non-spam là spam, bởi vì cùng với việc tăng khả năng

phân loại email spam thì khả năng xảy ra lỗi nhận nhầm email non-spam thành email spam cũng
tăng theo. Do đó yêu cầu đối với một hệ thống phân loại email spam là phải nhận ra được email
spam càng nhiều càng tốt và giảm thiểu lỗi nhận sai email non-spam là email spam.
2. Các cách tiếp cận để giải quyết vấn đề :
2.1 Các cách thức con người xử lý với spam :
Trên thế giơi đã có nhiều tổ chức, công ty phát triển nhiều cách thức khác nhau giải
quyết vấn đề spam. Có nhiều hệ thống được xây dựng sẵn một “danh sách đen” (Blacklist ) chứa
các tên miền mà từ đó spam được tạo ra và phát tán, và dĩ nhiên là các email đến từ các tên miền
này hoàn toàn bị khóa (block out). Một số hệ thống căn cứ vào header của email (những trường
như nơi gửi (from ), tiêu đề (subject) ) và loại bỏ những email có địa chỉ xuất phát từ những
spammer (người phát tán spam). Vài hệ thống khác lại tìm kiếm trong nội dung của email, những
dấu vết cho thấy có sự tồn tại của spam chẳng hạn email có quá nhiều dấu than, số chữ cái được
viết hoa nhiều một cách bất bình thường …
Tuy nhiên các spammer ngày càng tinh vi, vì thế các kỹ thuật dùng để chống spam cũng
phải được cải tiến, và chính nhũng cải tiến này càng thôi thúc các spammer trở nên ranh ma và
tinh vi hơn… Kết quả là như hiện nay, các email spam gần như giống với một email thông
thường. Tuy nhiên email spam có một điều không bao giờ thay đổi đó là bản chất của nó. Bản
chất đó chính là mục tiêu quảng cáo sản phẩm hay dịch vụ. Nó là cơ sở cho phương pháp lọc
email dựa trên nội dung (content based filtering).Theo đó, chúng ta cố gắng phát hiện ra các
ngôn ngữ quảng cáo (sales-pitch language) thay vì chú ý đến các chỉ số thống kê của email chẳng
hạn như có bao nhiêu lần xuất hiện chữ “h0t chixxx!” …
Một điều quan trọng cần phải cân nhắc đến khi lọc spam là cái giá phải trả khi lọc sai.
Nếu một bộ lọc từ chối nhận hầu hết các email gửi đến hoặc đánh dấu một email thật sự quan
trọng nào đó là spam thì điều đó còn tệ hơn cả việc nhận tất cả email spam được gửi đến. Ngược
lại, nếu có quá nhiều email spam vượt được bộ lọc thì rõ ràng bộ lọc hoạt động không hiệu quả,
không đáp ứng được yêu cầu của người sử dụng.
Các phương pháp phân loại thư rác phổ biến hiện nay:
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”. Một số công nghệ chống spam thú
vị đang được nghiên cứu:
1. Tem cho e-mail: Theo hai nhà nghiên cứu Fahlman và Mark Wegman thuộc Trung tâm
Nghiên cứu của IBM (International Business Machines) tại Watson, Mỹ, phương pháp
chống spam hiệu quả nhất là yêu cầu những người không có tên trong danh sách
“khách hàng thân thiết” của bạn phải mua tem cho mỗi email mà họ gửi cho bạn. Một
chương trình sẽ được đặt nằm giữa máy chủ email và máy tính cá nhân của khách hàng
để đối chiếu tên người gửi với danh sách khách hàng của bạn. Những kẻ gửi thư rác sẽ
phải cân nhắc kỹ trước khi bấm “send” để gửi hàng loạt email.
2. Cài mật mã: Bạn gửi email thông báo cho tất cả mọi người với một đoạn mật mã đã
được cài đặt sẵn trong email của bạn, và máy chủ email của ISP sẽ chỉ cho phép những
email nào có đoạn mật mã này đi qua.
3. Khai báo thông tin: Một chương trình sẽ chặn email từ những người lạ, và yêu cầu
cung cấp đầy đủ thông tin cá nhân trước khi chuyển email đến người nhận.
4. 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 có nhu cầu mua điện thoại di động, bạn
không mong muốn nhận được các bức thư quảng cáo bán điện thoại. Vì vậy, “Nokia”
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.
5. 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 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 đồ án này tôi 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.2 Tổng quan về bài toán phân loại văn bản
2.2.1 Định nghĩa phân loại văn bản
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 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.2 Tiến trình 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.
Tập dữ liệu mẫu
Tiền xử lí
Học một bộ phân loại
Phân loại
Kết quả
Chọn đặc trưng
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. Vì thế hiệu quả của các bộ phân loại văn bản phụ thuộc rất
cao vào tập các đặc trưng mà chúng ta sử dụng. Trong các mô hình phân loại điển hình và phức
tạp thường có một số các phương pháp có sẵn để lựa chọn đặc trưng. Với những phương pháp
này, tập hợp các dữ liệu thô được miêu tả bằng một số các tập hợp đặc trưng. Chúng đặt ra một
vấn đề là làm thế nào để sử dụng những đặc trưng ấy cho phân hoạch tài liệu. Hiện nay có hai cơ
cấu tổ chức để giải quyết các vấn đề đó.
Phương pháp thứ nhất: sử dụng các phương pháp lựa chọn đặc trưng để chọn ra một
đặc trưng tối ưu. Nếu chọn ra được một đặc trưng tối ưu từ bộ dữ liệu thô ở đầu vào, chúng ta có
thể chỉ đơn thuần sử dụng nó để học một bộ phân loại như hình vẽ. Tuy nhiên, quá trình tối ưu đó
không phải đơn giản. Trong trường hợp này khi sử dụng các đặc trưng khác nhau vẫn có thể sẽ
dẫn đến các kết quả tương tự nhau hoặc là hiệu quả khác nhau. Trong thực tế có rất nhiều những
ví dụ như thế.
Phương pháp thứ hai: sử dụng một tập hợp các đặc trưng phức hợp để đạt kết quả phân
loại cao hơn, đây là một trong những cải tiến quan trọng. Điều đó nghĩa là ta không chỉ sử dụng
một đặc trưng để phân loại các tập tài liệu mà phải căn cứ vào tất cả các tập đặc trưng khác nhau
có trong tập tài liệu. Sau đó phối hợp các đặc trưng đó để đưa ra một “vector phức hợp” của các
không gian đặc trưng cho các tập đặc trưng vừa chọn được, rồi mới tiến hành phân loại văn bản.
Vấn đề cơ bản nhất của những phương pháp này là phác thảo các đặc trưng. Do đó, việc học một
phương pháp phân loại bao gồm hai công đoạn. Phân hoạch đầu tiên sẽ được huấn luyện trên tập
tài liệu mẫu và sau đó tổ hợp các sắp xếp này được huấn luyện trên một tập các phê chuẩn ngược

lại. Các nghiên cứu gần đây thể hiện rằng chính sự phối hợp của các phân hoạch được huấn
luyện trên các đặc trưng khác nhau xảy ra như một kết quả có nghĩa đặc biệt đối với sự cải tiến
các hiệu quả. Tuy vậy với một tập dữ liệu đủ lớn thường đòi hỏi phải qua hai chặng đường học
tập. Thêm vào đó sự phối hợp của các phương pháp phân hoạch cũng được thể hiện như một đặc
trưng “lai” giữa nhiều cấu trúc module hoạt động trong các mức ưu tiên nhỏ hơn.
Tập dữ liệu mẫu
Tiền xử lí
Chọn đặc trưng 1
Học một bộ phân loại
Kết quả
Chọn đặc trưng k

.
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 (k-nearest neighbor algorithm)… Đầ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.2.3 Các phương pháp phân loại văn bản
Trước đây khi văn bản còn lưu trữ trên giấy tờ, để phân loại các loại tài liệu chúng ta cần
một đội ngũ nhân lực khá lớn. Tuy nhiên sự phân loại của con người cũng chỉ là tương đối, trong
khi lượng thông tin tăng lên một cách chóng mặt thì sự phân loại tài liệu do con người đảm
nhiệm chỉ có thể đáp ứng 0.1% lượng thông tin đó. Còn bây giờ hầu hết các loại văn bản đều
được lưu trữ trên một cơ sở dữ liệu (lưu trữ trên máy tính), vì vậy tự động phân loại thông tin

ngày càng đóng vai trò quan trọng.
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 là:
1 Nguyên mẫu (prototype)
2 Mô hình xác suất Naive Bayes
3 Phương pháp SVM (Support vectors Machines)
4 Phương pháp cây quyết định (Dicision Trees- Lewis and Ringuette, 1994)
5 Phương pháp mạng neuron (Neuron network - Wiener et al., 1995; Schutze et al., 1995)
Các mô hình xác suất của Naive 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.
2.2.4 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:
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:
2.2.5 Thuật toán phân loại văn bản Bayes
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(c
k
| d
i

) gọi là xác suất mà tài liệu d
i
có khả năng thuộc vào lớp văn bản c
k
được
tính toán như sau:
)(
)|(*)(
)|(
i
kik
ik
dP
cdPcP
dcP =
tài liệu d
i
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:
{ }
)(
)|(*)(
max
)|(
max
1
arg
1
arg di of Class
i

kik
Nk
ik
Nk
dP
cdPcP
dcP
≤≤
=
≤≤
=
trong đó N là tổng số tài liệu. Để chứng minh cho ý tưởng của Naive Bayes ta xét ví dụ
sau:
Có hai đối tượng GREEN và RED. Nhiệm vụ của chúng ta là phân loại các trường hợp
mới khi chúng được đem tới. Lựa chọn để gom chúng thành các đối tượng cụ thể trên cơ sở hai
đối tượng đã có là GREEN và RED. Như vậy từ hai đối tượng này ta phải tìm ra được lí do hợp
lí để giả thiết cho các đối tượng mới đó. Trong phân tích của Naive Bayes lí do đó được gán cho
một đại lượng đó là P ( Prior propability), P được xác định dựa vào các kinh nghiệm từ trước đó.
Trong trường hợp này nó chính là tỉ lệ phần trăm của hai đối tượng GREEN và RED, chúng
được sử dụng để dự đoán kết quả trước khi chúng có thể xảy ra:
Theo cách đó chúng ta có:
Xác suất có thể của GREEN =
T
G
Xác suất có thể của RED =
T
R
Trong đó:
- G là Số đối tượng GREEN
- R là số đối tượng RED

- T là tổng số các đối tượng
Trong ví dụ này theo hình vẽ ta có T = 60; G = 40; R = 20. Thì xác suất có thể của các
ứng viên:
P(GREEN) =
60
40
P(RED) =
60
20
Để có thể xây dựng một công thức xác định xác suất P chúng ta sẽ tiến hành phân loại các
đối tượng WHITE như hình vẽ. Từ các đối tượng là các nhóm hợp lí, chúng ta có thể giả định đối
tượng đã cho thuộc đối tượng RED hoặc GREEN trong vùng lân cận của X, tốt hơn là các đối
tượng ta xét có thể thuộc vào màu đặc biệt đó. Để giới hạn cho các khả năng có thể xảy ra này
chúng ta sẽ dựng thêm một đường tròn xung quanh X, nó sẽ bao quanh một số điểm mà chúng ta
sẽ không quan tâm là chúng thuộc đối tượng nào. Sau đó chúng ta sẽ tính toán số các điểm thuộc
vào mỗi loại GREEN và RED có trong vòng tròn, từ đó có thể tính được khả năng có thể của X.
Khả năng X thuộc GREEN =
G
G
X
Khả năng X thuộc RED =
R
R
X
Trong đó:
- G
X
là số GREEN có trong vòng tròn X
- R
X

là số RED có trong vòng tròn X
- G là tổng số các trường hợp GREEN
- R là tổng số các trường hợp RED
Từ minh họa ở trên thật dễ dàng xác định đuợc là khả năng X thuộc RED là lớn hơn khả năng X
thuộc GREEN . Trong vùng bao quanh vừa vẽ có 1 đối tượng GREEN và 3 đối tượng RED như
vậy:
Khả năng X thuộc GREEN là =
40
1
Khả năng thuộc RED là =
20
3
Mặc dù xác suất có thể biểu thị rằng X có thể thuộc GREEN (bằng cách so sánh hai xác suất có
thể với nhau) nhưng khả năng biểu thị lại khác (rằng ứng viên X là RED). Trong phân tích
Bayes, phân hoạch cuối cùng được đưa ra bởi việc phối hợp cả hai nguồn thông tin, mức ưu tiên
và khả năng có thể hình thành xác suất “hậu nghiệm” (posterior probability) sử dụng gọi là luật
Bayes (tên sau của Rev. Thomas Bayes 1702-1761)
Xác suất hậu nghiệm của X có thể thuộc GREEN
= Xác suất có thể của GREEN * Khả năng X thuộc GREEN
=
60
1
40
1
*
60
40
=

Xác suất hậu nghiệm của X có thể thuộc RED

= Xác suất có thể của RED * Khả năng X thuộc RED
=
60
3
20
3
*
60
20
=

cuối cùng chúng ta phân loại X vào RED vì nó là đạt xác suất hậu nghiệm lớn nhất
Việc phân loại ở ví dụ trên thuộc về trực giác khi sử dụng Naive Bayes. Nhưng phân hoạch
Naive Bayes có thể vận dụng một số các tuỳ biến phụ thuộc.
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 như sau:
Giả thiết mỗi một email được đại diện bởi một vector thuộc tính đặc trưng = (x
1
, x
2
, ,
x
n
) với x
1
, x
2
, …, x
n
là giá trị của các thuộc tính X
1

, X
2
, …, X
n
tương ứng trong không gian
vector đặc trưng
Dựa vào công thức xác suất Bayes và công thức xác suất đầy đủ ta có được xác suất một
email với vector đặc trưng , thuộc về loại c là:
Với C là email được xét, c ϵ {spam,nonspam}
Thực tế thì rất khó tính được xác suất P( |C) bởi vì giá trị số lượng của các vector rất
nhiều và nhiều vector hiếm khi hay thậm chí không xuất hiện trong tập dữ liệu huấn luyện.
Phương pháp Naive Bayes giả thiết rằng X
1
, X
2
, …, X
n
là những biến cố độc lập, do đó chúng ta
có thể tính được xác suất ở trên như sau:
Với P(X
i
|C) và P(C) được tính dựa trên dữ liệu học, việc tính này dựa vào tập huấn luyện
ban đầu.
Từ xác suất này, ta so sánh với một giá trị ngưỡng t mà ta cho là ngưỡng để phân loại
email spam hay không, nếu xác suât này lớn hơn t, ta cho là email đó là spam, ngược lại ta xem
email đó là non-spam.
3. Phân tích thiết kế cách tiếp cận đề xuất :
Thiết kế chương trình dựa trên phân tích thiết kế của P. Graham - A Plan for Spam (mô tả
kỹ thuật lọc thư rác sử dụng thuật toán Naive Bayes với một số cải tiến)
3.1 Khái niệm “Token”:

Để xem xét nội dung của email chúng tôi dùng khái niệm “token”
Các token có thể xem như là các từ cần xem xét mà ta tách ra từ nội dung của email. Với
các ký tự chữ, ký tự số, ký tự ‘$’, ký tự gạch ngang ‘-’, ký tự gạch dưới, ký tự nháy đơn ‘’’ là
những ký tự cấu tạo thành token. Còn những ký tự còn lại như khoảng trắng, ký tự ‘*’, ký tự ‘:’,
… được xem là ký tự để tách từ hay phân cách các từ. Với những từ tách được mà gồm toàn ký
số thì không được xem là token (VD: “12345”).
Ví dụ ta có các token sau:
“qvp0045”, “ indira”, “mx-05”, “$7500”, “3d0725”, “ platinum”.
Nếu ta có một chuỗi sau: “ thì ta sẽ có các token tương ứng
là: “http”, “www”, “27meg”, “com”, “foo”.
3.2 Vector thuộc tính :
Ta chuyển mỗi một email sang một vector với x
1
, x
2
,…, x
n
là các giá trị
thuộc tính X
1
, X
2
, …, X
n
trong không gian vector đặc trưng . Các thuộc tính có thể là một
token, nhóm các token … Trong trường hợp đơn giản nhất, mỗi một thuộc tính được thể hiện bởi
một token đơn và tất cả các thuộc tính có giá trị luận lý (Boolean), như vậy X
i
= 1nếu email chứa
token, trường hợp ngược lại X

i
=0.
Chúng tôi chọn thuộc tính là token đơn, nhưng thay vì giá trị của các thuộc tính là giá trị
luân lý (boolean), chúng tôi chọn là xác suất spam của mỗi token. Xác suất spam của mỗi token
sẽ có giá trong đoạn [0,1]. Xác suất cho ta nhiều thông tin hơn so với giá trị luân lý. Ví dụ: xét
token “$” xuất hiện trong email, nếu ta sử dụng giá trị luận lý, ta không đủ cơ sở để nghi ngờ
email này là email spam, và nếu email này khá dài thì càng khó kết luận rằng nó là spam. Tuy
nhiên sử dụng xác suất, ta có thể biết được khả năng email đó là spam là bao nhiêu, điều này hợp
lý hơn là chỉ sử dụng hai giá trị 0 và 1.
Chọn ngưỡng phân loại :
Chúng tôi tiến hành thử nghiệm với giá trị ngưỡng phân loại xác nhận một email là spam
lần lượt là 0.999, 0.9999.
3.3 Cách thực hiện :
Chúng ta sẽ bắt đầu với hai kho ngữ liệu email : kho ngữ liệu email spam và kho ngữ liệu
email non-spam. Số lượng email trong mỗi kho ngữ liệu ban đầu không hạn chế. Nếu kho ngữ
liệu càng lớn thì hiệu quả lọc email sẽ càng cao. Từ hai kho ngữ liệu này, chúng tôi phân tích và
duyệt qua tất cả các token.
Sau đó ta tính xác suất spam của mỗi token đã được phân tích, xác suất này chính là
xác suất một email chỉ chứa token đó và là email spam.
Như vậy mấu chốt ở ây là ta phải tính ra được xác suất spam của mỗi token. Theo
Paulgraham, xác suất spam của mỗi token được tính dựa trên số lần xuất hiện của mỗi token
trong mỗi kho ngữ liệu học ban đầu. Ví dụ một token w có s lần xuất hiện trong kho ngữ liệu
spam là s, trong kho ngữ liệu non-spam là n, số email tổng cộng cả hai kho ngữ liệu spam và
non-spam lần lượt là N
S
và N
N
, thế thì xác suất spam của token w được tính như sau:
Tuy nhiên, vì số lần xuất hiện của một token trong mỗi kho ngữ liệu học có khả năng
vượt quá kích thước của kho ngữ liệu học đó (tổng số email) (s> N

s
, n>N
n
) do đó, trong công
thức trên, thay bằng và bằng
Do đó công thức 1-1 viết lại như sau:
Theo cách trên thì chúng ta đánh giá khả năng spam của một token xuất hiện trong một
kho ngữ liệu học 100 lần ở 100 email khác nhau là bằng với khả năng spam của một token xuất
hiện trong một kho ngữ liệu học 100 lần nhưng chỉ trong một email
Chúng tôi đề xuất một cách tính xác suất spam của token khác như sau: thay vì dựa vào
số lần xuất hiện của token trong từng kho ngữ liệu học, chúng tôi dựa vào số email chứa token
trong từng kho ngữ liệu học. Công thức tính như sau :
Với :
- n
s
là số email có chứa token trong kho ngữ liệu email spam
- n
n
là số email có chứa token trong kho ngữ liệu email non - spam
- N
s
là tổng số email của kho ngữ liệu học spam
- N
n
là tổng số email của kho ngữ liệu học non-spam
Tuy nhiên, ta nhận thấy rằng công thức trên đã đánh giá khả năng spam của mỗi token là
như nhau với token xuất hiện 1 lần trong 1 email và token xuất hiện 100 lần trong 1 email, bởi vì
cả hai trường hợp, ta đều chỉ tính thêm vào số email chứa token là 1 mà thôi
Chúng ta có thể kết hợp hai cách tính trên, có thể sử dụng được nhiều thông tin về token
hơn. Chúng tôi đề xuất thêm một công thức nữa – được xem là sự kết hợp giữa hai công thức

trên
Với
- n
s
là số email có chứa token trong kho ngữ liệu email spam
- n
n
là số email có chứa token trong kho ngữ liệu email non- spam
- N
S
là tổng số email của kho ngữ liệu học spam
- N
N
là tổng số email của kho ngữ liệu học non-spam
- b là số lần xuất hiện của token trong kho ngữ liệu email spam
- g là số lần xuất hiện của token trong kho ngữ liệu email non- spam
Còn đối với các token chỉ xuất hiện ở kho ngữ liệu này mà không xuất hiện ở kho ngữ
liệu kia thì ta không thể kết luận rằng một token chỉ xuất hiện ở kho ngữ liệu spam thì không
bao giờ xuất hiện trong một email non-spam, và ngược lại. Cách thích hợp ở đây là ta sẽ gán cho
chúng một giá trị phù hợp. Như vậy, với những token chỉ xuất hiện trong kho ngữ liệu email
spam thì ta sẽ gán khả năng xác suất spam cho nó là giá trị N gần với 1(chẳng hạn 0.9999 )và
ngược lại thì gán xác suất spam là giá trị M gần với 0 (chẳng hạn 0.0001).
Như vậy ta đã xác định được xác suất spam của một email chỉ chứa một token nào đó hay
xác suất spam của một token như sau:
Tính theo công thức 1-2, ta có :
Công thức 1-5 :công thức tính xác suất spam của token dựa trên số lần xuất hiện
Tính theo công thức 1-3, ta có :
Công thức 1-6 :công thức tính xác suất spam của token dựa trên số email chứa token
Tính theo công thức 1-4:
Công thức 1-7 :công thức tính xác suất spam của token dựa trên số lần xuất hiện và s

email chứa nó
Với :
- s là số lần xuất hiện của token trong kho ngữ liệu học spam
- n là số lần xuất hiện của token trong kho ngữ liệu học non- spam
- n
s
là số email chứa token trong kho ngữ liệu học spam
- n
N
là số email chứa token trong kho ngữ liệu học non-spam
- N
s
là tổng số email chứa trong kho ngữ liệu học spam
- N
N
là tổng số email chứa trong kho ngữ liệu học non-spam
Một vấn đề phức tạp mà chúng tôi gặp phải trong quá trình thực hiện phân loại email dựa
trên thuật toán Naive Bayes là việc tách token và tính xác suất spam của token, bởi vì số token là
khá lớn, ở đây chúng tôi sử dụng cấu trúc dữ liệu là bảng băm. Ứng với mỗi kho ngữ liệu email
spam và non-spam chúng tôi xây dựng một bảng băm tương ứng. Bảng băm này sẽ bao gồm
token và số lần xuất hiện của token trong từng kho ngữ liệu tương ứng. Như vậy mỗi token sẽ có
một giá trị băm (xác định bằng hàm băm tự định nghĩa ) tương ứng vơi vị trí trên bảng băm để ta
có thể truy xuất nhanh đến phần tử token trên bảng. Mục đích xây dựng bảng băm là để tối ưu
hóa tốc độ truy xuất các token trích từ email cũng như tối ưu thời gian xác định một email là
spam hay không. Mỗi phần tử của bảng băm lưu trữ token, số lần xuất hiện:
Bảng băm tương ứng với kho ngữ liệu spam:
wwwplay 56
herbals 651
herbalv 1167
ontains 59

webequityresear 178

Bảng băm tương ứng với kho ngữ liệu non - spam:
herbals 4
concubine 5
maldon 10
mucvtzvfegmtgru 81

Sau khi có 2 bảng băm tương ứng với hai kho ngữ liệu email, ta sẽ xây dựng bảng băm
thứ ba. Mỗi phần tử trong bảng băm này sẽ lưu những thông tin gồm: token và khả năng (xác
suất) spam của token. Tuy nhiên để việc thực hiện tiện lợi và không phải xét quá nhiều token,
chúng tôi chỉ xem xét những token mà số lần xuất hiện của nó hoặc số email chứa nó trong
cơ sở dữ liệu học ban đầu lớn hơn một ngưỡng nào đó, với những token mà tổng số lần xuất
hiện hoặc tổng số email chứa nó nhỏ hơn ngưỡng này, chúng tôi không tính xác suất cho
token đó. Điều này là hợp lý bởi vì những token có tổng số lần xuất hiện ( hoặc tổng số email
chứa nó quá ít thì cũng không đáng để xem xét đến, do đó sẽ giúp giảm bớt số token cần tính xác
suất cũng như dung lượng lưu trữ cho dữ liệu ở bảng băm thứ ba này.
Theo Paulgraham thì chúng ta cần hạn chế loại lỗi false positive (nhận email non-spam
thành email spam ), do đó số lần xuất hiện của các token hoặc số email chứa token trong kho ngữ
liệu non-spam sẽ được nhân với một trọng số W, điều này giúp phân biệt được giữa những token
thỉnh thoảng xuất hiện trong các email hợp lệ với những token hầu như không xuất hiện, chúng
tôi thử nghiệm lần lượt với hai giá trị 1 và 2.
Ví dụ thông tin bảng băm thứ 3:
Token: Khả năng spam :
wwwplay 0.9912
herbals 0.9967
maldon 0,2398
mucvtzvfegmtgru 0.0472
herbalv 0.9768
ontains 0.9471

webequityresear 0.9272
concubine 0.8734

Cách tính xác suất spam cho mỗi token được thực hiện theo các công thức đã nói ở trên.
Cuối cùng để xác định một email mới đến có phải là spam không thì chúng tôi trích ra n
token ở trong email đó. Cách chọn mẫu tập thuộc tính xét thông thường là chọn ra n token một
cách ngẫu nhiên, tuy nhiên nhận thấy rằng những token trung tính ( khả năng spam là 0.4-0.6 thì
không có tác dụng lắm trong việc nhận dạng email spam ) nên ta chọn n token này với định
hướng là chọn những token đặc trưng cho một email spam và email non-spam, chúng tôi chọn
những token có khả năng spam cao nhất và thấp nhất. Như vậy chúng tôi chọn n token có khoảng
cách giữa xác suất spam của chúng với giá trị trung tính 0.5 là cao nhất, chúng ta gọi giá trị này
là giá trị “đặc trưng”. Như vậy ta sẽ chọn được những token hoặc là có khả năng spam cao nhất
(xác suất spam cao nhất ) hoặc là những token có khả năng non-spam cao nhất ( xác suất spam
thấp nhất ).
Cách tính khả năng tổng hợp: chúng tôi dựa vào công thức
Thế thì xác suất spam tổng hợp của một email C được xét là :
Ví dụ:
Token: Xác suất (Probability):
Adventures 0.99
printable 0.99
shorstest 0.047225013
Xác suất P(C = spam) = 0.5 và P(C = non-spam) = 0.5 (chọn theo khả năng của chương
trình)
-> Xác suất tổng hợp của email:
Sau khi có xác suất tổng hợp, chúng tôi so sánh với các giá trị ngưỡng ( đã nói ở các phần
trước) để phân loại email spam hay non-spam, nếu xác suất spam tổng hợp của email lớn hơn
ngưỡng t chúng tôi kết luận email đó là spam, ngược lại email đó là non-spam.
4. Thử nghiệm và đánh giá hệ thống :
Trong phạm vi chương trình nhóm BTL sử dụng công thức :
Để tính xác suất spam của từng token, với:

- M = 0.011
- N = 0,99
Và công thức:
Để tính xác suất spam tổng hợp của một email.
Chương trình sử dụng 2 tập mẫu mail chuẩn là:
- spam.txt : để xây dựng bảng băm spam
- non-spam.txt : để xây dựng bảng băm non – spam
Cả 2 bảng băm đều có cấu trúc <token, tần suất xuất hiện trong mail>
Từ 2 bảng băm trên dựa vào công thức 1-5 ta xây dựng bảng băm thứ 3 với cấu trúc :
- <token, xác suất spam của token>
Hiển thị bảng băm thứ 3 sau khi tính toán (xác suất spam, token)
Chương trình có 3 mẫu test để làm ví dụ minh họa (chọn các chức năng Test msg 1 ->
Test msg 3) :
- mau_non_spam.txt : mẫu mail có nội dung non – spam
- mau_co_the_la_spam.txt : mẫu mail có nội dung mập mờ giữa spam và non – spam
- mau_spam.txt : mẫu mail có nội dung spam
Minh họa mẫu test non – spam
Ngoài ra bạn cũng có thể nhập nội dung mail bên ngoài vào để kiểm tra là spam hay non
spam – sử dụng chức năng Text box test:
Minh họa chức năng Text box test
(nếu ta chọn ngưỡng 0,999 thì mail này được coi là spam)

×