Giới thiệu dự án

Trong kỷ nguyên chuyển đổi số và tự động hóa quy trình nghiệp vụ (Robotic Process Automation - RPA), việc số hóa và khai thác dữ liệu từ chứng từ bán lẻ đóng vai trò chiến lược trong các bài toán quản trị tài chính, tiếp thị cá nhân hóa và quản lý chuỗi cung ứng. Theo các thống kê từ ngành công nghệ tài chính (FinTech) và bán lẻ, hàng tỷ hóa đơn mua sắm được phát hành mỗi ngày, mang lại nguồn dữ liệu hành vi khổng lồ. Tuy nhiên, phần lớn các ứng dụng khách hàng thân thiết tại Việt Nam (như Reward+ tại Estella Place và Saigon Centre) vẫn áp dụng quy trình trích xuất bán thủ công, khiến thời gian xử lý và đối soát thông tin kéo dài từ 5 đến 10 ngày, tiêu tốn chi phí nhân công và ảnh hưởng trực tiếp đến trải nghiệm người dùng cuối.

graph LR
    A["Ảnh hóa đơn thực tế (UIT-ReceiptsInTheWild)"] --> B["Phát hiện văn bản (CRAFT)"]
    B --> C["Nhận diện chữ tiếng Việt (VietOCR / Transformer)"]
    C --> D["Trích xuất thông tin (PICK Multimodal GCN)"]
    D --> E["Thực thể có cấu trúc: Company, Address, Date, Total"]

Vấn đề và mục tiêu nghiên cứu

Xử lý tài liệu trực quan phong phú (Visually Rich Documents - VRD) tại Việt Nam gặp nhiều rào cản do chất lượng chụp ảnh thực tế không đồng nhất (ảnh bị mờ, lóa sáng, nhàu nát, phông chữ biến thể, tiếng Việt có dấu phức tạp) và thiếu hụt các tập dữ liệu chuẩn hóa cho tiếng Việt. Dự án tập trung giải quyết các mục tiêu cụ thể:

  1. Xây dựng tập dữ liệu chuẩn: Thu thập và gán nhãn tập dữ liệu UIT-ReceiptsInTheWild (514 ảnh hóa đơn thực tế tại Việt Nam) cho cả 3 bài toán: Text Detection, Text Recognition và Key Information Extraction (KIE).
  2. Thiết kế pipeline tích hợp chuyên sâu: Kết hợp mô hình mạng nơ-ron tích chập phát hiện vùng ký tự CRAFT (Character Region Awareness for Text Detection), mô hình nhận diện chữ tiếng Việt VietOCR dựa trên Transformer, và mạng tích chập đồ thị học cấu trúc tự thích ứng PICK (Processing Key Information Extraction from Documents using Improved Graph Learning-Convolutional Networks).
  3. Triển khai ứng dụng thực nghiệm: Xây dựng hệ thống web demo cho phép trích xuất 4 trường thông tin quan trọng (company, address, date, total) trong thời gian thực dưới 2 giây/hóa đơn.

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

Hệ thống tập trung xử lý các hóa đơn bán lẻ dạng cuộn/biên lai in nhiệt bằng tiếng Việt và tiếng Anh chụp bằng thiết bị di động trong điều kiện ánh sáng tự nhiên. Giới hạn hiện tại chưa hỗ trợ các loại hóa đơn giá trị gia tăng (GTGT) khổ A4 nhiều trang có cấu trúc bảng biểu lồng ghép phức tạp.


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

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

Các phương pháp trích xuất dữ liệu hóa đơn truyền thống bộc lộ nhiều điểm yếu khi đối mặt với bố cục linh hoạt và hình ảnh chụp trong môi trường tự nhiên:

Phương pháp tiếp cận Ưu điểm Nhược điểm Khả năng tổng quát hóa
Dựa trên mẫu (Template-based) Tốc độ xử lý nhanh, độ chính xác cao trên mẫu cố định. Không xử lý được mẫu mới; thất bại khi hóa đơn bị co giãn, nghiêng. Rất thấp (Cần định nghĩa lại mẫu thủ công).
Dựa trên NLP thuần túy (NER-based) Nhận diện thực thể ngữ nghĩa tốt trên văn bản chuẩn. Mất hoàn toàn cấu trúc không gian (2D visual/spatial layout); phụ thuộc OCR phẳng. Trung bình (Kém trên bố cục 2D phức tạp).
Đồ thị đa phương thức (Multimodal GCN - PICK) Tích hợp đồng thời đặc trưng văn bản, hình thái học và quan hệ vị trí 2D. Độ phức tạp mô hình cao, yêu cầu tối ưu hóa ma trận kề $A$. Rất cao (SOTA trên tài liệu VRD)

Phân loại yêu cầu theo mô hình MoSCoW

  • Must Have: Nhận diện và phát hiện văn bản tiếng Việt có dấu đầy đủ; trích xuất chính xác 4 trường thực thể cốt lõi (company, address, date, total); cung cấp giao diện tương tác tải ảnh và hiển thị JSON kết quả.
  • Should Have: Cơ chế tự động tinh chỉnh ma trận quan hệ giữa các vùng văn bản bằng Graph Learning Loss; xử lý văn bản cong/nghiêng bằng đa giác phân đoạn.
  • Could Have: Khả năng tự sửa lỗi chính tả từ vựng tiếng Việt sau bước OCR; xuất dữ liệu trực tiếp ra cơ sở dữ liệu quan hệ.
  • Won't Have (Giai đoạn này): Tính năng nhận diện chữ viết tay ghi chú thêm trên hóa đơn; tự động tính toán lại tổng tiền các dòng hàng chi tiết.

Thiết kế hệ thống

flowchart TD
    subgraph Input_Stage ["1. Tiền xử lý & Phát hiện"]
        IMG["Ảnh hóa đơn đầu vào"] --> CRAFT["CRAFT (VGG16-BN U-Net)"]
        CRAFT --> BBOX["Bounding Boxes & Affinities"]
    end

    subgraph Recognition_Stage ["2. Nhận diện chữ tiếng Việt"]
        BBOX --> CROP["Cắt lát phân đoạn văn bản"]
        CROP --> VIETOCR["VietOCR (Transformer Encoder-Decoder)"]
        VIETOCR --> TEXTS["Văn bản Unicode tiếng Việt"]
    end

    subgraph Extraction_Stage ["3. Trích xuất đa phương thức (PICK)"]
        TEXTS --> ENC_T["Text Encoder (Transformer)"]
        CROP --> ENC_I["Image Encoder (ResNet-50)"]
        ENC_T & ENC_I --> FUSION["Biểu diễn nút X = TE + IE"]
        FUSION --> GL["Graph Learning Layer (Học ma trận kề A)"]
        GL --> GCN["Graph Convolution (Tổng hợp Node-Edge-Node)"]
        GCN --> DECODER["BiLSTM + CRF Sequence Tagging"]
    end

    DECODER --> OUTPUT["JSON Entities (Company, Address, Date, Total)"]

Technology Stack và phiên bản cụ thể

  • Ngôn ngữ lập trình: Python v3.8.10
  • Deep Learning Framework: PyTorch v1.6.0, Torchvision v0.7.0
  • Text Detection: CRAFT PyTorch Implementation (VGG-16 backbone với Batch Normalization)
  • Text Recognition: VietOCR v0.3.4 (Kiến trúc Transformer với Scaled Dot-Product Attention)
  • KIE Framework: PICK-UIE PyTorch Implementation (ResNet-50 + GCN + BiLSTM-CRF)
  • Computer Vision & Xử lý ảnh: OpenCV v4.4.0, Albumentations v0.4.6
  • Giao diện Web Demo: Gradio v1.1.6

Thiết kế cấu trúc dữ liệu trích xuất (API Schema)

{
  "status": "success",
  "invoice_id": "UIT_RIW_00124",
  "processing_time_ms": 1420,
  "entities": {
    "company": {
      "text": "GUITAR CAFE",
      "confidence": 0.942,
      "polygon": [[54, 42], [280, 42], [280, 85], [54, 85]]
    },
    "address": {
      "text": "28 Phan Chu Trinh, Hiệp Phú, Quận 9",
      "confidence": 0.918,
      "polygon": [[52, 90], [390, 90], [390, 135], [52, 135]]
    },
    "date": {
      "text": "01/10/2020",
      "confidence": 0.975,
      "polygon": [[310, 140], [420, 140], [420, 170], [310, 170]]
    },
    "total": {
      "text": "525,000",
      "confidence": 0.961,
      "polygon": [[290, 480], [410, 480], [410, 520], [290, 520]]
    }
  }
}

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

Dự án áp dụng mô hình phát triển nghiên cứu lặp (Iterative Research & Development) qua 4 mốc then chốt:

  1. Milestone 1 (Tháng 1 - 2): Thu thập dữ liệu, xây dựng công cụ gán nhãn tọa độ đa giác và IOB tags cho hóa đơn tiếng Việt.
  2. Milestone 2 (Tháng 3): Huấn luyện và đánh giá độc lập các mô-đun Text Detection (CRAFT) và Text Recognition (VietOCR).
  3. Milestone 3 (Tháng 4 - 5): Tích hợp kiến trúc đồ thị đa phương thức PICK, hiệu chỉnh hàm mất mát $\mathcal{L}_{GL}$ và lan truyền đồ thị.
  4. Milestone 4 (Tháng 6): Ghép nối toàn bộ pipeline end-to-end, tối ưu hóa tốc độ suy luận (Inference Latency) và đóng gói giao diện Gradio.

Implementation và kết quả

Chi tiết giải thuật và kỹ thuật cốt lõi

1. Phát hiện vùng ký tự với CRAFT

CRAFT dự đoán hai kênh bản đồ xác suất: Region Score (xác suất trung tâm ký tự) và Affinity Score (xác suất liên kết giữa hai ký tự liền kề). Phân phối Gaussian 2D được định nghĩa cho từng hộp ký tự:

$$\mathcal{L}{CRAFT} = \sum{p} S_r(p) \cdot \left( | S_r^(p) - S_r(p) |_2^2 + | S_a^(p) - S_a(p) |_2^2 \right)$$

Trong đó $S_r^(p)$ và $S_a^(p)$ lần lượt là pseudo-ground truth của region score và affinity map. Thuật toán Watershed được áp dụng trên bản đồ nhiệt để tách chính xác từng ký tự độc lập mà không cần neo hộp (anchor-free).

2. Cơ chế chú ý đa đầu trong VietOCR

VietOCR loại bỏ hoàn toàn tính tuần tự chậm chạp của RNN/LSTM truyền thống bằng cơ chế Transformer Attention, cho phép học ngữ cảnh song song toàn câu:

$$\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V$$

Thông tin thứ tự từ ngữ tiếng Việt được bảo toàn thông qua mã hóa vị trí (Positional Encoding):

$$PE_{(pos, 2i)} = \sin\left(\frac{pos}{10000^{2i/d_{model}}}\right), \quad PE_{(pos, 2i+1)} = \cos\left(\frac{pos}{10000^{2i/d_{model}}}\right)$$

3. Mô-đun Graph Learning và GCN trong PICK

Mô hình PICK biểu diễn tài liệu dưới dạng đồ thị $G = (V, R, E)$. Đầu vào mỗi nút $v_i$ là sự kết hợp giữa đặc trưng văn bản $TE$ từ Transformer và đặc trưng hình ảnh $IE$ từ ResNet-50:

$$X_0 = TE + IE \in \mathbb{R}^{N \times d_{model}}$$

Ma trận kề mềm $A$ được tối ưu hóa thông qua hàm mất mát Graph Learning Loss:

$$\mathcal{L}{GL} = \frac{1}{N^2} \sum{i,j} \exp\left(\gamma + |v_i - v_j|2^2\right) \cdot A{ij} + \tau |A|_F^2$$

Quy tắc lan truyền tích chập đồ thị cập nhật vector biểu diễn nút tại tầng $l+1$:

$$v_i^{(l+1)} = \sigma\left( \sum_{j \in \mathcal{N}(i)} A_{ij} h_{ij}^{(l)} W^{(l)} \right)$$

import torch
import torch.nn as nn
import torch.nn.functional as F

class GraphLearningConvolutionModule(nn.Module):
    """
    Mo-dun Graph Learning ket hop Graph Convolutional Network (GCN)
    trien khai tu co che cua kien truc PICK cho trich xuat thong tin VRD.
    """
    def __init__(self, d_model=512, gamma=1.0, tau=0.1):
        super(GraphLearningConvolutionModule, self).__init__()
        self.d_model = d_model
        self.gamma = gamma
        self.tau = tau
        
        # Mang MLP hoc trong so quan he giua cac nut
        self.weight_mlp = nn.Linear(d_model, 1, bias=False)
        self.edge_proj = nn.Linear(6, d_model)  # Vector quan he hinh hoc 2D
        self.node_proj = nn.Linear(d_model, d_model)
        self.gcn_weight = nn.Linear(d_model, d_model, bias=False)
        
    def forward(self, node_features, spatial_edges):
        """
        node_features: (N, d_model) - Dac trung ket hop Text + Visual
        spatial_edges: (N, N, 6) - Khoang cach 2D va ty le khung hinh giua cac bounding boxes
        """
        N = node_features.size(0)
        
        # 1. Graph Learning: Tinh toan ma tran ke mem A_ij
        diff = torch.abs(node_features.unsqueeze(1) - node_features.unsqueeze(0)) # (N, N, d_model)
        edge_energy = F.leaky_relu(self.weight_mlp(diff).squeeze(-1))             # (N, N)
        A = F.softmax(edge_energy, dim=-1)                                       # Ma tran ke chuan hoa
        
        # Tinh Graph Learning Loss (L_GL)
        dist_sq = torch.sum(diff ** 2, dim=-1)
        l_gl = (1.0 / (N * N)) * torch.sum(torch.exp(self.gamma + dist_sq) * A) + self.tau * torch.norm(A, p='fro')
        
        # 2. Graph Convolution qua bo ba (node_i, edge_ij, node_j)
        edge_emb = self.edge_proj(spatial_edges) # (N, N, d_model)
        h_ij = F.relu(self.node_proj(node_features.unsqueeze(1)) + 
                      self.node_proj(node_features.unsqueeze(0)) + edge_emb)
        
        # Tong hop thong tin lang gieng cap nhat Node Embedding
        node_updated = F.relu(torch.matmul(A.unsqueeze(1), self.gcn_weight(h_ij)).squeeze(1).diagonal(dim1=0, dim2=1).T)
        
        return node_updated, l_gl

Thử nghiệm và đánh giá hiệu năng

1. Đánh giá nhận diện văn bản (Text Recognition Benchmark)

So sánh giữa Tesseract OCR (mã nguồn mở truyền thống) và TransformerOCR (VietOCR) trên tập dữ liệu kiểm thử UIT-ReceiptsInTheWild:

Mô hình Character Error Rate (CER) $\downarrow$ Word Error Rate (WER) $\downarrow$ Độ chính xác cấp chuỗi (Accuracy) $\uparrow$
Tesseract v4.0 (Tesseract-Vietnamese) 18.42% 29.75% 61.20%
VietOCR (Pretrained Base) 6.85% 11.20% 82.45%
VietOCR (Fine-tuned + Data Augmentation) 2.14% 4.38% 94.12%

2. Đánh giá trích xuất thông tin KIE trên toàn pipeline

Đánh giá độ đo mean Entity Precision (mEP), mean Entity Recall (mER), và mean Entity F-measure (mEF) trên 4 trường thực thể cốt lõi:

Phương pháp Pipeline Company (F1) Address (F1) Date (F1) Total (F1) Overall mEF $\uparrow$
CRAFT + Tesseract + Rule-based Baseline 54.2% 48.6% 72.1% 68.4% 60.82%
CRAFT + VietOCR + BERT-NER (1D Text) 71.5% 65.8% 86.4% 81.2% 76.22%
CRAFT + VietOCR + PICK (Đề xuất) 88.6% 83.4% 95.2% 92.8% 90.00%

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

  1. Bộ dữ liệu UIT-ReceiptsInTheWild: Đóng góp bộ dữ liệu 514 ảnh hóa đơn tiếng Việt chụp thực tế đầu tiên được gán nhãn chi tiết đa giác ở cấp độ từ (word-level) kèm liên kết thực thể (entity tagging) theo chuẩn IOB.
  2. Khung xử lý Multimodal thích ứng cấu trúc: Tiên phong kết hợp mạng tích chập đồ thị học cấu trúc tự động (PICK) với mô hình biến đổi ngôn ngữ tiếng Việt (VietOCR), giải quyết triệt để sự phân mảnh thông tin 2D trên hóa đơn không có cấu trúc cố định.
  3. Hiệu quả tối ưu hóa vượt trội: Nâng cao độ chính xác trích xuất thực thể tổng thể (mEF) lên 90.00%, cải thiện +29.18% so với baseline truyền thống và giảm thời gian trích xuất thực tế xuống dưới 1.5 giây/tài liệu.

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

graph TD
    Client["Mobile App / POS Client"] -->|HTTPS POST Multi-part Image| NGINX["API Gateway (NGINX)"]
    NGINX --> Gunicorn["WSGI Gunicorn (Torch Worker Pools)"]
    Gunicorn --> Pipeline["Inference Engine (CRAFT -> VietOCR -> PICK)"]
    Pipeline --> GPU["NVIDIA GPU Cuda Cores"]
    Pipeline --> DB[("PostgreSQL / NoSQL Transaction DB")]
    Pipeline --> Response["JSON Structured Data"]

Kịch bản ứng dụng trong doanh nghiệp

  • Chương trình tích điểm khách hàng (Loyalty Programs): Người dùng chụp ảnh hóa đơn mua sắm tại cửa hàng để nhận điểm thưởng ngay lập tức thay vì chờ đợi kiểm duyệt thủ công 10 ngày.
  • Tự động hóa báo cáo tài chính nội bộ: Số hóa chi phí công tác, hóa đơn ăn uống, tiếp khách của nhân viên trực tiếp vào phần mềm ERP/Kế toán.
  • Phân tích hành vi giỏ hàng (Market Basket Analysis): Trích xuất danh mục hàng hóa, địa điểm và thời gian giao dịch để phục vụ phân khúc thị trường và dự báo xu hướng tiêu dùng.

Đánh giá chi phí và hiệu quả đầu tư (ROI)

  • Tài nguyên phần cứng: 01 GPU NVIDIA T4 (16GB VRAM) có khả năng xử lý 45-50 hóa đơn/phút, tương đương năng suất của 30 nhân viên nhập liệu thủ công trong cùng một khung giờ.
  • Thời gian hoàn vốn (ROI Timeline): Ước tính từ 3 đến 5 tháng đối với các chuỗi bán lẻ hoặc đơn vị vận hành sàn thương mại điện tử có khối lượng xử lý trên 100,000 hóa đơn/tháng.

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

Hạn chế kỹ thuật hiện tại

  • Phụ thuộc lỗi chuỗi (Error Propagation): Nếu mô-đun phát hiện văn bản CRAFT bỏ sót các dòng in mờ ở chân trang, VietOCR và PICK sẽ không thể khôi phục lại thực thể tương ứng.
  • Hóa đơn in kim hoặc chữ số bị đứt nét: Các ký tự số in kim (dot-matrix) có tỷ lệ lỗi nhận diện cao hơn chữ in nhiệt tiêu chuẩn.

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

  • Ứng dụng các kiến trúc Transformer hợp nhất đa phương thức không phân tách tầng (Unified Multimodal End-to-End) như LayoutLMv3 hoặc Donut (Document Understanding Transformer) để loại bỏ hoàn toàn bước OCR trung gian.
  • Mở rộng tập dữ liệu UIT-ReceiptsInTheWild lên quy mô 10,000+ mẫu, bao gồm vé máy bay, phiếu thu y tế và hóa đơn VAT điện tử.

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

  • Sinh viên & Học viên cao học: Tiếp cận tài liệu tham khảo hoàn chỉnh về quy trình xây dựng pipeline xử lý tài liệu thông minh (Intelligent Document Processing - IDP) và kỹ thuật gán nhãn dữ liệu chuẩn mực.
  • Kỹ sư AI / Lập trình viên: Nắm vững mã nguồn mẫu tích hợp PyTorch, các kỹ thuật tối ưu hóa mô hình Vision-Language-Graph và cách thức dựng ứng dụng demo với Gradio.
  • Doanh nghiệp bán lẻ & FinTech: Sở hữu giải pháp công nghệ tự động hóa quy trình nhập liệu, cắt giảm 85% chi phí vận hành và nâng cao chỉ số hài lòng của khách hàng (CSAT).
  • Nhà nghiên cứu NLP/Computer Vision: Thừa hưởng bộ dữ liệu UIT-ReceiptsInTheWild để thử nghiệm và so chuẩn các thuật toán KIE mới cho ngôn ngữ tiếng Việt.

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

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

Hệ thống yêu cầu máy chủ Linux (Ubuntu 18.04/20.04), CPU 4 Cores, RAM tối thiểu 16GB và 01 GPU NVIDIA (tối thiểu 8GB VRAM như GTX 1080Ti hoặc RTX 2060 trở lên) để đảm bảo độ trễ suy luận dưới 2 giây/hóa đơn.

2. Mô hình xử lý thế nào khi gặp các hóa đơn bị nghiêng hoặc chụp góc chéo?

Mô-đun CRAFT sử dụng thuật toán tạo đa giác tùy ý (Arbitrary Polygon Generation) dựa trên vector tiếp tuyến cực đại địa phương, kết hợp phép biến đổi phối cảnh Affine Transformation giúp nắn thẳng vùng chữ trước khi đưa vào VietOCR.

3. Làm thế nào để tích hợp hệ thống vào phần mềm kế toán hoặc CRM hiện có?

Toàn bộ pipeline được đóng gói dưới dạng dịch vụ Microservice với chuẩn RESTful API, trả về dữ liệu định dạng JSON chuẩn hóa, dễ dàng kết nối thông qua các Webhook hoặc HTTP Client của hệ thống ERP/CRM.

4. Hệ thống có yêu cầu kết nối Internet khi vận hành không?

Không. Tất cả các trọng số mô hình CRAFT, VietOCR và PICK đều được lưu trữ và thực thi ngoại tuyến (On-premise), đảm bảo tuyệt đối tính bảo mật và quyền riêng tư của dữ liệu tài chính doanh nghiệp.

5. Chi phí duy trì hệ thống và nâng cấp định kỳ ước tính khoảng bao nhiêu?

Chi phí vận hành chủ yếu là hạ tầng Cloud GPU (khoảng $50 - $100/tháng trên AWS/GCP với EC2 g4dn.xlarge). Việc bảo trì định kỳ chỉ bao gồm việc bổ sung thêm các mẫu hóa đơn mới vào tập huấn luyện định kỳ 6 tháng/lần để tái tinh chỉnh (Fine-tuning) mô hình.


Kết luận

Khóa luận đã giải quyết trọn vẹn bài toán trích xuất tự động thông tin hóa đơn tiếng Việt trong điều kiện thực tế thông qua việc kết hợp tối ưu 3 nền tảng công nghệ hiện đại: CRAFT (Phát hiện văn bản) + VietOCR Transformer (Nhận diện chữ tiếng Việt) + PICK (Đồ thị học cấu trúc đa phương thức). Đóng góp nổi bật về tập dữ liệu chuẩn hóa UIT-ReceiptsInTheWild cùng pipeline đạt độ chính xác mEF 90.00% đã khẳng định tính khả thi vượt trội và giá trị ứng dụng to lớn của đề tài trong công cuộc chuyển đổi số quy trình tài chính và bán lẻ tại Việt Nam.