Thành viên:Plantaest/Citron
![]() | |
Phát triển bởi | Plantaest |
---|---|
Phát hành lần đầu | 31 tháng 12 năm 2024 |
Phiên bản ổn định | 0.1.0-alpha.1
|
Kho mã nguồn | citron trên GitHub |
Viết bằng | Java, Python, TypeScript |
Nền tảng | Toolforge |
Ngôn ngữ có sẵn | Đa ngôn ngữ |
Thể loại | Công cụ giám sát tự động |
Giấy phép | AGPL-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ửaCitron/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 (xem trang Wikipedia:Citron/Spam). Để 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.
Cơ chế
sửaĐể hiểu cơ chế của phần mềm Citron/Spam, cần hiểu 2 khái niệm là liên kết xấu và liên kết tốt. Liên kết xấu (bad link) 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.
Trước đây, người tuần tra sẽ tìm các liên kết xấu thông qua việc kiểm duyệt những sửa đổi, thường là trên trang Đặc biệt:Thay đổi gần đây. Họ sẽ đọc nội dung khác biệt của sửa đổi để nhìn ra những liên kết có tiềm năng là quảng cáo, PR. Nếu phát hiện được liên kết xấu, thì gửi báo cáo đến cho bảo quản viên, để bảo quản viên có thể xem xét và chặn. Công việc này có thể được mô tả theo quy trình như hình dưới.
Với sự hỗ trợ của công cụ Citron/Spam, thủ tục trên được thực hiện tự động như hình dưới. Tuy nhiên, người tuần tra lúc này sẽ có thêm một công việc mới, đó là hỗ trợ đánh giá bổ sung cho báo cáo của công cụ, chọn ra liên kết xấu và liên kết tốt trong danh sách, thông qua giao diện của một tiện ích (xem mục Cách sử dụng phần tiện ích). Điều này giúp bảo quản viên nhận thức rõ liên kết nào chắc chắn là xấu (với sự tái xác nhận từ con người). Ngoài ra, những liên kết được cho là tốt sẽ được bỏ qua trong những báo cáo sau này, giúp giảm tải gánh nặng kiểm tra cho công cụ, cũng như giúp tăng độ chính xác. Vì vậy, bước đánh giá bổ sung được khuyến khích thực hiện, để công cụ ngày càng hoàn thiện hơn theo thời gian.
Cách đọc báo cáo
sửaCá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 (10). 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.
- 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, phần này mặc định được ẩn).
- 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 Những đánh giá của người dùng, cho biết liên kết là nên bỏ qua (biểu tượng mũi tên, nền xanh dương) hay chặn (biểu tượng tam giác chấm than, nền đỏ).
- 8 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á.
- 9 Ba số thống kê: (1) Tổng đánh giá tốt (những liên kết được bỏ qua, màu chữ xanh dương), (2) Tổng đánh giá xấu (những liên kết nên chặn, màu chữ đỏ), (3) Tổng số liên kết được thêm vào danh sách chặn (màu chữ xanh lá).
- 10 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.
- 11 Thời điểm cập nhật lần cuối của báo cáo, tính theo giờ UTC.
- 12 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ửaPhầ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.
Để kích hoạt tiện ích, người dùng cần truy cập Đặc biệt:Tùy chọn (mục Tiện ích), chọn tiện ích Citron/Spam và nhấn Lưu tùy chọn. Hiện tại, ở Wikipedia tiếng Việt, chỉ những thành viên tự đánh dấu tuần tra mới có quyền sử dụng tiện tích này.
Để mở tiện ích Citron/Spam, người dùng có thể bấm vào liên kết "Citron/Spam" tại menu Công cụ, hoặc liên kết "Hỗ trợ đánh giá" tại báo cáo mới nhất ở trang Wikipedia:Citron/Spam.
Giao diện của tiện ích này có dạng như sau.
Chú giải:
- 1 Mã báo cáo theo ngày
- 2 Số thứ tự các liên kết
- 3 Thời điểm lần đầu phát hiện liên kết, tính theo giờ UTC.
- 4 Liên kết, có thể bấm được để mở ra trang web đó, và điểm đánh giá của máy, càng cao thì càng có nguy cơ là xấu.
- 5 Các phiên bản dính đến liên kết này
- 6 Hai nút radio để đánh giá liên kết, chọn nút mũi tên xanh nếu như cho rằng đây là liên kết tốt, nên được bỏ qua, chọn nút tam giác chấm than đỏ nếu như cho rằng đây là liên kết xấu, nên được chặn. Nếu muốn bỏ chọn sau khi đã chọn, như do cảm thấy không chắc chắn, thì nhấn một lần nữa vào nút radio đã chọn.
- 7 Nút Hủy bỏ, bấm để tắt giao diện của tiện ích, hủy quá trình đánh giá.
- 8 Nút Lưu, bấm để lưu đánh giá.
- 9 Nút Đóng, tương tự nút Hủy bỏ.
Mẹo đánh giá liên kết, là nên bấm vào liên kết để xem nội dung website, thường có thể bỏ qua những website dạng tin tức, báo chí; và nên chặn những website thương mại, bán hàng, không liên quan đến nội dung bài viết. Những website không truy cập được thì có thể không cần đánh giá.
Sau khi đánh giá và nhấn Lưu, dữ liệu đánh giá này sẽ được lưu trữ vào báo cáo, người dùng cần tải lại trang báo cáo nếu cần xem những đánh giá đã được thêm hay chưa.
Những liên kết nào có ít nhất một đánh giá tốt và không có bất kỳ đánh giá xấu nào sẽ được bỏ qua trong những báo cáo từ ngày hôm sau.
Lưu ý: Nếu báo cáo của ngày hôm nay chưa có, thì giao diện tiện ích sẽ hiển thị lỗi 404.
Lịch sử công cụ
sửaCitron/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.
Ngày 15 tháng 1 năm 2025, phần tiện ích của công cụ được phát hành.
Đặc tả kỹ thuật phần máy chủ
sửaPhầ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ửaThủ 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 hoặc tạo trang
- 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 được 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) hoặc nội dung phiên bản (revision) của thay đổi thông qua MediaWiki REST API.
Từ nội dung này, 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). Nếu không có bất kỳ hostname nào được trích xuấ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.
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ửaThủ 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). Hàm báo cáo chạy mỗi phút, còn hàm thông báo chạy mỗi giờ.
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ửaNhững phản hồi của người dùng từ phần tiện ích được xử lý ở lớp FeedbackRunner. Vào thời điểm 00:00 mỗi ngày, hàm sync
(hàm đồng bộ) được chạy.
Hàm đồng bộ lấy nội dung của báo cáo ngày hôm qua, lưu những đánh giá vào bảng citron_spam__feedback
, lưu những hostname có ít nhất một đánh giá tốt và không có bất kỳ đánh giá xấu nào vào bảng citron_spam__ignored_hostname
, và cập nhật trạng thái các đánh giá của báo cáo trên wiki là "đã đồng bộ".
Thông tin mô hình máy học
sửaHiệ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:
- OpenPageRank (kết nối thông qua API)
- AkaRank (có sẵn tệp CSV)
- Tranco (có sẵn tệp CSV)
- Majestic Million (có sẵn tệp CSV)
- Cloudflare Radar Domain Rankings (có sẵn tệp CSV)
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ửaGiao 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.
Khả năng mở rộng liên wiki
sửaVề mặt kỹ thuật, Citron/Spam có thể được cấu hình cho những wiki khác sử dụng, nhưng không phải là lúc này. Hiện tại, công cụ này vẫn đang trong quá trình thử nghiệm, có thể phải trải qua ít nhất 1 năm nữa tại Wikipedia tiếng Việt để kiểm chứng khả năng hoạt động và có lượng dữ liệu dồi dào hơn.
Bảo mật
sửaPhần mềm Citron không thu thập bất kỳ thông tin nào của người dùng.
Mã nguồn
sửaMã 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.