Phase 7: Hoàn thiện Modular RAG Backend với FastAPI và Đa LLM Provider
This commit is contained in:
163
doc/9.Appendix-Vietnamese-OCR-Strategy.md
Normal file
163
doc/9.Appendix-Vietnamese-OCR-Strategy.md
Normal file
@@ -0,0 +1,163 @@
|
||||
# 9.Appendix-Vietnamese-OCR-Strategy.md
|
||||
|
||||
> **Phụ lục chiến lược OCR Tiếng Việt** cho toàn bộ hệ thống SharePoint → Search → RAG.
|
||||
>
|
||||
> ⚠️ **LƯU Ý QUAN TRỌNG**
|
||||
> - File này là **phụ lục độc lập**, **KHÔNG chỉnh sửa** các file 1–6.
|
||||
> - Dùng để:
|
||||
> - Thống nhất nhận thức kỹ thuật về OCR tiếng Việt
|
||||
> - Làm tài liệu tham chiếu khi triển khai / audit / mở rộng
|
||||
> - Tránh tranh luận lại từ đầu khi đổi AI agent hoặc dev
|
||||
|
||||
---
|
||||
|
||||
## 1. Khẳng định phạm vi ngôn ngữ
|
||||
|
||||
- **~99% tài liệu là Tiếng Việt (có dấu)**
|
||||
- Chủ yếu: văn bản hành chính, hợp đồng, quy định, scan nhiều đời
|
||||
- Yêu cầu:
|
||||
- Giữ **đúng dấu tiếng Việt**
|
||||
- Chấp nhận được với search ngữ nghĩa & RAG
|
||||
|
||||
➡️ OCR tiếng Việt được coi là **constraint nền**, không phải optional.
|
||||
|
||||
---
|
||||
|
||||
## 2. Vì sao OCR tiếng Việt khó hơn OCR tiếng Anh?
|
||||
|
||||
- Tiếng Việt có:
|
||||
- Dấu thanh (sắc, huyền, hỏi, ngã, nặng)
|
||||
- Dấu phụ (â, ê, ô, ă, ơ, ư, đ)
|
||||
- Sai dấu = **đổi nghĩa hoàn toàn**
|
||||
- Các engine OCR chung thường:
|
||||
- Nhận đúng chữ cái
|
||||
- **Sai hoặc rơi dấu** trong scan mờ
|
||||
|
||||
Nghiên cứu về Vietnamese Document Recognition chỉ ra đây là vấn đề cố hữu nhiều năm citeturn12search39.
|
||||
|
||||
---
|
||||
|
||||
## 3. Đánh giá các engine OCR phổ biến cho tiếng Việt (2025–2026)
|
||||
|
||||
### 3.1 Tesseract (vie.traineddata)
|
||||
|
||||
- ✅ Dễ triển khai, chạy CPU
|
||||
- ❌ Độ chính xác dấu **không ổn định** với scan thực tế
|
||||
- ❌ Không phù hợp cho văn bản pháp lý, hợp đồng
|
||||
|
||||
Kết luận: **KHÔNG đủ** làm engine chính cho hệ thống này citeturn12search43turn12search44.
|
||||
|
||||
---
|
||||
|
||||
### 3.2 EasyOCR
|
||||
|
||||
- ✅ Setup nhanh
|
||||
- ❌ Nhận dạng tiếng Việt chỉ ở mức trung bình
|
||||
- ❌ Không tối ưu cho tài liệu nhiều trang
|
||||
|
||||
Kết luận: chỉ dùng thử nghiệm, **không dùng production** cho tiếng Việt.
|
||||
|
||||
---
|
||||
|
||||
### 3.3 PaddleOCR (base model)
|
||||
|
||||
- ✅ Text detection rất tốt
|
||||
- ✅ Xử lý layout, xoay, nghiêng tốt
|
||||
- ❌ Text recognition tiếng Việt **chưa tối ưu nếu dùng model mặc định**
|
||||
|
||||
Được đánh giá cao hơn Tesseract nhưng cần **nâng cấp recognition** citeturn12search43turn12search46.
|
||||
|
||||
---
|
||||
|
||||
### 3.4 PaddleOCR + VietOCR (Khuyến nghị chính)
|
||||
|
||||
**Cấu hình thực tế được cộng đồng Việt Nam sử dụng nhiều nhất**:
|
||||
|
||||
```
|
||||
Text Detection : PaddleOCR (DB / SAST)
|
||||
Text Recognition : VietOCR (Transformer, tiếng Việt có dấu)
|
||||
```
|
||||
|
||||
Ưu điểm:
|
||||
- ✅ Nhận dạng tiếng Việt có dấu **tốt nhất trong open‑source**
|
||||
- ✅ Chạy on‑prem
|
||||
- ✅ Có thể fine‑tune theo domain
|
||||
|
||||
Đây là pipeline được dùng trong nhiều dự án OCR tiếng Việt thực tế citeturn12search36turn12search41.
|
||||
|
||||
---
|
||||
|
||||
### 3.5 Fine‑tuned PaddleOCR cho tiếng Việt (Advanced)
|
||||
|
||||
- Fine‑tune detection + recognition bằng dataset tiếng Việt
|
||||
- Có thể đạt độ chính xác rất cao cho từng domain (hành chính, y tế…)
|
||||
|
||||
Nghiên cứu và repo gần đây cho thấy hiệu quả rõ rệt khi fine‑tune PaddleOCR cho VN citeturn12search52turn12search54.
|
||||
|
||||
⚠️ Tuy nhiên:
|
||||
- Tốn effort huấn luyện
|
||||
- **KHÔNG cần làm ngay ở phase đầu**
|
||||
|
||||
---
|
||||
|
||||
## 4. Mức độ chính xác thực tế có thể kỳ vọng
|
||||
|
||||
| Chất lượng scan | OCR tiếng Việt tốt |
|
||||
|---|---|
|
||||
| Scan rõ, font chuẩn | 97–99% |
|
||||
| Scan nhiều đời | 90–95% |
|
||||
| Scan rất xấu | Không OCR nào cứu hoàn toàn |
|
||||
|
||||
➡️ Vì vậy hệ thống **không được phụ thuộc 100% vào OCR**.
|
||||
|
||||
---
|
||||
|
||||
## 5. OCR Tiếng Việt trong kiến trúc hiện tại (đã được tính trước)
|
||||
|
||||
Kiến trúc hệ thống **không giả định OCR hoàn hảo**:
|
||||
|
||||
| Vấn đề OCR | Cách kiến trúc xử lý |
|
||||
|---|---|
|
||||
| Sai 1 từ | Chunk nhỏ, search vẫn trúng |
|
||||
| Sai dấu | Search hybrid + semantic |
|
||||
| OCR fail | File bị đánh cờ, không đưa vào RAG |
|
||||
| OCR kém | Người dùng mở file gốc |
|
||||
|
||||
➡️ Đây là **thiết kế có chủ đích**, không phải workaround.
|
||||
|
||||
---
|
||||
|
||||
## 6. Chiến lược triển khai OCR tiếng Việt theo phase
|
||||
|
||||
### Phase 1 – An toàn, triển khai nhanh
|
||||
- PaddleOCR (Detection) + VietOCR (Recognition)
|
||||
- OCR page‑wise
|
||||
- Lưu confidence theo trang
|
||||
|
||||
### Phase 2 – Tối ưu dần
|
||||
- Tune preprocessing (deskew, binarization)
|
||||
- Dictionary post‑process tiếng Việt
|
||||
|
||||
### Phase 3 – Khi thực sự cần
|
||||
- Fine‑tune PaddleOCR/VietOCR theo domain
|
||||
|
||||
---
|
||||
|
||||
## 7. Nguyên tắc vận hành bắt buộc
|
||||
|
||||
- OCR < threshold → **KHÔNG đưa vào RAG Chat**
|
||||
- OCR output luôn link về file gốc
|
||||
- OCR có log & audit
|
||||
|
||||
---
|
||||
|
||||
## 8. Kết luận phụ lục
|
||||
|
||||
- ✅ OCR tiếng Việt **đã được tính đến từ đầu**
|
||||
- ✅ Có giải pháp **đủ tốt cho production**
|
||||
- ❌ Không có OCR tiếng Việt "100% đúng cho mọi trường hợp"
|
||||
- ✅ Kiến trúc đã được thiết kế để **chịu sai có kiểm soát**
|
||||
|
||||
---
|
||||
|
||||
*Phụ lục này dùng để tham chiếu lâu dài khi nói về OCR tiếng Việt trong hệ thống.*
|
||||
Reference in New Issue
Block a user