Bước tới nội dung

Thành viên:Plantaest/Citron

Bách khoa toàn thư mở Wikipedia
Citron
Phát triển bởiPlantaest
Phát hành lần đầu31 tháng 12 năm 2024 (2024-12-31)
Phiên bản ổn định
0.1.0-alpha.1
Kho mã nguồncitron trên GitHub
Viết bằngJava, Python
Nền tảngToolforge
Ngôn ngữ có sẵnĐa ngôn ngữ
Thể loạiCông cụ giám sát tự động
Giấy phépAGPL-3.0

Citron là một phần mềm gồm các công cụ có liên quan đến việc giám sát luồng Thay đổi gần đây. Trong đó, công cụ Citron/Spam đảm nhận vai trò báo cáo những liên kết xấu phát hiện được.

Citron/Spam

[sửa | sửa mã nguồn]

Citron/Spam gồm có 2 phần: phần máy chủ (server) và phần tiện ích (gadget). Mỗi ngày, phần máy chủ thực hiện việc thu thập dữ liệu và tạo ra các báo cáo trên wiki đích. Để tương tác với các báo cáo này, người dùng cần sử dụng phần tiện ích.

Khái niệm

[sửa | sửa mã nguồn]

Liên kết xấu (bad link) theo quan điểm của Citron/Spam là những liên kết không có tư cách xuất hiện trên nền tảng Wikipedia. Đó thường là những liên kết đến các trang thương mại, trang tự xuất bản, trang cá nhân, trang chứa mã độc. Ngược lại, liên kết tốt (good link) là những liên kết được chấp nhận xuất hiện trên nền tảng Wikipedia, với mục đích rõ ràng là phục vụ cho nội dung của Wikipedia.

Cách đọc báo cáo

[sửa | sửa mã nguồn]

Các báo cáo của Citron/Spam được hiển thị chính thức ở trang Wikipedia:Citron/Spam, gồm những báo cáo mới nhất, mặc định là 7 ngày gần đây. Bên cạnh đó, Citron/Spam cũng đăng báo cáo hàng ngày ở một trang được chỉ định trước như Wikipedia:Tin nhắn cho bảo quản viên (tùy vào cấu hình của cộng đồng wiki). Cách đọc những báo cáo này được mô tả như hình dưới.

Chú giải:

  • (1) Nút Xem phiên bản dùng để ẩn hiện những phiên bản đi kèm với liên kết, là những hộp màu vàng nhạt với viền chấm, xem mục (8). Mặc định, phần các phiên bản được ẩn.
  • (2) Nút Hỗ trợ đánh giá dùng để mở phần tiện ích của Citron/Spam (hiện chưa triển khai chính thức).
  • (3) Mã thời gian của báo cáo theo định dạng YYYY-MM-DD. Khi bấm vào thì dẫn đến trang lưu trữ dữ liệu của báo cáo dưới dạng JSON.
  • (4) Tên nhóm liên kết, có 3 nhóm như hình: Có khả năng rất cao là xấu (điểm đánh giá bằng hoặc trên 80%), Có khả năng cao là xấu (điểm đánh giá bằng hoặc trên 50%), Chưa chắc chắn (phần còn lại).
  • (5) Mốc thời gian phát hiện lần đầu liên kết trong ngày, tính theo giờ UTC.
  • (6) Hộp thông tin liên kết, gồm liên kết ở bên trái, và điểm đánh giá ở bên phải. Màu của hộp là đỏ, cam, xanh dương tương ứng với 3 nhóm đã nói ở trên. Màu nền được phân vùng đậm nhạt theo điểm đánh giá.
  • (7) Trạng thái thêm vào danh sách chặn. Nếu chưa thêm thì hiện nhãn Chưa thêm và nền xám. Nếu đã thêm thì hiện nhãn Đã thêm và nền xanh lá.
  • (8) Hộp thông tin phiên bản. Mỗi hộp phiên bản cho biết người sửa đổi, bài viết được sửa, và liên kết đến trang khác biệt của sửa đổi. Mỗi liên kết có thể có nhiều phiên bản dính líu, do có thể có một hoặc nhiều người dùng cùng thêm một liên kết vào các bài viết trong một ngày.
  • (9) Thời điểm cập nhật lần cuối của báo cáo, tính theo giờ UTC.
  • (10) Trạng thái cập nhật. Nếu báo cáo là của ngày hôm nay, thì hiện Đang cập nhật với màu chữ vàng. Nếu báo cáo là của ngày hôm qua và trước nữa, thì hiện Kết thúc cập nhật với nền chữ xanh lá.

Bảo quản viên sau khi đọc báo cáo thì có trách nhiệm xem xét lần cuối những liên kết sẽ được thêm vào danh sách chặn, vì mô hình máy học không hẳn là chính xác 100%.

Cách sử dụng phần tiện ích

[sửa | sửa mã nguồn]

Phần tiện ích được dùng để tương tác với báo cáo, cho phép người dùng đánh giá các liên kết là tốt hoặc xấu, hỗ trợ cho việc vận hành Citron/Spam trở nên ngày càng hiệu quả và chính xác.

Hiện tại, phần tiện ích chưa được triển khai chính thức.

Lịch sử công cụ

[sửa | sửa mã nguồn]

Citron/Spam bắt nguồn từ một vấn đề của cộng đồng Wikipedia tiếng Việt, đó là việc phát hiện những liên kết xấu (quảng cáo, PR). Trong thời gian gần đây, hành vi chèn liên kết xấu xuất hiện với mức độ ngày càng nhiều và tinh vi, điển hình là có một cuộc kiểm định đã liệt kê hơn 140 tài khoản thực hiện hành vi này. Ngoài ra, còn có những trường hợp liên kết quảng cáo được sống rất lâu khi cộng đồng không thể tuần tra liên tục.

Ý tưởng về phần mềm này đã được tôi thảo luận với thành viên MrMisterer vào cuối năm 2022.

Năm 2024, cộng đồng Wikipedia tiếng Việt đã thông qua việc phát triển và áp dụng công cụ này tại thảo luận sau: Wikipedia:Thảo luận/Dự án Thanh yên. Công việc phát triển ban đầu của dự án này được tài trợ bởi WMF.

Ngày 31 tháng 12 năm 2024, phiên bản đầu tiên của công cụ được chính thức phát hành.

Đặc tả kỹ thuật phần máy chủ

[sửa | sửa mã nguồn]

Phần máy chủ của Citron/Spam là một dịch vụ web (web service), chạy trên hạ tầng của hệ thống Toolforge, đảm nhận 3 công việc chính: Thu thập dữ liệu, Xuất báo cáo, Xử lý phản hồi.

Thu thập dữ liệu

[sửa | sửa mã nguồn]

Thủ tục của công việc này được thể hiện phần lớn ở lớp StreamRunner. Theo đó, bước đầu tiên là kết nối đến luồng Thay đổi gần đây thông qua công nghệ EventStreams của Wikimedia.

Khi luồng Thay đổi gần đây đang chảy, một phép lọc được xen vào để bắt lấy những thay đổi thỏa điều kiện kiểm tra. Phép lọc này bao gồm một số quy ước chính:

  • Thay đổi là một sửa đổi sửa trang (còn sửa đổi tạo trang đang được xem xét)
  • Không phải là thay đổi của bot
  • Không phải là thay đổi đã được tuần tra
  • Thay đổi thuộc nhóm wiki được theo dõi
  • Người sửa đổi là IP, hoặc nếu là người dùng đã đăng ký thì không thuộc nhóm bỏ qua theo cấu hình (mặc định là bỏ qua các tài khoản thuộc nhóm xác nhận mở rộng trở lên)

Thay đổi sau phép lọc được gửi đến một hàm xử lý (process function). Tại đây, nó thu thập dữ liệu nội dung khác biệt (diff) của thay đổi thông qua API Compare revisions của MediaWiki REST API.

Từ nội dung khác biệt, tiến hành trích xuất những hostname (tên máy chủ, phần đại diện của một liên kết). Cơ chế trích xuất này là tương đối cầu kỳ, nhằm hạn chế việc nhặt lấy những liên kết không cần thiết. Nếu không có bất kỳ hostname nào có trong khác biệt, thì ngừng xử lý.

Từ danh sách hostname được trích xuất, thực hiện phép lọc xem các hostname này có tồn tại trong danh sách những hostname được bỏ qua hay không. Danh sách này được lưu trong bảng citron_spam__ignored_hostname của cơ sở dữ liệu. Sau phép lọc, nếu tất cả hostname được trích xuất nằm trong diện cho phép bỏ qua thì hàm xử lý ngừng tại đây.

Từ danh sách hostname sau phép lọc trên, tiến hành thu thập dữ liệu các đặc trưng, gồm 20 đặc trưng theo yêu cầu của mô hình máy học.

Sau khi có được dữ liệu các đặc trưng cho từng hostname, tiến hành gửi đến mô hình máy học để phân lớp (classification), mô hình mặc định hiện tại là citron_spam_viwiki_model_v1.

Cuối cùng, sau khi đã có kết quả phân lớp, lưu lại các hostname cùng với điểm số phân lớp của nó vào cơ sở dữ liệu, là bảng citron_spam__reported_hostname.

Xuất báo cáo

[sửa | sửa mã nguồn]

Thủ tục của công việc này được thể hiện ở lớp ReportRunner, với 2 hàm được lên lịch trình tự động là report (hàm báo cáo) và announce (hàm thông báo). Hai hàm này đều được thực hiện theo lịch trình là mỗi giờ, đúng phút 59, đúng giây 59 (mã cron là 59 59 * * * ?), theo giờ UTC.

Hàm báo cáo có nhiệm vụ truy vấn những hostname được báo cáo, tính từ thời điểm đầu tiên của ngày cho đến hiện tại. Nếu kết quả truy vấn là rỗng, thì hàm ngừng, điều này cũng có nghĩa là đôi lúc báo cáo của Citron/Spam có thể xuất hiện khá muộn trong ngày nếu thời gian đầu ngày không tìm thấy những hostname phù hợp.

Từ dữ liệu truy vấn trên, hàm báo cáo gò lại dữ liệu theo định dạng JSON được quy ước, và đăng lên những trang có mẫu tên như thế này: Wikipedia:Citron/Spam/YYYY-MM-DD.json.

Khi dữ liệu JSON đã tồn tại, thì trang Wikipedia:Citron/Spam sẽ tự động hiển thị báo cáo tương ứng mà không cần thực hiện thao tác bổ sung.

Đối với hàm thông báo, nó cũng thực hiện truy vấn xem có hostname nào được báo cáo ngày hôm nay hay chưa. Nếu có, hàm này gửi một thông báo đến một trang được chỉ định, như ở Wikipedia tiếng Việt là Wikipedia:Tin nhắn cho bảo quản viên, thể hiện báo cáo của ngày hôm nay.

Các sửa đổi trên wiki của 2 hàm trên được thực hiện thông qua một tài khoản bot. Hiện tại, Rô-bô thân thiện (TheFriendlyRobot) đang đảm nhận việc này.

Xử lý phản hồi

[sửa | sửa mã nguồn]

Những phản hồi của người dùng từ phần tiện ích sẽ được một lớp riêng xử lý, dự kiến tên là FeedbackRunner.

Thông tin mô hình máy học

[sửa | sửa mã nguồn]

Hiện tại, Citron/Spam chỉ có một mô hình máy học, tên mã là citron_spam_viwiki_model_v1. Mô hình này được xây dựng dựa trên dữ liệu các hostname thu thập từ Wikipedia tiếng Việt, và đào tạo bằng thuật toán Gradient Boosting, có sẵn trong thư viện scikit-learn. Mô hình sau đào tạo được chuyển sang định dạng ONNX để có thể dùng trong ứng dụng Java.

Những hostname trong bộ dữ liệu này gồm 2 nhóm, nhóm tốt được lấy từ những bài viết thuộc 3 thể loại: Bài viết chọn lọc, Bài viết chất lượng tốt, Danh sách chọn lọc; nhóm xấu được lấy từ trang Đặc biệt:BlockedExternalDomains. Tổng số lượng hostname ban đầu khoảng 20.000.

Những đặc trưng (feature) của dữ liệu được thiết kế từ lối suy diễn cho rằng: "Những liên kết tốt thường là những website có thứ hạng cao, có uy tín, vì việc duy trì một website có giá trị trong việc tham khảo cho một bách khoa toàn thư thì cần một nguồn lực không nhỏ." Từ mệnh đề này, những đặc trưng quan trọng nhất thuộc về việc hostname được xem xét có nằm trong những danh sách xếp hạng hay không, và có thứ hạng bao nhiêu. Có 5 danh sách xếp hạng được sử dụng trong dữ liệu của mô hình:

Bên cạnh những đặc trưng dựa trên xếp hạng, còn có những đặc trưng dựa vào chính chuỗi hostname, như việc hostname có TLD đáng ngờ, hoặc chứa những từ/cụm từ hay gặp trong một liên kết xấu (được gom nhặt từ Thành viên:Plantaest/Citron/Từ mồi).

Thông số của mô hình citron_spam_viwiki_model_v1 được liệt kê trong bảng dưới.

Thông số Giá trị
Accuracy (Độ chính xác tổng quát) 0.944534
Precision (Độ chính xác) 0.859155
Recall (Độ nhạy) 0.833984
F1 0.846383

Với thông số này, nhất là F1, nhìn chung là chất lượng của mô hình tốt hơn so với dự kiến, có mức sai sót thấp, chỉ khoảng 1–3 liên kết trong 10 liên kết được đánh giá.

Đặc tả kỹ thuật phần giao diện báo cáo

[sửa | sửa mã nguồn]

Giao diện của báo cáo được triển khai bằng Module:Citron/Spam, kết hợp với trang con styles.css đi kèm. Module này sẽ được quốc tế hóa trong tương lai gần để có thể dùng ở nhiều wiki.

Mã nguồn

[sửa | sửa mã nguồn]

Mã nguồn được lưu trữ trên GitHub: https://github.com/plantaest/citron. Những bạn quan tâm và có tài khoản GitHub thì có thể cho sao  để ủng hộ. Hiện tại, dự án chưa có hướng dẫn cụ thể về việc đóng góp mã nguồn, nên việc này sẽ được khuyến khích sau khi đến thời điểm thích hợp.