Sau khi xử lý và chuẩn hĩa dữ liệu, vector đặc trưng đã cĩ được từ Mục 3.5 sẽ được sử dụng để huấn luyện mơ hình.
* Độ quan trọng của mơ hình n-gram trong xây dựng vector đặc trưng: Để kiểm tra độ quan trọng của mơ hình n-gram trong xây dựng vector đặc trưng của bài viết, bình luận tiếng Việt, tơi tiến hành thử nghiệm theo phương pháp đĩ là: Sử dụng thuật tốn SVM và mơ hình MLP để lần lượt huấn luyện với đầu vào là 02 loại vector đặc trưng. Vector đặc trưng thứ nhất, bao gồm độ phản
động, hình thái và n-gram; vector đặc trưng thứ hai, chỉ cĩ độ phản động và hình thái mà khơng cĩ n-gram.
* Thử nghiệm: Tơi lần lượt thực hiện 06 thử nghiệm, bao gồm:
SVM-3f: Bộ vector đặc trưng bao gồm: Blacklist word phản động, hình thái và n-gram kết hợp với thuật tốn SVM.
SVM-2f: Bộ vector đặc trưng bao gồm: Blacklist word phản động và hình thái kết hợp với thuật tốn SVM.
MLP-2f: Bộ vector đặc trưng bao gồm: Blacklist word phản động và hình thái kết hợp mơ hình MLP.
MLP-3f: Bộ vector đặc trưng bao gồm: Blacklist word phản động, hình thái và n-gram kết hợp mơ hình MLP.
SVM-BERT: Sử dụng pretrained PhoBert kết hợp với thuật tốn SVM.
MLP-BERT: Sử dụng pretrained PhoBert kết hợp với mơ hình MLP.
3.6.1. SVM-3f
Tơi sử dụng thư viện scikit-learn [52] cùng thuật tốn LinearSVM để huấn luyện mơ hình. Cùng lúc, tơi sử dụng GridSearchCV để lựa chọn tham số C cho thuật tốn. C là tham số phạt trong bài tốn soft-margin, được điều chỉnh để giúp đưa các điểm dữ liệu nằm trong khoảng hai siêu mặt phẳng được vẽ bởi thuật tốn SVM về đúng phân lớp của chúng. Tơi cho chạy thuật tốn GridSearchCV với các tham số C lần lượt là [0.001, 0.01, 0.1, 1, 10, 100, 1.000, 10.000] (hình 3.43 phần Phụ lục).
Với mỗi tham số C, tơi sử dụng phương pháp cross-validation trên tập huấn luyện với số lượng là 5.
Hình 3.8: Tham số C tốt nhất
Như vậy với tham số C ở giá trị 0,001, mơ hình đạt kết quả khả quan nhất. Đối với các bài viết, bình luận khơng phản động: Mơ hình nhận diện sai 602/4.030 mẫu.
Đối với bài viết, bình luận cĩ tính chất phản động: Mơ hình nhận diện sai 539/1.970mẫu.
Hình 3.9: Kết quả thử nghiệm bộ vector đặc trưng bao gồm Blacklist word phản động, hình thái, n-gram với thuật tốn SVM
3.6.2. SVM-2f
Kết quả thử nghiệm bộ vector đặc trưng bao gồm Blacklist word phản động, hình thái với thuật tốn SVM đạt được như sau:
Hình 3.10: Kết quả thử nghiệm bộ vector đặc trưng bao gồm Blacklist word phản động, hình thái với thuật tốn SVM
Đối với các bài viết, bình luận khơng phản động: Mơ hình nhận diện sai 1.889/4.279 mẫu.
Đối với bài viết, bình luận cĩ tính chất phản động: Mơ hình nhận diện sai 310/1.721 mẫu.
Kết quả tính tốn hệ số MCC của mơ hình là 0,344. Mơ hình đem lại kết quả phân loại khá tốt. Tuy nhiên, trong khi đạt kết quả khả quan trong việc nhận diện các nội dung phản động, mơ hình lại tỏ ra kém hiểu quả trong việc nhận diện nội dung khơng phản động. Việc áp dụng mơ hình này vào trong sản phẩm thực tế sẽ gây khĩ dễ cho người dùng, khi gần như mơ hình đánh giá quá nhiều nội dung bài viết, bình luận là phản động.
3.6.3. MLP-2f
Kết quả mơ hình đạt được như sau:
Hình 3.11: Kết quả huấn luyện bộ vector đặc trưng bao gồm Blacklist word phản động và hình thái với mơ hình MLP
Đối với các bài viết, bình luận khơng phản động: Mơ hình nhận diện sai 398/4.279 mẫu.
Đối với bài viết, bình luận cĩ tính chất phản động: Mơ hình nhận diện sai 1.255/1.721 mẫu.
Kết quả tính tốn hệ số MCC của mơ hình là 0,228, phân loại khá tốt trong việc xác định các bài viết, bình luận khơng phản động, tuy nhiên độ chính xác khá thấp trong việc xác định các bài viết, bình luận phản động.
3.6.4. MLP-3f
Kết quả mơ hình đạt được như sau:
Hình 3.12: Kết quả huấn luyện bộ vector đặc trưng bao gồm Blacklist word phản động, hình thái và n-gram với mơ hình MLP
Đối với các bài viết, bình luận khơng phản động: Mơ hình nhận diện sai 897/4.279 mẫu.
Đối với bài viết, bình luận cĩ tính chất phản động: Mơ hình nhận diện sai 580/1.721 mẫu.
Kết quả tính tốn hệ số MCC của mơ hình là 0,432. Mơ hình đạt chỉ số tương đối khả quan trong việc nhận diện các bình luận khơng phản động lẫn phản động. Tuy nhiên các chỉ số đạt được đều thấp hơn SVM-3f.
3.6.5. SVM-BERT
Với lần thử nghiệm này, tơi tiếp tục sử dụng Google Colab [53] để huấn luyện và kiểm thử mơ hình. Bộ dữ liệu huấn luyện vẫn bao gồm 20.000 dữ liệu, chia ra thành 02 phần:
Bước 1: Load pretrained PhoBERT model và tiền xử lý văn bản.
Bước 2: Tạo features từ PhoBert. Bao gồm các cơng đoạn như: - Tách từ trước khi đưa văn bản vào PhoBert.
- Tokenize văn bản bằng bộ Tokenizer của PhoBert (thêm 2 Token đặc biệt là CLS và SEP vào đầu và cuối câu).
- Đưa văn bản đã được tokenize vào model kèm theo Attension Mask.
- Lấy output đầu ra làm đặc trưng cho đoạn văn bản sử dụng cho bước tiếp theo.
Bước 3: Huấn luyện mơ hình với SVM.
Hình 3.13: Kết quả huấn luyện mơ hình sử dụng pretrained PhoBERT kết hợp với thuật tốn SVM
Đối với các bài viết, bình luận khơng phản động: Mơ hình nhận diện sai 567/4.313 mẫu.
Đối với bài viết, bình luận cĩ tính chất phản động: Mơ hình nhận diện sai 857/1.687 mẫu.
Kết quả tính tốn hệ số MCC của mơ hình là 0,383. Mơ hình cĩ kết quả phân loại tương tự MLP-3f, khá tốt với cả các bài viết, bình luận phản động và khơng phản động. Tuy nhiên, mơ hình này cĩ độ chính xác trong nhận diện bài viết, bình luận phản động thấp hơn MLP-3f.
3.6.6. MLP-BERT
Kết quả mơ hình đạt được như sau:
Hình 3.14: Kết quả huấn luyện mơ hình sử dụng pretrained PhoBERT kết hợp với mơ hìnhMLP
Đối với bài viết, bình luận khơng phản động: Mơ hình nhận diện sai 1.618/4.274.
Đối với bài viết, bình luận phản động: Mơ hình nhận diện sai 630/1.726 mẫu.
Kết quả tính tốn hệ số MCC của mơ hình là 0,233, tương đối thấp khi so sánh với các mơ hình đã được huấn luyện trước đĩ.
So sánh kết quả của 06 lần thử nghiệm:
Như vậy, dễ dàng nhận thấy hệ số MCC của việc sử dụng các bộ vector đặc trưng gồm độ phản động, hình thái và n-gram kết hợp với thuật tốn SVM (SVM-3f) đạt kết quả cao nhất (0,572) khi so sánh tương quan với các mơ hình khác.
SVM-3f và MLP-3f cĩ hệ số MCC cao hơn hẳn so với SVM-2f và MLP-2f cho thấy đặc trưng n-gram vẫn đĩng vài trị rất quan trọng trong việc đánh giá nội dung bài viết, bình luận. Điều đĩ dẫn tới việc hi sinh các đặc trưng n-gram khỏi tính tốn bộ vector đặc trưng để tăng tốc độ đánh giá nội dung bình luận, bài viết sẽ đem tới những kết quả khơng mong đợi.
Mặc dù khơng cĩ mơ hình nào đạt kết quả cao nhất, nhưng cĩ thể nhận thấy PhoBert hoạt động khá tốt, cĩ tiềm năng cao trong việc ứng dụng xử lý ngơn ngữ tiếng Việt. Đối với bài tốn kiểm duyệt bài viết, bình luận phản động, cĩ thể do hạn chế về mặt kĩ thuật tơi fine-tune (tinh chỉnh) PhoBert theo ý của mình. Do đĩ, tơi quyết định sẽ sử dụng mơ hình SVM-3f để phát triển dịch vụ kiểm duyệt bài viết, bình luận phản động trên Facebook.
(Một số kết quả chi tiết hơn của các mơ hình được tơi trình bày ở Mục 3 phần Phụ lục).
Cách thức làm việc: Dữ liệu bài viết, bình luận Facebook (kèm theo định danh của user, fanpage, group) khi đi qua extension, Layer 1 sẽ kiểm tra, đối chiếu, ngăn chặn các dữ liệu chứa user, fanpage, group nằm trong blacklist như đã đề cập ở nội dung Chương 2. Dữ liệu Facebook nào vượt qua Layer 1, tiếp tục được Layer 2 kiểm tra, Layer 2 cĩ chức năng kiểm duyệt nội dung dựa trên mơ hình tơi đã thử nghiệm và phát triển tại Chương 3. Hệ thống sẽ trả lại giá trị 1 (dương tính) nếu bài viết mang tính chất phản động, và -1 (âm tính) đối với bài viết khơng mang tính chất phản động.
Backend RESTful API được xây dựng trên framework Flask của Python dễ dàng tích hợp với checkpoint của model. Backend gửi trả lại kết quả phân loại nội dung bài viết, bình luận cho Frontend (mã nguồn của Backend được thể hiện ở hình 3.52 trong phần Phụ lục).
Trước khi đánh giá nội dung phản động, các bài viết, bình luận sẽ được kiểm tra liệu cĩ chứa các đường link URL của các website, blog phản động hay khơng. Nếu cĩ, extension sẽ lập tức ẩn đi các nội dung đường link URL đĩ (hình 3.53 phần Phụ lục). Nội dung các bài viết, bình luận sẽ được tính tốn, xây dựng thành bộ vector đặc trưng như trong bước huấn luyện model. Bộ vector đặc trưng này sẽ được Backend sử dụng và gán nhãn cho bài viết, bình luận phản động hay khơng phản động, tương ứng kết quả trả về cho Frontend là 1 hoặc -1.
Bên cạnh Backend, tơi đã phát triển một Frontend khai thác dịch vụ do Backend cung cấp để kiểm duyệt các bài viết, bình luận cĩ nội dung phản động trên Facebook. Frontend được cài đặt dưới dạng extension cho trình duyệt Chrome, cĩ chức năng đọc các bài viết, bình luận trên Facebook, gửi bài viết, bình luận đến Backend để thẩm định và ẩn đi bài viết, bình luận nếu nĩ chứa nội dung phản động.
Extension của Chome cĩ cây thư mục bao gồm các file dưới đây:
Hình 3.16: Cấu trúc thư mục extension
Hình 3.17: File manifest.json
- Manifest.json: Là một file JSON bắt buộc phải cĩ của extension trên trình duyệt Google Chrome. File này khai báo các quyền cần cung cấp để hoạt động, các thư viện dùng bên thứ ba, khai báo icon, các URL mà extension này hoạt động, giới thiệu về extension.
Trong file này cĩ khai báo name là tên extension, description là giới thiệu về extension, version cho biết phiên bản của extension, conten_scripts cho biết nhưng đoạn script sẽ được sử dụng trong extension. Trong extension này chỉ sử dụng một file là content.js nhằm tương tác với trình duyệt, matches cho biết những url sẽ thực thi extension (ở đây là facebook - https://www.facebook.com/*). Đặc biệt là khai báo permissions bắt buộc phải cĩ url của server để khai báo xin phép Chrome là URL này được phép hoạt động. Trong thử nghiệm này, tơi thử nghiệm server trên chính máy tính nội bộ, chạy dịch vụ ở cổng 5.000 trong localhost, nên ta sẽ khai báo http://localhost:5000.
- Content.js: Là file javascript quan trọng nhất trong tiện ích mở rộng này, cĩ chức năng thực hiện nhiệm vụ đọc bài viết trên Facebook. Sau khi đọc được
bài viết, bình luận trên Facebook, extension sẽ gửi nội dung bài viết, bình luận lên Backend để nhờ kiểm tra nội dung. Việc này được thực hiện thơng qua hàm
startApp và kỹ thuật short polling (frontend sẽ gửi request đến server nhiều lần, nếu cĩ kết quả thì sẽ cập nhật). Như đã biết, Facebook dùng cơ chế loadmore để để hiển thị thêm bài viết trên newsfeeds hoặc hiển thị thơng tin bài viết trên fanpage, group. Mỗi khi loadmore dữ liệu được load về và được đưa vào cây DOM và render lại. Tương tự với bình luận, mỗi khi chọn xem thêm bình luận, thì các bình luận mới được thêm vào cây DOM. Như vậy, cứ mỗi 03 giây, ta sẽ lại xử lý những bài viết, bình luận mới được thêm vào trên cây DOM.
Nhận thấy, các bài viết và bình luận trong Facebook được gán vào những thẻ div với những class tương ứng. Như vậy, sau khi tìm được những class mà Facebook dùng để gán cho bình luận và bài viết, ta cĩ thể lọc ra được nội dung chứa trong thẻ div đĩ. Trước đây, để thực hiện được việc tìm HTMLElement theo class địi hỏi phải sử dụng thêm những thư viện ngồi như JQuery. Tuy nhiên, từ năm 2015, với sự ra đời của tiêu chuẩn ES6, Javascript giờ đã hỗ trợ lệnh querySelector, cho phép ta cĩ thể tra các HTMLElement theo tên thẻ, tên class, tên id.
Sau khi sử dụng querySelector để tìm được những HTMLElement cần, ta cĩ thể dễ dàng lọc ra nội dung của nĩ thơng qua attribute (thuộc tính) innerText, từ đĩ lấy được nội dung bên trong là bài viết, bình luận. Đồng thời, ta cĩ thể thay đổi và quản lý nĩ, thơng qua việc update DOM (hình 3.54 phần Phụ lục).
Cơ chế hoạt động của hàm startApp: Để lấy được nội dung bài viết và bình luận, ta sử dụng selector để lấy. Trước hết, ta cần phải tìm được các class, id chứa nội dung cần tìm. Để làm được điều này ta cĩ thể dùng cơng cụ inspect elements trên Google chrome. Sau khi tìm được selector, ta sử dụng hàm document.querySelector và document.querySelectorAll trong Javascript. Để hạn chế việc gửi lên các nội dung cũ đã từng được check thì qua mỗi vịng lặp ta thêm class “checked” để nếu cĩ class này thì extension bỏ qua, việc này hạn chế việc submit những nội dung đã check lên server, thơng qua đĩ giảm tải cho server, đồng thời tăng hiệu năng cho extension. Sau khi đã lấy được nội dung thì ta gửi request tới server kiểm tra. Nếu response trả về là -1 nghĩa là khơng chứa nội dung phản động. Ngược lại, nếu response trả về là 1 thì cĩ chứa nội dung phản động và ta tiến hành ẩn bài viết, bình luận.
Cài đặt Extension:
Bước 1: Vào trình duyệt Chrome > Customize and Control Google Chrome > More Tools > Extensions
Bước 2: Nhấn vào Load unpacked.
Bước 3: Trỏ đến folder chứa extension và nhấn OK.
Hình 3.18: Giao diện extension Chrome
Hình 3.19: Cài đặt extension thành cơng
Hình 3.20: Trước khi sử dụng extension
Trước khi sử dụng extension, các bài viết, bình luận trên Facebook hiển thị bình thường. Sau khi cài đặt extension thành cơng, extension sẽ đọc và phân tích nội dung các bài viết, bình luận trên Facebook và sẽ cĩ hành động tương ứng.
Khi người dùng truy cập vào trang cá nhân, fanpage hay hội nhĩm bị cấm, extension sẽ chặn người dùng tiếp cận đến những thơng tin độc hại mà những trang đĩ cung cấp.
Hình 3.21: Extension chặn các nhĩm độc hại, chống phá
Hình 3.23: Extension chặn các trang mạng cĩ hành vi phản động
Khi đánh giá bài viết, bình luận là phản động, extension sẽ tự động hiển thị thơng báo “phản động” bên cạnh bài viết, bình luận đĩ và ẩn đi nội dung bài viết. Các bài viết, bình luận khác sẽ hiển thị thơng báo “bình thường”.
Cĩ thể thấy rõ 02 bài viết trên fanpage BBC News Tiếng Việt, một bài viết đã bị ẩn đi, một bài viết vẫn hiển thị bình thường. Khi nhấn vào xem nội dung bài viết phản động, bài viết vẫn sẽ được hiển thị bình thường, nhưng được làm mờ đi.
Hình 3.25: Sau khi hiện ra bài viết bị ẩn (bài viết sẽ vẫn bị làm mờ).
Đối với các bình luận, cách thức hoạt động tương tự đối với các bài đăng. Các bình luận cĩ nội dung phản động sẽ được ẩn đi nội dung như hình dưới.
Hình 3.26: Kết quả hoạt động của extension trên bình luận
Người dùng cĩ thể nhấn vào chữ “đây” để hiển thị bình luận bị ẩn. Các bình luận bị ẩn khi người dùng muốn hiển thị trợ lại sẽ được làm mờ.
Hình 3.27: Sau khi hiện ra bình luận bị ẩn.
Sau khi đã hiện bình luận bị ẩn, để ẩn lại, chúng ta click vào icon “Phản động” của bình luận đĩ.
CHƯƠNG 4: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN