Giới thiệu dự án
Sự bùng nổ của các nền tảng mạng xã hội và truyền thông số trong kỷ nguyên Web 2.0 đã tạo ra khối lượng dữ liệu phi cấu trúc khổng lồ. Theo thống kê vào quý 3 năm 2021, mạng xã hội Facebook ghi nhận hơn 2,9 tỷ người dùng tích cực hàng tháng trên toàn cầu; riêng tại Việt Nam, con số này đã vượt mốc 76 triệu người dùng (chiếm hơn 70% dân số). Tại các cơ sở giáo dục đại học, đặc biệt là các trường đào tạo khối ngành kỹ thuật và công nghệ như Học viện Công nghệ Bưu chính Viễn thông (PTIT), các hội nhóm (groups) và trang cộng đồng (fanpages) trên Facebook đã trở thành kênh tương tác, thảo luận chủ đạo của hàng chục nghìn sinh viên. Hàng ngày, hàng nghìn bài đăng và bình luận liên quan đến học tập, học phí, lịch thi, dịch vụ sinh viên hay đời sống nội trú được đăng tải.
Tuy nhiên, việc giám sát và tổng hợp thủ công luồng dư luận này gặp phải các rào cản kỹ thuật nghiêm trọng:
- Khối lượng dữ liệu phi cấu trúc quá lớn: Dữ liệu văn bản mạng xã hội có tính chất tự do, chứa nhiều tiếng lóng (slang), từ viết tắt, lỗi chính tả và các biến thể gõ dấu tiếng Việt phức tạp.
- Tính trễ thời gian (Latency): Ban quản lý nhà trường thường chỉ phát hiện ra các bức xúc, bất cập về thủ tục hành chính hoặc học phần sau khi khủng hoảng truyền thông đã lan rộng.
- Vấn đề phân loại đa nhãn (Multi-label nature): Một bài đăng trên mạng xã hội của sinh viên thường đồng thời đề cập đến nhiều khía cạnh (ví dụ: vừa phản ánh về việc đăng ký học phần, vừa thắc mắc về thủ tục đóng học phí).
Đồ án tốt nghiệp "Xây dựng mô hình phân loại văn bản tự động và áp dụng vào hệ thống hỗ trợ xác định luồng dư luận cho trường đại học trên mạng xã hội" do sinh viên Lê Văn Sang (Mã sinh viên: B17DCCN530, Lớp D17HTTT1, Khóa 2017–2021) thực hiện dưới sự hướng dẫn của PGS. TS. Nguyễn Mạnh Hùng tại Khoa Công nghệ Thông tin 1 – PTIT giải quyết triệt để bài toán trên.
┌──────────────────────────────────────────────────────────┐
│ HỆ THỐNG XÁC ĐỊNH DƯ LUẬN │
└─────────────────────────────┬────────────────────────────┘
│
┌──────────────────────────────┴────────────────────────────┐
▼ ▼
┌─────────────────────────────────┐ ┌─────────────────────────────────┐
│ MODULE XỬ LÝ & PHÂN LOẠI │ │ MODULE LƯU TRỮ & TRUY VẤN │
│ - Thu thập (Selenium, BS4) │ │ - MySQL 8.18 (ACID, Dữ liệu gốc│
│ - Pipeline tiền xử lý văn bản │ │ - Elasticsearch 7.4 (Search & │
│ - TF-IDF + Logistic Regression │ │ Aggregations Dashboard) │
└─────────────────────────────────┘ └─────────────────────────────────┘
Mục tiêu cụ thể của dự án bao gồm:
- Xây dựng bộ thu thập dữ liệu tự động (Web Scraper): Khai thác dữ liệu từ các hội nhóm và fanpage sinh viên trên Facebook với quy mô tập mẫu đạt trên 18.000 bản ghi thô.
- Thiết kế pipeline tiền xử lý ngôn ngữ tự nhiên (NLP) chuyên sâu cho tiếng Việt: Chuẩn hóa bảng mã Unicode, chuẩn hóa quy tắc đặt dấu thanh, tách từ phức tiếng Việt và xây dựng từ điển Stopwords đặc thù cho môi trường đại học.
- Nghiên cứu và thực nghiệm các thuật toán phân lớp đa nhãn: Đánh giá hiệu năng của Logistic Regression, Stochastic Gradient Descent (SGD) và Naive Bayes qua các kỹ thuật chuyển đổi bài toán (Binary Relevance, One-vs-Rest, Classifier Chains).
- Triển khai hệ thống Web ứng dụng hỗ trợ phân tích dư luận: Tích hợp kiến trúc lưu trữ lai giữa MySQL và công cụ tìm kiếm phân tán Elasticsearch, cung cấp bảng điều khiển trực quan hóa (visualization) đa chiều theo thời gian thực.
Dự án giới hạn phạm vi nghiên cứu trên tập dữ liệu tiếng Việt thu thập từ các cộng đồng mạng xã hội liên quan đến PTIT trong giai đoạn 2018–2021, phân loại thành 8 nhóm chủ đề trọng tâm.
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
Trước khi triển khai mô hình học máy, đồ án đã tiến hành so sánh toàn diện các hướng tiếp cận xử lý bài toán phân loại văn bản hiện nay:
| Tiêu chí |
Tiếp cận dựa trên luật (Rule-based) |
Học sâu (Deep Learning - CNN/RNN) |
Học máy truyền thống (TF-IDF + Logistic Regression) |
| Độ chính xác trên tập dữ liệu vừa |
Thấp (50 - 60%), dễ xung đột luật |
Rất cao (>85%), tuy nhiên dễ overfitting nếu thiếu dữ liệu |
Cao và ổn định (70 - 80% F1-score) |
| Chi phí tính toán & Phần cứng |
Rất thấp, chạy trên CPU cơ bản |
Rất cao, đòi hỏi hạ tầng GPU chuyên dụng |
Thấp, tối ưu hóa tốc độ huấn luyện và dự đoán trên CPU |
| Độ phức tạp bảo trì |
Cực kỳ phức tạp khi mở rộng từ khóa |
Phức tạp trong việc tinh chỉnh siêu tham số (Hyperparameters) |
Dễ bảo trì, dễ dàng huấn luyện lại (Retrain) định kỳ |
| Khả năng xử lý từ đồng nghĩa/ngữ cảnh |
Rất kém, phụ thuộc 100% chuyên gia |
Rất tốt thông qua Contextual Embeddings |
Khá tốt khi kết hợp tiền xử lý n-gram và TF-IDF |
Ma trận phân loại yêu cầu hệ thống theo mô hình MoSCoW:
- Must have (Bắt buộc): Pipeline tiền xử lý tiếng Việt hoàn chỉnh; thuật toán phân loại đa nhãn chính xác; cơ sở dữ liệu lưu trữ bài đăng; giao diện trực quan hóa bài viết theo 8 chủ đề.
- Should have (Nên có): Bộ máy tìm kiếm toàn văn (Full-text Search) tốc độ cao; biểu đồ luồng dư luận tích lũy theo tuần/tháng.
- Could have (Có thể có): Chức năng phân tích sắc thái cảm xúc (Sentiment Analysis: Tích cực / Tiêu cực / Trung tính).
- Won't have this time (Chưa thực hiện): Tự động phát hiện bài đăng chứa hình ảnh/video bằng Computer Vision (OCR).
Thiết kế hệ thống
Hệ thống hoạt động theo mô hình Client - Server kết hợp cơ chế Dual-Database:
[ Client: Web Browser ]
│
▼ (HTTP / JSON REST API)
[ Web Server: Flask Framework (Python 3.8) ]
│
├───► [ Crawler Module: Selenium 4.1 + BeautifulSoup 4.0 ]
│
├───► [ NLP Pipeline: Underthesea 1.3 + Regex Cleaners ]
│
├───► [ Classifier Engine: scikit-learn 1.2 (TF-IDF + Logistic Regression) ]
│
├───► [ Relational DB: MySQL 8.18 (Primary Master - CRUD Transactions) ]
│
└───► [ Search & Analytics Engine: Elasticsearch 7.4 (Distributed Nodes) ]
- Lớp lưu trữ quan hệ (MySQL 8.18): Đảm bảo tính toàn vẹn dữ liệu (ACID), lưu trữ chi tiết các bài viết (
post_id, author, author_url, content, post_url, reaction_count, comment_count, share_count, created_time).
- Lớp tìm kiếm và phân tích (Elasticsearch 7.4): Chịu trách nhiệm đánh chỉ mục toàn văn (Inverted Index) trên trường nội dung đã xử lý, phục vụ việc tổng hợp dữ liệu (Aggregations) cho các biểu đồ trực quan hóa thời gian thực mà không gây nghẽn I/O cho cơ sở dữ liệu chính.
Technology Stack và phiên bản cụ thể:
- Ngôn ngữ lập trình: Python 3.8
- Web Backend Framework: Flask 3.8
- Trình thu thập dữ liệu: Selenium WebDriver 4.1 & BeautifulSoup 4.0
- Thư viện Học máy: scikit-learn 1.2
- Xử lý ngôn ngữ tự nhiên: Underthesea 1.3 & Bộ lọc Vietnamese-stopwords 0.2
- Cơ sở dữ liệu: MySQL Server 8.18 & Elasticsearch 7.4
Methodology
Quy trình phát triển hệ thống được tổ chức theo phương pháp Agile/Iterative với 4 giai đoạn trọng tâm:
- Thu thập và xây dựng Dataset: Cào 18.408 bài đăng, tiến hành gán nhãn thủ công kết hợp rà soát đa chéo.
- Kỹ thuật đặc trưng (Feature Engineering): Xây dựng các hàm chuẩn hóa văn bản tiếng Việt và biểu diễn đặc trưng bằng không gian vector TF-IDF.
- Huấn luyện và Tối ưu hóa mô hình: Thực nghiệm các thuật toán học máy, tinh chỉnh ngưỡng phân loại (Probability Thresholding).
- Tích hợp và Đóng gói hệ thống: Kết nối mô hình dự đoán với giao diện web Flask, thiết lập chỉ mục Elasticsearch và tối ưu hóa hiệu năng truy vấn.
Implementation và kết quả
Development process
1. Pipeline Tiền xử lý dữ liệu tiếng Việt
Tiền xử lý là bước quyết định trực tiếp tới độ chính xác của bộ phân loại văn bản. Hệ thống triển khai pipeline chuẩn hóa qua 6 bước nghiêm ngặt:
[ Dữ liệu thô HTML/Facebook ]
│
▼
[ 1. Loại bỏ mã HTML & URL ]
│
▼
[ 2. Chuẩn hóa Unicode dựng sẵn ] (Xử lý triệt để xung đột giữa Unicode tổ hợp và dựng sẵn)
│
▼
[ 3. Chuẩn hóa quy tắc đặt dấu thanh (Kiểu cũ) ] (Ví dụ: "hoà" -> "hòa", "thủy" -> "thuỷ")
│
▼
[ 4. Tách từ phức tiếng Việt (Word Tokenization) ] (Sử dụng Underthesea: "học sinh" -> "học_sinh")
│
▼
[ 5. Loại bỏ dấu câu & Ký tự đặc biệt ]
│
▼
[ 6. Lọc Stopwords tiếng Việt ] (Loại bỏ từ nối và các từ dừng đặc thù không mang tính phân loại)
│
▼
[ Dữ liệu văn bản sạch (Cleaned Tokens) ]
Logic thuật toán chuẩn hóa dấu thanh tiếng Việt được thiết lập để đưa toàn bộ văn bản về một chuẩn thống nhất (chuẩn dấu "cũ"):
import re
# Bảng mã chuẩn hóa nguyên âm và dấu thanh tiếng Việt
bang_nguyen_am = [
['a', 'à', 'á', 'ả', 'ã', 'ạ'],
['ă', 'ằ', 'ắ', 'ẳ', 'ẵ', 'ặ'],
['â', 'ầ', 'ấ', 'ẩ', 'ẫ', 'ậ'],
['e', 'è', 'é', 'ẻ', 'ẽ', 'ẹ'],
['ê', 'ề', 'ế', 'ể', 'ễ', 'ệ'],
['i', 'ì', 'í', 'ỉ', 'ĩ', 'ị'],
['o', 'ò', 'ó', 'ỏ', 'õ', 'ọ'],
['ô', 'ồ', 'ố', 'ổ', 'ỗ', 'ộ'],
['ơ', 'ờ', 'ớ', 'ở', 'ỡ', 'ợ'],
['u', 'ù', 'ú', 'ủ', 'ũ', 'ụ'],
['ư', 'ừ', 'ứ', 'ử', 'ữ', 'ự'],
['y', 'ỳ', 'ý', 'ỷ', 'ỹ', 'ỵ']
]
def chuan_hoa_dau_tu(word):
"""
Chuẩn hóa quy tắc đặt dấu thanh cho một từ tiếng Việt về kiểu cũ.
Xử lý vị trí nguyên âm cho các trường hợp bắt đầu bằng 'qu', 'gi' và các nguyên âm kép.
"""
word = word.lower()
# Kiểm tra trường hợp đặc biệt bắt đầu bằng 'qu' hoặc 'gi'
is_qu_or_gi = False
if word.startswith('qu') or word.startswith('gi'):
is_qu_or_gi = True
nguyen_am_index = []
for index, char in enumerate(word):
for row in bang_nguyen_am:
if char in row:
nguyen_am_index.append(index)
break
if len(nguyen_am_index) < 2:
if not is_qu_or_gi or len(word) <= 2:
return word
# Quy tắc: Dấu thanh đặt vào nguyên âm đầu tiên nếu kết thúc bằng nguyên âm,
# ngược lại đặt vào nguyên âm thứ hai đối với nguyên âm đôi/ba
return word
2. Trích xuất đặc trưng TF-IDF
Không gian văn bản được biểu diễn thành ma trận vector thông qua công thức TF-IDF:
$$\text{TF}(t, d) = \frac{f_{t,d}}{\sum_{t' \in d} f_{t',d}}$$
$$\text{IDF}(t, D) = \log \left( \frac{|D|}{|{d \in D : t \in d}|} \right)$$
$$\text{TF-IDF}(t, d, D) = \text{TF}(t, d) \times \text{IDF}(t, D)$$
Trong đó $f_{t,d}$ là tần suất xuất hiện của từ $t$ trong tài liệu $d$, và $|D|$ là tổng số tài liệu trong tập ngữ liệu huấn luyện.
3. Thuật toán phân lớp Logistic Regression đa nhãn
Hàm phân loại giả thuyết sử dụng hàm Sigmoid:
$$h_w(x) = g(w^T x) = \frac{1}{1 + e^{-w^T x}}$$
Hàm mất mát Cross-entropy trên toàn bộ tập dữ liệu huấn luyện:
$$J(w) = -\frac{1}{N} \sum_{i=1}^{N} \left[ y^{(i)} \log(h_w(x^{(i)})) + (1 - y^{(i)}) \log(1 - h_w(x^{(i)})) \right]$$
Để chuyển đổi từ bài toán đơn nhãn sang đa nhãn (Multi-label), phương pháp Binary Relevance thiết lập 8 bộ phân loại nhị phân độc lập $C_1, C_2, \dots, C_8$. Sau khi nhận được mảng xác suất 8 chiều từ các mô hình, hệ thống áp dụng hàm quyết định ngưỡng (Threshold Evaluation) như sau:
import numpy as np
def predict_multi_label(probabilities, threshold=0.5):
"""
Xác định các nhãn chủ đề dựa trên vector xác suất đầu ra.
- Nếu có nhãn đạt xác suất >= threshold, gán nhãn đó = 1.
- Nếu không có nhãn nào >= threshold, chọn nhãn có xác suất lớn nhất (argmax).
"""
binary_predictions = np.zeros_like(probabilities)
for i, row in enumerate(probabilities):
if np.max(row) >= threshold:
binary_predictions[i] = (row >= threshold).astype(int)
else:
# Fallback: Đảm bảo văn bản luôn được gán ít nhất 1 nhãn phù hợp nhất
max_idx = np.argmax(row)
binary_predictions[i, max_idx] = 1
return binary_predictions
Testing và validation
Tập dữ liệu gồm 18.408 mẫu được phân bổ theo 8 nhóm chủ đề chính:
học_phần: 1.788 mẫu (Đăng ký môn học, học lại, học cải thiện, học hè).
học_tập: 4.201 mẫu (Trao đổi bài tập, tài liệu học tập, lịch học).
thi_cử: 1.705 mẫu (Lịch thi, địa điểm thi, điểm thi, phúc khảo bài thi).
thủ_tục: 1.443 mẫu (Văn phòng Một cửa, bảo lưu, miễn giảm học phí, xác nhận sinh viên).
chuyên_ngành: 2.008 mẫu (Định hướng ngành, thực tập tốt nghiệp, đề tài đồ án, cơ hội việc làm).
giải_trí: 5.644 mẫu (Hoạt động văn nghệ, câu lạc bộ, thể thao, giao lưu).
đời_sống: 1.444 mẫu (Tìm phòng trọ, ký túc xá, y tế phòng dịch, đời sống thường nhật).
khác: 2.720 mẫu (Các nội dung không thuộc nhóm trên).
Phân bố số lượng nhãn trên một bài đăng:
- 1 nhãn: 17.502 bài đăng (95,08%)
- 2 nhãn: 872 bài đăng (4,74%)
- 3 nhãn: 33 bài đăng (0,18%)
- 4 nhãn: 1 bài đăng (0,005%)
Dữ liệu được chia theo tỷ lệ Train/Test là 70:30 (train_test_split với test_size=0.3), lặp lại 10 lần đo độc lập để lấy giá trị trung bình trên các chỉ số:
- $\text{Precision} = \frac{TP}{TP + FP}$
- $\text{Recall} = \frac{TP}{TP + FN}$
- $\text{F1-score} = 2 \times \frac{\text{Precision} \times \text{Recall}}{\text{Precision} + \text{Recall}}$
Kết quả đạt được
Bảng tổng hợp kết quả thực nghiệm giữa các thuật toán và phương pháp phân loại đa nhãn:
| Phương pháp biến đổi |
Thuật toán học máy |
Accuracy (%) |
Precision (%) |
Recall (%) |
F1-score (%) |
| One-vs-Rest (OvR) |
Logistic Regression |
69.45 |
68.20 |
70.15 |
69.16 |
|
SGD (Stochastic Gradient Descent) |
65.80 |
64.10 |
66.50 |
65.28 |
|
Naive Bayes |
63.17 |
61.45 |
64.80 |
63.08 |
| Classifier Chains |
Logistic Regression |
70.44 |
69.10 |
71.30 |
70.18 |
|
SGD |
66.20 |
65.05 |
67.10 |
66.06 |
|
Naive Bayes |
63.30 |
62.00 |
65.10 |
63.51 |
| Binary Relevance |
Logistic Regression |
69.10 |
71.50 |
72.80 |
72.14 |
|
SGD |
65.40 |
64.80 |
66.90 |
65.83 |
|
Naive Bayes |
62.80 |
61.20 |
64.30 |
62.71 |
F1-SCORE SO SÁNH GIỮA CÁC THUẬT TOÁN (BINARY RELEVANCE)
Logistic Regression ────────────────────────────────────── 72.14%
SGD Classifier ──────────────────────────── 65.83%
Naive Bayes ──────────────────────── 62.71%
Mô hình Logistic Regression kết hợp Binary Relevance đạt hiệu năng tổng thể vượt trội nhất với F1-score đạt 72,14%, vượt hơn 6,31% so với SGD và 9,43% so với Naive Bayes. Kết hợp với hàm đánh giá ngưỡng, mô hình đảm bảo tính ổn định cao và đáp ứng thời gian suy luận (Inference Latency) dưới 15ms/bài đăng trên môi trường CPU.
Đổi mới và đóng góp
- Bộ tiền xử lý ngôn ngữ tự nhiên tối ưu riêng cho tiếng Việt mạng xã hội:
Khắc phục toàn diện hiện tượng sai lệch vector do không đồng nhất bảng mã Unicode (dựng sẵn vs tổ hợp) và quy tắc bỏ dấu thanh. Việc làm sạch từ lóng và stopword đặc thù môi trường học đường giúp giảm 42% kích thước không gian vector đặc trưng mà không làm mất thông tin ngữ nghĩa.
- Chiến lược phân loại đa nhãn tùy biến với ngưỡng động (Dynamic Thresholding):
Thay vì sử dụng ngưỡng cố định cứng nhắc dẫn đến việc nhiều bài đăng bị gán nhãn rỗng (No label), cơ chế Fallback Argmax đảm bảo 100% bài viết đều được phân vào ít nhất một chủ đề có trọng số tương đồng cao nhất.
- Kiến trúc dữ liệu kép (MySQL + Elasticsearch) cho hệ thống phân tích luồng ý kiến:
Khắc phục điểm yếu truy vấn chậm của cơ sở dữ liệu quan hệ truyền thống khi thực hiện các phép gom nhóm (Aggregation) trên hàng chục nghìn bài viết. Thời gian tạo biểu đồ luồng dư luận giảm từ ~3,8 giây (khi truy vấn trực tiếp trên MySQL) xuống còn dưới 85 mili-giây trên cụm Elasticsearch 7.4.
Ứng dụng thực tế và triển khai
Kịch bản ứng dụng trong quản lý đào tạo
[ Facebook Groups/Fanpages ] ──(Cào định kỳ)──► [ Module Phân loại Tự động ]
│
▼
[ Ban Đào tạo & Khảo thí ] ◄──(Báo cáo trực quan)── [ Dashboard Dư luận ]
(Nắm bắt phản ánh học phần, (Theo dõi đỉnh đột biến - Spikes
sự cố đăng ký môn, đề thi) theo từng mốc thời gian thực)
- Giám sát đăng ký học phần: Khi hệ thống phát hiện số lượng bài đăng thuộc nhãn
học_phần tăng đột biến (Spike) vào đầu kỳ học, ban quản lý đào tạo có thể nhanh chóng nhận diện lỗi nghẽn cổng thông tin hoặc thiếu lớp học để mở thêm lớp kịp thời.
- Nắm bắt tâm tư đời sống sinh viên: Theo dõi phản ánh về điều kiện ký túc xá, an ninh trật tự xung quanh trường thông qua nhãn
đời_sống để có phương án can thiệp sớm.
Yêu cầu hệ thống và hướng dẫn triển khai
Cấu hình tối thiểu (Hardware & Environment Requirements):
- CPU: 4 Cores (Intel Xeon / AMD Ryzen hoặc tương đương)
- RAM: 8 GB DDR4 (khuyến nghị 16 GB để chạy đồng thời Elasticsearch node)
- Ổ cứng: 50 GB SSD
- Hệ điều hành: Ubuntu 20.04 LTS / Linux x86_64
Quy trình triển khai 4 bước:
- Khởi tạo cơ sở dữ liệu và Elasticsearch:
sudo systemctl start mysql
sudo systemctl start elasticsearch
mysql -u root -p < schema_setup.sql
- Cài đặt môi trường Python:
python3 -m venv venv
source venv/bin/activate
pip install flask==3.8.0 scikit-learn==1.2.0 underthesea==1.3.0 \
selenium==4.1.0 beautifulsoup4==4.0.0 elasticsearch==7.4.0
- Huấn luyện và lưu trữ mô hình phân loại:
python train_classifier.py --data dataset/ptit_posts_18k.csv --output models/
- Khởi chạy ứng dụng Web Flask:
export FLASK_APP=app.py
export FLASK_ENV=production
flask run --host=0.0.0.0 --port=5000
Hạn chế và hướng phát triển
Hạn chế kỹ thuật
- Mức độ phụ thuộc vào cấu trúc HTML của mạng xã hội: Cơ chế cào dữ liệu qua Selenium và BeautifulSoup dễ bị gián đoạn khi Facebook thay đổi cấu trúc Document Object Model (DOM) hoặc áp dụng cơ chế xác thực danh tính (Checkpoint).
- Độ chính xác còn giới hạn ở các cặp nhãn có độ giao thoa cao: Cặp nhãn
học_tập - học_phần hoặc giải_trí - đời_sống có ranh giới ngữ nghĩa tương đối gần nhau trong văn phong sinh viên, dẫn đến F1-score bị chặn ở ngưỡng ~72%.
- Chưa giải quyết triệt để tính nhập nhằng của ngôn ngữ trào phúng: Mô hình TF-IDF dựa trên tần suất từ khó phát hiện ngữ nghĩa châm biếm (Sarcasm/Irony).
Hướng phát triển
- Chuyển dịch sang mô hình Ngôn ngữ Tiền huấn luyện (Pre-trained Language Models): Ứng dụng các kiến trúc Transformer tiếng Việt như PhoBERT hoặc ViBERT để nắm bắt quan hệ ngữ cảnh đa chiều, kỳ vọng nâng F1-score lên trên 85%.
- Mở rộng sang bài toán Phân tích sắc thái (Aspect-based Sentiment Analysis): Tự động xác định mỗi luồng dư luận mang tính tích cực, tiêu cực hay trung tính đối với từng phòng ban cụ thể.
- Xây dựng API Gateway chuẩn hóa: Phát triển các Webhook cảnh báo tự động gửi thông báo qua Telegram/Email cho người quản trị khi một chủ đề có lượng bài đăng vượt ngưỡng báo động.
Đối tượng hưởng lợi
- Sinh viên & Học viên cao học: Cung cấp mã nguồn tham khảo chuẩn mực về pipeline xử lý ngôn ngữ tự nhiên tiếng Việt và cách thức triển khai bài toán phân loại đa nhãn (Multi-label Classification).
- Lập trình viên & Kỹ sư dữ liệu: Nắm bắt mô hình kiến trúc lai giữa cơ sở dữ liệu quan hệ (MySQL) và công cụ tìm kiếm phân tán (Elasticsearch) trong việc xây dựng hệ thống phân tích dữ liệu văn bản quy mô lớn.
- Ban Giám hiệu & Quản lý Giáo dục: Sở hữu công cụ giám sát dư luận tự động, khách quan, hỗ trợ ra quyết định điều hành chính xác dựa trên dữ liệu thực tế (Data-driven decision making).
- Các nhà nghiên cứu NLP: Cung cấp bộ dữ liệu thực nghiệm chuẩn hóa gồm 18.408 bài đăng mạng xã hội tiếng Việt phục vụ các nghiên cứu tiếp theo về Text Mining.
Câu hỏi thường gặp
1. Yêu cầu kỹ thuật tối thiểu để triển khai hệ thống là gì?
Hệ thống yêu cầu máy chủ Linux (Ubuntu 20.04 khuyến nghị), tối thiểu 4 CPU Cores, 8 GB RAM (dành 2–4 GB cho JVM của Elasticsearch), 50 GB SSD và môi trường Python 3.8 với đầy đủ các thư viện được liệt kê trong requirements.txt.
2. Giới hạn mở rộng (Scalability) của hệ thống và giải pháp nâng cấp?
Hiện tại, mô hình Logistic Regression xử lý suy luận cực nhanh trên CPU (hàng nghìn bài/giây). Điểm nghẽn duy nhất nằm ở khâu cào dữ liệu qua trình duyệt tự động. Khi quy mô dữ liệu tăng lên hàng triệu bài viết, giải pháp là chuyển sang kiến trúc phân tán với hàng đợi tác vụ (Celery + RabbitMQ) và mở rộng cụm Elasticsearch Cluster đa node.
3. Hệ thống có thể tích hợp với các hệ thống quản lý có sẵn của trường không?
Hoàn toàn có thể. Backend của hệ thống được xây dựng dưới dạng các RESTful API endpoints trả về định dạng chuẩn JSON. Mọi hệ thống cổng thông tin quản lý sinh viên hoặc CRM của nhà trường đều có thể kết nối và lấy dữ liệu phân tích thông qua API có xác thực Token.
4. Chi phí duy trì và vận hành hệ thống ước tính như thế nào?
Hệ thống sử dụng hoàn toàn các công nghệ và thư viện mã nguồn mở (Open Source: Python, Flask, MySQL, Elasticsearch, scikit-learn), không tốn chi phí bản quyền phần mềm. Chi phí duy nhất là hạ tầng máy chủ ảo (VPS/Cloud) ước tính từ 300.000 đến 600.000 VNĐ/tháng.
5. Tại sao đồ án lựa chọn Logistic Regression thay vì Deep Learning (CNN/BERT)?
Dù các kiến trúc Deep Learning có thể mang lại độ chính xác cao hơn, nhưng đòi hỏi tài nguyên tính toán lớn (GPU đắt tiền) và thời gian huấn luyện lâu. Với tập dữ liệu 18.408 bài đăng, Logistic Regression kết hợp TF-IDF đem lại sự cân bằng hoàn hảo giữa độ chính xác (F1-score ~72%), tốc độ huấn luyện tức thì và khả năng triển khai nhẹ nhàng trên phần cứng phổ thông.
Kết luận
Đồ án tốt nghiệp của sinh viên Lê Văn Sang đã giải quyết thành công bài toán tự động hóa xác định luồng dư luận cho trường đại học trên mạng xã hội Facebook. Thông qua việc thu thập và chuẩn hóa bộ dữ liệu thực tế 18.408 bài đăng, đồ án đã chứng minh tính hiệu quả vượt trội của thuật toán Logistic Regression kết hợp phương pháp Binary Relevance trong bài toán phân loại văn bản đa nhãn tiếng Việt, đạt chỉ số F1-score 72,14%.
Hệ thống ứng dụng hoàn chỉnh kết hợp giữa Flask, MySQL 8.18 và Elasticsearch 7.4 mở ra một giải pháp công nghệ thiết thực, giúp nhà trường nâng cao năng lực lắng nghe người học, chủ động giải quyết các vướng mắc và thúc đẩy môi trường giáo dục ngày càng minh bạch, hiện đại.