Làm sạch văn bản tiếng Việt cào từ web nên đi theo thứ tự: tách phần thân bài khỏi khung trang, sửa lỗi mã hoá và chuẩn hoá Unicode, nhận dạng ngôn ngữ để giữ đúng tiếng Việt, lọc trùng chính xác rồi trùng gần đúng, lọc chất lượng bằng các quy tắc đơn giản (độ dài, tỷ lệ ký tự lạ, dòng lặp), lọc nội dung độc hại và dữ liệu cá nhân, cuối cùng đọc tay một mẫu để chỉnh ngưỡng. Đảo thứ tự, chẳng hạn lọc trùng trước khi tách thân bài, thì hai bài khác nhau nhưng chung menu dài sẽ bị coi là trùng.
Trên các kho cào web lớn, phần bị loại sau làm sạch thường chiếm tỷ lệ rất lớn so với phần giữ lại; mức cụ thể tuỳ nguồn và tuỳ độ khắt khe, nên bài này không đưa con số chung. Điều chắc chắn là văn bản tiếng Việt trên web có vài kiểu rác đặc thù: trang tổng hợp chép lại báo, mô tả sản phẩm lặp trên nhiều gian hàng, văn bản không dấu, bài viết bằng công cụ "xào nấu" nội dung, và gần đây là văn bản do mô hình ngôn ngữ sinh hàng loạt. Bài đi qua từng bước với quy tắc cụ thể và cách kiểm.
Tách thân bài: bước quyết định chất lượng đầu ra
Một trang báo điện tử điển hình có thân bài vài trăm đến vài nghìn tiếng, nhưng xung quanh là menu chuyên mục, tiêu đề các bài liên quan, chú thích ảnh, dòng bản quyền, nút chia sẻ, ô bình luận, quảng cáo. Nếu lấy toàn bộ chữ trên trang, mỗi tài liệu sẽ có thêm hàng trăm tiếng lặp lại y nguyên trên mọi trang cùng trang web. Mô hình học những dòng đó như những câu tiếng Việt quan trọng nhất vì chúng xuất hiện nhiều nhất.
Có hai cách tách. Cách thứ nhất dùng thư viện tách nội dung chung, dựa vào mật độ chữ, cấu trúc thẻ và độ dài đoạn để đoán đâu là thân bài; chạy được trên mọi trang nhưng thỉnh thoảng cắt mất đoạn đầu hoặc giữ lại khung bài liên quan. Cách thứ hai viết quy tắc riêng cho từng trang lớn dựa vào cấu trúc của trang đó; chính xác hơn nhưng tốn công và gãy khi trang đổi giao diện.
Thực tế các nhóm kết hợp: quy tắc riêng cho mươi trang chiếm nhiều dữ liệu nhất, thư viện chung cho phần còn lại. Sau khi tách, một phép kiểm rẻ là đếm các dòng xuất hiện ở rất nhiều tài liệu của cùng một trang web; dòng nào lặp trên quá nửa số trang của nơi đó gần như chắc chắn là khung trang còn sót và nên bỏ.
Lỗi mã hoá và chữ Việt hỏng: nhận ra bằng mắt và bằng quy tắc
Chữ bị giải mã sai bảng mã. Khi văn bản UTF-8 bị đọc như một bảng mã khác, chữ có dấu biến thành chuỗi ký tự Latin lạ đi thành cụm, rất dễ nhận ra bằng mắt. Có thư viện chuyên sửa kiểu lỗi này bằng cách thử giải mã lại; với phần không sửa được thì loại cả tài liệu.
Văn bản còn mã cũ TCVN3 hay VNI. Tài liệu chuyển từ thời trước Unicode đôi khi còn giữ mã cũ, hiển thị thành ký tự lạ hoặc chữ có dấu sai chỗ. Nhận ra bằng tần suất bất thường của một số ký tự hiếm trong tiếng Việt chuẩn. Có công cụ chuyển mã, nhưng phải đoán đúng bảng mã gốc.
Ký tự thay thế và ký tự điều khiển. Dấu hỏi trong hình thoi là dấu hiệu dữ liệu đã mất không phục hồi được. Ký tự không in được, khoảng trắng không ngắt, ký tự định hướng văn bản lẫn vào câu cũng làm hỏng tách từ. Quy tắc đơn giản: tài liệu có tỷ lệ ký tự thay thế vượt một ngưỡng nhỏ thì loại.
Hai kiểu đặt dấu và hai dạng Unicode. Sau khi sửa mã, đưa toàn bộ về Unicode dựng sẵn và một quy tắc đặt dấu thống nhất, nếu không bước lọc trùng sẽ coi "hoà" và "hòa" là hai chữ khác nhau và bỏ sót bản sao. Chi tiết chuẩn hoá có bài riêng trong chuyên mục.
Nhận dạng ngôn ngữ: tiếng Việt không dấu và văn bản trộn
Bộ nhận dạng ngôn ngữ thông dụng nhận tiếng Việt có dấu khá chắc vì bộ chữ đặc trưng. Khó hơn là văn bản không dấu, vốn trông như một ngôn ngữ dùng chữ Latin không dấu khác, và câu trộn Anh–Việt kiểu "deadline gấp quá, check mail giùm". Nếu đặt ngưỡng tin cậy cao, bộ lọc sẽ loại đúng những văn bản đời thường mà nhiều bài toán cần.
Cách xử lý là nhận dạng theo đoạn hoặc theo câu thay vì cả tài liệu, giữ nhãn ngôn ngữ và độ tin cậy kèm theo thay vì xoá ngay, rồi quyết định theo bài toán. Với văn bản không dấu, một bộ phân loại riêng "tiếng Việt không dấu" hay quy tắc dựa vào các âm tiết tiếng Việt phổ biến giúp tách được khỏi các ngôn ngữ khác.
Cũng cần để ý các trang song ngữ hoặc trang dịch máy: một tài liệu nửa tiếng Anh nửa tiếng Việt thường là bản dịch kèm nguyên văn, hữu ích cho dịch máy nhưng có thể làm rối mô hình chỉ đọc tiếng Việt. Gắn nhãn riêng thay vì trộn.
Lọc trùng chính xác và trùng gần đúng
Lọc trùng chính xác là tính mã băm cho từng tài liệu hoặc từng đoạn đã chuẩn hoá (bỏ khoảng trắng thừa, đưa về chữ thường) rồi giữ một bản. Bước này rẻ và nên chạy ở cả mức tài liệu lẫn mức đoạn, vì nhiều trang chép nguyên một đoạn mở đầu hay một đoạn kết giống nhau.
Trùng gần đúng là bài toán quan trọng hơn với tiếng Việt: trang tổng hợp chép bài báo nhưng thêm câu dẫn, đổi tiêu đề, cắt đoạn cuối. Kỹ thuật phổ biến là MinHash kết hợp băm nhạy vị trí (LSH): chia văn bản thành các cụm vài âm tiết liên tiếp, tạo chữ ký ngắn, rồi gom các tài liệu có độ trùng Jaccard ước lượng vượt ngưỡng. Kỹ thuật MinHash do Andrei Broder đề xuất cuối thập niên 1990 để phát hiện trang web gần giống nhau, đến nay vẫn là công cụ chính cho việc này.
Với tiếng Việt, đơn vị cụm nên tính theo âm tiết (tách theo khoảng trắng) hay theo từ đã tách? Theo âm tiết đơn giản, không phụ thuộc bộ tách từ và đủ tốt cho mục đích lọc trùng. Ngưỡng Jaccard cần thử trên mẫu: đặt quá thấp sẽ gộp nhầm các văn bản cùng khuôn nhưng khác nội dung, như thông báo tuyển sinh của các trường khác nhau.
Quy tắc lọc chất lượng đơn giản mà hiệu quả
Sau lọc trùng là các quy tắc kinh nghiệm. Chúng thô nhưng minh bạch, dễ giải thích và dễ chỉnh. Bảng dưới là các quy tắc hay dùng; ngưỡng cụ thể nên chỉnh theo nguồn sau khi đọc mẫu.
| Quy tắc | Bắt được gì | Coi chừng loại nhầm |
|---|---|---|
| Độ dài tài liệu tối thiểu | Trang lỗi, trang chỉ có tiêu đề, trang danh mục | Thơ, câu tục ngữ, tin ngắn hợp lệ |
| Tỷ lệ dòng kết thúc bằng dấu câu | Danh sách liên kết, khung trang còn sót | Văn bản dạng danh sách có ích như công thức nấu ăn |
| Tỷ lệ ký tự không phải chữ | Bảng số, mã nguồn, chuỗi ký tự rác | Văn bản khoa học, bảng giá trị đo |
| Tỷ lệ dòng lặp trong tài liệu | Trang nhồi từ khoá, trang sinh tự động | Bài hát có điệp khúc |
| Tỷ lệ âm tiết tiếng Việt hợp lệ | Chữ lỗi mã, văn bản ngôn ngữ khác | Văn bản nhiều tên riêng nước ngoài, thuật ngữ |
| Danh sách từ khoá rác | Quảng cáo đánh bạc trực tuyến, nội dung người lớn, lừa đảo | Bài báo phòng chống chính những nội dung đó |
Một số nhóm dùng thêm mô hình chấm chất lượng: huấn luyện bộ phân loại nhỏ phân biệt văn bản "giống nguồn tốt" (bách khoa, sách, báo chọn lọc) với văn bản web ngẫu nhiên, rồi giữ phần điểm cao. Cách này nâng chất lượng trung bình nhưng cũng kéo bộ dữ liệu về một giọng văn chuẩn mực, làm mất tiếng Việt đời thường và giọng vùng miền. Dùng thì nên giữ một phần dữ liệu theo tỷ lệ chứ không cắt cứng.
Văn bản máy sinh, nội dung độc hại và dữ liệu cá nhân
Văn bản do mô hình ngôn ngữ sinh hàng loạt đã xuất hiện nhiều trên web tiếng Việt: trang tin tự động, mô tả sản phẩm, bài "chuẩn SEO" cùng khuôn. Phát hiện chắc chắn là chưa làm được; các công cụ phát hiện văn bản AI hiện có độ tin cậy hạn chế và dễ sai với tiếng Việt. Các dấu hiệu dùng được ở mức gợi ý: cụm câu sáo lặp lại trên nhiều trang, cấu trúc bài giống hệt nhau, trang web đăng số bài bất thường mỗi ngày. Cách thận trọng là hạ tỷ trọng các nguồn có dấu hiệu này thay vì cố lọc từng câu.
Nội dung độc hại (lăng mạ, kích động, quảng cáo đánh bạc trực tuyến, nội dung người lớn) lọc bằng danh sách từ khoá kết hợp bộ phân loại. Danh sách từ khoá tiếng Việt cần tính cả biến thể không dấu, viết tách, viết lái. Lưu ý không lọc mất các bài thảo luận nghiêm túc về chủ đề nhạy cảm, nếu không mô hình sẽ không biết trả lời câu hỏi chính đáng về những vấn đề đó.
Cuối cùng là dữ liệu cá nhân: số điện thoại, email, số giấy tờ, địa chỉ nhà trong bình luận và trang rao vặt. Che hoặc thay bằng ký hiệu trước khi huấn luyện, theo quy trình riêng có trong chuyên mục.
Kiểm mình lọc có quá tay không
Mọi bộ lọc đều loại nhầm. Câu hỏi là loại nhầm cái gì và có hệ thống không. Cách kiểm là lấy mẫu ngẫu nhiên từ phần bị loại ở mỗi bước, đọc tay, đếm tỷ lệ loại nhầm. Nếu một quy tắc loại nhầm nhiều bài viết của người miền Trung vì họ dùng từ địa phương bị bộ đếm âm tiết coi là lạ, đó là thiên lệch phải sửa ngay.
Giữ nhật ký số tài liệu vào và ra ở từng bước, theo từng nguồn. Bảng này cho thấy bước nào cắt mạnh nhất và nguồn nào gần như bị loại sạch, giúp phát hiện quy tắc viết sai. Đừng xoá dữ liệu bị loại ngay; lưu lại kèm lý do để có thể chạy lại với ngưỡng khác.
Cuối cùng, chất lượng làm sạch đo tốt nhất bằng kết quả cuối: huấn luyện hai mô hình nhỏ trên hai phiên bản dữ liệu sạch khác nhau rồi so trên cùng tập đánh giá tiếng Việt. Thí nghiệm nhỏ này thường trả lời câu hỏi "lọc đến đâu là đủ" thuyết phục hơn mọi tranh luận.
Câu hỏi thường gặp
Có nên bỏ hết văn bản không dấu khi làm sạch không?
Không nên bỏ hết nếu mô hình cần đọc tin nhắn, bình luận thật. Nên gắn nhãn văn bản không dấu và quyết định tỷ trọng theo bài toán. Với mô hình chuyên viết văn bản chuẩn, có thể loại khỏi phần đầu ra nhưng vẫn giữ làm đầu vào.
Ngưỡng trùng gần đúng nên đặt bao nhiêu?
Không có ngưỡng chung. Cách đúng là chọn vài ngưỡng, lấy mẫu các cặp bị gộp ở mỗi ngưỡng, đọc tay xem có gộp nhầm văn bản cùng khuôn nhưng khác nội dung không. Ngưỡng tốt là mức gộp được bài chép lại mà không gộp thông báo cùng mẫu.
Có công cụ nào phát hiện chắc chắn văn bản do AI viết không?
Hiện chưa có công cụ đáng tin hoàn toàn, nhất là với tiếng Việt. Các công cụ phát hiện cho kết quả sai cả hai chiều. Nên dùng dấu hiệu ở mức nguồn và hạ tỷ trọng nguồn đáng ngờ thay vì dựa vào điểm của công cụ cho từng câu.
Lọc trùng theo âm tiết hay theo từ đã tách thì tốt hơn?
Với mục đích lọc trùng, cụm âm tiết là đủ và đơn giản hơn vì không phụ thuộc bộ tách từ, chạy nhanh trên kho lớn. Tách từ có ích cho các bước sau như phân tích từ vựng, nhưng không cần thiết để phát hiện bài chép.
Làm sạch có làm mất tiếng địa phương không?
Có thể, nếu quy tắc dựa vào từ điển chuẩn hay mô hình chấm chất lượng huấn luyện trên văn bản chuẩn mực. Kiểm bằng cách đọc mẫu bị loại theo vùng miền và giữ một tỷ lệ văn bản đời thường thay vì cắt cứng theo điểm chất lượng.
Dữ liệu bị loại có nên xoá luôn không?
Nên lưu lại kèm lý do loại trong một thời gian, trừ dữ liệu vi phạm pháp luật hoặc chứa thông tin cá nhân nhạy cảm không cần giữ. Có bản lưu thì chạy lại được với ngưỡng mới khi phát hiện quy tắc sai.