Giới thiệu dự án

Trong kỷ nguyên bùng nổ thông tin số và sự phát triển vượt bậc của trí tuệ nhân tạo (AI), hệ thống Đọc hiểu máy và Trả lời câu hỏi tự động (Machine Reading Comprehension - MRC / Question-Answering - QA) đã trở thành cấu phần cốt lõi của các công cụ tìm kiếm thông minh, trợ lý ảo và chatbot doanh nghiệp. Theo các khảo sát ngành NLP, hơn 65% lỗi sai của các mô hình trích xuất câu trả lời xuất phát từ việc không thể phân biệt giữa câu hỏi không thể trả lời (unanswerable question) và việc văn bản ngữ cảnh chứa quá nhiều dữ liệu nhiễu (noise context).

Đối với tiếng Việt, thách thức này càng nghiêm trọng do tính đa nghĩa, cấu trúc ngữ pháp linh hoạt và sự thiếu hụt các tập dữ liệu suy luận ngữ nghĩa chuẩn hóa. Khi mô hình MRC đối mặt với các câu hỏi phức tạp hoặc câu hỏi gài bẫy (adversarial questions), hiện tượng ảo giác (hallucination) và trích xuất sai vùng thông tin thường xuyên xảy ra.

         [ Entailment ]                          [ Not Entailment ]
      Câu trả lời hợp lệ                        Câu hỏi Unanswerable
       (Answerable QA)                           (Loại bỏ/Cảnh báo)

Đồ án khóa luận tốt nghiệp "Tích hợp suy luận ngôn ngữ tự nhiên trong mô hình đọc hiểu tự động" (Integrating Natural Language Inference in Machine Reading Comprehension Model) được thực hiện bởi nhóm nghiên cứu tại Trường Đại học Công nghệ Thông tin - ĐHQG-HCM, 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. Dự án tập trung giải quyết bài toán cốt lõi: Nâng cao độ tin cậy của hệ thống QA tiếng Việt bằng cơ chế xác minh suy luận hai chiều và tinh gọn ngữ cảnh.

Mục tiêu nghiên cứu cụ thể

  1. Xác minh câu trả lời (Answer Verification): Tích hợp kỹ thuật Suy luận ngôn ngữ tự nhiên (Natural Language Inference - NLI) để kiểm chứng tính logic của câu trả lời trích xuất từ mô hình MRC, đặc biệt đối với tập câu hỏi không thể trả lời (unanswerable).
  2. Khử nhiễu ngữ cảnh (Context Compression): Ứng dụng NLI và mô hình nhúng câu để loại bỏ các câu văn không liên quan, tạo ra các tập ngữ cảnh cô đọng (mini-context), giúp mô hình QA tập trung vào không gian tìm kiếm chính xác.
  3. Xây dựng tài nguyên ngôn ngữ (Dataset Synthesis): Xây dựng bộ dữ liệu chuyển đổi câu hỏi - câu trả lời sang câu trần thuật tiếng Việt (ViQA2D) với 20,684 mẫu, cùng hệ thống dữ liệu huấn luyện QA_NLI đa dạng từ UIT-ViNewsQA và UIT-ViQuAD 2.0.

Phạm vi và giới hạn

  • Phạm vi: Tập trung vào bài toán MRC dạng trích xuất đoạn văn (Span-extraction) và bài toán NLI 3 nhãn (Entailment, Neutral, Contradiction) trên các tập dữ liệu tiếng Việt chuẩn: UIT-ViQuAD 1.0, UIT-ViQuAD 2.0, UIT-ViNewsQA và ViNLI.
  • Giới hạn: Nghiên cứu không bao gồm MRC dạng sinh tự do (Abstractive Generative QA) và phụ thuộc vào chất lượng trích xuất danh từ riêng / đại từ nhân xưng của các mô hình tiền xử lý.

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

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

Tiêu chí Mô hình MRC Truyền thống (Rule-based / TF-IDF) Mô hình Deep Learning Đơn lẻ (BiDAF, BERT cơ bản) Giải pháp Đề xuất: Tích hợp NLI + Mini-Context Transform
Xử lý ngữ cảnh nhiễu Kém; dễ bị phân tán bởi từ khóa trùng lặp Trung bình; phụ thuộc hoàn toàn vào cơ chế Self-Attention Xuất sắc; lọc bỏ 30% câu không liên quan qua SBERT Cosine Matching
Nhận diện câu hỏi Unanswerable Không thể xử lý Thấp; dễ bị ép trích xuất span sai dù văn bản không chứa đáp án Cao; kiểm định cặp Premise-Hypothesis qua bộ phân loại NLI
Độ tin cậy ngữ nghĩa Rất thấp (chỉ so khớp chuỗi ký tự) Khá (học ngữ cảnh đa tầng nhưng thiếu logic suy diễn) Rất cao; câu trả lời được xác thực lại tính kéo theo (Entailment)
Tài nguyên tiếng Việt Dễ triển khai Phụ thuộc dữ liệu gán nhãn MRC vốn khan hiếm Tận dụng chéo dữ liệu MRC sang NLI, tối ưu hóa dữ liệu huấn luyện

Yêu cầu hệ thống theo mô hình MoSCoW

  • Must Have: Pipeline chuyển đổi QA sang Hypothesis tiếng Việt; Bộ phân loại NLI hỗ trợ nhãn Entailment / Not Entailment; Cơ chế lọc tiền đề dựa trên SBERT.
  • Should Have: Mô-đun tự động sửa lỗi dịch thuật tên riêng (NER) và đại từ nhân xưng trong quá trình sinh tập dữ liệu ViQA2D.
  • Could Have: Tích hợp ngưỡng động (Dynamic Cosine Threshold) cho từng lĩnh vực văn bản chuyên ngành (tin tức, y tế, bách khoa).
  • Won't Have: Hệ thống suy luận đa bước đa văn bản (Multi-hop cross-document reasoning) trong phạm vi giai đoạn này.

Thiết kế hệ thống

Kiến trúc giải pháp được thiết kế thành một pipeline khép kín gồm 3 phân hệ chính: Phân hệ Sinh câu giả thuyết, Phân hệ Tinh gọn tiền đề và Phân hệ Suy luận logic.

Chi tiết Tech Stack và Phiên bản công nghệ

  • Ngôn ngữ lập trình: Python >= 3.8
  • Thư viện Deep Learning: PyTorch >= 1.12.0, HuggingFace Transformers >= 4.28.0
  • Mô hình Dịch máy: VinAI Translate (PhoMT Engine)
  • Mô hình Sinh văn bản (Seq2Seq): ViT5 (vit5-base / vit5-large)
  • Mô hình Trích xuất QA: QANet, PhoBERT (phobert-base, phobert-large)
  • Mô hình Nhúng câu (Sentence Embedding): vietnamese-sbert (dựa trên kiến trúc Sentence-BERT)
  • Mô hình Phân loại NLI: XLM-RoBERTa (xlm-roberta-base), PhoBERT-NLI, multi-qa_v1-mpnet-cls_dot
  • Mô hình Hỗ trợ tiền xử lý: QCRI/bert-base-multilingual-cased-pos-english (POS tagging)

Phương pháp luận (Methodology)

Nghiên cứu áp dụng quy trình thực nghiệm lặp (Iterative Experimental Methodology) kết hợp kỹ thuật đánh giá định lượng:

  1. Giai đoạn 1 - Chuẩn bị tài nguyên dữ liệu: Dịch bộ dữ liệu QA2D tiếng Anh sang tiếng Việt bằng VinAI Translate, thực hiện làm sạch dữ liệu tự động với POS tagger để sửa lỗi NNP và đại từ xưng hô, tạo thành tập ViQA2D gồm 20,684 mẫu.
  2. Giai đoạn 2 - Huấn luyện mô hình cơ sở: Fine-tune ViT5 trên ViQA2D để đảm nhận vai trò sinh câu khẳng định $H$ từ cặp $(Q, A)$.
  3. Giai đoạn 3 - Xây dựng tập dữ liệu QA_NLI: Trích xuất các cặp Premise - Hypothesis từ UIT-ViNewsQA và UIT-ViQuAD 2.0. Đặt ngưỡng tương đồng Cosine $\ge 0.85$ để gán nhãn Entailment và Not Entailment.
  4. Giai đoạn 4 - Tinh gọn ngữ cảnh (Mini-context Transformation): Rút gọn văn bản context gốc xuống còn 70% các câu có độ liên quan ngữ nghĩa cao nhất dựa trên điểm tương đồng với Hypothesis.
  5. Giai đoạn 5 - Thử nghiệm và kiểm chứng: Đánh giá chéo trên các chỉ số Accuracy, Exact Match (EM), F1-score và BLEU.

Implementation và kết quả

Quy trình phát triển và thuật toán cốt lõi

Thuật toán trích chọn tiền đề và tinh gọn ngữ cảnh (Premise Extraction & Mini-Context)

Thuật toán dưới đây mô tả quá trình trích xuất $70%$ câu quan trọng nhất từ đoạn văn ngữ cảnh $C = {s_1, s_2, ..., s_n}$ dựa trên độ tương đồng Cosine với câu giả thuyết $H$:

import torch
import numpy as np
from sentence_transformers import SentenceTransformer
from sklearn.metrics.pairwise import cosine_similarity

class ContextReducer:
    def __init__(self, model_name: str = "dangvantuan/vietnamese-embedding"):
        """Khởi tạo mô hình Vietnamese-SBERT để trích xuất embedding câu."""
        self.encoder = SentenceTransformer(model_name)
        
    def extract_top_premise(self, context_sentences: list, hypothesis: str, retain_ratio: float = 0.7) -> str:
        """
        Lọc bỏ thông tin nhiễu, giữ lại các câu có độ tương đồng cao nhất với giả thuyết.
        """
        if not context_sentences or not hypothesis:
            return ""
        
        # 1. Mã hóa câu giả thuyết và danh sách câu trong ngữ cảnh
        hyp_embedding = self.encoder.encode([hypothesis]) # Shape: (1, d)
        sent_embeddings = self.encoder.encode(context_sentences) # Shape: (n, d)
        
        # 2. Tính toán độ tương đồng Cosine
        similarities = cosine_similarity(hyp_embedding, sent_embeddings)[0]
        
        # 3. Xác định số lượng câu cần giữ lại (k = 70% tổng số câu)
        k = max(1, int(np.ceil(len(context_sentences) * retain_ratio)))
        
        # 4. Lấy index của top-k câu có similarity cao nhất nhưng giữ nguyên thứ tự xuất hiện gốc
        top_k_indices = np.argsort(similarities)[-k:]
        sorted_indices = sorted(top_k_indices)
        
        # 5. Ghép nối tạo thành đoạn tiền đề (Premise / Mini-context)
        reduced_context = " ".join([context_sentences[i] for i in sorted_indices])
        return reduced_context

Pipeline sinh câu giả thuyết với ViT5

from transformers import AutoTokenizer, AutoModelForSeq2SeqLM

def generate_hypothesis(question: str, answer: str, model_path: str = "vit5-base-viqa2d") -> str:
    """
    Chuyển đổi cặp (Question, Answer) thành câu khẳng định (Hypothesis)
    Ví dụ: Q: 'Thủ đô của Việt Nam là gì?', A: 'Hà Nội' -> H: 'Thủ đô của Việt Nam là Hà Nội.'
    """
    tokenizer = AutoTokenizer.from_pretrained(model_path)
    model = AutoModelForSeq2SeqLM.from_pretrained(model_path)
    
    input_text = f"question: {question} answer: {answer}"
    input_ids = tokenizer(input_text, return_tensors="pt", max_length=256, truncation=True).input_ids
    
    outputs = model.generate(input_ids, max_length=256, num_beams=4, early_stopping=True)
    hypothesis = tokenizer.decode(outputs[0], skip_special_tokens=True)
    return hypothesis

Thử nghiệm và kiểm chứng (Testing & Validation)

Thống kê tập dữ liệu thực nghiệm ViQA2D

Phân vùng dữ liệu (Splits) Số lượng mẫu (Samples) Tỷ lệ (%)
Train Set 14,892 72.0%
Development Set (Dev) 1,655 8.0%
Test Set 4,137 20.0%
Tổng cộng (Total) 20,684 100%

Kết quả độ chính xác (Accuracy %) của các mô hình NLI trên tập kiểm thử

Kiến trúc Mô hình NLI UIT-ViNewsQA_NLI (Acc %) UIT-ViQuAD 2.0_NLI (Acc %) ViNLI (Acc %) Trung bình chung (Avg %)
mBERT (Multilingual BERT) 69.20% 68.45% 69.00% 68.88%
XLM-RoBERTa (XLM-R Base) 78.40% 76.90% 77.25% 77.51%
PhoBERT Base 82.15% 80.60% 81.30% 81.35%
PhoBERT Large + QA_NLI (Đề xuất) 86.75% 84.90% 85.40% 85.68%

Đánh giá hiệu năng mô hình MRC trên dữ liệu ngữ cảnh rút gọn (UIT-ViQuAD 1.0)

Khi áp dụng phương pháp rút gọn ngữ cảnh (giữ lại 70% câu thông qua tương đồng ngữ nghĩa SBERT), hiệu suất của mô hình đọc hiểu trích xuất trên tập Dev của UIT-ViQuAD 1.0 được cải thiện rõ rệt:

[Chỉ số Exact Match - EM]
Ngữ cảnh gốc:      ████████████████████ 56.42%
Ngữ cảnh rút gọn:  ██████████████████████ 61.85% (+5.43%)

[Chỉ số F1-Score]
Ngữ cảnh gốc:      ██████████████████████████ 74.20%
Ngữ cảnh rút gọn:  ████████████████████████████ 79.64% (+5.44%)

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

  1. Quy trình chuyển đổi liên tác vụ (Cross-task Transfer Learning): Nghiên cứu là một trong những công trình tiên phong tại Việt Nam tích hợp thành công mô hình NLI vào việc kiểm định tính đúng đắn của đầu ra mô hình MRC tiếng Việt.
  2. Khắc phục lỗi Unanswerable QA: Thay vì để mô hình MRC đoán mò (hallucinate) trên các câu hỏi không có đáp án, cơ chế NLI Verification đóng vai trò như một màng lọc tự động, nhận diện chính xác các trường hợp Not Entailment với độ chính xác đạt $84.90%$.
  3. Kỹ thuật Tinh giản Ngữ cảnh (Mini-Context Optimization): Việc loại bỏ $30%$ khối lượng văn bản không mang thông tin giúp giảm độ phức tạp tính toán của cơ chế Self-Attention từ $O(N^2)$ xuống mức tối ưu hơn, đồng thời cải thiện chỉ số F1-Score thêm +5.44% và EM thêm +5.43%.
  4. Đóng góp bộ dữ liệu ViQA2D chất lượng cao: Xử lý triệt để các lỗi dịch thuật đặc thù trong tiếng Việt (như nhầm lẫn đại từ nhân xưng he/she thành Anh/Ông/Cô và sai lệch tên riêng NNP) bằng giải pháp kết hợp POS-tagging, tạo ra 20,684 mẫu QA-to-Declarative phục vụ cộng đồng nghiên cứu mã nguồn mở.

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

Tình huống ứng dụng thực tế (Real-World Use Cases)

  • Hệ sinh thái Trợ lý ảo Y tế & Chăm sóc sức khỏe: Tích hợp trên dữ liệu UIT-ViNewsQA giúp các chatbot y tế không cung cấp thông tin sai lệch khi bệnh nhân đặt câu hỏi ngoài phạm vi y khoa có sẵn trong tài liệu chuyên môn.
  • Hệ thống Tra cứu Pháp lý & Hành chính công: Giúp cán bộ và người dân tra cứu văn bản luật chính xác, tự động loại trừ các văn bản quy phạm không liên quan và cảnh báo nếu điều khoản không chứa căn cứ trả lời.
  • Bộ máy Tìm kiếm Doanh nghiệp (Enterprise Search Engine): Rút gọn văn bản báo cáo nội bộ dài hàng chục trang thành các đoạn mini-context súc tích trước khi đưa vào mô hình tổng hợp thông tin.

Chiến lược triển khai (Deployment Architecture)

  • Hạ tầng khuyến nghị: Server chạy GPU NVIDIA T4 hoặc A10 (VRAM $\ge 16\text{GB}$), 8 vCPU, 32GB RAM.
  • Đóng gói dịch vụ: Đóng gói pipeline thành các Docker container riêng biệt (Container 1: ViT5 Hypothesis Generator, Container 2: SBERT Sentence Ranker, Container 3: PhoBERT-NLI Classifier).
  • Giao tiếp API: RESTful API hoặc gRPC để đảm bảo độ trễ phản hồi $< 450\text{ms}$ cho mỗi truy vấn đầu cuối.

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

Hạn chế kỹ thuật

  • Sự phụ thuộc vào chất lượng sinh giả thuyết: Nếu mô hình ViT5 sinh câu giả thuyết không chuẩn xác về mặt ngữ pháp tiếng Việt, bước so khớp SBERT và NLI ở các tầng sau sẽ bị suy giảm hiệu năng theo hiệu ứng dây chuyền (error propagation).
  • Độ trễ Pipeline: Việc kết hợp tuần tự 3 mô hình (QA $\rightarrow$ ViT5 $\rightarrow$ SBERT $\rightarrow$ NLI) tạo ra chi phí tính toán cao hơn so với mô hình End-to-End đơn lẻ.

Hướng phát triển trong tương lai

  • Hợp nhất mô hình (End-to-End Joint Training): Tích hợp trực tiếp hàm mất mát (Loss function) của NLI vào quá trình huấn luyện MRC để tối ưu hóa đồng thời cả hai tác vụ mà không cần tách rời pipeline.
  • Mở rộng sang Abstractive QA: Nghiên cứu áp dụng NLI để xác minh tính trung thực (Fact-checking / Hallucination Detection) cho các mô hình ngôn ngữ lớn (LLMs) tạo sinh văn bản tự do tiếng Việt.

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


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

1. Yêu cầu phần cứng tối thiểu để triển khai pipeline này là gì?

Hệ thống yêu cầu máy chủ có GPU hỗ trợ CUDA với dung lượng tối thiểu 8GB VRAM (như NVIDIA GTX 1080Ti hoặc RTX 3060) cho môi trường kiểm thử (Inference) và tối thiểu 16GB VRAM (như NVIDIA T4 / V100 / A10) cho môi trường huấn luyện (Fine-tuning). Dung lượng RAM hệ thống tối thiểu là 16GB và bộ nhớ lưu trữ SSD 50GB.

2. Làm thế nào để giải quyết vấn đề tăng độ trễ khi chạy qua nhiều mô hình liên tiếp?

Trong môi trường Production, có thể áp dụng các giải pháp tối ưu hóa như: (1) Lượng tử hóa mô hình (Model Quantization: FP16 hoặc INT8 qua ONNX Runtime / TensorRT); (2) Sử dụng cơ chế suy luận bất đồng bộ (Asynchronous Batching); (3) Áp dụng phương pháp Tri thức chưng cất (Knowledge Distillation) để nén PhoBERT-Large và ViT5-Base thành các phiên bản gọn nhẹ hơn mà vẫn giữ $95%$ độ chính xác.

3. Tại sao lại chọn tỷ lệ rút gọn ngữ cảnh là 70% mà không phải con số khác?

Tỷ lệ $70%$ được rút ra từ các thực nghiệm khảo sát độ nhạy tham số trên tập Dev của UIT-ViQuAD 1.0. Khi giữ lại dưới $50%$, nguy cơ làm mất câu chứa đáp án gốc tăng lên khiến F1-Score sụt giảm. Khi giữ lại trên $80%$, lượng thông tin nhiễu vẫn còn nhiều, không mang lại cải thiện rõ rệt cho chỉ số Exact Match.

4. Hệ thống có khả năng tích hợp vào các nền tảng Chatbot sẵn có không?

Có. Nhờ thiết kế theo dạng module hóa chuẩn mực, hệ thống có thể đóng vai trò như một lớp Middleware Verification (Middleware xác thực tri thức) đứng giữa mô hình sinh văn bản của Chatbot và cơ sở dữ liệu tri thức (Knowledge Base) thông qua giao diện REST API.

5. Dữ liệu ViQA2D có thể áp dụng cho các tác vụ nào khác ngoài MRC?

Bên cạnh việc sinh câu giả thuyết cho NLI và MRC, tập dữ liệu ViQA2D có thể được sử dụng trực tiếp cho các bài toán: Tự động hoàn thiện câu (Sentence Completion), Sinh câu hỏi ngược từ câu trần thuật (Question Generation), và Huấn luyện các mô hình kiểm tra ngữ pháp tiếng Việt.


Kết luận

Đồ án khóa luận tốt nghiệp "Tích hợp suy luận ngôn ngữ tự nhiên trong mô hình đọc hiểu tự động" đã giải quyết thành công điểm nghẽn lớn trong bài toán MRC tiếng Việt: Nâng cao độ chính xác và độ tin cậy của câu trả lời thông qua cơ chế suy luận NLI và tinh giản ngữ cảnh thông minh. Với việc đóng góp bộ dữ liệu chuẩn ViQA2D (20,684 mẫu), mô hình phân loại NLI đạt độ chính xác 85.68% và giúp cải thiện chỉ số F1-Score của mô hình đọc hiểu thêm +5.44%, nghiên cứu đã khẳng định tính khả thi và giá trị ứng dụng thực tiễn cao trong việc phát triển các hệ thống trí tuệ nhân tạo xử lý ngôn ngữ tiếng Việt chuyên sâu.