Một trong những bước quan trọng khi xây dựng hệ thống lọc thư rác là quyết định vị trí của hệ thống trong cả chu trình trao đổi thư điện tử. Việc xác định vị trí của bộ lọc thư có ảnh hưởng tới kiến trúc bộ lọc, các yêu cầu về tái huấn luyện, tốc độ xử lý và nhiều vấn đề khác.
Thông thường, hệ thống lọc thư có thể tích hợp vào hệ thống gửi và nhận thư điện tử theo một trong các cách sau.
Hình 4.1. Các phương án bộ trí hệ thống lọc thư MAIL CLIENT BỘ LỌC MAIL SERVER THƯ MỚI THƯ MỚI PHẢN HỒI (b) MAIL CLIENT BỘ LỌC MAIL SERVER THƯ MỚI MAIL SERVER BỘ LỌC MAIL CLIENT THƯ MỚI PHẢN HỒI (c) (a)
Theo cách bố trí trên hình 4.1.a, bộ lọc thư được tích hợp vào chương trình nhận thưđiện tử (mail client) như Outlook Express và chạy trên máy khách (client) của người sử dụng. Cách bố trí này thuận tiện cho việc xây dựng bộ lọc thư được cá nhân hoá, có thể phân biệt thư rác – thư thường theo tiêu chí đánh giá riêng của từng người sử dụng thư điện tử. Ngoài ra, do chạy trên máy khách nên bộ lọc thư không gây quá tải đối với máy chủ thư điện tử. Tuy nhiên, mục tiêu của đề tài là xây dựng bộ lọc cho phía server nên chúng tôi không trình bầy về phương án này trong các phần sau của báo cáo3.
Trên hình 4.2.b là cách bố trí bộ lọc thư dưới dạng một proxy. Bộ lọc thư sẽ đóng vai trò trạm trung chuyển thư bằng cách nhận các gói tin được gửi theo thức thư điện tử vào các cổng dành cho thư. Bộ lọc có thể chạy trên máy chủ hoặc máy khách nhưng thường bộ lọc thư như vậy được cài đặt chạy trên máy khách. Cách cấu hình này có ưu điểm là mềm dẻo, có thể kết hợp nhiều bộ lọc khác nhau bằng nếu gắn đầu ra của bộ này với đầu vào của bộ khác và trên thực tế có một số chương trình lọc thư rác sử dụng phương án bố trí này. Tuy nhiên, việc sử dụng kết hợp bộ lọc thư với những chương trình proxy khác (như trình chống virus) thường gây mâu thuẫn khi cài đặt và đòi hỏi người sử dụng phải có những hiểu biết nhất định.
Hệ thống do chúng tôi xây dựng sử dụng phương án bố trí như minh hoạ trên hình 4.1.c. Bộ lọc thưđược gắn trực tiếp vào máy chủ thưđiện tử (mail server) như một add-in và giao tiếp với các thành phần khác của máy chủ thông qua giao diện lập trình (API) do máy chủ cung cấp.
Hệ thống được xây dựng để có thể tích hợp với Microsoft Exchange Server. Đây là phần mềm máy chủ thư điện tử khá thông dụng tại Việt nam và cung cấp giao diện lập trình thích hợp cho việc kết nối với hệ thống lọc thưđược trình bầy ở đây.
4.2. Kiến trúc hệ thống lọc thư
Kiến trúc chung của bộ lọc thưđược thể hiện trên hình 4.2.
Phần quan trọng nhất của hệ thống bao gồm môđun huấn luyện và mô đun lọc. Hai môđun này được tách riêng và có thể thay đổi để chạy trên các máy khác nhau. Đầu ra của môđun huấn luyện là các tham số tính toán được trong thời gian huấn luyện (các xác suất điều kiện đối với học Bayes đơn giản) và được lưu trong K.Base. Môđun lọc thư sẽđọc tham số từ K.Base và sử dụng để phân loại thư mới
3
Nhóm đề tài đã xây dựng một phiên bản bộ lọc chạy trên Outlook Express mặc dù nội dung này không có trong đề cương đề tài
nhận được. Việc tách riêng môđun huấn luyện khỏi môđun phân loại làm tăng độ mềm dẻo khi cài đặt và sử dụng hệ thống. Về nguyên tắc, có thể tách riêng môđun huấn luyện và chạy trên máy không có mail server để giảm tải cho máy chủ. Giao diện người dùng Gồm 2 IDE forms Phần lõi hệ thống K. Base bao gồm gồm cơ sở dữ liệu chứa tham số các bộ
phân loại sau khi
được huấn luyện. Giao diện với mail server Bộ giao tiếp với Exchange server thông qua dịch vụ SMTP Mail server Hình 4.2. Kiến trúc chung của hệ thống lọc thư
Với kiến trúc thể hiện trên hình 4.2, luồng dữ liệu luân chuyển giưac các thành phần bộ lọc được mô tả như sau :
Khi một bức thưđược gửi đến Mail server exchange, nhờ chứa năng bẫy sự kiện Incoming mail của SMTP thì bức thư đó được đưa đến Bộ phân loại Tiếng Anh, tiếng Việt hoặc đưa thẳng đến Bộ phân loại thư rác (phụ thuộc vào tùy chọn của người dùng).
Giả sử sau khi đưa vào bộ phân loại Tiếng Anh, tiếng Việt, bức thư được chuyển cho bộ phân loại thư rác. Tại đây, nhờ quá trình tính toán theo Naive
Huấn luyện Tuỳ chọn
K. Base
Bộ phân loại thư tiếng Anh,
tiếng Việt Bộ phân loại thư rác Dịch vụ SMTP Exchange Server Giao diện đăng kí với dịch vụ SMTP.
Bayes, nó sẽđược gán nhãn là thư rác [Possible Spam] hoặc không gán nhãn nếu được xác định là thư thường. Sau đó, thư được gửi đến Exchange server nhờ dịch vụ SMTP. Cuối cùng, bức thư đã sẵn sàng cho Mail Client lấy về qua giao thức POP3.
4.3. Các thành phần chức năng 4.3.1 Giao diện người dùng
Giao diện người dùng bao gồm 2 form: Form Huấn luyện và form Tuỳ chọn.
a. Form Huấn luyện
Form Huấn luyện cho phép người sử dụng thiết lập các thông số phục vụ cho việc huấn luyện. Đó là các thông số :
- Thư mục chứa tập mẫu huấn luyện bao gồm : thư mục thư thường tiếng Anh, thư rác tiếng Anh, thư thường tiếng Việt có dấu, thư thường tiếng Việt không dấu, thư thường tiếng Việt không dấu và có dấu trộn lẫn, thư rác tiếng Việt có dấu, thư rác tiếng Việt không dấu, thư rác tiếng Việt không dấu và có dấu trộn lẫn.
- Độ dài của k-gram : các giá trị có thể là: 1; 2; 3; 1&2; 1&2&3. Giá trị ngầm định là 1&2&3.
- Số lượng đặc trưng : có thể có các giá trị 100, 200, 300, 500, 1000, 2000, 3000 hoặc toàn bộđặc trưng. Giá trị ngầm định là 2000 đặc trưng.
b. Form Tuỳ chọn
Đây là form dành cho người dùng thiết lập chế độ làm việc của môđun lọc. Chếđộ làm việc được quy định bằng cách lựa chọn giá trị cho các tham số sau: số lượng đặc trưng sử dụng khi lọc mail (ngầm định là 2000), có phân loại thư tiếng Anh, tiếng Việt trước khi đưa vào bộ lọc hay không.
4.3.2. K. Base
K.Base là một tập hợp các file chứa kết quả huấn luyện. Toàn bộ K.Base được chia thành 10 file, mỗi file chứa ba loại đặc trưng với độ dài k=1, k=2 và k=3 và xác suất điều kiện tương ứng.
- SpamTA : chứa đặc trưng từ các thư rác tiếng Anh. - SpamTV : chứa đặc trưng từ các thư rác tiếng Việt.
- SpamTVSig : chứa đặc trưng từ các thư rác tiếng Việt có dấu.
- SpamTVNSig: chứa đặc trưng thu được từ các thư rác tiếng Việt không dấu. - SpamMix : chứa đặc trưng thu được từ các thư rác hỗn hợp của cả tiếng Anh và tiếng Việt.
- NonSpamTA : chứa đặc trưng thu được từ các thư thường tiếng Anh. - NonSpamTV : chứa đặc trưng thu được từ các thư thường tiếng Việt.
- NonSpamTVSig : chứa đặc trưng thu được từ các thư thường tiếng Việt có dấu.
- NonSpamTVNSig : chứa đặc trưng thu được từ các thư thường tiếng Việt không dấu.
- NonSpamMix : chứa đặc trưng thu được từ các thư thường hỗn hợp của cả tiếng Anh và tiếng Việt.
4.3.3. Bộ phân loại thư tiếng Anh, tiếng Việt.
Sau khi được tiền xử lý (bỏđi các stop word, tag...), nội dung bức thư sẽđược đưa vào bộ phân loại thư tiếng Anh và tiếng Việt. Đầu ra của bộ phân loại này là thư được khẳng định là có nội dung là tiếng Anh hay tiếng Việt, tiếng Việt có dấu, tiếng Việt không dấu hay không phân biệt tiếng Anh, tiếng Việt. Nếu nội dung thư chứa cả hai ngôn ngữ thì từ của ngôn ngữ nào xuất hiện nhiều hơn sẽ được xem như thư thuộc về ngôn ngữđó.
4.3.4. Bộ phân loại thư rác – thư thường
Lấy dữ liệu từ K.Base, kết hợp với tính toán Naive Bayes dựa trên nội dung thư và chủ đề của bức thư, bộ phân loại thư sẽ đưa ra output là nội dung của bức thư đầu vào là có thể là spam hay thư thường. Thư được xác định là thư rác sẽ được gán nhãn [Possible Spam] vào phần tiêu đề của thư (subject line) sau khi đi qua bộ phân loại.
4.3.5. Khối giao tiếp với Mail Server.
Khối giao tiếp (interface) giữa Bộ lọc thư với Exchange server được xây dựng dưới dạng thư viện lien kết động (một DLL file) được phát triển và chạy trên nền dịch vụ SMTP. Khối này bao gồm hai phần chính: Phần đăng kí sử dụng dịch vụ SMTP và chính giao thức SMTP.
a. Phần đăng kí sử dụng dịch vụ SMTP
Phần này chứa các hàm liên quan đến việc gọi các API của SMTP. Điển hình là hàm bẫy sự kiện mỗi khi có một email đến, chẳng hạn:
Sub ISMTPOnArrival_OnArrival(ByVal objMsg, EventStatus)
b. SMTP service:
Dịch vụ SMTP cung cấp các thành phần cho xử lý, phân phát các mail message giữa các mail server vơi nhau.
4.4. Thiết kế chi tiết
Phần này trình bày thiết kế chi tiết một số lớp chính tạo thành các khối chức năng của Bộ lọc thư tiếng Việt. Cụ thể, chúng tôi sẽ mô tả chi tiết những lớp sau: Filter, DataFileController, DataController, TermList, TermItem.
Lớp Filter
Lớp filter chứa các hàm liên quan đến giải thuật phân loại Bayes. Lớp này bao gồm các hàm sau:
ISMTPOnArrival_OnArrival(ByRef objMsg, EventStatus )
-Mô tả : Xử lí các thư nhận dược trong server.
-Dữ liệu vào : ByRef objMsg, EventStatus
-Xử lí :
+ kiểm tra nội dung của objMsg xem có phải là spam hay không. + Nếu là spam thì thêm "[Possible Spam] " vào trước tiêu subject mail. + Chuyển thưđến inbox của user tương ứng.
-Các fuction liên quan:
VietNameseSpamFilterLIB.ShareFunction .isSpam
isSpam(ByVal strContent AsString) AsBoolean
- Mô tả : Kiểm tra xem nội dung của thư có phải là thư rác hay không. - Dữ liệu vào : strContent : nội dung thư.
- Dữ liệu ra : true : nếu là spam, false nếu non spam. - Xử lí :
+ Đọc số từ trích trọn lưu trong file data. (tc)
+ Đọc tất cả dữ liệu từ file data vào bao gồm các termlist của cả thư thường, thư rác.
+ Với mỗi termlist trích chọn tc term.
+ Tách nội dung cần kiểm tra (strContent) thành các termlist tương ứn với 1,2,3gram.
+ Kiểm tra ngôn ngữ của thư.
+ Ứng với ngôn ngữ tìm được (1,2,3,4,5), tiến hành tính xác suất với thư rác, thư thường theo từng gram.
+ Các hàm liên quan : DataFileController.getTrichTron, DataController. TrichChon, DataController.SplitString, DataController.MailLanguage, Data Controller.TinhXacsuat, DataController.max.
Lớp DataFileController
Lớp filter chứa các hàm liên quan đến thao tác với file dữ liệu (K. Base): Dữ liệu chia sẻ :
dataFolderPath =
System.IO.Path.GetDirectoryName(Environment.SystemDirectory) & "\system32\"
dataFileName = "data.vsf" Các hàm chính
- Hàm checkV(): kiểm tra xem file dữ liệu có tồn tại và đúng theo quy ước hay không
- CreateDataFile(): Tạo ra file dữ liệu
- Hàm WriteToDataFile(trlData : TermList, id : Integer) Ghi termlist ra file dữ liệu theo ID. (xem trong cấu trúc file data)
- Hàm ReadFromDataFile(id : Integer): Đọc termlist theo ID trong file data. - Hàm Delete Xóa 1 termlist theo ID trong file data.
- Hàm DefragmentData(): Khi ghi ra các file data, xóa các termlist sẽ gây ra phân mảnh trong file. Hàm này đểđồn dữ liệu, chống phân mảnh, tăng tốc độ.
- Hàm ReadListID Đọc tất cả các ID đã ghi ra file data - Hàm WriteListID ghi ra file data danh sách các ID. - Hàm setTrichChon ghi vào file data số term trích chọn - Hàm getTrichTron()đọc từ file data số term trích chọn.
Lớp DataController
Lớp DataController : Chứa các hàm lien quan đến thao tác với TermList
- Hàm SplitString
Mô tả: Xóa bỏđi các stop word, tag..., tách thành 1,2,3 Gram. Dữ liệu vào: str: chuỗi cần tách.
Dữ liệu ra: TL1, TL2, TL3 là các termlist tương ứng trong trường hợp 1Gram, 2Gram, 3Gram. Kết quả trả lại ở lời gọi hàm là nội dung đã xóa bỏ các các stop word, tag...
Xử lí:
+ Xóa bỏ các stop word, tag,…. + Tách thành 1Gram, 2Gram, 3Gram.
- Hàm WriteToTextFile: Ghi 1 termList ra file Text chỉ bao gồm các term. - Hàm TinhMI: Tính MI cho mỗi term
- Hàm Train: Thực hiện huấn luyện cho tất cả các file .msg trong 1 thư mục và dữ liệu ra file data đồng thời ghi ra 3 file text tương ứng 1,2,3 Gram ở thư mục output.
- Dữ liệu vào:
+ folder: đường dẫn của thư mục chứa các file .msg cần train. + folderOut: đường dẫn của thư mục chứa các file text. + Outputfilename: tên của file text sinh ra.
- Dữ liệu ra : ghi các termlist tách được ra file data, text. - Xử lí:
+ Lấy tất cả file .msg trong thư mục input + Tạo thư mục để ghi các file text nếu chưa có.
+ Tính 1,2,3 Gram cho tất cả nội dung của các file .msg. + Tính MI cho các termList
+ Ghi các termList ra file data. + Ghi các termlist ra file text
-Các function liên quan : concatDATA, WriteToTextFile, WriteToDataFile, MI.
- Hàm TrichChon: trích ra 1 phần trong 1 termlist theo MI giảm dần - Hàm MailLanguage: kiểm tra xem thư thuộc loại ngôn ngữ gì - Dữ liệu vào :
+ SKg1 : termlist 1gram của thư cần kiểm tra + SKg2 : termlist 2gram của thư cần kiểm tra + SKg3 : termlist 3gram của thư cần kiểm tra + EnK1 : termlist 1gram của thư tiếng anh + EnK2 : termlist 2gram của thư tiếng anh + EnK3 : termlist 3gram của thư tiếng anh
+ ViK1 : termlist 1gram của thư tiếng Việt không phân biệt có dấu, không dấu
+ ViK2 : termlist 2gram của thư tiếng Việt không phân biệt có dấu, không dấu
+ ViK3 : termlist 3gram của thư tiếng Việt không phân biệt có dấu, không dấu
+ ViSigK1: termlist 1gram của thư tiếng việt không dấu. + ViSigK2: termlist 2gram của thư tiếng Việt không dấu. + ViSigK3: termlist 3gram của thư tiếng Viêt không dấu. + ViNSigK1: termlist 1gram của thư tiếng việt không dấu. + ViNSigK2: termlist 2gram của thư tiếng Việt không dấu. + ViNSigK3: termlist 3gram của thư tiếng Viêt không dấu. - Dữ liệu ra : Loại thư :
+ 1 : tiếng Anh. + 2 : tiếng Việt trộn + 3 : tiếng Việt có dấu + 4 : tiếng Việt không dấu
+ 5 : không phân biệt Anh, Việt. - Xử lí :
+ Tính tổng số lần xuất hiện của từng gram của thư cần kiểm tra với các bộ dữ liệu.
+ Kiểm tra xem với bộ dữ liệu nào có xác suất trùng cao nhất từđó đưa ra loại thư.
-Các function liên quan : TermCounter
4.5. Sử dụng chương trình Yêu cầu phần mềm:
-Windows 2000 server sp4, hoặc Windows 2003 server. - Microsoft Exchange 2000, hoặc 2003. - Microsoft Outlook 2003 Cách cài đặt -Chạy file Install.bat Cách chạy chương trình 1. Huấn luyện và Tuỳ chọn a) Huấn luyện: - Chạy file VietNameseSpamFilter.exe - Chọn tab Training
Giao diện cho phần huấn luyện sẽ hiện ra như trên hình dưới.
- Chọn loại thư (Thư thường hay thư rác)
+ Chọn thư mục chứa các các file thư tiếng Anh.
+ Chọn thư mục chứa các các file thư tiếng Việt không phân biệt có dấu hay không dấu
+ Chọn thư mục chứa các các file thư tiếng Việt có dấu + Chọn thư mục chứa các các file thư tiếng Việt không dấu
+ Chọn thư mục chứa các các file thư không phân biệt tiếng Anh, tiếng Việt. (* Nếu không muốn huấn luyện loại nào thì bỏ trống loại ấy).
- Click vào nút Train sẽ hiện ra thông báo sau:
- Đợi đến khi hiện thông báo
- Click button Quit b. Tuỳ chọn:
- Chạy file VietNameseSpamFilter.exe - Chọn tab Setting
- Chọn trích chọn - Click button Save. - Click button Quit
2. Chạy chức năng Spam Filter
- Gửi mail từ server bên ngoài vào server đã được cài bộ lọc thư. - Chương trình sẽ tựđộng kiểm tra mail vừa gửi tới.
- Nếu là thư rác thì bộ lọc sẽ tự động thêm "[Possible Spam] " vào trước Subject.
4.6. Thử nghiệm hệ thống Chế độ thử nghiệm
Để đánh giá hiệu quả và hiệu năng của bộ lọc thư, bộ lọc được cài đặt trên