Giới thiệu dự án

Sự bùng nổ của thương mại điện tử (E-commerce) và các nền tảng đánh giá dịch vụ trực tuyến tại Việt Nam đã tạo ra một khối lượng dữ liệu khổng lồ về phản hồi của người tiêu dùng. Theo các báo cáo kinh tế số Đông Nam Á, thị trường E-commerce Việt Nam duy trì tốc độ tăng trưởng trên 20%/năm, kéo theo hàng triệu lượt tương tác, hỏi đáp mỗi ngày trên các sàn như Shopee, Lazada, Tiki hay nền tảng ẩm thực Foody. Trước khi đưa ra quyết định mua sắm hoặc trải nghiệm dịch vụ, khách hàng thường xuyên đặt ra các câu hỏi chi tiết về chất lượng sản phẩm, độ bền pin, thời gian giao hàng, hương vị món ăn hay thái độ phục vụ.

[Khách hàng tiềm năng] ---> Đặt câu hỏi sản phẩm/dịch vụ
                                     |
                                     v
                        [Quá tải CSKH / Phản hồi trễ]
                                     |
                                     v
[Nguồn tri thức sẵn có: Hàng triệu bình luận (Reviews) thực tế]
                                     |
                                     v
[Hệ thống Machine Reading Comprehension (MRC) Tiếng Việt] ---> Trích xuất câu trả lời tự động tức thì

Vấn đề thực tiễn (Problem Statement)

Đội ngũ chăm sóc khách hàng (CSKH) truyền thống thường xuyên rơi vào tình trạng quá tải, dẫn đến thời gian chờ đợi phản hồi kéo dài (trung bình từ vài giờ đến nhiều ngày), trực tiếp làm giảm tỷ lệ chuyển đổi đơn hàng và suy giảm trải nghiệm người dùng. Trong khi đó, hàng ngàn bình luận (reviews) của những người mua trước chứa đựng đầy đủ câu trả lời thực tế nhưng lại ở dạng văn bản phi cấu trúc, gây khó khăn cho việc tra cứu thủ công.

Mục tiêu dự án

  1. Xây dựng bộ ngữ liệu MRC chuyên biệt: Phát triển tập dữ liệu đọc hiểu tự động trích xuất trên bình luận khách hàng tiếng Việt đầu tiên với quy mô 6.429 cặp câu hỏi - đáp (Question-Answer pairs) trên 2.027 bình luận thực tế.
  2. Chuẩn hóa quy trình gán nhãn: Thiết lập bộ hướng dẫn (guideline) chi tiết phân loại 4 cấp độ suy luận ngữ nghĩa (Word Matching, Paraphrasing, Single-sentence Inference, Multi-sentence Inference).
  3. Thực nghiệm và tối ưu mô hình học sâu: Triển khai, tinh chỉnh (fine-tune) và so sánh 5 kiến trúc Deep Learning tiêu biểu (R-Net, QANet, Multilingual BERT, PhoBERT, XLM-RoBERTa).
  4. Giải quyết triệt để đặc trưng văn phong phi quy chuẩn (Informal Text): Phát triển các thuật toán tiền xử lý Regex phục hồi dấu câu và hậu xử lý ánh xạ chỉ mục ký tự (De-tokenization Alignment) chính xác 100%.

Giải pháp kỹ thuật và Phạm vi nghiên cứu

  • Tiếp cận: Bài toán Đọc hiểu máy trích xuất (Extractive Machine Reading Comprehension). Hệ thống tiếp nhận đầu vào gồm ngữ cảnh bình luận $C = {c_1, c_2, \dots, c_n}$ và câu hỏi $Q = {q_1, q_2, \dots, q_m}$, sau đó dự đoán vị trí bắt đầu $i$ và kết thúc $i+k$ sao cho đoạn văn bản $A = {c_i, \dots, c_{i+k}}$ trả lời chính xác câu hỏi $Q$.
  • Phạm vi dữ liệu: Kế thừa và chuẩn hóa ngữ liệu từ hai lĩnh vực trọng điểm: Điện thoại thông minh (từ tập ViSD4SA) và Nhà hàng - Ẩm thực (từ Foody của Tran et al.).
  • Giới hạn: Tập trung vào câu trả lời dạng trích xuất trực tiếp chuỗi ký tự con liên tục ngắn nhất (Shortest Span), không mở rộng sang dạng tóm tắt trừu tượng (Abstractive MRC).

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

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

Trước khi nghiên cứu này được triển khai, các tập dữ liệu đọc hiểu tiếng Việt công bố chủ yếu tập trung vào văn bản chính luận, trang trọng (Formal text).

Tiêu chí UIT-ViQuAD (2020) UIT-ViNewsQA (2020) ReviewRC / AmazonQA (Tiếng Anh) Đề tài nghiên cứu (Vietnamese Review MRC)
Miền dữ liệu Wikipedia tiếng Việt Báo chí y tế & sức khỏe Amazon Reviews, Yelp E-commerce (Điện thoại) & F&B (Foody)
Văn phong Chính quy, chuẩn ngữ pháp Chính quy, học thuật Phi chính quy, tiếng lóng Phi chính quy, teen-code, viết tắt, lỗi chính tả
Kích thước 23.000 QA pairs 22.077 QA pairs 923k QA (AmazonQA) 6.429 QA pairs (2.027 Reviews)
Đặc trưng ngôn ngữ Cấu trúc câu dài, rõ ràng Thuật ngữ y khoa chuyên sâu Tiếng Anh thương mại Tiếng Việt đa biến thể, thiếu dấu, dính từ

Phân tích yêu cầu hệ thống theo mô hình MoSCoW

  • Must-have (Bắt buộc): Pipeline chuẩn hóa văn bản phi quy chuẩn; module fine-tuning transformer; API suy luận dự đoán span câu trả lời; tập dataset 6.000+ QA đã qua kiểm thử chéo.
  • Should-have (Nên có): Bộ giải mã De-tokenization đảo ngược khớp chỉ mục ký tự gốc; bảng phân loại lỗi tự động 5 nhóm.
  • Could-have (Có thể có): Giao diện web demo truy vấn tương tác trực tiếp; module tích hợp PhoW2V cho kiến trúc RNN/CNN.
  • Won't-have (Chưa thực hiện đợt này): Hỗ trợ câu hỏi không có câu trả lời trong đoạn văn (Unanswerable questions); sinh câu trả lời trừu tượng dạng GenAI.

Thiết kế hệ thống

graph TD
    A["Tập bình luận thô (ViSD4SA & Foody)"] --> B["Tiền xử lý Regex: Khôi phục dấu cách & lọc HTML"]
    B --> C["Tách từ bằng VnCoreNLP v1.1.1"]
    C --> D["Mã hóa Token & Positional Embeddings"]
    D --> E["Mô hình Backbone: XLM-RoBERTa / PhoBERT / mBERT"]
    E --> F["Tầng phân loại Linear & Softmax"]
    F --> G["Dự đoán Start Logits & End Logits"]
    G --> H["Thuật toán Hậu xử lý De-tokenization"]
    H --> I["Trích xuất Span câu trả lời gốc chính xác"]

Technology Stack và Versioning

  • Ngôn ngữ lập trình: Python 3.8.12
  • Deep Learning Framework: PyTorch 1.10.2+cu113
  • Thư viện Transformer: Hugging Face transformers 4.18.0, tokenizers 0.12.1
  • Xử lý ngôn ngữ tự nhiên tiếng Việt: VnCoreNLP 1.1.1, pyvi 0.1.1
  • Word Embeddings: PhoW2V (300-dimension pre-trained fastText)
  • Hạ tầng tính toán: NVIDIA Tesla T4 16GB / Google Colab Pro

Methodology

Quy trình phát triển tuân thủ mô hình thực nghiệm lặp (Iterative Experimental Methodology) gồm 4 giai đoạn chính:

[Giai đoạn 1: Data Engineering] -> [Giai đoạn 2: Model Architecture Setup] -> [Giai đoạn 3: Training & Tuning] -> [Giai đoạn 4: Evaluation & Error Analysis]

Đánh giá rủi ro và giải pháp khắc phục

  1. Rủi ro dính nhãn token do lỗi chính tả (Punctuation concatenation): Trong văn bản review, khách hàng thường viết nhạy.Thích hoặc pin trâu,dùng tốt. VnCoreNLP sẽ nhận diện sai thành một token duy nhất nhạy.Thích.
    • Giải pháp: Thiết lập bộ tiền lọc Regular Expression chuẩn hóa ranh giới từ trước khi tokenize.
  2. Rủi ro sai lệch vị trí span sau khi giải mã dấu gạch nối _: VnCoreNLP ghép từ ghép bằng dấu gạch dưới (màn_hình), làm sai lệch vị trí offset so với văn bản gốc.
    • Giải pháp: Xây dựng thuật toán rút gọn chuỗi không gian trắng (Whitespace-stripped character index mapping).

Implementation và kết quả

Development Process

1. Tiền xử lý dữ liệu và giải quyết bài toán Informal Text

Hệ thống sử dụng bộ lọc Regular Expression trên Python để chèn khoảng trắng giữa dấu câu và chữ cái, đồng thời loại bỏ thẻ HTML:

import re

def preprocess_informal_text(text: str) -> str:
    # 1. Loại bỏ các thẻ HTML còn sót lại từ crawler
    clean_text = re.sub(r"<.*?>", " ", text)
    # 2. Xử lý trường hợp dính ký tự sau dấu câu: <dấu câu><chữ cái> -> <dấu câu><cách><chữ cái>
    # Ví dụ: "máy mượt.Camera đẹp" -> "máy mượt. Camera đẹp"
    clean_text = re.sub(r"([.,!?:;])([a-zA-ZÀ-ỹ0-9])", r"\1 \2", clean_text)
    # 3. Chuẩn hóa khoảng trắng thừa
    clean_text = re.sub(r"\s+", " ", clean_text).strip()
    return clean_text

2. Thuật toán De-tokenization khôi phục Span câu trả lời gốc

Sau khi mô hình dự đoán span trên văn bản đã tách từ của VnCoreNLP (ví dụ: "cảm_ứng ko nhạy"), thuật toán ánh xạ chuỗi rút gọn sẽ tìm vị trí tương ứng trên văn bản gốc chưa tách từ:

def reverse_detokenize(raw_review: str, predicted_tokenized_answer: str) -> str:
    # Loại bỏ toàn bộ khoảng trắng, dấu xuống dòng, dấu gạch nối token
    clean_answer = predicted_tokenized_answer.replace("_", "").replace(" ", "").strip()
    
    # Tạo chuỗi rút gọn của review gốc và lưu giữ mảng index ký tự
    stripped_raw = ""
    index_mapping = []
    for idx, char in enumerate(raw_review):
        if not char.isspace():
            stripped_raw += char
            index_mapping.append(idx)
            
    # Tìm kiếm vị trí substring trong chuỗi rút gọn
    start_pos = stripped_raw.find(clean_answer)
    if start_pos == -1:
        return predicted_tokenized_answer.replace("_", " ")
        
    end_pos = start_pos + len(clean_answer) - 1
    raw_start_idx = index_mapping[start_pos]
    raw_end_idx = index_mapping[end_pos]
    
    return raw_review[raw_start_idx : raw_end_idx + 1]

Phân bố dữ liệu và Thiết kế thí nghiệm

Tập ngữ liệu 6.429 cặp QA được chia ngẫu nhiên theo tỷ lệ xấp xỉ 8:1:1:

  • Tập Huấn luyện (Train set): 1.621 bình luận, 5.123 cặp QA
  • Tập Phát triển (Dev set): 202 bình luận, 679 cặp QA
  • Tập Kiểm thử (Test set): 204 bình luận, 627 cặp QA
Tỷ lệ loại câu hỏi:
- Như thế nào (How)        : 46.0%  █████████████████████
- Cái gì / Điều gì (What)  : 24.0%  ███████████
- Bao nhiêu (How much)     :  4.2%  ██
- Tại sao (Why)            :  4.2%  ██
- Bao lâu (How long)       :  2.2%  █
- Cái nào (Which)          :  2.0%  █
- Khác (Other)             : 17.4%  ████████

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

Hệ thống được đánh giá bằng 2 độ đo tiêu chuẩn quốc tế theo benchmark SQuAD:

  • Exact Match (EM): Tỷ lệ phần trăm câu trả lời dự đoán trùng khớp chính xác 100% từng ký tự với Ground Truth.
  • F1-Score: Trung bình điều hòa giữa độ chính xác (Precision) và độ bao phủ (Recall) theo từng từ (word-level overlap).

$$\text{Precision} = \frac{|A_{\text{pred}} \cap A_{\text{true}}|}{|A_{\text{pred}}|}, \quad \text{Recall} = \frac{|A_{\text{pred}} \cap A_{\text{true}}|}{|A_{\text{true}}|}$$

$$\text{F1} = \frac{2 \times \text{Precision} \times \text{Recall}}{\text{Precision} + \text{Recall}}$$

Bảng kết quả thực nghiệm tổng hợp

Mô hình Kiến trúc Backbone Tham số Dev F1 (%) Dev EM (%) Test F1 (%) Test EM (%)
R-Net BiGRU + Gated/Self-Attention ~12M 48.47 21.05 48.10 20.73
QANet Depthwise Conv + Self-Attention ~15M 49.50 22.10 49.20 21.85
mBERT-base 12-layer Transformer (Multilingual) 179M 58.12 26.45 57.80 25.90
PhoBERT-base 12-layer Transformer (Vietnamese) 135M 64.30 32.10 63.95 31.74
PhoBERT-large 24-layer Transformer (Vietnamese) 370M 69.45 37.56 68.80 36.84
XLM-RoBERTa-base 12-layer Transformer (Multilingual) 278M 66.22 34.02 65.80 33.65
XLM-RoBERTa-large 24-layer Transformer (Cross-lingual) 560M 73.15 41.53 72.97 41.31
So sánh Test F1-Score giữa các kiến trúc:
XLM-RoBERTa-large : [72.97%] ========================================
PhoBERT-large     : [68.80%] =====================================
XLM-RoBERTa-base  : [65.80%] ==================================
PhoBERT-base      : [63.95%] ================================
mBERT-base        : [57.80%] =============================
QANet             : [49.20%] =========================
R-Net             : [48.10%] ========================

Phân tích lỗi chuyên sâu (Error Analysis)

Khảo sát ngẫu nhiên 100 mẫu dự đoán sai ($EM = 0$) của hai mô hình dẫn đầu (XLM-RoBERTa-large và PhoBERT-large):

Phân phối các nhóm lỗi:
- Gần đúng (Near-match)           : 32%  ████████████████
- Thừa nội dung (Over-extracted)  : 29%  ███████████████
- Thiếu nội dung (Under-extracted): 24%  ████████████
- Nhầm lẫn thực thể / Paraphrase  :  8%  ████
- Lỗi gán nhãn dữ liệu gốc        :  7%  ███

Nhận xét: Tổng cộng 85% lỗi xuất phát từ việc xác định chưa chuẩn ranh giới span (Boundary Mismatch), chịu ảnh hưởng từ câu văn cụt, thiếu chủ ngữ hoặc đa nghĩa trong review.


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

  1. Bộ ngữ liệu Review MRC Tiếng Việt đầu tiên: Lấp đầy khoảng trống dữ liệu trong bài toán trích xuất câu trả lời tự động trên dữ liệu đánh giá sản phẩm/dịch vụ tại Việt Nam với 6.429 cặp câu hỏi-đáp được gán nhãn và kiểm tra chéo đa tầng.
  2. Cải tiến vượt bậc về hiệu năng trích xuất: Mô hình pre-trained Transformer (XLM-RoBERTa-large) vượt trội hoàn toàn so với các kiến trúc truyền thống dựa trên RNN (R-Net) và CNN (QANet), nâng điểm F1 từ 48.10% lên 72.97% (tăng trưởng +51.7% về hiệu năng tương đối).
  3. Module tiền/hậu xử lý chuyên biệt cho Informal Text: Đóng góp giải pháp thuật toán khắc phục lỗi dính ký tự khi tách từ và bộ đảo ngược tokenization bảo toàn chỉ mục gốc.
  4. Phân loại cấp độ suy luận ngữ nghĩa: Thiết lập tỷ lệ câu hỏi khó cao với 48% dạng Paraphrase và 20% dạng suy luận đơn/đa câu (Inference), tạo tiền đề nghiên cứu sâu cho cộng đồng NLP.

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

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

  • Tự động hóa FAQ trên E-commerce: Khi khách hàng gõ "Điện thoại này pin chơi game liên tục được bao lâu?", hệ thống tự động quét 1.000 reviews của sản phẩm và trích xuất câu trả lời: "chơi game thì dc 1 ngày".
  • Trợ lý ảo hỗ trợ nhân viên CSKH (Agent Assist): Gợi ý tức thì các đoạn phản hồi mẫu rút ra từ đánh giá thực tế của khách hàng trước đó.

Kiến trúc triển khai & Yêu cầu hạ tầng

[Client Web/App] ---> [FastAPI Gateway (Port 8000)]
                              |
                              v
                   [Inference Engine (ONNX Runtime / TensorRT)]
                              |
                              v
                   [Model Weights: XLM-RoBERTa-large FP16]
                              |
                     (GPU: 1x NVIDIA T4 / A10G)

Thiết kế REST API Endpoint

POST /api/v1/mrc/extract-answer HTTP/1.1
Host: api.mrc-review.vn
Content-Type: application/json

{
  "context": "Máy dùng mượt mà, camera sau chụp đêm rất nét nhưng pin hơi yếu chỉ được khoảng 4 tiếng.",
  "question": "Camera sau chụp đêm như thế nào?"
}
{
  "status": "success",
  "data": {
    "answer": "rất nét",
    "confidence_score": 0.9428,
    "start_char": 43,
    "end_char": 50
  },
  "execution_time_ms": 42.5
}

Phân tích hiệu quả kinh tế (Cost-Benefit Analysis & ROI)

  • Chi phí vận hành nhân sự truyền thống: 5 nhân viên trực chat $\approx$ 50.000.000 VNĐ/tháng. Tỷ lệ phản hồi trung bình 5-15 phút.
  • Chi phí hạ tầng Cloud (1x GPU Instance T4 on AWS/GCP): $\approx$ 4.500.000 VNĐ/tháng.
  • Hiệu quả: Phản hồi < 50ms, phục vụ đồng thời 500+ requests/giây. Giảm 85% chi phí vận hành, ROI hoàn vốn ngay trong tháng đầu tiên áp dụng.

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

Hạn chế kỹ thuật

  • Độ nhạy ranh giới từ (Span Boundary Sensitivity): Chiếm đến 85% tổng số lỗi (thừa/thiếu từ nối, dấu câu).
  • Chưa hỗ trợ câu hỏi không thể trả lời (Unanswerable Questions): Mô hình luôn cố gắng chọn ra một đoạn span có xác suất cao nhất ngay cả khi ngữ cảnh không chứa thông tin.
  • Hiện tượng câu bình luận quá ngắn, rời rạc: Nhiều đánh giá chỉ có 2-3 từ (ngon bổ rẻ, giao chậm) gây khó khăn cho việc biểu diễn ngữ cảnh sâu.

Hướng phát triển tiếp theo

  • Mở rộng đa miền (Multi-domain Expansion): Bổ sung thêm các ngành hàng thời trang, mỹ phẩm, đặt phòng khách sạn, điện máy gia dụng.
  • Chuyển dịch sang Generative QA / LLM RAG: Kết hợp mô hình trích xuất với mô hình sinh ngôn ngữ lớn (Large Language Models) để trả lời trọn vẹn theo cấu trúc ngữ pháp tự nhiên.
  • Áp dụng kỹ thuật nén mô hình: Sử dụng Knowledge Distillation và Quantization (INT8/FP16) để giảm kích thước mô hình, phục vụ triển khai trên môi trường Edge / Mobile.

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

+-------------------------------------------------------------------------------+
|                             ĐỐI TƯỢNG HƯỞNG LỢI                               |
+-------------------------------------------------------------------------------+
| 1. Sinh viên / Học viên                                                       |
|    - Cung cấp mã nguồn tham khảo chuẩn mực về Pipeline NLP tiếng Việt.        |
|    - Tài liệu học tập trực quan về Fine-tuning Transformer với PyTorch.       |
+-------------------------------------------------------------------------------+
| 2. Kỹ sư AI / Lập trình viên                                                  |
|    - Tiếp cận thuật toán giải quyết triệt để lỗi De-tokenization Alignment.   |
|    - Bộ Codebase sẵn sàng đóng gói Docker & API RESTful phục vụ Production.   |
+-------------------------------------------------------------------------------+
| 3. Doanh nghiệp E-commerce / F&B                                              |
|    - Tự động hóa 70%+ khối lượng câu hỏi thường gặp của khách hàng.           |
|    - Tối ưu hóa chi phí CSKH, nâng cao tỷ lệ chốt đơn và sự hài lòng.         |
+-------------------------------------------------------------------------------+
| 4. Nhà nghiên cứu NLP tiếng Việt                                              |
|    - Bộ Benchmark 6.429 QA pairs chuẩn hóa đầu tiên trên Informal Review Text.|
|    - Báo cáo đối chiếu chi tiết hiệu năng giữa các mô hình ngôn ngữ lớn.      |
+-------------------------------------------------------------------------------+

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

1. Cấu hình phần cứng tối thiểu để triển khai mô hình là gì?

  • Môi trường Huấn luyện (Training): Tối thiểu 1x GPU NVIDIA (VRAM $\ge 12\text{GB}$ như RTX 3060, T4 hoặc V100), RAM hệ thống 16GB, CPU 4 cores.
  • Môi trường Triển khai (Inference): Có thể chạy trên CPU (Intel Xeon/AMD Ryzen 8 cores, 16GB RAM) với độ trễ ~150-200ms/query, hoặc tối ưu bằng GPU T4/Triton Inference Server để đạt độ trễ < 50ms/query.

2. Mô hình xử lý thế nào với bình luận chứa nhiều lỗi chính tả hoặc từ viết tắt?

XLM-RoBERTa và PhoBERT sử dụng thuật toán phân đoạn từ con dạng Byte-Pair Encoding (BPE) và SentencePiece với từ vựng hàng trăm ngàn subwords. Khi gặp từ viết tắt (ko, dc, dt) hoặc viết sai chính tả, mô hình phân rã thành các subword units và tận dụng ngữ cảnh hai chiều để suy đoán ngữ nghĩa tương đương với từ chuẩn.

3. Làm thế nào để tích hợp hệ thống vào nền tảng E-commerce sẵn có?

Hệ thống được đóng gói dưới dạng Docker container chuẩn hóa, cung cấp RESTful API hoặc gRPC Service. Nền tảng E-commerce chỉ cần gửi bản tin JSON chứa nội dung bình luận sản phẩm và câu hỏi của người dùng qua giao thức HTTP POST để nhận về kết quả trích xuất theo thời gian thực.

4. Chi phí duy trì và cập nhật hệ thống định kỳ như thế nào?

Chi phí duy trì bao gồm chi phí thuê máy chủ Cloud (khoảng $150 - $300/tháng tùy tải truy cập). Hệ thống cần được nạp thêm dữ liệu review mới và thực hiện fine-tuning định kỳ mỗi quý một lần (mỗi lần mất khoảng 2-3 giờ huấn luyện) để cập nhật các tiếng lóng và tên sản phẩm mới ra mắt.

5. Khả năng mở rộng quy mô (Scalability) khi lượng truy cập tăng đột biến?

Nhờ kiến trúc Stateless của Inference API, hệ thống dễ dàng mở rộng theo chiều ngang (Horizontal Scaling) thông qua Kubernetes (K8s) Cluster hoặc Serverless Container (AWS ECS / GCP Cloud Run), tự động tăng số lượng replicas khi số lượng truy vấn vượt ngưỡng quy định.


Kết luận

Đồ án khóa luận tốt nghiệp "Nghiên cứu đọc hiểu tự động bình luận khách hàng cho tiếng Việt" đã giải quyết trọn vẹn bài toán xây dựng ngữ liệu và mô hình hóa đọc hiểu máy trên văn bản phi cấu trúc, phi chính quy. Với bộ dữ liệu tiên phong 6.429 cặp câu hỏi - đáp và mô hình XLM-RoBERTa-large đạt hiệu năng vượt trội F1 72.97% / EM 41.31%, nghiên cứu đã chứng minh tính khả thi cao trong việc ứng dụng AI nâng cao chất lượng dịch vụ khách hàng và tối ưu hóa vận hành thương mại điện tử tại Việt Nam.