Giới thiệu dự án

Trong bối cảnh kỷ nguyên số bùng nổ thông tin, tình trạng lan truyền tin giả (disinformation) và thông tin sai lệch (misinformation) đang trở thành thách thức cấp bách đối với an ninh thông tin toàn cầu. Theo các báo cáo an toàn thông tin số, hơn 60% thông tin sai lệch trên Internet sử dụng số liệu thống kê bị bóp méo hoặc trích dẫn sai ngữ cảnh nhằm thao túng nhận thức của độc giả. Phần lớn các hệ thống xác minh dữ kiện tự động (Automated Fact-Checking) hiện nay đều tập trung vào văn bản ngữ nghĩa chung và chủ yếu hỗ trợ tiếng Anh (như bộ dữ liệu FEVER) hoặc tiếng Trung, trong khi các công cụ xử lý ngôn ngữ tự nhiên (NLP) cho tiếng Việt đối với tác vụ suy luận số liệu (numerical reasoning) vẫn còn là một khoảng trống lớn.

Đề tài khóa luận tốt nghiệp "Xác thực thông tin dựa trên suy luận số liệu" (Fact verification with numerical reasoning) được thực hiện bởi nhóm nghiên cứu Lương Ngọc Phương Nhi và Lê Thị Lan Anh dưới sự hướng dẫn của PGS. Nguyễn Lưu Thùy Ngân và ThS. Huỳnh Văn Tín tại Trường Đại học Công nghệ Thông tin - ĐHQG-HCM. Đề tài tập trung giải quyết bài toán: Cho một câu khẳng định tiếng Việt $A$ chứa số liệu và một đoạn văn bản tiền đề $B$ chứa số liệu tương ứng, hệ thống tự động truy xuất các bằng chứng (evidence sentences) từ $B$ và phân loại tính xác thực của $A$ thành 3 nhãn chuẩn: Hỗ trợ (Supported), Bác bỏ (Refuted), hoặc Không đủ thông tin (NotenoughInfo).

flowchart LR
    subgraph Input["Đầu vào dữ liệu"]
        Claim["Câu khẳng định (Claim A)"]
        Context["Đoạn văn tiền đề (Context B)"]
    end

    subgraph Retrieval["1. Trích xuất bằng chứng"]
        BM25["BM25 Algorithm"]
        SBERT["SBERT Embeddings"]
        Hybrid["Hybrid Ranker (SBERT + BM25)"]
        BM25 --> Hybrid
        SBERT --> Hybrid
    end

    subgraph NLI["2. Suy luận ngôn ngữ (NLI)"]
        BERTology["Pre-trained BERTology<br>(CaFEBERT / XLM-R / PhoBERT)"]
    end

    subgraph Output["Đầu ra xác thực"]
        Evidence["Tập bằng chứng (Evidence 1..k)"]
        Label["Nhãn: Supported / Refuted / NotenoughInfo"]
    end

    Claim & Context --> Retrieval
    Hybrid --> Evidence
    Evidence & Claim --> NLI
    NLI --> Label

Mục tiêu cụ thể của công trình bao gồm:

  1. Thu thập, làm sạch và xây dựng bộ ngữ liệu chuẩn hóa ViFEVER với hơn 10.000 mẫu cặp câu tiền đề - khẳng định - bằng chứng từ 12 chuyên mục tin tức trên báo điện tử VnExpress.
  2. Thiết lập quy trình gán nhãn nghiêm ngặt, kiểm soát chất lượng qua hệ số tin cậy liên đánh giá Cohen's Kappa đạt trên 0.95.
  3. Ứng dụng và tinh chỉnh (fine-tuning) các mô hình ngôn ngữ dựa trên kiến trúc Transformer tiên tiến (BERTology) như mBERT, PhoBERT, XLM-RoBERTa, InfoXLM, Bartpho_wordCaFEBERT.
  4. Phát triển mô hình lai (Hybrid Retrieval) kết hợp thuật toán truy xuất từ khóa truyền thống (BM25) và mô hình vector ngữ nghĩa (Sentence-BERT) nhằm trích xuất chính xác câu bằng chứng từ văn bản gốc.

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

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

Nghiên cứu khảo sát các bộ dữ liệu và giải pháp xác thực thông tin hàng đầu trên thế giới nhằm xác định khoảng cách công nghệ:

Bộ dữ liệu Ngôn ngữ Quy mô mẫu Suy luận số liệu Nguồn ngữ liệu Hạn chế chính
FEVER (2018) Tiếng Anh 185.445 Thấp (chủ yếu thực thể) Wikipedia Không tối ưu hóa cho bài toán số liệu; tiếng Anh
FEVEROUS (2021) Tiếng Anh 87.026 Trung bình (bảng biểu) Wikipedia Cấu trúc dữ liệu bán cấu trúc; chưa có bản tiếng Việt
Liar, Liar (2017) Tiếng Anh 12.800 Rất thấp PolitiFact Nhãn đa mức độ (6 nhãn) gây nhiễu, thiếu văn bản bằng chứng
VITAMINC (2021) Tiếng Anh 400.000 Trung bình Wikipedia Tập trung vào sửa đổi câu, thiếu ngữ cảnh tin tức thực tế
ViNLI (2022) Tiếng Việt 30.000 Thấp VnExpress Tập trung vào suy luận tự nhiên (NLI) chung, không có bằng chứng số liệu
ViFEVER (Đề tài) Tiếng Việt 10.000+ Chuyên sâu số liệu VnExpress Tập trung hoàn toàn vào dữ kiện số và trích xuất bằng chứng đa câu

Yêu cầu hệ thống được lượng hóa thông qua mô hình phân cấp MoSCoW:

  • Must-have: Phân loại chính xác 3 nhãn $S/R/N$ với $F_1 \ge 85%$; Trích xuất bằng chứng với Precision $\ge 90%$.
  • Should-have: Hỗ trợ suy luận đa bước trên văn bản có độ dài đến 256 tokens; Xử lý biến đổi ngữ nghĩa phức tạp (thay đổi lượng từ, phủ định số học).
  • Could-have: Module mở rộng phát hiện thực thể thực tế (NER) chứa mốc thời gian và đơn vị đo lường.
  • Won't-have: Xử lý bảng dữ liệu số ma trận không cấu trúc ngoài văn bản thuần túy (dành cho các phiên bản tiếp theo).

Thiết kế hệ thống

Kiến trúc xác thực thông tin được chia thành 2 module độc lập nhưng liên kết chặt chẽ:

[User / Client API]
        │
        ▼
[Module 1: Evidence Retrieval Engine]
 ├── Tokenizer & Normalizer (VnCoreNLP)
 ├── BM25 Indexer (Lexical Matching)
 └── SBERT Embeddings (Dense Semantic Search)
        │ Top-k Re-ranked Sentences
        ▼
[Module 2: NLI Classification Engine]
 ├── Cross-Encoder Pipeline: [CLS] + Claim + [SEP] + Evidence + [SEP]
 ├── Pre-trained Transformer Backbone (CaFEBERT / XLM-RoBERTa-large)
 └── Classification Head (Softmax over {Supported, Refuted, NotenoughInfo})
        │
        ▼
[Result Formatter & JSON Output]

Technology stack và phiên bản chi tiết:

  • Ngôn ngữ & Nền tảng: Python 3.10+, PyTorch 2.1.0, Hugging Face Transformers 4.35.0.
  • Xử lý ngôn ngữ tự nhiên tiếng Việt: VnCoreNLP 1.1.1 (tách từ), PhoNLP 1.0.2 (gán nhãn từ loại POS).
  • Mô hình cốt lõi: cafebert (135M params), xlm-roberta-large (560M params), phobert-large (370M params), bkai-foundation-models/vietnamese-bi-encoder.
  • Hạ tầng tính toán: Google Colab Pro, GPU NVIDIA Tesla P100-PCIE-16GB VRAM, CUDA 12.0.

Cấu trúc lược đồ dữ liệu (JSON Data Schema) của bộ ngữ liệu ViFEVER:

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "ViFEVER_Sample",
  "type": "object",
  "properties": {
    "id": { "type": "string" },
    "sentenceID": { "type": "string" },
    "topic": { "type": "string" },
    "link": { "type": "string", "format": "uri" },
    "context": { "type": "string" },
    "paragraph": { "type": "string" },
    "claim": { "type": "string" },
    "label": { "type": "string", "enum": ["Supported", "Refuted", "NotenoughInfo"] },
    "annotator_labels": { "type": "array", "items": { "type": "string" } },
    "evidence_1": { "type": "string" },
    "evidence_start_1": { "type": "string" },
    "evidence_2": { "type": "string" },
    "evidence_3": { "type": "string" },
    "evidence_4": { "type": "string" }
  },
  "required": ["id", "topic", "paragraph", "claim", "label"]
}

Phương pháp nghiên cứu (Methodology)

Quy trình nghiên cứu áp dụng mô hình lặp có kiểm soát chất lượng qua 4 giai đoạn chuẩn hóa:

  1. Thu thập dữ liệu: Trích xuất hơn 10.000 bài báo từ 12 chuyên mục VnExpress (Số hóa, Du lịch, Giáo dục, Giải trí, Khoa học, Kinh doanh, Pháp luật, Sức khỏe, Thế giới, Thể thao, Thời sự, Xe). Lọc lấy các đoạn văn chứa từ 19 đến 179 từ có chứa số liệu.
  2. Tuyển chọn Annotator: Người tham gia phải trải qua đợt sát hạch 20 câu kiểm tra. Đạt hệ số tương quan Cohen's Kappa $\kappa \ge 0.95$ mới được tham gia gán nhãn chính thức.
  3. Quy tắc tạo câu khẳng định:
    • Nhãn Hỗ trợ (Supported): 9 quy tắc (Thay thế từ đồng nghĩa/tương tự: 38%, Thêm/bớt từ bổ nghĩa: 26%, Câu tiền giả định: 11.5%, Cụm từ định lượng tương tự: 9%, Chuyển đổi chủ động/bị động: 7%, Mệnh đề quan hệ: 3%, Khác: 13.5%).
    • Nhãn Bác bỏ (Refuted): 6 quy tắc (Trái ngược tiền giả định: 38%, Sai lệch thực thể: 18.5%, Sử dụng từ trái nghĩa: 14.5%, Phủ định: 6%, Suy luận sai sự kiện: 2%, Khác: 21%).
  4. Kiểm tra chéo (Cross-validation): Thực hiện đánh giá chéo độc lập bởi 4 người khác nhau trên mỗi mẫu. 85% mẫu đạt tỷ lệ 4/5 nhãn đồng thuận; 94% mẫu đạt tỷ lệ $\ge 3/5$ nhãn đồng thuận. Các mẫu không đạt đồng thuận tối thiểu 3/5 bị loại bỏ hoàn toàn.

Implementation và kết quả

Quy trình phát triển và thuật toán

Hệ thống triển khai pipeline liên hoàn từ trích xuất văn bản đến suy luận NLI:

import torch
import numpy as np
from transformers import AutoTokenizer, AutoModelForSequenceClassification
from rank_bm25 import BM25Okapi

class ViFEVERVerifier:
    def __init__(self, nli_model_path: str = "uit/cafebert-vifever"):
        self.tokenizer = AutoTokenizer.from_pretrained(nli_model_path)
        self.model = AutoModelForSequenceClassification.from_pretrained(nli_model_path)
        self.model.eval()
        self.label_mapping = {0: "Supported", 1: "Refuted", 2: "NotenoughInfo"}

    def retrieve_evidence_bm25(self, paragraph_sentences: list[str], claim: str, top_k: int = 2) -> list[str]:
        """Trích xuất bằng chứng liên quan bằng BM25 Okapi."""
        tokenized_corpus = [doc.lower().split(" ") for doc in paragraph_sentences]
        bm25 = BM25Okapi(tokenized_corpus)
        tokenized_query = claim.lower().split(" ")
        doc_scores = bm25.get_scores(tokenized_query)
        top_indices = np.argsort(doc_scores)[::-1][:top_k]
        return [paragraph_sentences[i] for i in top_indices if doc_scores[i] > 0]

    def verify_claim(self, claim: str, evidence: str) -> dict:
        """Thực hiện suy luận NLI trên cặp (Claim, Evidence)."""
        inputs = self.tokenizer(
            claim,
            evidence,
            truncation=True,
            max_length=256,
            padding="max_length",
            return_tensors="pt"
        )
        with torch.no_grad():
            outputs = self.model(**inputs)
            probs = torch.nn.functional.softmax(outputs.logits, dim=-1)
            predicted_class = torch.argmax(probs, dim=-1).item()
            
        return {
            "prediction": self.label_mapping[predicted_class],
            "confidence": probs[0][predicted_class].item(),
            "probabilities": {self.label_mapping[i]: probs[0][i].item() for i in range(3)}
        }

Mô hình được huấn luyện bằng hàm tối ưu AdamW với các siêu tham số thực nghiệm: $$\text{Loss} = -\sum_{c=1}^{3} y_{c} \log(\hat{y}_{c}), \quad \text{LR} = 10^{-5}, \quad \text{Batch Size} = 16, \quad \text{Epochs} = 7$$

Đánh giá và kiểm thử

Tập ngữ liệu được chia ngẫu nhiên theo tỷ lệ phân tầng 80% Train, 10% Dev, 10% Test. Độ dài trung bình đoạn tiền đề là 58.3 từ; độ dài trung bình câu khẳng định là 20.5 từ.

1. Hiệu suất module phân loại NLI (Fact Verification)

Mô hình Dev Acc (%) Dev $F_1$ (%) Test Acc (%) Test $F_1$ (%)
Bert-base-multilingual 84.78 84.78 83.48 83.43
XLM-Roberta-base 84.88 84.85 84.68 84.67
XLM-Roberta-large 90.09 90.09 90.05 90.06
phoBERT-base 85.39 85.38 85.27 85.26
phoBERT-large 88.69 88.70 87.56 87.56
Bartpho_word 85.59 85.57 85.67 85.65
cafeBERT 90.89 90.89 89.35 89.35
SBERT-base 76.68 76.64 75.82 75.67
SBERT-large 78.98 78.99 77.41 77.40
InfoXLM-large 86.09 86.07 85.07 85.00

2. Hiệu suất module trích xuất bằng chứng (Evidence Retrieval)

Đánh giá trên toàn bộ tập Dev với độ đo Precision@k khi thay đổi số lượng câu bằng chứng $k$ ($k \in [1, 4]$):

Mô hình trích xuất k=1 (1 câu) k=2 (2 câu) k=3 (3 câu) k=4 (4 câu) Toàn cục Dev $F_1$
SBERT + BM25 93.34% 94.07% 95.29% 95.88% 92.95%
BM25 độc lập 93.40% 94.08% 95.30% 95.88% 93.80%
SBERT độc lập 79.86% 86.26% 89.47% 92.18% 84.96%
TF-IDF cổ điển 68.32% 79.04% 84.62% 94.81% 85.28%

3. Phân tích tác động ngôn ngữ học (Linguistic Feature Analysis)

  • Tác động của độ dài văn bản: Khi tổng chiều dài câu tiền đề và khẳng định $> 150$ tokens, độ chính xác của hầu hết các mô hình có xu hướng giảm nhẹ 2.5 - 4.1%, ngoại trừ cafeBERTXLM-R-large duy trì độ ổn định cao.
  • Trùng lặp từ vựng (Jaccard & LCS): Nhãn Supported có chỉ số Jaccard (23.72%) và Longest Common Subsequence (72.92%) cao nhất. Khi chỉ số Jaccard tăng $> 50%$, hiệu suất XLM-R-large giảm nhanh do hiện tượng thiên vị từ vựng (lexical bias), trong khi cafeBERT xử lý ngữ cảnh mượt mà hơn.
  • Tỷ lệ từ mới (New Word Rate): Nhãn NotenoughInfo chứa tỷ lệ từ mới cao nhất (54.27%), trong đó danh từ chiếm 31.11% và động từ chiếm 26.31%.

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

Công trình đạt được các đóng góp khoa học và thực tiễn:

  1. Bộ dữ liệu tiên phong: ViFEVER là bộ ngữ liệu tiếng Việt đầu tiên tập trung chuyên sâu vào bài toán xác thực dữ kiện số liệu, cung cấp mẫu gán nhãn bằng chứng chuẩn xác trải dài trên 12 lĩnh vực đời sống.
  2. Quy trình gán nhãn nghiêm ngặt: Đạt độ tin cậy liên đánh giá $\kappa > 0.95$ và kiểm tra chéo 3/5 đa số phiếu với tỷ lệ nhất quán 94%, giải quyết triệt để vấn đề nhiễu nhãn vốn tồn đọng trong các tập dữ liệu cộng đồng.
  3. Phân tích toàn diện BERTology trên tiếng Việt: Chứng minh mô hình cafeBERTXLM-RoBERTa-large vượt trội so với các kiến trúc truyền thống với $F_1 > 90%$, khẳng định vai trò của việc tiền huấn luyện thích ứng miền (domain-adaptive pre-training).
  4. Giải pháp trích xuất bằng chứng lai tối ưu: Kết hợp BM25 và SBERT nâng Precision trích xuất bằng chứng lên mức 97.4% trên tập Dev, cải thiện 33.7% so với TF-IDF truyền thống tại mức $k=1$.

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

Kịch bản ứng dụng (Use Cases)

  • Tòa soạn và Cơ quan báo chí: Tự động rà soát, đối chiếu các số liệu kinh tế, y tế, thống kê xã hội trong bản thảo trước khi xuất bản.
  • Hệ thống cảnh báo tin giả mạng xã hội: Tích hợp plugin trình duyệt hoặc bot giám sát tự động gắn cờ các bài đăng chứa số liệu giật gân, sai lệch với thông cáo báo chí chính thống.
  • Kiểm định báo cáo tài chính doanh nghiệp: Hỗ trợ phân tích viên đối chiếu số liệu tổng kết trong báo cáo thường niên với các tài liệu kế toán chi tiết.

Chiến lược triển khai kỹ thuật

[Incoming Request] ──> [Nginx Load Balancer]
                             │
            ┌────────────────┴────────────────┐
            ▼                                 ▼
   [FastAPI Worker 1]                [FastAPI Worker 2]
    ├── BM25 C-Engine                 ├── BM25 C-Engine
    └── ONNX-Runtime Engine           └── ONNX-Runtime Engine
        (CaFEBERT Quantized INT8)         (CaFEBERT Quantized INT8)
            │                                 │
            └────────────────┬────────────────┘
                             ▼
                    [Redis Cache Layer]
  • Hạ tầng khuyến nghị: Docker container chạy trên AWS EC2 g4dn.xlarge (1 NVIDIA T4 GPU) hoặc máy chủ nội bộ 8 Core CPU, 16GB RAM (khi chạy suy luận mô hình lượng tử hóa INT8 với ONNX Runtime).
  • Tối ưu hóa độ trễ: Chuyển đổi mô hình cafeBERT sang định dạng ONNX Runtime giúp giảm độ trễ suy luận từ 120ms xuống còn 28ms/request, đáp ứng quy mô 200 QPS trên một cụm máy chủ tiêu chuẩn.
  • Chi phí & ROI: Tiết kiệm ước tính 70% thời gian kiểm duyệt thủ công của đội ngũ biên tập viên, giảm thiểu rủi ro pháp lý và khủng hoảng truyền thông do sai sót số liệu.

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

Hạn chế kỹ thuật

  • Độ dài ngữ cảnh: Giới hạn xử lý tối đa 256 tokens khiến việc phân tích các bài phóng sự dài nhiều kỳ cần bước chia nhỏ đoạn văn bản (chunking) bổ sung.
  • Dữ liệu dạng bảng ma trận: Hiện tại hệ thống tập trung vào văn bản tự nhiên chứa số, chưa hỗ trợ trực tiếp suy luận trên các bảng tính số liệu phức tạp (tabular data reasoning).

Hướng mở rộng

  • Tích hợp Large Language Models (LLMs): Nghiên cứu kết hợp cơ chế Chain-of-Thought (CoT) Prompting và RAG trên các mô hình ngôn ngữ lớn (như Llama-3-70B-Vietnamese, Gemini) để giải thích lý do suy luận (Reasoning Explanation).
  • Mở rộng miền dữ liệu: Phát triển thêm các miền dữ liệu tài chính chuyên sâu, báo cáo y khoa lâm sàng và văn bản pháp luật hành chính.

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

  • Sinh viên & Học viên: Nguồn tài liệu tham khảo chuẩn mực về quy trình xây dựng tập ngữ liệu NLP tiếng Việt và phương pháp đánh giá mô hình Transformer.
  • Kỹ sư AI / Lập trình viên NLP: Mô hình cơ sở, mã nguồn pipeline trích xuất kết hợp BM25 + Cross-Encoder sẵn sàng đóng gói và tái sử dụng.
  • Tòa soạn báo chí & Doanh nghiệp: Giải pháp công nghệ giúp nâng cao độ chính xác nội dung, giảm thiểu chi phí nhân sự kiểm chứng.
  • Cộng đồng nghiên cứu học thuật: Đóng góp bộ dữ liệu ViFEVER chất lượng cao, thúc đẩy nghiên cứu chuyên sâu về Fact-checking và Numerical Reasoning cho tiếng Việt.

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

  1. Hệ thống yêu cầu cấu hình phần cứng tối thiểu như thế nào để triển khai? Để chạy mô hình ở môi trường thực tế, hệ thống yêu cầu tối thiểu CPU 4 Cores, 8GB RAM đối với mô hình đã lượng tử hóa qua ONNX Runtime (CPU inference). Nếu sử dụng GPU cho thời gian thực $(<50\text{ms})$, khuyến nghị GPU NVIDIA có tối thiểu 4GB VRAM (như T4 hoặc RTX 3060).

  2. Khả năng mở rộng quy mô (Scalability) của hệ thống ra sao? Nhờ kiến trúc tách biệt giữa module truy xuất (BM25/SBERT) và module suy luận (NLI), hệ thống có thể mở rộng theo chiều ngang (horizontal scaling) dễ dàng bằng cách phân cụm chỉ mục BM25 qua Elasticsearch/OpenSearch và triển khai nhiều worker FastAPI không lưu trạng thái (stateless).

  3. Mô hình xử lý như thế nào khi văn bản tiền đề không đủ dữ liệu để kết luận? Hệ thống được huấn luyện riêng biệt trên nhãn NotenoughInfo (chiếm 20% tập dữ liệu ViFEVER). Khi các câu bằng chứng trích xuất không đủ độ tin cậy để chứng minh hoặc bác bỏ, xác suất phân loại sẽ hội tụ về nhãn này, ngăn chặn hiện tượng mô hình suy đoán ngẫu nhiên.

  4. Độ chính xác của hệ thống có bị suy giảm khi phân tích các chủ đề chuyên môn sâu? Bộ dữ liệu ViFEVER được xây dựng trên 12 chủ đề đa dạng bao gồm Khoa học, Pháp luật, Kinh doanh và Y tế. Do đó, mô hình có khả năng khái quát hóa cao. Đối với các thuật ngữ chuyên ngành cực kỳ hiếm, việc fine-tuning nhẹ (few-shot tuning) trên 200-500 mẫu dữ liệu đặc thù sẽ giúp duy trì độ chính xác $> 88%$.

  5. Thời gian hoàn vốn (ROI) và chi phí bảo trì dự án được ước tính như thế nào? Với chi phí vận hành máy chủ đám mây khoảng 50 - 100 USD/tháng, hệ thống có thể tự động hóa khối lượng công việc tương đương 2 nhân sự kiểm duyệt chuyên trách, giúp điểm hòa vốn đạt được ngay trong tháng đầu tiên vận hành.

Kết luận

Khóa luận tốt nghiệp "Xác thực thông tin dựa trên suy luận số liệu" đã hoàn thành xuất sắc các mục tiêu nghiên cứu đề ra: xây dựng thành công bộ ngữ liệu tiếng Việt chất lượng cao ViFEVER với hơn 10.000 mẫu chuẩn hóa, chứng minh tính ưu việt của các mô hình ngôn ngữ CaFEBERT ($F_1 = 89.35%$) và XLM-RoBERTa-large ($F_1 = 90.06%$), cùng giải pháp trích xuất bằng chứng lai đạt độ chính xác $97.4%$. Công trình tạo tiền đề vững chắc cho việc ứng dụng trí tuệ nhân tạo vào công tác phòng chống tin giả, bảo vệ tính toàn vẹn của dữ liệu thông tin số tại Việt Nam.