Logistic Regression in Spam Filtering
Gmail biến email thành xác suất spam
Công ty nào đang ứng dụng Hồi quy logistic?
Mỗi sáng bạn mở Gmail và hộp thư đến rất gọn. Không có email giả mạo ngân hàng, không có "trúng thưởng 500 triệu", không có "xác thực tài khoản NGAY". Bạn hiếm khi thấy chúng vì hệ thống đã âm thầm chuyển sang thùng rác từ trước.
Dưới đây là một hộp thư mô phỏng để bạn nhìn thẳng vào cơ chế đó. Thử bật tắt các đặc trưng rồi kéo ngưỡng. Cùng một dãy email nhưng cách phân loại thay đổi theo từng giây.
Precision đếm tỉ lệ email bị gắn nhãn spam mà đúng là spam thật. Recall đếm tỉ lệ email spam thật mà hệ thống bắt được. Khi bạn tăng ngưỡng, precision lên (ít báo nhầm) còn recall xuống (bỏ sót nhiều hơn). Gmail phải cân hai số này trên hàng tỷ email mỗi ngày.
Vấn đề công ty cần giải quyết
Gmail phục vụ 1,8 tỷ người dùng. Mỗi ngày hệ thống nhận hàng chục tỷ email, trong đó khoảng 15 tỷ là thư rác. Kẻ gửi spam liên tục đổi chiến thuật: viết sai chính tả cố ý (tr-úng th-ưởng), chèn ký tự đặc biệt, đổi sang domain mới, giấu chữ vào hình ảnh.
Vấn đề cốt lõi nằm ở chỗ: mỗi email phải được gán một xác suất spam, sau đó hệ thống tự quyết định cho vào hộp thư hay thùng rác. Sai chiều này (để lọt spam) chỉ gây phiền. Sai chiều kia (chặn nhầm email quan trọng của sếp) có thể gây hậu quả nghiêm trọng.
Bạn không bao giờ nhìn thấy spam đó. Hộp thư sạch. Đây là phần việc im lặng giúp Gmail đáng dùng mỗi ngày.
Bỏ sót thì mất tiền (lừa đảo trúng ví). Báo nhầm thì mất hợp đồng (email của sếp lạc vào thùng rác).
Cách Hồi quy logistic giải quyết vấn đề
Bóc đặc trưng từ email. Hệ thống quét mọi dấu hiệu có thể: số từ VIẾT HOA, số link, từ khoá đáng ngờ, domain người gửi, IP máy chủ, cấu trúc HTML. Mỗi email biến thành một danh sách con số, tức là một vector feature.
Bật tắt từng dấu hiệu, xem P(spam) đổi theo
Link:0P(spam)10%0%, an toàn50%, ngưỡng mặc định100%, chắc chắn spamMỗi lần bạn bật một dấu hiệu, xác suất nhảy theo. Bạn vừa nhìn thấy bản chất của logistic regression: mỗi đặc trưng góp một phần vào "điểm spam", rồi hàm sigmoid bóp tổng đó về một số trong khoảng 0 tới 1.
Tính điểm tuyến tính w·x + b.Mỗi đặc trưng được nhân với một trọng số. Đặc trưng nào "nặng ký" hơn (ví dụ domain lạ) sẽ mang trọng số lớn hơn. Cộng tất cả lại thành một điểm số z duy nhất. Đây chính là phần hồi quy tuyến tính nằm trong lòng mô hình.
Bóp z qua sigmoid để ra xác suất. Điểm z có thể là bất kỳ số nào trên trục thực, nhưng ta cần một xác suất nằm trong khoảng (0, 1) để ra quyết định. Hàm sigmoid ép z về đúng khoảng đó. Số ra chính là P(email này là spam).
z thấpz = −3: σ(z) ≈ 0.05. Email gần như chắc chắn là thư thường. Vào hộp thư đến.Đặt ngưỡng để chốt quyết định. Ngưỡng mặc định là 0.5. Gmail có thể nâng cao hơn cho người dùng doanh nghiệp (sợ báo nhầm) hoặc hạ thấp hơn cho tài khoản hay bị tấn công. Hộp thư đến nhận mọi email có P nhỏ hơn ngưỡng. Thùng rác nhận phần còn lại.
Học liên tục từ phản hồi của bạn.Khi bạn bấm "Đánh dấu là spam", Gmail học thêm. Khi bạn kéo email từ thùng rác về, Gmail cũng học. Qua hàng tỷ phản hồi mỗi ngày, trọng số w và bias b được cập nhật liên tục bằng cross-entropy loss và gradient descent. Bộ lọc ngày nay đã mở rộng sang mạng nơ-ron (RETVec), nhưng cơ chế "tính xác suất rồi phân loại" của logistic regression vẫn là tư duy gốc.
Con số thật
Nếu không có Hồi quy logistic, app sẽ ra sao?
Không có logistic regression, bộ lọc spam sẽ phải dựa vào luật cứng do con người viết tay: "nếu email chứa từ X thì chặn". Cách này rất dễ bị qua mặt (chỉ cần viết sai chính tả là thoát) và không co giãn được khi kẻ gửi spam đổi chiến thuật.
Logistic regression biến mỗi email thành một xác suất, gộp nhiều đặc trưng nhẹ thành một điểm số chung. Kẻ gửi spam giờ phải lách tất cả đặc trưng cùng lúc, khó hơn rất nhiều. Ý tưởng "tính xác suất nhị phân từ đặc trưng đầu vào" đã trở thành viên gạch nền của mọi hệ thống phân loại email hiện đại.
Ngưỡng đang là 0.5. Một email spam tinh vi cho P = 0.42 (dưới ngưỡng). Nó vào đâu?
- Mỗi email biến thành một danh sách đặc trưng: số link, từ đáng ngờ, domain lạ, VIẾT HOA, v.v.
- Logistic regression cộng các đặc trưng thành điểm số z, rồi sigmoid ép z thành xác suất P(spam).
- Ngưỡng chốt quyết định: P lớn hơn hoặc bằng ngưỡng thì rơi vào thùng rác. Ngưỡng cao thì ít báo nhầm, ngưỡng thấp thì bắt được nhiều hơn.
- Mỗi lần bạn đánh dấu 'spam' hay 'không spam', Gmail cập nhật lại trọng số. Mô hình sống chứ không cố định.
Bốn chiêu của kẻ gửi spam và cách mô hình học lại
1. Sai chính tả cố ý
"tr-úng th-ưởng", "m1ễn ph1" né được bộ lọc dựa trên chuỗi chữ chính xác. Đối phó bằng RETVec hoặc character-level embedding.2. Chữ giấu trong hình ảnh
Toàn bộ nội dung được đẩy vào một tấm ảnh, bộ lọc không có text để quét. Đối phó bằng OCR nội dung ảnh và mô hình đa-phương tiện.3. Domain giả danh ngân hàng
"no-reply@vietcom-bank.top" thay cho "vietcombank.com.vn". Đối phó bằng kiểm tra whois, DMARC và lịch sử domain.4. Thay đổi liên tục theo ngày
Sáng nay một mẫu, chiều đã khác. Đối phó bằng mô hình học online (online learning), cập nhật trọng số ngay trên dòng dữ liệu.Kiểm tra hiểu biết
Gmail muốn giảm số email thư thường bị gắn nhầm là spam (False Positive). Họ nên chỉnh ngưỡng theo hướng nào?