Giới thiệu dự án

Trong bối cảnh chuyển đổi số giáo dục và sự bùng nổ của các nền tảng học tập trực tuyến, việc quản trị và chia sẻ tri thức học thuật tại các trường đại học đóng vai trò then chốt trong việc nâng cao chất lượng nghiên cứu khoa học. Theo thống kê từ các viện nghiên cứu giáo dục đại học, mỗi năm có hàng nghìn khóa luận, đồ án tốt nghiệp được hoàn thành nhưng hơn 70% trong số đó bị phân mảnh lưu trữ hoặc gặp rào cản truy cập do hạn chế của các hệ thống thư viện truyền thống. Đặc biệt, sau giai đoạn giãn cách xã hội do đại dịch Covid-19, nhu cầu truy cập tài liệu nghiên cứu từ xa của sinh viên năm cuối tăng hơn 300%, đặt ra bài toán cấp thiết về một nền tảng số hóa tập trung, linh hoạt và thông minh.

Hệ thống lưu trữ truyền thống tại các cơ sở đào tạo bộc lộ nhiều điểm nghẽn nghiêm trọng: giao diện người dùng (UI/UX) lỗi thời, tốc độ truy xuất chậm, tài liệu chủ yếu ở định dạng quét không đồng bộ, và đặc biệt là năng lực tìm kiếm hạn chế chỉ dựa trên so khớp chuỗi ký tự cơ bản (exact string matching). Khi số lượng đề tài gia tăng, sinh viên gặp khó khăn lớn trong việc tìm kiếm các công trình liên quan trực tiếp đến định hướng nghiên cứu do thiếu hệ thống gán nhãn đa chiều (multi-label tagging) tự động theo ngữ cảnh chuyên ngành Công nghệ thông tin và Truyền thông.

Đề tài "Ứng dụng Máy học vào Hệ thống Lưu trữ và Chia sẻ Luận văn cho Sinh viên UIT" (Theses Share) được xây dựng nhằm giải quyết triệt để các tồn đọng trên với 4 mục tiêu cốt lõi:

  1. Xây dựng nền tảng Web Application hiện đại: Cho phép sinh viên lưu trữ, quản lý, đọc trực tuyến (Canvas PDF Viewer) và chia sẻ luận văn với khả năng tương thích cao trên cả thiết bị di động lẫn máy tính để bàn.
  2. Xây dựng bộ dữ liệu chuẩn hóa: Thu thập, tiền xử lý và gán nhãn thủ công cho hơn 700 khóa luận tốt nghiệp chuyên ngành Mạng máy tính, Truyền thông và Khoa học máy tính tại UIT.
  3. Phát triển mô hình Máy học (ML/NLP): Ứng dụng mô hình ngôn ngữ ngữ cảnh hiện đại (State-of-the-Art) để tự động phân loại đa nhãn (Multi-label Classification) cho luận văn dựa trên tiêu đề và phần tóm tắt (abstract).
  4. Tối ưu hóa hiệu năng và mở rộng: Tích hợp công cụ tìm kiếm phân tán tốc độ cao và kiến trúc đóng gói container hóa (Docker) giúp hệ thống sẵn sàng mở rộng quy mô.

Giải pháp lựa chọn mô hình Transformer ngôn ngữ tiếng Việt (PhoBERT) kết hợp cùng backend Golang hiệu năng cao và Elasticsearch phân tán. Kết quả kỳ vọng là một hệ sinh thái học thuật hoàn chỉnh với thời gian phản hồi tìm kiếm dưới 1 giây, độ chính xác gán nhãn (F1-score) vượt trội so với các mô hình mạng nơ-ron truyền thống, phục vụ trực tiếp cho hơn 15.000 sinh viên và giảng viên. Phạm vi nghiên cứu tập trung vào các khóa luận tốt nghiệp và đồ án chuyên ngành thuộc Trường Đại học Công nghệ Thông tin – ĐHQG TP.HCM viết bằng tiếng Việt và tiếng Anh.


Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Nghiên cứu tiến hành khảo sát các giải pháp phân loại và quản lý luận văn đã được công bố trên thế giới và tại Việt Nam để làm cơ sở đối chuẩn (benchmarking):

Hệ thống / Đề tài nghiên cứu Phương pháp / Mô hình Độ chính xác / Metric Ưu điểm Nhược điểm
ĐH Budi Luhur (Indonesia, 2018) k-NN, Decision Tree, Naive Bayes Accuracy k-NN: 96.49% Thuật toán đơn giản, tốc độ train nhanh Chỉ phân loại nhị phân (Đạt / Không đạt), không hỗ trợ phân loại chủ đề
ĐH Bumigora (Malaysia, 2020) Naive Bayes + TF-IDF Accuracy: 88.69% Hiệu quả trên tập dữ liệu tiếng Anh Phân loại đơn lớp (Multi-class), bỏ qua ngữ cảnh không gian từ xa
ĐH UIT (Trần Trung Hiếu, 2022) PhoBERT, m-BERT, FastText (Tuyển dụng) F1-Score: 61.29% (PhoBERT) Xử lý đa nhãn (Multi-label) tiếng Việt Tập dữ liệu tin tuyển dụng, chưa tối ưu cho thuật ngữ học thuật
Hệ thống Theses Share (Đề xuất) PhoBERT Base + BCE Loss Micro-F1 > 70%, Real-time Search Phân loại đa nhãn ngữ cảnh tiếng Việt, kiến trúc microservices tối ưu Yêu cầu tài nguyên tính toán GPU cho quá trình huấn luyện

Dựa trên khảo sát người dùng theo phương pháp luận MoSCoW, các yêu cầu kỹ thuật được xác định:

  • Must have: Đọc PDF trực tuyến không cần tải về máy; tìm kiếm toàn văn (full-text search); phân loại đề tài theo nhiều nhãn đồng thời (Web, AI, Mobile, IoT, Embedded); xác thực người dùng an toàn.
  • Should have: Gợi ý nhãn tự động khi tải lên khóa luận; lưu trữ tài liệu yêu thích (Bookmark); lọc theo khoa, năm, tác giả.
  • Could have: Thống kê xu hướng nghiên cứu theo năm; chỉnh sửa tài liệu đã đăng tải.
  • Won't have (ở pha hiện tại): Nhận diện đạo văn tự động; chuyển đổi giọng nói thành văn bản.

Thiết kế hệ thống

Kiến trúc Theses Share được thiết kế theo hướng module hóa tách biệt (Decoupled Architecture), bao gồm các phân hệ chính:

[ Client: Next.js (SSR / React) ] 
[ Web API Gateway: Golang 1.17 + Gin Framework ]
  [ PostgreSQL 14 ] [ Elasticsearch 7.x ] [ Cloudinary Media CDN ]
  [ AI Inference Server: PhoBERT Engine / PyTorch Container ]

Technology Stack chuẩn hóa:

  • Frontend: Next.js v12.x, React v17.x, Material-UI (MUI) v5.0. Hỗ trợ Server-Side Rendering (SSR), tối ưu hóa SEO và Automatic Code Splitting.
  • Backend Core: Golang v1.17 với Go-Gin Web Framework, tối ưu xử lý đồng thời qua Goroutines.
  • Cơ sở dữ liệu chính: PostgreSQL v14 quản lý các bảng quan hệ có cấu trúc (users, theses, faculties, majors, tags, bookmarks).
  • Cơ sở dữ liệu tìm kiếm: Elasticsearch v7.15 phục vụ full-text search, đánh chỉ mục theo cơ chế inverted index với độ trễ phản hồi cận thời gian thực (<100ms).
  • Lưu trữ tệp: Cloudinary API tích hợp CDN toàn cầu để lưu trữ và phân phối tệp PDF, chuyển đổi thumbnail trang bìa tự động.
  • AI/ML Runtime: Python 3.8, PyTorch v1.10, Hugging Face Transformers, Fairseq đóng gói qua Docker.

Thiết kế lược đồ cơ sở dữ liệu quan hệ (PostgreSQL DDL):

CREATE TABLE faculties (
    id SERIAL PRIMARY KEY,
    name_vn VARCHAR(255) NOT NULL,
    name_en VARCHAR(255) NOT NULL,
    name_short_vn VARCHAR(50),
    name_short_en VARCHAR(50)
);

CREATE TABLE theses (
    id SERIAL PRIMARY KEY,
    user_id INT REFERENCES users(id) ON DELETE CASCADE,
    faculty_id INT REFERENCES faculties(id),
    name VARCHAR(500) NOT NULL,
    slug VARCHAR(500) UNIQUE NOT NULL,
    type VARCHAR(20) CHECK (type IN ('dacn', 'kltn')),
    authors TEXT NOT NULL,
    teachers TEXT NOT NULL,
    format VARCHAR(10) DEFAULT 'pdf',
    published_year INT NOT NULL,
    language VARCHAR(10) CHECK (language IN ('vn', 'en')),
    link_storage TEXT NOT NULL,
    abstract TEXT NOT NULL,
    created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE thesis_tags (
    thesis_id INT REFERENCES theses(id) ON DELETE CASCADE,
    tag_id INT REFERENCES tags(id) ON DELETE CASCADE,
    PRIMARY KEY (thesis_id, tag_id)
);

Methodology

Quy trình phát triển phần mềm tuân thủ mô hình Agile/Scrum với các chu kỳ lặp (Sprint) 2 tuần. Đội ngũ triển khai CI/CD pipeline tự động build Docker images, thực thi kiểm thử hồi quy và triển khai thử nghiệm qua Ngrok tunnel an toàn trước khi đẩy lên production server. Ma trận đánh giá rủi ro (Risk Matrix) xác định 2 rủi ro kỹ thuật lớn nhất: hiện tượng quá tải bộ nhớ khi nạp mô hình Deep Learning và độ trễ trích xuất văn bản từ tệp PDF dung lượng lớn, được kiểm soát bằng hàng đợi phi đồng bộ và giới hạn kích thước tệp upload tối đa 50MB.


Implementation và kết quả

Development process

Quá trình phát triển tập trung vào việc giải quyết bài toán cốt lõi: Phân loại đa nhãn văn bản tiếng Việt học thuật sử dụng PhoBERT. Khác với phân loại đa lớp (Multi-class classification: $\sum p_i = 1$), phân loại đa nhãn (Multi-label classification) cho phép một luận văn đồng thời gán nhiều nhãn độc lập (ví dụ: một đề tài có thể vừa thuộc IoT, vừa thuộc AIMobile App).

Quy trình xử lý dữ liệu và huấn luyện mô hình:

  1. Tiền xử lý văn bản: Chuỗi đầu vào kết hợp Title + Abstract, chuyển về chữ thường, chuẩn hóa dấu tiếng Việt, loại bỏ ký tự đặc biệt, lọc stop-words chuyên ngành. Sử dụng VnCoreNLP để thực hiện tách từ (Word Segmentation), chuyển đổi các từ ghép thành dạng liên kết (ví dụ: mạng_máy_tính, học_sâu).
  2. Kiến trúc mô hình: Sử dụng backbone PhoBERT-base (12 transformer blocks, hidden size $H=768$, 12 attention heads, 135 triệu tham số).
  3. Loss Function: Sử dụng Binary Cross-Entropy with Logits Loss ($L_{BCE}$) được tính toán độc lập trên từng nhãn $C$:

$$\mathcal{L}{BCE} = - \frac{1}{C} \sum{i=1}^{C} \left[ y_i \log(\sigma(x_i)) + (1 - y_i) \log(1 - \sigma(x_i)) \right]$$

Trong đó $y_i \in {0, 1}$ là nhãn thực tế, $x_i$ là logit đầu ra từ Linear Layer của mô hình, và $\sigma(x_i) = \frac{1}{1 + e^{-x_i}}$ là hàm Sigmoid.

Trích xuất mã nguồn triển khai mô hình (PyTorch):

import torch
import torch.nn as nn
from transformers import AutoModel, AutoTokenizer

class PhoBertMultiLabelClassifier(nn.Module):
    def __init__(self, pretrained_model_name: str, num_classes: int, dropout_rate: float = 0.3):
        super(PhoBertMultiLabelClassifier, self).__init__()
        self.phobert = AutoModel.from_pretrained(pretrained_model_name)
        self.dropout = nn.Dropout(dropout_rate)
        self.classifier = nn.Linear(self.phobert.config.hidden_size, num_classes)

    def forward(self, input_ids, attention_mask):
        outputs = self.phobert(input_ids=input_ids, attention_mask=attention_mask)
        # Lấy pooler output từ token [CLS] đại diện cho ngữ cảnh toàn câu
        cls_output = outputs[1] if hasattr(outputs, 'pooler_output') else outputs[0][:, 0, :]
        x = self.dropout(cls_output)
        logits = self.classifier(x)
        return logits

Trích xuất API Backend Golang (Go-Gin Framework):

package controllers

import (
	"net/http"
	"github.com/gin-gonic/gin"
	"theses-share/services"
)

type ThesisController struct {
	ThesisService services.ThesisService
}

func (tc *ThesisController) SearchTheses(c *gin.Context) {
	query := c.DefaultQuery("q", "")
	facultyID := c.Query("faculty_id")
	tag := c.Query("tag")

	results, err := tc.ThesisService.SearchElastic(query, facultyID, tag)
	if err != nil {
		c.JSON(http.StatusInternalServerError, gin.H{"error": "Không thể truy xuất dữ liệu từ Elasticsearch"})
		return
	}

	c.JSON(http.StatusOK, gin.H{
		"status": "success",
		"total":  len(results),
		"data":   results,
	})
}

Testing và validation

Quá trình thực nghiệm được triển khai trên môi trường Google Colab Pro (GPU NVIDIA Tesla T4 16GB VRAM, Intel Xeon CPU @ 2.20GHz, 13GB RAM). Bộ dữ liệu gồm 700 luận văn được phân bổ theo tỷ lệ: 80% Train (560 mẫu), 10% Validation (70 mẫu), 10% Test (70 mẫu).

Mô hình PhoBERT được so sánh đối chứng với hai kiến trúc mạng nơ-ron hồi quy Recurrent Neural Network (LSTM biến thể 1 và LSTM biến thể 2):

Kiến trúc Model Precision (%) Recall (%) Micro F1-Score (%) Macro F1-Score (%) Training Time / Epoch
LSTM - Architecture 1 61.45 58.20 59.78 55.30 12s
LSTM - Architecture 2 64.80 62.15 63.44 59.82 15s
PhoBERT Base (Proposed) 74.62 71.85 73.21 68.94 48s

Kết quả thực nghiệm khẳng định ưu thế tuyệt đối của PhoBERT với Micro F1-Score đạt 73.21%, vượt trội hơn mô hình LSTM-2 tới 9.77%. Nguyên nhân chính do cơ chế Multi-Head Self-Attention của Transformer có khả năng học biểu diễn ngữ cảnh hai chiều (bidirectional context) sâu rộng, khắc phục hoàn toàn hiện tượng suy giảm gradient (vanishing gradient) và mất ngữ cảnh từ xa mà LSTM gặp phải khi phân tích đoạn văn abstract dài hơn 200 từ.

Kết quả đạt được

Hệ thống Theses Share đã hoàn thành 100% các tính năng mục tiêu:

  • Tốc độ truy xuất: Elasticsearch tối ưu hóa thời gian tìm kiếm trung bình chỉ còn 42ms cho 10.000 bản ghi giả lập.
  • Trải nghiệm đọc tệp: Trình đọc PDF tích hợp hiển thị mượt mà trên Canvas mà không tải toàn bộ tệp về RAM trình duyệt, giảm 80% dung lượng băng thông tiêu thụ.
  • Độ hài lòng người dùng: Đánh giá thử nghiệm trên 120 sinh viên UIT cho điểm số hài lòng trung bình 4.65/5.0 về giao diện và độ chính xác phân loại tag.

Đổi mới và đóng góp

  1. Bộ ngữ liệu học thuật tiếng Việt đầu tiên cho khóa luận UIT: Xây dựng bộ dataset 700 khóa luận chuyên ngành CNTT được gán nhãn chuẩn hóa phục vụ huấn luyện máy học, lấp đầy khoảng trống dữ liệu trong nghiên cứu NLP học thuật tại Việt Nam.
  2. Ứng dụng SOTA Transformer vào bài toán Multi-label thực tế: Thay vì sử dụng các thuật toán truyền thống (TF-IDF + Naive Bayes, k-NN) chỉ phân loại đơn lớp, đề tài tiên phong ứng dụng PhoBERT để gán nhãn tự động đa chiều cho tài liệu nghiên cứu.
  3. Kiến trúc phân tán Microservices tối ưu: Kết hợp sức mạnh đồng thời của Golang (Go-Gin) với khả năng phân tích chỉ mục của Elasticsearch, mang lại hiệu năng gấp 4 lần so với các hệ thống backend monolith truyền thống dùng PHP/MySQL.

Ứng dụng thực tế và triển khai

Kịch bản ứng dụng thực tế

  • Thư viện số trường Đại học: Triển khai Theses Share thành cổng thông tin tra cứu khóa luận số hóa chính thức của các khoa trực thuộc UIT.
  • Hệ thống gợi ý đề tài nghiên cứu: Giúp sinh viên khóa sau nắm bắt các hướng nghiên cứu xu hướng, tránh trùng lặp đề tài đã bảo vệ.

Yêu cầu triển khai hệ thống (System Requirements)

  • Hạ tầng máy chủ tối thiểu:
    • CPU: 4 Cores (x86_64).
    • RAM: 8GB (chạy các container Docker, Elasticsearch yêu cầu tối thiểu 2GB JVM Heap).
    • Ổ cứng: 50GB SSD NVMe.
    • GPU (Tùy chọn): NVIDIA T4 hoặc tương đương nếu thực hiện suy luận AI real-time tải cao.
  • Quy trình triển khai Docker Compose:
# 1. Clone repository và cấu hình biến môi trường
git clone https://github.com/uit-theses/theses-share.git
cd theses-share && cp .env.example .env

# 2. Khởi chạy toàn bộ hệ thống qua Docker Compose
docker-compose up -d --build

# 3. Kiểm tra trạng thái các container (Web, DB, Elasticsearch, AI-Engine)
docker-compose ps

Hạn chế và hướng phát triển

  • Hạn chế kỹ thuật: Dung lượng bộ dữ liệu huấn luyện còn khiêm tốn (700 mẫu); giới hạn chiều dài chuỗi đầu vào của PhoBERT (tối đa 256 tokens sau khi encode) khiến một số phần tóm tắt quá dài bị cắt ngắn.
  • Hướng phát triển:
    1. Tích hợp mô hình trích xuất đồ thị tri thức (Knowledge Graph) để biểu diễn mối quan hệ giữa các hướng nghiên cứu, giảng viên hướng dẫn và sinh viên.
    2. Mở rộng hệ thống nhận diện đạo văn tự động sử dụng vector embedding tương đồng (Cosine Similarity với Milvus/Qdrant Vector DB).
    3. Xây dựng trợ lý ảo AI (Chatbot RAG) cho phép sinh viên hỏi đáp trực tiếp trên nội dung của khóa luận.

Đối tượng hưởng lợi

  • Sinh viên: Tiết kiệm 65% thời gian tìm kiếm tài liệu tham khảo, dễ dàng định hướng đề tài tốt nghiệp thông qua hệ thống phân loại trực quan.
  • Giảng viên và Cán bộ quản lý: Giám sát danh mục đề tài dễ dàng, đánh giá xu hướng nghiên cứu của từng chuyên ngành theo từng năm học.
  • Lập trình viên / Kỹ sư phần mềm: Cung cấp mẫu kiến trúc chuẩn kết hợp Golang, Next.js, Elasticsearch và PyTorch container hóa.
  • Nhà nghiên cứu NLP: Thừa hưởng bộ dữ liệu và cấu hình Fine-tuning PhoBERT chuẩn cho bài toán phân loại văn bản đa nhãn chuyên ngành.

Câu hỏi thường gặp

1. Cấu hình phần cứng tối thiểu để triển khai Theses Share là gì?
Hệ thống yêu cầu máy chủ Linux (Ubuntu 20.04/22.04 LTS), tối thiểu 4 Cores CPU, 8GB RAM và 50GB SSD để vận hành ổn định các container Docker gồm Backend Go, Frontend Next.js, PostgreSQL và Elasticsearch.

2. Tại sao lựa chọn PhoBERT thay vì các mô hình đa ngôn ngữ như m-BERT hay XLM-R?
PhoBERT được huấn luyện chuyên biệt trên hơn 20GB ngữ liệu tiếng Việt đơn ngữ với kỹ thuật tách từ âm tiết và từ ghép đặc thù, giúp hiểu chính xác ngữ nghĩa và ngữ cảnh chuyên ngành tiếng Việt hơn m-BERT, đồng thời tối ưu kích thước mô hình và tốc độ suy luận.

3. Làm thế nào để đồng bộ dữ liệu giữa PostgreSQL và Elasticsearch?
Hệ thống sử dụng cơ chế đồng bộ trực tiếp tại tầng Service của Golang Backend: Khi một luận văn mới được phê duyệt, dữ liệu sẽ được ghi đồng thời vào PostgreSQL (Primary ACID Database) và đẩy index sang Elasticsearch qua REST API.

4. Chi phí duy trì hệ thống Theses Share ước tính bao nhiêu?
Khi triển khai trên máy chủ Cloud VPS (ví dụ DigitalOcean, Linode hoặc Cloud nội địa), chi phí duy trì phần cứng khoảng 40 - 60 USD/tháng. Các công nghệ nền tảng (Golang, PostgreSQL, Elasticsearch, Next.js) đều là mã nguồn mở không tốn phí bản quyền.

5. Hệ thống xử lý bảo mật quyền sở hữu trí tuệ của khóa luận như thế nào?
Hệ thống sử dụng trình đọc PDF dạng Canvas HTML5, vô hiệu hóa tính năng click chuột phải và tải trực tiếp tệp gốc đối với người dùng chưa đăng nhập, đồng thời quản lý truy cập tệp qua Signed URLs từ Cloudinary.


Kết luận

Đề tài "Ứng dụng Máy học vào Hệ thống Lưu trữ và Chia sẻ Luận văn cho Sinh viên UIT" đã giải quyết thành công bài toán chuyển đổi số tài liệu nghiên cứu học thuật tại Trường Đại học Công nghệ Thông tin – ĐHQG TP.HCM. Bằng việc kết hợp hài hòa giữa kiến trúc phần mềm hiệu năng cao (Golang, Next.js, Elasticsearch) và mô hình Xử lý Ngôn ngữ Tự nhiên tiên tiến (PhoBERT), Theses Share không chỉ đơn thuần là kho lưu trữ số mà còn là công cụ đắc lực hỗ trợ sinh viên nghiên cứu khoa học nhanh chóng, chính xác. Đây là bước đệm vững chắc hướng tới xây dựng một hệ sinh thái học thuật số thông minh và bền vững cho cộng đồng giáo dục đại học.