LightRAG/docs/VietnameseEmbedding_VI.md
2025-10-25 16:09:06 +07:00

261 lines
7.5 KiB
Markdown

# Tích hợp Vietnamese Embedding cho LightRAG
Tài liệu này hướng dẫn sử dụng mô hình **AITeamVN/Vietnamese_Embedding** với LightRAG để tăng cường khả năng truy xuất thông tin tiếng Việt.
## Thông tin Mô hình
- **Mô hình**: [AITeamVN/Vietnamese_Embedding](https://huggingface.co/AITeamVN/Vietnamese_Embedding)
- **Mô hình gốc**: [BAAI/bge-m3](https://huggingface.co/BAAI/bge-m3)
- **Loại**: Sentence Transformer
- **Độ dài tối đa**: 2048 tokens
- **Số chiều embedding**: 1024
- **Hàm tương đồng**: Dot product similarity
- **Ngôn ngữ**: Tiếng Việt (cũng hỗ trợ các ngôn ngữ khác từ BGE-M3)
- **Dữ liệu huấn luyện**: ~300,000 bộ ba (query, văn bản dương, văn bản âm) tiếng Việt
## Tính năng
**Embedding tiếng Việt chất lượng cao** - Được fine-tune đặc biệt cho văn bản tiếng Việt
**Hỗ trợ đa ngôn ngữ** - Kế thừa khả năng đa ngôn ngữ từ BGE-M3
**Xử lý văn bản dài** - Hỗ trợ tới 2048 tokens mỗi đầu vào
**Xử lý hiệu quả** - Tự động phát hiện thiết bị (CUDA/MPS/CPU)
**Embedding chuẩn hóa** - Sẵn sàng cho dot product similarity
**Tích hợp dễ dàng** - Thay thế trực tiếp các hàm embedding khác
## Cài đặt
### 1. Cài đặt LightRAG
```bash
cd LightRAG
pip install -e .
```
### 2. Cài đặt các thư viện cần thiết
Các thư viện sau sẽ được tự động cài đặt:
- `transformers`
- `torch`
- `numpy`
### 3. Thiết lập HuggingFace Token
Bạn cần token HuggingFace để truy cập mô hình:
```bash
export HUGGINGFACE_API_KEY=
# hoặc
export HF_TOKEN=
```
Lấy token tại: https://huggingface.co/settings/tokens
## Bắt đầu nhanh
### Ví dụ đơn giản
```python
import os
import asyncio
from lightrag import LightRAG, QueryParam
from lightrag.llm.openai import gpt_4o_mini_complete
from lightrag.llm.vietnamese_embed import vietnamese_embed
from lightrag.kg.shared_storage import initialize_pipeline_status
from lightrag.utils import EmbeddingFunc
WORKING_DIR = "./vietnamese_rag_storage"
async def main():
# Lấy HuggingFace token
hf_token = os.environ.get("HUGGINGFACE_API_KEY")
# Khởi tạo LightRAG với Vietnamese embedding
rag = LightRAG(
working_dir=WORKING_DIR,
llm_model_func=gpt_4o_mini_complete,
embedding_func=EmbeddingFunc(
embedding_dim=1024,
max_token_size=2048,
func=lambda texts: vietnamese_embed(
texts,
model_name="AITeamVN/Vietnamese_Embedding",
token=hf_token
)
),
)
# Khởi tạo storage và pipeline
await rag.initialize_storages()
await initialize_pipeline_status()
# Chèn văn bản tiếng Việt
await rag.ainsert("Việt Nam là một quốc gia nằm ở Đông Nam Á.")
# Truy vấn
result = await rag.aquery(
"Việt Nam ở đâu?",
param=QueryParam(mode="hybrid")
)
print(result)
await rag.finalize_storages()
if __name__ == "__main__":
asyncio.run(main())
```
### Sử dụng với file `.env`
Tạo file `.env` trong thư mục dự án:
```env
# HuggingFace Token cho Vietnamese Embedding
HUGGINGFACE_API_KEY=
# Cấu hình LLM
OPENAI_API_KEY=your_openai_key_here
LLM_BINDING=openai
LLM_MODEL=gpt-4o-mini
# Cấu hình Embedding
EMBEDDING_MODEL=AITeamVN/Vietnamese_Embedding
EMBEDDING_DIM=1024
```
## Các script ví dụ
### 1. Ví dụ đơn giản
```bash
python examples/lightrag_vietnamese_embedding_simple.py
```
Ví dụ tối thiểu về xử lý văn bản tiếng Việt.
### 2. Demo đầy đủ
```bash
python examples/vietnamese_embedding_demo.py
```
Demo toàn diện bao gồm:
- Xử lý văn bản tiếng Việt
- Xử lý văn bản tiếng Anh (hỗ trợ đa ngôn ngữ)
- Xử lý văn bản hỗn hợp
- Nhiều ví dụ truy vấn
## Tài liệu API
### `vietnamese_embed()`
Tạo embeddings cho văn bản sử dụng mô hình Vietnamese Embedding.
```python
async def vietnamese_embed(
texts: list[str],
model_name: str = "AITeamVN/Vietnamese_Embedding",
token: str | None = None,
) -> np.ndarray
```
**Tham số:**
- `texts` (list[str]): Danh sách các văn bản cần embedding
- `model_name` (str): Tên mô hình trên HuggingFace
- `token` (str, optional): HuggingFace API token (đọc từ env nếu không cung cấp)
**Trả về:**
- `np.ndarray`: Mảng embeddings với shape (len(texts), 1024)
**Ví dụ:**
```python
from lightrag.llm.vietnamese_embed import vietnamese_embed
texts = ["Xin chào", "Tạm biệt", "Cảm ơn"]
embeddings = await vietnamese_embed(texts)
print(embeddings.shape) # (3, 1024)
```
## Sử dụng nâng cao
### Lựa chọn thiết bị
Mô hình tự động phát hiện và sử dụng thiết bị tốt nhất:
1. CUDA (nếu có)
2. MPS (cho Apple Silicon)
3. CPU (dự phòng)
Bật debug logging để xem thiết bị đang sử dụng:
```python
from lightrag.utils import setup_logger
setup_logger("lightrag", level="DEBUG")
```
### Xử lý batch
Hàm embedding hỗ trợ xử lý batch hiệu quả:
```python
# Xử lý nhiều văn bản hiệu quả
large_batch = ["Văn bản 1", "Văn bản 2", ..., "Văn bản 1000"]
embeddings = await vietnamese_embed(large_batch)
```
## Khắc phục sự cố
### Vấn đề: "No HuggingFace token found"
**Giải pháp:** Thiết lập biến môi trường:
```bash
export HUGGINGFACE_API_KEY="your_token"
# hoặc
export HF_TOKEN="your_token"
```
### Vấn đề: "Model download fails"
**Giải pháp:**
1. Kiểm tra kết nối internet
2. Xác thực token HuggingFace hợp lệ
3. Đảm bảo đủ dung lượng ổ đĩa (~2 GB)
### Vấn đề: "Out of memory error"
**Giải pháp:**
1. Giảm kích thước batch
2. Sử dụng CPU thay vì GPU (chậm hơn nhưng dùng ít bộ nhớ hơn)
3. Đóng các ứng dụng khác đang dùng GPU/RAM
### Vấn đề: "Embedding generation chậm"
**Giải pháp:**
1. Đảm bảo đang sử dụng GPU (kiểm tra logs)
2. Cài đặt PyTorch với CUDA: `pip install torch --index-url https://download.pytorch.org/whl/cu118`
3. Giảm max_token_size nếu văn bản ngắn hơn
## So sánh với các mô hình embedding khác
| Mô hình | Số chiều | Max Tokens | Ngôn ngữ | Fine-tuned cho tiếng Việt |
|---------|----------|------------|----------|---------------------------|
| Vietnamese_Embedding | 1024 | 2048 | Đa ngôn ngữ | ✅ Có |
| BGE-M3 | 1024 | 8192 | Đa ngôn ngữ | ❌ Không |
| text-embedding-3-large | 3072 | 8191 | Đa ngôn ngữ | ❌ Không |
| text-embedding-3-small | 1536 | 8191 | Đa ngôn ngữ | ❌ Không |
## Hỗ trợ
Để báo cáo vấn đề về tích hợp Vietnamese embedding:
- Mở issue trên [LightRAG GitHub](https://github.com/HKUDS/LightRAG/issues)
- Gắn tag `vietnamese-embedding`
Để báo cáo vấn đề về mô hình:
- Truy cập [AITeamVN/Vietnamese_Embedding](https://huggingface.co/AITeamVN/Vietnamese_Embedding)
## Giấy phép
Tích hợp này tuân theo giấy phép của LightRAG. Mô hình Vietnamese_Embedding có thể có điều khoản giấy phép riêng - vui lòng kiểm tra [trang mô hình](https://huggingface.co/AITeamVN/Vietnamese_Embedding) để biết chi tiết.
## Lời cảm ơn
- **AITeamVN** đã huấn luyện và phát hành mô hình Vietnamese_Embedding
- **BAAI** cho mô hình gốc BGE-M3
- **Nhóm LightRAG** cho framework RAG xuất sắc