📘 Chương 3: Truy xuất và Lập chỉ mục Tài liệu
3.1 Vai trò của Truy xuất Tài liệu trong RAG
Trong hệ thống RAG (Retrieval-Augmented Generation), truy
xuất tài liệu là bước nền tảng, đảm bảo hệ thống có thể lấy được thông tin
phù hợp từ một kho dữ liệu lớn, trước khi chuyển sang bước sinh nội
dung.
🎯 Mục tiêu chính của truy
xuất tài liệu trong RAG:
- Cung
cấp bối cảnh phù hợp:
- Giúp
mô hình hiểu câu hỏi tốt hơn thông qua các tài liệu liên quan.
- Ví
dụ: Khi được hỏi về một sự kiện lịch sử, hệ thống có thể truy xuất các
bài báo, nghiên cứu liên quan.
- Tăng
độ chính xác:
- Hạn
chế việc mô hình “bịa” thông tin.
- So
sánh chéo từ nhiều tài liệu để cải thiện độ tin cậy.
- Cải
thiện tính mạch lạc:
- Nội
dung sinh ra liên kết chặt chẽ với ngữ cảnh đã truy xuất.
- Sinh
nội dung dựa trên tri thức:
- Ví
dụ: Tổng hợp tài liệu để tạo bản tóm tắt hoặc câu trả lời chính xác.
3.2 Tổng quan về Cơ sở dữ liệu Vector (Vector Database)
Để RAG truy xuất được tài liệu hiệu quả, các tài liệu phải
được mã hóa thành vector và lưu trong một vector database.
Cơ sở dữ liệu Vector là một loại cơ sở dữ liệu chuyên dụng
được thiết kế để lưu trữ, quản lý và truy vấn các vector nhúng (embeddings)
một cách hiệu quả. Các vector này là biểu diễn số học của dữ liệu, cho phép các
hệ thống tìm kiếm thông tin dựa trên sự tương đồng ngữ nghĩa thay vì chỉ dựa
trên từ khóa chính xác.
Dưới đây là các nguyên tắc hoạt động chính được minh họa
trong sơ đồ:
1. Chuyển đổi dữ liệu thành Vector (Data to Vectors -
Embeddings)
- Dữ
liệu đầu vào (Input Data): Cơ sở dữ liệu vector có thể lưu trữ biểu diễn
của nhiều loại dữ liệu khác nhau, bao gồm:
- Văn
bản (Text): Các đoạn văn, tài liệu, câu.
- Hình
ảnh (Images): Các bức ảnh, đồ họa.
- Âm
thanh (Audio): Các đoạn ghi âm, bài hát.
- Video:
Các đoạn phim.
- Mô
hình Nhúng (Embedding Model): Để chuyển đổi các loại dữ liệu này thành
vector, một mô hình nhúng (ví dụ: các mô hình Transformer cho văn bản,
hoặc các mạng nơ-ron tích chập (CNN) cho hình ảnh) được sử dụng. Mô hình
này sẽ ánh xạ dữ liệu phức tạp vào một không gian đa chiều, nơi mỗi mục dữ
liệu được biểu diễn dưới dạng một chuỗi các số (vector).
- Vector
Nhúng (Embeddings): Các vector này được gọi là "embeddings".
Đặc điểm quan trọng của embeddings là các mục dữ liệu có ý nghĩa tương tự
(ví dụ: hai câu có cùng chủ đề, hoặc hai hình ảnh có cùng đối tượng) sẽ có
các vector nằm gần nhau trong không gian đa chiều đó.
2. Lưu trữ và Lập chỉ mục (Storage and Indexing)
- Không
gian đa chiều (High-Dimensional Space): Các vector nhúng được lưu trữ
trong một không gian có số chiều rất lớn (ví dụ: 768 chiều, 1536 chiều,
v.v.).
- Lập
chỉ mục (Indexing): Để cho phép tìm kiếm nhanh chóng trong không gian
đa chiều này, cơ sở dữ liệu vector sử dụng các cấu trúc lập chỉ mục đặc biệt.
Các kỹ thuật phổ biến bao gồm:
- Approximate
Nearest Neighbor (ANN) Index: Các thuật toán như HNSW (Hierarchical
Navigable Small World), IVF (Inverted File Index), LSH (Locality
Sensitive Hashing) được sử dụng để tìm kiếm các vector "gần nhất"
một cách hiệu quả, ngay cả trong các tập dữ liệu cực lớn. Chúng không đảm
bảo tìm thấy vector gần nhất tuyệt đối, nhưng rất nhanh và đủ tốt cho hầu
hết các trường hợp.
- Clustering
(Phân cụm): Trong sơ đồ, bạn có thể thấy các vector tương tự được nhóm
lại thành các "cụm". Điều này trực quan hóa ý tưởng rằng các dữ
liệu có ý nghĩa tương đồng sẽ nằm gần nhau trong không gian vector.
3. Truy vấn và Tìm kiếm tương đồng (Query and Similarity
Search)
- Vector
Truy vấn (Query Vector): Khi người dùng muốn tìm kiếm thông tin, truy
vấn của họ (ví dụ: một câu hỏi, một hình ảnh) cũng được chuyển đổi thành một
vector nhúng bằng cùng mô hình nhúng đã được sử dụng để tạo các vector
trong cơ sở dữ liệu.
- Tìm
kiếm tương đồng (Similarity Search): Cơ sở dữ liệu vector sau đó sẽ so
sánh vector truy vấn với tất cả các vector đã lưu trữ để tìm ra những
vector có độ tương đồng cao nhất. Các phương pháp đo độ tương đồng phổ biến
bao gồm:
- Cosine
Similarity (Độ tương đồng Cosine): Đo góc giữa hai vector. Góc càng
nhỏ (cosine càng gần 1) thì hai vector càng giống nhau.
- Euclidean
Distance (Khoảng cách Euclidean): Đo khoảng cách thẳng giữa hai điểm
trong không gian. Khoảng cách càng nhỏ thì hai vector càng giống nhau.
- Kết
quả truy xuất (Retrieval Results): Cơ sở dữ liệu trả về các vector (và
dữ liệu gốc tương ứng của chúng) có độ tương đồng cao nhất với vector truy
vấn.
Lợi ích của Cơ sở dữ liệu Vector:
- Tìm
kiếm ngữ nghĩa: Cho phép tìm kiếm dựa trên ý nghĩa chứ không chỉ từ
khóa.
- Xử
lý dữ liệu phi cấu trúc: Hiệu quả trong việc quản lý và truy vấn văn bản,
hình ảnh, âm thanh, v.v.
- Khả
năng mở rộng: Được thiết kế để xử lý hàng tỷ vector.
- Ứng
dụng đa dạng: Nền tảng cho các hệ thống như công cụ tìm kiếm ngữ
nghĩa, hệ thống đề xuất, phát hiện dị thường, và các ứng dụng AI tạo sinh
(như RAG).
🔍 Các hệ cơ sở dữ liệu
vector phổ biến
Tên |
Mô tả |
Faiss |
Do Facebook
phát triển, cực nhanh và tối ưu GPU |
Milvus |
Mã nguồn mở,
hỗ trợ hybrid search (kết hợp vector & từ khóa) |
Pinecone |
Dịch vụ cloud
mạnh mẽ, hỗ trợ metadata, real-time filtering |
🔄 Quy trình hoạt động
trong RAG:
- Chuyển
văn bản thành embedding → dùng BERT, RoBERTa, SentenceTransformer.
- Lưu
embedding vào Vector DB → như Faiss, Pinecone.
- Chuyển
câu hỏi người dùng thành vector.
- Tìm
các tài liệu gần nhất (nearest neighbors).
- Gửi
tài liệu đó sang LLM để tạo câu trả lời.
💻 Ví dụ với Faiss
(Python)
python:
import faiss
import numpy as np
# Tạo index cho vector 10 chiều
dimension = 10
index = faiss.IndexFlatL2(dimension)
# Sinh 1000 vector ngẫu nhiên
vectors = np.random.rand(1000,
dimension).astype(np.float32)
index.add(vectors)
# Tìm 5 vector gần nhất với truy
vấn
query_vector =
np.random.rand(dimension).astype(np.float32)
distances, indices = index.search(query_vector.reshape(1, -1), k=5)
3.3 Xây dựng Chỉ mục Tài liệu (Document Index)
Đây là bước chuẩn bị để hệ thống có thể tìm kiếm tài liệu một cách nhanh chóng và hiệu quả.
🧱 Các bước chính:
- Thu
thập & Tiền xử lý Dữ liệu
- Nguồn:
Website, PDF, tài liệu nội bộ.
- Làm
sạch: Loại bỏ stopword, ký tự đặc biệt, chuẩn hóa văn bản.
- Tạo
Embedding
- Chọn
mô hình: BERT, RoBERTa, Sentence-BERT...
- Mỗi
tài liệu → một vector đại diện.
- Lưu
vào Vector DB
- Chọn
DB: Faiss, Pinecone, Milvus.
- Lưu kèm metadata: tiêu đề, nguồn, thời gian.
💡 Ví dụ: Xây dựng chỉ mục
tin tức
python:
from sentence_transformers import
SentenceTransformer
import faiss
# Tải mô hình embedding
model = SentenceTransformer('all-MiniLM-L6-v2')
# Danh sách bài báo
documents = ["AI đang thay đổi
thế giới", "Việt Nam thắng Malaysia"]
document_embeddings = model.encode(documents)
# Tạo Faiss index
dimension =
document_embeddings.shape[1]
index =
faiss.IndexFlatL2(dimension)
index.add(document_embeddings)
# Truy vấn
query_embedding =
model.encode(["AI tại Việt Nam"])[0]
distances, indices =
index.search(query_embedding.reshape(1, -1), k=5)
🧹 Tiền xử lý và Chuẩn hóa
Dữ liệu
- Loại
bỏ nhiễu: tag HTML, quảng cáo, tiêu đề lặp.
- Tách
từ: dùng NLTK, spaCy...
- Chuyển
thường, bỏ stopword, stemming/lemmatization.
python:
import nltk
from nltk.corpus import stopwords
from nltk.stem import PorterStemmer
nltk.download('punkt')
nltk.download('stopwords')
tokens =
nltk.word_tokenize(text.lower())
filtered = [w for w in tokens if
w not in stopwords.words('english')]
stemmed =
[PorterStemmer().stem(w) for w in filtered]
Phương
pháp |
Mô tả |
TF-IDF |
Tính trọng số
từ theo tần suất và độ hiếm |
BM25 |
Nâng cấp từ
TF-IDF, có tính độ dài văn bản |
Embedding |
Vector ngữ
nghĩa đa chiều |
|
- Kích
thước dữ liệu: Faiss phù hợp dữ liệu lớn, Pinecone dễ dùng với dữ liệu
vừa.
- Khả
năng lọc metadata: Pinecone, Milvus hỗ trợ tốt.
- Hiệu
năng truy vấn: HNSW, IVF Flat cho tốc độ cao.
Chủ đề |
Mô tả |
Truy xuất tài
liệu |
Bước thiết yếu
để mô hình sinh nội dung có căn cứ thực tế |
Vector
database |
Cách lưu trữ
và tìm kiếm embedding hiệu quả |
Lập chỉ mục |
Gồm tiền xử
lý văn bản, tạo embedding, lưu vào DB |
Công cụ |
Faiss,
Milvus, Pinecone, Sentence-BERT |
إرسال تعليق