Naive Bayes in Email Classification
Naive Bayes lọc email
Công ty nào đang ứng dụng Naive Bayes?
Mỗi sáng bạn mở hộp thư Gmail và thấy mọi thứ sạch sẽ — không quảng cáo thuốc giả, không lừa đảo trúng thưởng. Bạn có bao giờ tự hỏi ai đã chặn chúng lại? Phần lớn công việc đó do một thuật toán hơn 20 năm tuổi — Naive Bayes — thực hiện thầm lặng ngay trước khi email chạm tới bạn.
Bài luận “A Plan for Spam” của Paul Graham năm 2002 chứng minh rằng chỉ cần đếm tần suất từ và áp dụng định lý Bayes đã lọc được hơn 99,5% thư rác. Ý tưởng đó trở thành nền tảng cho SpamAssassin (bộ lọc mã nguồn mở) và bộ lọc đầu tiên của Gmail.
Vấn đề công ty cần giải quyết
Mỗi ngày có khoảng 15 tỷ thư rácđược gửi đi trên toàn cầu. Kẻ gửi spam liên tục đổi chiêu: cố ý sai chính tả, chèn ký tự vô hình, giả mạo địa chỉ người gửi. Luật cứng kiểu “nếu có từ X thì chặn” không bao giờ theo kịp.
Khối lượng khổng lồ
Gmail xử lý hàng tỷ email mỗi ngày. Không con người nào đọc hết.
Kẻ tấn công luôn đổi chiêu
V1agra, V.I.A.G.R.A, viaqra... mỗi ngày một biến thể mới.
Không được chặn nhầm
Chặn nhầm một email quan trọng tệ hơn nhiều so với lọt vài spam.
Vấn đề cốt lõi: phân loại mỗi email thành spam hoặc ham (thư hợp lệ) với sai số cực thấp. Chặn nhầm một email quan trọng (false positive) gây hậu quả nghiêm trọng hơn nhiều so với để lọt vài thư rác.
Cách Naive Bayes giải quyết vấn đề
Thu thập dữ liệu huấn luyện — ham và spam. Hệ thống cần tối thiểu khoảng 200 email spam và 200 email ham để bắt đầu. SpamAssassin cho phép người dùng tự gán nhãn; Gmail dùng phản hồi từ hàng tỷ lượt nhấn “Báo cáo spam” mỗi ngày làm tín hiệu huấn luyện.
Tính xác suất có điều kiện cho từng từ. Với mỗi từ trong kho từ vựng, hệ thống tính P(từ|spam) — tỉ lệ email spam chứa từ đó — và P(từ|ham). Ví dụ: “trúng thưởng” có P(từ|spam) rất cao, còn tên đồng nghiệp của bạn có P(từ|ham) rất cao.
Kết hợp bằng định lý Bayes.Khi email mới đến, thuật toán nhân tất cả xác suất có điều kiện của các từ trong email lại với nhau (giả định “ngây thơ” rằng các từ độc lập) để tính P(spam|email). Phép nhân được thực hiện trong không gian log để tránh tràn số.
So sánh với ngưỡng quyết định. Nếu P(spam|email) vượt ngưỡng (thường từ 0,9 trở lên để hạn chế chặn nhầm), email bị đánh dấu là spam. Ngưỡng cao đồng nghĩa ưu tiên giảm false positive — tỷ lệ nhầm thư hợp lệ thành spam dưới 0,2%.
Vòng phản hồi từ người dùng. Khi bạn nhấn “Báo cáo spam” hoặc kéo email ra khỏi thùng rác, hệ thống cập nhật bảng xác suất. Gmail thu thập tín hiệu từ 1,8 tỷ người dùng — bộ lọc tự cải thiện liên tục mà không cần kỹ sư can thiệp thủ công.
Hộp thư mô phỏng — bấm vào email để xem bộ lọc chạy
Bạn là bộ lọc Naive Bayes. Mỗi email dưới đây có cụm từ đặc trưng riêng. Bấm vào một email để xem: (1) các từ được chọn làm bằng chứng, (2) từng từ “bỏ phiếu” bao nhiêu phần trăm cho spam/ham, (3) tổng P(Spam) cuối cùng.
Đặc trưng tìm thấy
Con số thật
Kéo thanh Laplace — xem bộ lọc xử lý từ lạ thế nào
Khi gặp một từ chưa từng có trong dữ liệu huấn luyện (P(từ|Spam) = 0), phép nhân xác suất sẽ bằng 0 ngay — một từ lạ có thể “giết” cả dự đoán. Giải pháp: Laplace smoothing — thêm một lượng nhỏ vào mọi đếm để không xác suất nào bằng 0. Kéo thanh α bên dưới để thấy tác dụng.
Email mẫu: “trúng thưởng” + từ mới “blockchain”
Sau khi làm mượt: số rất nhỏ nhưng khác 0
P(Spam) = 93.7%
Hành trình 25 năm của bộ lọc spam
Naive Bayes sinh ra năm 2002 từ bài luận của Paul Graham. Ngày nay Gmail dùng nhiều tầng, nhưng Naive Bayes vẫn ở tầng đầu vì tốc độ và khả năng học từ phản hồi.
Paul Graham — “A Plan for Spam”
Chứng minh bộ lọc Bayesian đạt 99,5% chỉ bằng đếm từ. Biến đổi hoàn toàn cuộc chiến chống spam.
SpamAssassin 3.0 tích hợp Naive Bayes
Bộ lọc mã nguồn mở phổ biến nhất thế giới đưa Naive Bayes vào lõi. Hàng triệu server email áp dụng.
Gmail ra mắt với bộ lọc Bayesian
Google tích hợp vào hệ thống xử lý tỷ email mỗi ngày. Tỷ lệ false positive rơi xuống dưới 0,2%.
Adversarial evolution — Bayesian poisoning
Spammer bắt đầu chèn văn bản “vô hại” để pha loãng. Google phản ứng bằng cách kết hợp nhiều tín hiệu ngoài nội dung.
TensorFlow thêm vào hệ thống Gmail
Mô hình học sâu bổ sung, chặn thêm 100 triệu spam/ngày mà bộ lọc cũ bỏ lỡ. Naive Bayes vẫn ở tầng đầu — bộ lọc mới ở tầng sâu hơn.
Gmail chọn đánh đổi như thế nào?
Khi bộ lọc sai, có hai kiểu sai khác hẳn nhau. Gmail cố ý nghiêng về một kiểu — dùng ngưỡng quyết định cao để ưu tiên an toàn.
Bộ lọc nói “SPAM” nhưng thực tế là email quan trọng từ sếp, khách hàng, hoặc ngân hàng.
Bộ lọc nói “HAM” nhưng thực tế là spam. Bạn thấy vài quảng cáo trong hộp thư đến.
Thử tự tay
Bạn là bộ lọc Naive Bayes. Đây là các tình huống thường gặp trong đời thực — hãy thử phán đoán.
Email tiêu đề: 'Đơn hàng #HN2034 đã được giao thành công'. Nội dung: tên sản phẩm, thời gian giao, đường link theo dõi. Dự đoán?
Email chứa từ lạ 'NFT mint drop' mà dữ liệu huấn luyện chưa từng thấy. Không có Laplace smoothing, chuyện gì xảy ra?
Kẻ gửi spam cố tình chèn 50 từ vô hại (tên, địa chỉ, câu chúc) vào email chứa 'trúng thưởng'. Chiêu này có đánh lừa được Naive Bayes không?
Bạn nhấn 'Báo cáo spam' cho một email. Điều gì xảy ra ở phía Gmail?
Nếu không có Naive Bayes, app sẽ ra sao?
Không có Naive Bayes, bộ lọc spam sẽ phải dựa hoàn toàn vào luật cứng: nếu email chứa từ X thì chặn. Kẻ gửi spam chỉ cần thay đổi một từ là qua mặt. Paul Graham mô tả đó là “cuộc chạy đua vũ trang mà người phòng thủ luôn thua”.
Naive Bayes thay đổi cuộc chơi: thay vì đối phó từng chiêu trò riêng lẻ, thuật toán nhìn vào xác suất tổng hợp của toàn bộ nội dung. Kẻ gửi spam phải thay đổi gần như toàn bộ email mới qua được — và khi đó, email không còn đủ “hấp dẫn” để lừa người đọc nữa.