Trí tuệ Nhân tạo với RAG – Hướng dẫn triển khai hệ thống sinh nội dung tăng cường truy xuất - Chương 3

 📘 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:

  1. 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.
  2. 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.
  3. 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.
  4. 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:



  1. Chuyển văn bản thành embedding → dùng BERT, RoBERTa, SentenceTransformer.
  2. Lưu embedding vào Vector DB → như Faiss, Pinecone.
  3. Chuyển câu hỏi người dùng thành vector.
  4. Tìm các tài liệu gần nhất (nearest neighbors).
  5. 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:

  1. 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.
  2. Tạo Embedding
    • Chọn mô hình: BERT, RoBERTa, Sentence-BERT...
    • Mỗi tài liệu → một vector đại diện.
  3. 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"]

 # Tạo embedding

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')

         text = "This is a sample document for cleaning."

        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]

 🔍 Các kỹ thuật lập chỉ mục phổ biến            

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

        

 🎯 Lưu ý khi lựa chọn Vector Database:

  • 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.

  Tóm tắt Chương 3

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

 Tham khảo Chương 2

Post a Comment

أحدث أقدم