NGHIÊN CỨU TỔNG QUAN VỀ HỆ THỐNG THƯ ĐIỆN TỬ
Hệ thống thư điện tử
Ra đời song song với mạng máy tính, hệ thống thư điện tử đã đáp ứng nhu cầu trao đổi thông tin giữa mọi người Nó là hệ thống chuyển phát thông tin rất nhanh thông qua mạng máy tính Một bức thư có thể được gửi đi ở dạng mã hoá hay dạng thông thường và được chuyển qua các mạng máy tính đặc biệt là mạng Internet Nó có thể chuyển mẫu thông tin từ một máy nguồn tới một hay rất nhiều máy nhận trong cùng lúc Hơn nữa, thư điện tử chẳng những có thể truyền gửi được thông điệp ký tự đơn giản, nó còn có thể truyền được các dạng thông tin đa phương tiện khác như hình ảnh, âm thanh, phim, và đặc biệt các phần mềm thư điện tử kiểu mới còn có thể hiển thị các thư sống động với nhiều ngôn ngữ khác nhau.
1.1 Tổng quan hệ thống thư điện tử.
Hệ thống thư điện tử là hệ thống cho phép người dùng nhận gửi thư thông qua mạng máy tính Nó là tập hợp các hệ thống con trên nhiều nền khác nhau, cùng tuân theo những giao thức chuẩn để thực hiện truyền tải thông điệp từ người gửi đến người nhận Vì vậy để nghiên cứu hệ thống thư điện tử, chúng ta sẽ xem xét theo con đường đi của một bức thư điện tử Quá trình gửi một thư điện tử thường được đi theo lược đồ sau:
Hình 1 Mô hình Internet mail Đầu tiên, thư điện tử được tạo ra tại MUA (Mail User Agent) của người gửi, đi qua các mail server hay MTA (Mail Transfer Agent) và đến với MUA của người nhận.
Chúng ta có thể thấy rõ trong ví dụ minh họa sau:
Hình 2 Hoạt động của hệ thống thư điện tử
Hoạt động của hệ thống email hiện nay có thể dược minh họa qua phân tích thí dụ trên như sau:
1 Nguyễn dùng MUA của mình để soạn một lá thư có địa chỉ người nhận là Trần với địa chỉ là Tran@b.org Nguyễn nhấn nút Send và phần mềm thư điện tử của Nguyễn áp dụng SMPT để gửi lá thư đến MTA, hay máy chủ thư điện tử, của Nguyễn Trong thí dụ thì máy chủ này là smtp.a.org được cung cấp từ dịch vụ Internet của Nguyễn
2 MTA này sẽ đọc địa chỉ chỗ nhận (tran@b.org) và dựa vào phần tên miền nó sẽ tìm hỏi địa chỉ của tên miền này, nơi có máy chủ sẽ nhận email gửi đến, qua Hệ thống tên miền (DNS)
3 Máy chủ hệ thống tên miền (DNS Server) của b.org là ns.b.org sẽ trả lời về một bản ghi trao đổi thư từ, đây là bảng ghi chỉ ra cách thức làm thế nào định tuyến cho email này Trong thí dụ thì mx.b.org là máy chủ từ dịch vụ cung ứng Internet của Trần
4 smtp.a.org gửi mẫu thông tin tới mx.b.org dùng giao thức SMTP, điều này sẽ phân phối lá thư đến hộp thư của Trần
5 Khi đọc Trần ra lệnh nhận thư trên máy (MUA) của Trần, điều này tạo ra việc lấy về mẫu thông tin bằng cách áp dụng giao thức POP3, hoặc IMAP hoặc dùng dịch vụ webmail
Trong trường hợp Nguyễn không có MUA mà chỉ dùng Webmail chẳng hạn thì bước 1 sẽ không xảy ra tức là MTA của Nguyễn sẽ làm việc trực tiếp Tương tự cho trường hợp Trần không có MUA riêng.
Trước đây, nếu một MTA không thể gửi tới đích thì nó có thể ít nhất ngừng lại ở chỗ gần với chỗ nhận Quá trình ngừng này sẽ tạo cơ hội để máy đích có thể nhận về các mẫu thông tin trong thời gian trễ hơn Nhiều MTA sẽ chấp nhận tất cả mẫu thông tin từ người gửi bất kì và tìm mọi cách để phân nó về đến máy đích Những MTA như vậy gọi là những OMR (open mail relays) Điều này khá cần thiết vì sự chất lượng liên lạc của hệ thống Internet lúc đó còn yếu.
Ngày nay, do việc lợi dụng trên cơ chế hoạt động của hệ thống thư điện tử nhiều người đã gửi ra các loại thư vô bổ Như là hậu quả, rất ít MTA ngày nay còn chấp nhận các OMR bởi vì các thư như vậy rất có thể là các thư rác.
1.2.Các thành phần cơ bản trong hệ thống thư điện tử.
Là bộ phận vận gửi nhận thư điện tử nằm trên Server, là một bộ phận quan trọng nhất của Mail Server đảm nhiệm công việc nhận các thông điệp từ các MTA, MUA và vận chuyển sang MTA khác hoặc chuyển cho MDA nếu là thư của người dùng trong Mail Server đó
Là bộ phận chuyển thư về từng mailbox của từng người dùng trong Server, nó có chức năng giống như người đưa thư về từng nhà Mặt khác MDA có thể chuyển vào các thư mục cụ thể hơn mailbox của người dùng với yêu cầu nào đó hay còn được gọi là chương trình lọc thư mức MDA.
1.2.4 Mail Client (Mail User Agent)
Loại phần mềm thư điện tử được cài đặt trên từng máy tính của người dùng gọi là email client, hay phần mềm thư điện tử cho máy khách Một số phần mềm Mail client nổi tiếng là Micorsoft Outlook, Microsoft Outlook Express, Netscape communicator, Thunder Bird hay Eudora Phần mềm thư điện tử này còn có tên là Mail User Agent (MUA).
Mail Access Agents, người dùng có thể truy cập trực tiếp hoặc thông qua MAA Cho nên trong nhiều hệ thống, chúng ta không sử dụng MAA và nó không được sử dụng rộng rãi.
Có thể là hệ thống lưu trữ bằng tệp, hoặc 1 cơ sở dữ liệu. Trong mailstore có các mailbox cho từng người dùng Trong mailbox của người dùng có thể được chia ra làm các thư mục nhỏ hơn Đây thực ra chỉ là các ngăn chứa thư từ đã được phân loại theo tình trạng của các email cho tiện dùng Người chủ thư có thể tự mình xếp loại các thư này, hoặc chúng được xếp một cách tự động (do cài đặt hay do mặc định).
Inbox có nghĩa là Hộp thư nhận hay Hộp thư vào: Đây là ngăn đựng các thư mới nhận về
Các thành phần cơ bản của một bức thư
Trong phần này, chúng ta sẽ nghiên cứu ba phần cấu thành của một bức thư điện tử: Header, Body và Envelope Nhưng trước tiên, hãy xem xét cách chạy Sendmail một cách thủ công:
2.1 Các thành phần cơ bản Ở đây, chúng ta tìm hiểu cách gửi thư bằng sendmail một cách trực tiếp, không dùng MUA Để hiểu rõ hơn, chúng ta sẽ chạy một cách thủ công, cũng như dễ dàng hơn trong khi viết các ứng dụng có liên quan đến việc gửi thư.
Thí dụ thứ nhất sẽ là gửi thư cho chính mình với nội dung: This is a one-line message
Bước 1: Tạo tệp text với tên sendstuff chứa dòng sau:
This is a one-line message.
Bước 2: Gửi thư tới hòm thư của bạn với dòng lệnh sau, trong đó you là tên đăng nhập của bạn, chẳng hạn nguyenhoaison@runsystem.net
% /usr/sbin/sendmail you
To: you might be something else (see NoRecipientAction)
This is a one-line message.
Chúng ta thấy thư nhận được có thêm các thông tin trong 7 dòng đầu Các thông tin này được thêm bởi Sendmail gọi là Header Dòng cuối của bức thư mới là dòng nội dung Mail của chúng ta Nó được tách ra khỏi Header bởi một dòng trống. Xem hình:
Hình 9 Hai thành phần chính của thư Header và Body
Thông thường, khi chúng ta gửi thư với MUA hoặc Webmail thì MUA thêm Header và cung cấp cả Header và Body cho máy chủ thư điện tử
Phần Header không chứa nhiều thông tin của người dùng, nó là các thông tin cho hệ thống thư hoạt động Mặc dù vậy, nhiều trường của nó cũng có ý nghĩa trong các ký thuật chống thư rác Chúng ta xem xét phần Header trong thư trên:
From you@Here.US.EDU Fri Dec 13 08:11:44 2002
Received: (from you@localhost) by Here.US.EDU (8.12.7/8.12.7) id d8BILug12835 for you; Fri, 13 Dec 2002 08:11:44 -0600 (MDT)
From: you@Here.US.EDU (Your Full Name)
Message-Id: 200201011511.d872mLW24467@Here.US.EDU>
To: you might be something else (see NoRecipientAction)
Chú ý rằng hầu hết các dòng của Header bắt dầu bằng một từ và dấu hai chấm. Mỗi từ cho chúng ta biết ý nghĩa của các thông tin của dòng đó Một số thông tin là bắt buộc có còn một số thông tin khác có thể có hoặc không Các thông tin ở trong Header trên đều là bắt buộc.
From you@Here.US.EDU Fri Dec 13 08:11:44 2002: Dòng này biểu diễn thông tin về người gửi.
Received: đây là dòng thể hiện đường đi của email này Mỗi khi email được chuyển qua MTA trung gian nào đó, MTA này sẽ thêm thông tin của nó và thời điểm chuyển giao thư
Do ở đây chỉ có một MTA nên chỉ có một dòng Received: Nếu thông điệp thư qua nhiều MTA nên có nhiều dòng như sau:
Date: là thời gian thư được gửi đi, nó được bao gồm cả mã múi giờ Ví dụ:
From: dòng hiển thị địa chỉ thư và tên của người gửi.
Message-ID: dùng như là số seri của bức thư Nó là duy nhất trong hệ thống, và có thể dùng để so sánh các bản sao khác nhau của một bức thư.
To: là dòng liệt kê danh sách các người nhận.
Trên đây là các thông tin cơ bản, ngoài ra còn rất nhiều các thông khác, tùy thuộc vào từng MTA và giao thức cụ thể:
Content-Type:multipart/mixed;boundary="Boundary- c87ORxAXnTbjfPhCdc7IY"
In-Reply-To:
Message-Id:
Reply-To: Mobmaps@runsystem.net
List-Id:
Trong phần này chỉ đi qua các thông tin liên quan đến kỹ thuật lọc thư rác Sau này đi cụ thể hơn, chúng ta sẽ có đầy đủ tất cả các thông tin trong Header.
Bảng 1.Tên các trường trong header apparently-to bcc* cc* comments* content-length content-transfer-encoding content-type date* disposition encrypted errors-to from* full-name in-reply-to* keywords* mail-from message message-id* notification-to posted-date precedence received* references* reply-to* resent-bcc* resent-cc* resent-date* resent-from* resent-message-id* resent-reply-to resent-sender* resent-to* return-path* return-receipt-to sender* subject* text to* via x400-received
Các trường có đánh dấu * là được định nghĩa bởi RFC2822
Phần thân được bắt đầu bằng dòng trống cho đến hết file Trong ví dụ trên chúng ta chỉ có mỗi phần nội dung thư (content), ngoài ra chúng ta còn có Subject của thư Muốn thêm phần Subject chúng ta soạn lại tệp sendstuff trên như sau: Subject: a test
This is a one-line message.
Dòng Subject: là không bắt buộc, sau đó là một dòng trống Chú ý, dòng trống này phải thực sự là dòng trống, không chứa ký tự space hay tab, trong một số Editor khó để phát hiện ra dòng trống.
Gửi lại thư trên bằng lệnh:
% /usr/sbin/sendmail you
This is a one-line message.
Sendmail sử dụng khái niệm Envelope để thuận tiện trong việc gửi nhận thư, nó tương tự như là khái niệm gốc của nó, được dùng bởi bưu điện Giả sử, bạn muốn gửi 2 bản của 1 tài liệu cho hai người bạn, một ở ngay phòng bên cạnh và một ở thành phố khác Tức:
Sau khi bạn photocopy tài liệu thành hai bản, bỏ vào hai phong thư khác nhau,một được đưa cho người tạp vụ để đưa sang phòng bên cạnh- giống như gửi thư cho người trên cùng hệ thống, một sẽ được bỏ vào hòm thư của bưu điện để đưa sang thành phố khác Giống như gửi thư ra một máy khác.
HỆ THỐNG LỌC THƯ RÁC
Phân loại văn bản
2.1 Lý thuyết chung về phân loại văn bản
2.1.1 Bài toán phân loại văn bản
Phân loại văn bản tức là gán văn bản vào một hoặc một số nhóm văn bản đã được biết trước Phân loại văn bản có hai dạng là phân loại nhị phân và phân loại theo cấp độ Phân loại nhị phân tức là xét xem văn bản là thành viên hay không là thành viên của nhóm Phân loại theo cấp độ tức là mỗi văn bản được gán một giá trị biểu thị mức độ liên quan của văn bản đối với nhóm
Theo cách truyền thống, việc phân loại văn bản có thể thực hiện một cách thủ công, tức là đọc từng văn bản một và gán nó vào nhóm phù hợp Cách thức này sẽ tốn nhiều thời gian và chi phí nếu như số lượng văn bản lớn Do vậy, cần phải xây dựng các công cụ phân loại văn bản một cách tự động Để xây dựng công cụ phân loại văn bản tự động người ta thường dùng các thuật toán học máy (Machine Learning) Tuy nhiên, còn có các thuật toán đặc biệt hơn dùng cho phân loại trong các lĩnh vực đặc thù Một ví dụ điển hình là bài toán phân loại công văn, giấy tờ Hệ thống sẽ tìm ra đặc thù của văn bản một cách tương đối máy móc, cụ thể là khi tìm thấy ở lề trên bên trái có ký hiệu “NĐ” thì hệ thống sẽ phân văn bản đó vào nhóm “Nghị định”, tương tự như vậy với các ký hiệu “CV”,
“QĐ” thì hệ thống sẽ phân văn bản này vào nhóm “Công văn”, và “Quyết định”.Thuật toán này tương đối hiệu quả song lại chỉ phù hợp cho các nhóm dữ liệu tương đối đặc thù Khi phải làm việc với các văn bản ít đặc thù hơn thì cần phải xây dựng các thuật toán phân loại dựa trên nội dung của văn bản và so sánh độ phù hợp của chúng với các văn bản đã được phân loại bởi con người Đây là tư tưởng chính của thuật toán học máy Trong mô hình này, các văn bản đã được phân loại sẵn và hệ thống của chúng ta phải tìm cách để tách ra đặc thù của các văn bản thuộc mỗi nhóm riêng biệt Tập văn bản mẫu dùng để huấn luyện gọi là tập huấn luyện (train set) hay tập mẫu (pattern set), quá trình phân loại văn bản bằng tay gọi là quá trình huấn luyện (training), còn quá trình máy tự tìm đặc thù của các nhóm gọi là quá trình học (learning) Sau khi máy đã học xong, người dùng sẽ đưa các văn bản mới vào và nhiệm vụ của máy là tìm ra xem văn bản đó phù hợp nhất với nhóm nào mà con người đã huấn luyện nó.
Một trong những ứng dụng quan trọng nhất của phân loại văn bản là ứng dụng tìm kiếm văn bản Từ tập dữ liệu đã được phân loại, các văn bản sẽ được đánh chỉ số đối với từng lớp tương ứng Người dùng có thể xác định chủ đề mà mình muốn tìm thông qua các truy vấn.
Một ứng dụng khác của phân loại văn bản là trong lĩnh vực hiểu văn bản Phân loại văn bản có thể được dùng để lọc ra một số văn bản hoặc một phần văn bản mà không làm mất đi tính phong phú của ngôn ngữ tự nhiên.
Trong phân loại văn bản, sự phụ thuộc của một văn bản vào một nhóm có thể là các giá trị rời rạc đúng và sai (true hoặc false, để hiểu rằng văn bản đó thuộc hay không thuộc một nhóm nào đó) hoặc các giá trị liên tục (một số thực, chỉ ra độ phù hợp của văn bản với một nhóm nào đó) Khi câu trả lời đưa ra bắt buộc phải là đúng hoặc sai thì giá trị liên tục có thể được rời rạc hóa bằng cách đặt ngưỡng Ngưỡng đặt ra tùy thuộc vào thuật toán và yêu cầu người dùng.
2.1.2 Quá trình phân loại phân loại văn bản
Phân loại văn bản là một thể loại của bài toán khai phá văn bản, vì vậy nó cũng có các bước cơ bản của quá trình bài toán Khai phá văn bản Đó là các giai đoạn tiền xử lý văn bản, đưa văn bản về dạng có cấu trúc và khai phá các định dạng có cấu trúc này bằng các thuật toán của học máy Đặc thù hơn, nó có các bước sau:
Chuẩn bị tập dữ liệu huấn luyện (Training Data) và dữ liệu kiểm tra (Test Data)
Xử lý tách từ trong văn bản
Biểu diễn văn bản theo định dạng có cấu trúc
Áp dụng phương pháp học đối với dữ liệu huấn luyện
Sử dụng tập dữ liệu kiểm tra để thẩm định lại phương pháp
Đánh giá hiệu quả của phương pháp học.
Tuy nhiên, đối với một số bài toán có tính đặc thù, việc học của thuật toán không ngừng lại ở quá trình đánh giá sau khi thẩm định với dữ liệu kiểm tra mà việc học được tiếp tục khi thuật toán được áp dụng cho các văn bản mới Hệ thống SpamAssassin là một hệ thống điển hình cho việc liên tục học trong quá trình ứng dụng.
2.2 Phương pháp phân loại dựa trên lý thuyết xác suất Bayesian
Các phương pháp phân loại văn bản gồm có:
Phương pháp cây quyết định
Phương pháp máy véc tơ hỗ trợ (Support Vector Machine- SVM)
Trong phần này chúng ta sẽ nghiên cứu kĩ về lý thuyết Bayesian áp dụng cho bài toán phân loại văn bản.
Lý thuyết Bayes đưa ra rằng, xác suất xuất hiện một sự kiện nào đó (chẳng hạn như một lá thư nào đó là thư rác) khi đã có một sự kiện khác đã xảy ra (chẳng hạn lá thư đó chứa từ khóa đặc biệt nào đó) phụ thuộc vào xác suất xảy ra đồng thời cả hai sự kiện đó và xác suất của sự kiện xảy ra trước đó. Đó chính là công thức xác suất có điều kiện:
P(A/B)=P(A^B)/P(B) (2.3) Theo công thức nhân xác suất ta lại có:
Hay nói cách khác, xác suất của một thư thuộc lớp thư rác khi biết các từ khóa trong thư đó được tính thông qua thống kê về các từ khóa của xuất hiện trong lượng thư rác đã xác định Đó là nguyên tắc nói chung của phân loại bằng phương pháp thống kê, trong đó phương pháp phân loại văn bản Bayesian là một trong những phương pháp thống kê được sử dụng nhiều trong hầu hết các ứng dụng phân loại văn bản [11].
2.2.1 Phân loại bằng phương pháp Bayesian
Trong phương pháp này, để đơn giản hoá, người ta coi mỗi tài liệu chỉ thuộc về một lớp hay một chủ đề nào đó Sự tạo thành tài liệu được mô hình bằng các quá trình sau:
1 Mỗi chủ để hay lớp có một xác suất tiên nghiệm Pr(c), với Thực chất đây chính là xác suất mà tác giả của tài liệu lựa chọn ngẫu nhiên một chủ đề nào đó.
2 Với mỗi lớp c, các tài liệu trong lớp được sinh ra với xác suất Pr(d | c).
Như vậy, xác suất để sinh ra tài liệu từ lớp c là Pr(c)Pr(d | c) Với mỗi tài liệu d, xác suất hậu nghiệm để d được sinh ra từ lớp c, sẽ được tính theo công thức
(2.5) trong đó duyệt qua toàn bộ các lớp của tập mẫu.
Pr(d | c) được ước lượng bằng cách mô hình hoá phân bố có điều kiện của thuật ngữ và chủ đề, với tập các tham số Chúng ta ước lượng dựa trên 2 nguồn thông tin chính:
Tri thức tiên nghiệm trước khi xem xét bất cứ tập tài liệu mẫu nào cho bài toán hiện tại
Các thuật ngữ trong tập tài liệu mẫu D.
Sau khi quan sát tập dữ liệu mẫu D, phân bố hậu nghiệm của là Pr( | D). Dựa trên những phân bố này, ta có được:
2.2.2 Mô hình học thống kê Naive Bayes
Mô hình học thống kê được sử dụng nhiều nhất là naive Bayes learner bởi tính đơn giản, tốc độ huấn luyện và tốc độ cập nhật của mô hình Trong mô hình này, các thuật ngữ được coi là độc lập với nhau, phân bố chung của các thuật ngữ là tích của các phân bố thành phần, trong đó mô hình của các phân bố thành phần phụ thuộc vào mô hình biểu diễn tài liệu Có hai mô hình thường được sử dụng là mô hình nhị phân và mô hình đa thức [11].
Trong mô hình nhị phân, các tham số là xác suất một tài liệu c chứa thuật ngữ t ít nhất một lần Với định nghĩa này, ta có:
(2.7) với W là tập các đặc trưng Ta không cần tính cho mỗi tài liệu thử, thay vào đó ta có thể viết lại biểu thức trên như sau:
Tính toán rồi lưu trữ trước tích cho tất cả các lớp c Nhờ đó, trong thời gian kiểm thử, ta chỉ cần tính phép nhân đầu tiên mà thôi.
CẢI TIẾN, CÀI ĐẶT VÀ ĐÁNH GIÁ HỆ THỐNG HỌC BAYESIAN
Hệ thống lọc thư rác của SpamAssassin
SpamAssassin là mô đun lọc thư rác mã nguồn mở được dùng khá rộng rãi trên thế giới SpamAssassin được xây dựng bởi Apache (http://spamassassin.apache.org), sản phẩm này đã được ứng dụng hơn năm năm và được liên tục cập nhật phát triển bởi cộng đồng mã nguồn mở.
SpamAssassin là mô đun mã nguồn mở viết bằng Perl và C/C++ được rất linh động, có thể tích hợp vào hệ thống khác nhau Hiện tại, SpamAssassin đã tích hợp thành công với các máy chủ thư điện tử như SendMail, Qmail, Poffix, Exim,… Ngoài ra, SpamAssassin đã có thể chạy trên Windows trên nền Perl Vì vậy khả năng ứng ụng của SpamAssassin là rất lớn.
Mặt khác, SpamAssassin còn được hộ trợ bởi nhiều tổ chức và người dùng trên toàn thế giới Cụ thể, ngoài tiếng Anh, SpamAssassin còn được phát triển các bộ luật cho nhiều ngôn ngữ ở các quốc gia khác nhau.Cụ thể là :
Tiếng Pháp (http://maxime.ritter.eu.org/Spam/french_rules.cf),
TiếngĐức (http://zmi.at/x/70_zmi_german.cf),
Tiếng Trung, (http://www.ccert.edu.cn/spam/sa/Chinese_rules.cf) và tiếng Nhật, Brazin Các tập luật cho nhiều lĩnh vực khác nhau như chống quảng cáo thuốc, chống các thư lừa đảo, các thư phát tán Vi-rút Bạn có thể xem chi tiết ở (http://wiki.apache.org/spamassassin/CustomRulesets)
SpamAssassin lọc thư rác dựa trên các phương pháp hiệu quả hiện nay, đó là dùng Blacklist/ Whitelist, hệ thống phân loại Bayesian, các danh sách tự động, và tập luật cấu hình của người dùng Trong đó, lọc Bayesian là phương pháp hiệu quả và có khả năng áp dụng được cho các hệ thống lọc thư rác của các ngôn ngữ khác nhau trên thế giới.
Trong [4] đưa ra khá cụ thể các cơ sở và nâng cao về SpamAssassin Ở đây chúng ta sẽ xem xét SpamAssassin dưới các khía cạnh phục vụ cho sinh luật lọc thư rác cho thư Tiếng Việt Chúng ta có thể truy cập các tài nguyên của SpamAssassin ở các địa chỉ sau:
Tài liệu, mã nguồn và các hộ trợ http://SpamAssassin.apache.org
Dùng CPANhttp://www.cpan.org.
Cài thủ công phải cập nhật các Module:
ExtUtils::MakeMaker, File::Spec, Pod::Usage, HTML::Parser, Sys::Syslog, DB_File, Digest::SHA1, và Net::DNS
Nếu dùng spamd và Spamc thì phải có Net::Ident và IO::Socket::SSL
SpamAssassin 3.0 có thể sử dụng:
Vipul's Razor (http://razor.sourceforge.net)
Pyzor (http://pyzor.sourceforge.net)
DCC (http://www.rhyolite.com/anti-spam/dcc/)
Khi cài đặt SpamAssassin chúng ta sẽ có các thành phần:
Các mô đun viết bằng Perl
Các hàm chính của SpamAssassin nằm trong các mô đun viết bằng Perl Phần quan trọng nhất là Mail::SpamAssassin, là mô đun mức cao nhất gọi đến các mô đun khác, và mô đun Mail::SpamAssassin::Conf chứa các tài liệu của các tệp cấu hình cho SpamAssassin Các mô đun trên thường được cài trong thư mục như /usr/lib/perl5/site_perl/5.8.1, nhưng bạn không cần biết vị trí của chúng, perl sẽ đảm bảo là chúng cài vào thư mục mà Perl sẽ tìm kiếm khi cần đến
SpamAssassin 3.0 giới thiệu một sự khác biệt giữa các mô đun chính của SpamAssassin và các mô đun plug-ins được viết bởi các hãng khác Tên của các mô dun đó được đặt phân cấp theo Mail::SpamAssassin::Plugin (Ví dụ Mail::SpamAssassin::Plugin::URIDNSBL).
Tập luật mà SpamAssassin sử dụng để quyết định xem một thông điệp có phải là thư rác không được giữ trong các tệp cấu hình trong thu mục /usr/share/spamassassin Bạn có thể tìm thấy vị trí của các tệp này bằng lệnh : spamassassin local debug và có thể đổi thư mục được
Các tệp cấu hình chung điều khiển các hành vi mặc định của spamassassin (và spamd) khi không có các cài đặt trên từng người dùng Tệp đó là local.cf và được cài trong /etc/mail/spamassassin Các ứng dụng khác sử dụng mô đun Mail::SpamAssassin cũng thường đặt tệp cấu hình chung trong thư mục này
Bạn có thể tìm thấy vị trí của các tệp này bằng lệnh : spamassassin local debug và có thể đổi thư mục được
Chương trình SpamAssassin viết bằng Perl chấp nhận các thư dưới dạng chuẩn đầu vào, áp dụng hàm của Mail::SpamAssassin, trả về thư là chuẩn đầu ra cùng với điểm spam, các báo cáo, các chỉnh sửa khi phê chuẩn Nó có một số hàm khác mô tả trong phần sau SpamAssassin thường được cài trong thư mục /usr/bin.
Trong hệ thống nhận một số lương lớn thư, chạy một đoạn mã SpamAssassin cho mỗi thư là rất tốn kém Do đó, chúng ta sẽ chạy một dịch vụ (daemon), khởi động lúc khởi động hệ thống, thường trực trong bộ nhớ và thực hiện kiểm tra thư.
Nó lắng nghe trên cả Socket Unix lẫn cổng TCP để nhận các yêu cầu kiểm tra thư, thực hiện kiểm tra thư và trả về kết quả cho các yêu cầu.
Spamc là chương trình client cho hệ thống chạy Spamd Nó chấp nhận các thư là chuẩn đầu vào, chuyển cho spamd, và trả về dưới dạng chuẩn đầu ra.
Giống như spamassassin, nó thực hiện với từng bức thư nhưng nó được viết dưới C và được biên dịch, do đó tránh được phải chạy thông qua Perl Nó cung cấp các hàm cần thiết của spamassassin. spamc và spamd thường được cài trong /usr/bin
Áp dụng các kỹ thuật phân loại văn bản tiếng Việt vào SpamAssassin
SpamAssassin là hệ thống ban đầu chỉ hộ trợ cho tiếng Anh, sau này SpamAssassin đã được phát triển để hộ trợ các luật ở các thứ tiếng khác nhau Tuy vậy, hệ thống học Bayesian là hệ thống dựa trên phương pháp lọc theo nội dung không phù hợp với các ngôn ngữ có đặc thù riêng như tiếng Việt Đó là các đặc thù về cụm từ, đặc thù về phân tách ngữ pháp, đặc thù về từ điển từ dừng Vì vậy, hệ thống học gặp phải một số điểm hạn chế khi hoạt động với các thư tiếng Việt Cụ thể:
Hạn chế về khả năng tách từ.
Hệ thống học Bayesian của SpamAssassin làm thực hiện tách văn bản hoàn toàn dựa vào khoảng trắng Thuật toán tách từ này chỉ phù hợp với tiếng Anh và các ngôn ngữ tương tự Với tiếng Việt, việc tách theo các khoảng trắng chỉ nhận được các âm tiết Vì vậy, việc lọc thư rác theo nội dung không cho kết quả tốt với phương pháp tách từ như trên.
Vì vậy để hệ thống hoạt động tốt, chúng ta phải thực hiện các thuật toán tách từ theo từ điển trong phân loại văn bản tiếng Việt.
Hạn chế về tập các từ dừng.
Trước hết có thể quan sát thấy rằng trong các ngôn ngữ tự nhiên, rất nhiều từ được dùng để biểu diễn cấu trúc câu nhưng hầu như không mang ý nghĩa về mặt nội dung, chẳng hạn các loại từ: giới từ, liên từ,…Các loại từ này xuất hiện thường xuyên trong các văn bản nhưng không hề mang bất cứ một thông tin nào về nội dung hay chủ đề của bức thư
Từ dừng (stopword) là những từ mang ít ý nghĩa trong xử lý vì nó xuất hiện trong hầu hết các văn bản.
Có thể Nếu Vì vậy
Sau khi Thì Nếu không
Trước khi Vì thế Loại trừ
Tất cả Cho nên Một số
Hầu như Là Với lại
Khi mà Không thể Quả thật
Bởi vì Thay vì Tất cả
Bảng 4 Một số từ dừng điển hình trong văn bản tiếng Việt.
Hệ thống học Bayesian của SpamAssassin đã không thực hiện loại bỏ các từ dừng của tiếng Việt Ở bản SpamAssassin 3.1.1 đã có thực hiện loại bỏ một số tử dừng nhưng chỉ là từ dừng tiếng Anh và nó là cố định trong mã nguồn.
Hơn nữa, trong quá trình cho SpamAssassin học với các văn bản tiếng Việt, các từ dừng thường xuất hiện với xác suất rất lớn làm sai lệch kết quả của SpamAssassin.
Vì vậy, việc xây dựng và sử dụng một từ điển từ dừng là cần thiết để cho SpamAssassin hoạt động tốt với các thư tiếng Việt.(như tác giả Quang-Anh Tran đã làm trong [1])
Hạn chế về khả năng xuất dữ liệu học của Bayesian ra thành các tập luật để có thể áp dụng ở các hệ thống khác. Điểm mạnh của SpamAssassin là hoạt động theo hệ thống tập luật linh hoạt, vì vậy người dùng có thể chia sẻ tập luật cho nhau Nhưng đối với hệ thống Bayesian thì việc chia sẻ đã bị mất đi ý nghĩa Đó là vì các luật của SpamAssassin về Bayesian chỉ là các quy định về việc chuyển từ không gian xác suất sang không gian điểm (Xem tệp luật 20_bayes.cf) mà các thông số chuyển đổi này là cấu hình riêng của hệ thống, không phù hợp với các hệ thống khác nhau.
Mặt khác, các luật dùng để chia sẻ phải là các luật có các từ mang ý nghĩa. Chẳng hạn như: body SALE_OFF /^\s*giá ưu đãi đặc biệt\b/i describe SALE_OFF Giá ưu đãi thường là thư quảng cáo score SALE_OFF 0.542
Bayesian lưu trữ các từ khóa dưới dạng băm SHA1, nên việc lấy ra các luật có dạng như trên không thể thực hiện được
Vì vậy, việc xây dựng và sử dụng một từ điển vừa sử dụng trong tách từ và trong việc tạo luật là một biện pháp hiệu quả.
Giao diện hoàn toàn là dòng lệnh: Để thuân lợi hơn trong việc quản trị và cấu hình, đã có một số tổ chức đã xây dựng giao diện Web để quản trị SpamAssassin.
2.2.Xây dựng mô đun tách từ
Quá trình chuyển một thư về dạng có cấu trúc tổng quan như trong sơ đồ sau:
2.Tách từ khoá 3.Loại từ dừng
Thư dạng chuẩn Văn bản biểu diễn theo tần suất dạng Boolean
Hình 16 Quá trình chuyển thư về không gian véc tơ dạng Boolean
Trong quá trình xử lý các bức thư, SpamAssassin đã thực hiện các tiền xử lý rất tốt Đó là nhờ vào khả năng xử lý biểu thức chính quy của Perl.
Sau khi tiền xử lý, chúng ta có thư ở dạng văn bản “sạch” Văn bản sạch là văn bản chỉ gồm các ký tự Tiếng Việt, dấu cách và dấu chấm Văn bản đã được chuyển thành dạng các xâu chuẩn, mỗi xâu ngăn cách nhau bằng 1 dấu chấm
Vì vậy,chúng ta tập trung vào xử lý hai phần đó là tách từ khóa và loại bỏ từ dừng
Xây dựng từ điển và tách từ theo từ điển là phương pháp hiệu quả đê thực hiện tách từ phục vụ cho phân loại văn bản tiếng Việt Từ điển tiếng Việt được dùng là từ điển khoảng 65000 từ thông dụng Hiện tại, từ điển được sử dụng để tách từ được lưu trữ bằng CSDL MySQL Sở dĩ MySQL được chọn là vì MySQL là hệ quản trị
CSDL nguồn mở có hiệu năng rất cao và hơn nữa, chúng ta lựa chọn MySQL để đồng bộ với cơ sở dữ liệu từ khóa (bayes_token) được lưu bởi SpamAssassin.
Chúng ta sử dụng hai từ điển có mã Unicode, đó là từ điển tách từ và từ điển từ dừng với lược đồ như sau:
`value` varchar(40) character set utf8 collate utf8_unicode_ci NOT NULL default '',
`hash` varbinary(15) NOT NULL default '',
`flag` tinyint(1) NOT NULL default '0',
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
`value` varchar(60) collate utf8_bin NOT NULL default '',
`hash` varbinary(5) NOT NULL default '',
`flag` tinyint(1) NOT NULL default '0',
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
Trong đó: o Value : dùng để ghi giá trị của từ. o Hash : dùng để ghi giá trị của năm byte cuối của giá trị sau hàm băm sha1 của value. o Flag là cờ xác định xem từ có được dùng hay không.
Với từ điển của chúng ta có 70000 từ, chúng ta có thể nạp từ điển vào bộ nhớ bằng cách dùng con trỏ Với mỗi từ,chúng ta cần 8 byte con trỏ và 5 byte ghi giá trị băm của từ đó.
Quá trình huấn luyện và đánh giá
3.1 Các yêu cầu về môi trường
SpamAssassin là một hệ mã nguồn mở nhưng SpamAssassin có thể chạy tốt trên cả Windows và các hệ điều hành mã nguồn mở khác Để dễ dàng tích hợp với các hệ thống máy chủ thư điện tử nguồn mở khác như Qmail, Sendmail, Postfix, Exim chúng ta sẽ cài đặt SpamAssassin trên hệ thống mã nguồn mở Và các cấu hình của chúng ta sẽ hướng đến sử dụng hệ thống SpamAssassin đã được cải tiến trên dựa trên phiên bản mới nhất của SpamAssassin là Mail-SpamAssassin-3.2.4.
Hệ điều hành: Linux (Fedora, Red Hat,….)
Máy chủ thư điện tử : Một trong 4 máy chủ Qmail, Sendmail, Postfix,
Perl: Perl 5.8.8 Đã cài đặt các Mô đun: o HTML::Parser >= 3.24 (from CPAN) o DB_File o DBI o DBD::mysql o Net-DNS o IP-Country o Mail-SPF o Error o Digest-SHA
Máy chủ CSDL MySQL server
Ngoài ra, các mô đun bằng Perl tùy chọn khác cũng có thể cài đặt để tăng hiệu năng của SpamAssassin
3.2 Cài đặt và cấu hình
Chúng ta thực hiện cài đặt và cấu hình với các yêu cầu trong mục 1 được thỏa mãn Thật vậy, các bước cài đặt được thực hiện như sau:
2 Thêm hai gói cho phần tách từ cho thư tiếng Việt
3 Thay thế Mô đun Mail:SpamAssassin:Bayes của Mail-SpamAssassin-3.2.4 bằng Mô đun đã cải tiến.
4 Tạo CSDL cho SpamAssassin trong MySQL và hai bảng viword và vistopword bằng các câu SQL như trên
5 Cập nhật hai từ điển tiếng Việt, từ điển tách từ và từ điển từ dừng
3.3.Chiến lược và công cụ huấn luyện
Có hai chiến lược huấn luyện cho hệ thống phân loại Bayesian là huấn luyện tất cả và huấn luyện nếu có lỗi Trong chiến lược huấn luyện tất cả, bạn sẽ huấn luyện cho hệ thống tất cả các thư bạn nhận được Chiến lược này đáp ứng sự thay đổi của thư rác nhưng lại quá nhạy cảm với các biến đổi xấu không thể hiện được xu hướng thay đổi Hơn nữa nó còn là một chiến lược tốn kém tài nguyên và công sức Trong chiến thuật huấn luyện khi có lỗi, bạn chỉ phải huấn luyện lại hệ thống cho các thư đã bị phân loại sai. Chiến thuật này tiết kiệm tài nguyên nhưng không đáp ứng tốt sự thay đổi của thư rác.
Dựa vào thử nghiệm của Greg Louis ( http://www.bgl.nu/bogofilter/), ông đã chỉ ra một chiến lược khá hợp lý là áp dụng chiến thuật huấn luyện tất cả trong thời gian đầu và chuyển sang huấn luyện khi có lỗi trong giai đoạn sau Giới hạn chuyển đổi mà ông đưa ra là 10.000 thư Để nhận được độ chính xác của phương pháp, chúng ta cấu hính SpamAssassin chỉ hoạt động với phương pháp Bayesian
Mô đun sa-learn là giao diện chính của bạn khi thực hiện huấn luyện hệ thống Bước đầu tiên là sưu tập cơ sở dữ liệu về thư rác và thư sạch Các thư có thể lưu trữ dưới định dạng maildir (mỗi thư một tệp) hoặc mbox format (mỗi tệp có thể có nhiều thư) Chú ý rằng, các thư rác nên được sưu tập một thời điểm mới đạt được hiệu quả tốt nhất.
Bước tiếp theo, chúng ta dùng mô đun sa-learn trên mỗi thư mục thư với các tham số spam và ham Trong đoạn lệnh sau là kịch bản của của quả trình học với thư mục dạng mbox với giả thiết chúng ta chạy cho từng người dùng.
Ví dụ 1 Huấn luyện qua thư mục thư dạng mbox
$ sa-learn mbox spam Mail/spam
$ sa-learn mbox ham mail/myproject
$ sa-learn mbox ham /var/spool/mail/$LOGNAME
Ví dụ 2: Huấn luyện qua thư mục thư dạng maildirs
$ sa-learn no-rebuild spam mail/spam
$ sa-learn no-rebuild ham mail/INBOX
$ sa-learn no-rebuild ham mail/myproject
Trong lần sử dụng đầu tiên, hệ thống phân loại Bayesian, bạn sẽ thấy sự thay đổi ở cách thư được kiểm tra Khi đã huấn luyện với số lượng đủ các thư rác và thư sạch, điểm cho mỗi là thư thay đổi theo hai hướng:
Bạn sẽ thấy các bức thư đụng phải các luật như BAYES_44 hay BAYES_80 Các luật chẳng hạn trong tệp 23_bayes.cf được thử khi mà hệ thống phân loại Bayesian gán xác suất thư nào đó là thư rác Ví dụ, luật BAYES_44 thỏa mãn khi thư có xác suất là thư rác từ 0.44 đến 0.4999; luật BAYES_80 thỏa mãn khi thư có xác suất là thư rác từ 0.80 đến 0.90. Luật mà có xác suất là thư rác lớn hơn 0.5 thì làm tăng điểm cho giả thuyết thư là thư rác và ngược lại
Hầu hết các luật không phải là luật do hệ thống phân loại Bayesian sinh ra được gán các điểm khác nhau một cách cố định Trong nhiều trường hợp các luật tĩnh đó cho kết không mềm dẻo, do đó hệ thống phân loại Bayesian tỏ ra hiệu quả hơn hẳn các hệ thống luật cố định.
Việc tiếp tục huấn luyện là quan trọng với việc đảm bảo hiệu năng của hệ thống Giống như việc huấn luyện ban đầu, chúng ta phải bổ sung các thư đã xác định là thư rác hoặc là thư sạch Nếu điểm của thư là cao hơn ngưỡng tự động học thì hệ thống sẽ tự thực hiện nếu bạn cấu hình Ngoài ra bạn còn có thể dùng lệnh sa- learn spam và sa-learn ham để thực hiện.
Việc thực hiện thủ công có thể dùng chương trình đọc thư hoặc webmail và cũng có thể thao tác trực tiếp lên thư mục nếu bạn có đủ quyền Trong hệ thống chúng ta định xây dựng, quá trình này sẽ được tự động và các thư rác còn có thể là phản hồi từ người dùng hoặc từ nhiều nguồn khác nhau.
Có nhiều tiêu chí để đánh giá hiệu năng của hệ thống lọc thư rác như độ chính xác, tỉ lệ lỗi, thời gian và không gian nhớ Nhưng thông thường để đánh giá hiệu quả của một hệ thống lọc thư rác, người ta sử dụng các thông số([15]-trang 5):
FN (False Negative): Số lượng thư rác được xem là thư sạch, ký hiệu NSH.
FP(False Positive): Số lượng thư sạch bị đánh dấu nhầm là thư rác, ký hiệu
TN (True Negative): Số lượng thư sạch được xem là thư sạch, ký hiệu NHH
TP (True Positive):Số lượng thư rác được đánh dấu là thư rác, ký hiệu NSS
Do các tham số trên không thuận tiện để so sánh giữa các hệ thống, giữa các lần huấn luyện có số lượng dữ liệu mẫu khác nhau nên ta đưa ra các tiêu chí thể hiện tỷ lệ để thuận tiện cho việc so sánh Chẳng hạn như trong [13], Tran Anh Quang sử dụng hai tiêu chuẩn SR(Spam recall), HE (Ham Error).
N SS +N HS (4.2) Nhưng với 4 thông số độc lập trên thì 2 tỷ lệ trên chưa đánh giá đủ toàn bộ hệ thống
Tuy nhiên, với các phương pháp khác nhau thì có những công thức đặc thù riêng để đánh giá, chẳng hạn trong [2]- trang 6, các tác giả sử dụng TCR (Total Cost Ratio) để đánh giá chính hệ thống của mình.
Nhưng để dễ dàng so sánh và phù hợp với một hệ thống học trong quá trình huấn luyện thử nghiệm, em đánh giá theo các tiêu chí định lượng và không định lượng sau:
Tiêu chí 1 Sự thay đổi của dữ liệu học khi thực hiện học.
TP+TN+FP+FN= N SH +N HS
3.5.2 Nguồn dữ liệu dùng cho thí nghiệm và đánh giá
Các nguồn thư rác thu thập là trang rao vặt, các hãng bất động sản, các hãng mỹ phẩm, máy tính, một số tờ báo phản động như Nguồn thư sạch là nguồn thư của cá nhân gồm các thư được chọn từ các thư của bản thân, các thư trao đổi thông tin hàng ngày Một trong những loại thư nếu gửi không đúng đối tượng, gửi với nội dung phản động hoặc quảng cáo sẽ được coi là thư rác.
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
Trong quá trình thực hiện đồ án tốt nghiệp này, em đã đạt được những kết quả sau:
Tìm hiểu được những kiến thức cơ bản về hệ thống thư điện tử, thành phần của một bức thư điện tử, cách thức hoạt động của hệ thống.
Tìm hiểu về hệ thống lọc thư rác, các phương pháp lọc thư rác, đặc biệt là phương pháp lọc thư rác dựa trên lý thuyết Bayesian.
Tìm hiểu lý thuyết chung về phân loại văn bản.
Nghiên cứu và thiết kế hệ thống lọc thư rác tiếng Việt trên công nghệ của SpamAssassin.
Bên cạnh đó, đồ án cần khắc phục một số điểm chưa tốt
Giao diện dòng lệnh của SpamAssassin còn khó dùng với người chưa thông thạo.
Chưa huấn luyện hệ thống với một bộ dữ liệu mẫu đủ lớn (trên 1000 thư), đa dạng để có kết quả chính xác và ổn định.
Hướng phát triển tiếp theo
Trong thời gian tới em dự kiến sẽ tiếp tục nghiên cứu và phát triển hệ thống theo các hướng:
Xây dựng một giao diện quản trị hệ thống giúp cho việc thao tác, quản lý được dễ dàng, trực quan hơn.
Huấn luyện cho hệ thống với một bộ dữ liện đủ lớn.
Hỗ trợ thêm một số loại mã tiếng Việt khác (VNI Windows, TCVN3, )
Nghiên cứu thêm các thuật toán tách từ khác hiệu quả hơn cho thư tiếngViệt.