DE

[DE Blog #16] Data Engineering Cho Kỷ Nguyên GenAI: Xây Dựng RAG Pipeline Quy Mô Lớn & Giải Mã Vector Databases (HNSW vs. IVFFlat)

9 views
[DE Blog #16] Data Engineering Cho Kỷ Nguyên GenAI: Xây Dựng RAG Pipeline Quy Mô Lớn & Giải Mã Vector Databases (HNSW vs. IVFFlat)

1. Bối cảnh thực tế (Context & Problem Statement)

Trong làn sóng Generative AI và Large Language Models (LLMs), hiện tượng "Ảo giác" (Hallucination) và việc thiếu hụt dữ liệu nội bộ doanh nghiệp là rào cản lớn nhất. Kiến trúc RAG (Retrieval-Augmented Generation) ra đời để giải quyết vấn đề này: Khi người dùng đặt câu hỏi, hệ thống sẽ truy xuất các đoạn văn bản liên quan nhất từ kho dữ liệu nội bộ và nạp vào làm ngữ cảnh (Context) cho LLM trả lời.

Nhiều người lầm tưởng RAG là công việc của AI/ML Engineer. Tuy nhiên, 80% sự thành bại của một hệ thống RAG quy mô lớn nằm ở tầng Data Engineering:

  • Làm thế nào để tự động hóa pipeline ingest hàng triệu tài liệu phi cấu trúc (PDF, Word, Confluence, Web) từ Data Lake?
  • Làm thế nào để chia đoạn (Chunking), sinh Vector Embeddings, lưu trữ và tìm kiếm vector tương đồng với độ trễ <20ms< 20\text{ms} trên hàng trăm triệu vectors?
  • Làm thế nào để đồng bộ hóa tức thì khi tài liệu gốc bị sửa đổi hoặc xóa bỏ?

2. Các Khái Niệm & Cơ Chế Cốt Lõi

2.1. Vòng Đời Của Một RAG Data Pipeline (End-to-End Flow)

[Unstructured Sources: S3 / Lakehouse / Drive]
                        |
                        v
         [1. Parsing & Document Extraction] (OCR, Unstructured.io)
                        |
                        v
         [2. Smart Chunking Strategies] (Semantic / Recursive)
                        |
                        v
         [3. Embedding Generation Pipeline] (Spark + GPU / Batch API)
                        |
                        v
+-------------------------------------------------------------+
|         4. VECTOR DATABASE & HYBRID STORAGE ENGINE          |
|  - Vector Index: HNSW / IVFFlat                             |
|  - Metadata Storage & Inverted Index: BM25 / Sparse Tokens  |
|  (Milvus / Qdrant / Pinecone / pgvector)                    |
+------------------------------+------------------------------+
                               |
                               v
[5. Hybrid Retrieval + RRF Re-ranking] ---> [Context to LLM]

2.2. Các Chiến Lược Phân Đoạn Văn Bản (Chunking Strategies)

  • Fixed-size Chunking with Overlap: Cắt cố định NN ký tự/tokens kèm khoảng gối đầu (ví dụ: Chunk size =500= 500 tokens, Overlap =50= 50 tokens để tránh đứt gãy ngữ cảnh giữa các câu).
  • Structure-aware / Recursive Chunking: Cắt nhỏ dựa trên cấu trúc tự nhiên của tài liệu (theo tiêu đề H1/H2/H3, đoạn văn \n\n, dấu chấm câu).
  • Semantic Chunking: Đo khoảng cách ngữ nghĩa giữa các câu liên tiếp bằng Embedding model; chỉ tách sang chunk mới khi sự chuyển đổi ngữ nghĩa vượt qua một ngưỡng (Threshold) xác định.

2.3. Bản Chất Toán Học Của Vector Distance Metrics

Vector Embedding là một mảng số thực nhiều chiều (ví dụ 1536 chiều với OpenAI text-embedding-3-small). Ba độ đo khoảng cách phổ biến:

  1. Cosine Similarity: Đo góc giữa 2 vector (cosθ=ABAB\cos \theta = \frac{A \cdot B}{\|A\| \|B\|}), không phụ thuộc vào độ dài vector. Rất tối ưu cho so sánh ngữ nghĩa văn bản.
  2. Euclidean Distance (L2L2 Distance): Đo khoảng cách hình học thẳng ((AiBi)2\sqrt{\sum (A_i - B_i)^2}).
  3. Dot Product (Inner Product): AB=AiBiA \cdot B = \sum A_i B_i. Nếu các vector đã được chuẩn hóa độ dài (L2L2-normalized), Dot Product tương đương với Cosine Similarity nhưng tính toán nhanh hơn nhiều.

2.4. Các Thuật Toán Lập Chỉ Mục Vector (ANN - Approximate Nearest Neighbor)

Tìm kiếm chính xác (KK-Nearest Neighbors) đòi hỏi phải so sánh vector truy vấn với toàn bộ hàng triệu vector trong cơ sở dữ liệu (O(N)O(N) - rất chậm). Vì vậy, các Vector DB sử dụng thuật toán tìm kiếm xấp xỉ (ANN):

  • IVFFlat (Inverted File Flat): Sử dụng thuật toán KK-Means để chia không gian vector thành NN cụm (Voronoi Cells). Khi tìm kiếm, chỉ cần quét các vector nằm trong các cụm gần nhất.
    • Đặc điểm: Tốc độ build index nhanh, tốn ít RAM, nhưng độ chính xác (Recall) trung bình.
  • HNSW (Hierarchical Navigable Small World): Xây dựng một đồ thị phân lớp đa tầng (tương tự cấu trúc Skip-List).
    • Tầng trên cùng: Các cạnh dài để nhảy xa nhanh chóng qua các vùng không gian lớn.
    • Tầng dưới cùng: Đồ thị dày đặc các cạnh ngắn để tìm kiếm cục bộ chính xác.
    • Đặc điểm: Tốc độ truy vấn siêu nhanh và độ chính xác (Recall) cao nhất hiện nay, nhưng tốn nhiều bộ nhớ RAM hơn để duy trì đồ thị.
  • Product Quantization (PQ): Kỹ thuật nén vector bằng cách chia vector thành các vector con và lượng tử hóa, giúp giảm 80%–95% dung lượng RAM cần thiết để lưu trữ hàng tỷ vector.

2.5. Hybrid Search (Dense Vector + Sparse BM25) & Reciprocal Rank Fusion (RRF)

  • Vấn đề của Dense Vector Search: Rất giỏi hiểu ngữ nghĩa trừu tượng, nhưng rất kém khi tìm kiếm chính xác các từ khóa đặc thù (Mã lỗi kỹ thuật ERR_502_TIMEOUT, Tên mã sản phẩm SKU-8899, Tên riêng).
  • Giải pháp Hybrid Search:
    • Luồng 1: Chạy Dense Retrieval (Vector HNSW) để lấy ngữ nghĩa.
    • Luồng 2: Chạy Sparse Retrieval (BM25 / Keyword Search) để lấy từ khóa chính xác.
    • Kết hợp điểm số bằng thuật toán Reciprocal Rank Fusion (RRF): RRF_Score(d)=m{Dense,Sparse}1k+rankm(d)(k60)\text{RRF\_Score}(d) = \sum_{m \in \{\text{Dense}, \text{Sparse}\}} \frac{1}{k + \text{rank}_m(d)} \quad (k \approx 60)

3. Các Bảng Markdown So Sánh Chi Tiết

📊 Bảng 1: So Sánh Các Thuật Toán Lập Chỉ Mục Vector (ANN)

Thuật toán IndexCơ chế cốt lõiTốc độ Query (QPS)Độ chính xác (Recall)Bộ nhớ RAM yêu cầuThời gian Build Index
Flat (Exact KNN)Quét tuần tự toàn bộ (O(N)O(N))Rất chậmTuyệt đối (100%)Thấp (chỉ lưu vector thô)Bằng 0 (Không cần build)
IVFFlatPhân cụm KK-Means VoronoiTrung bìnhKhá (85%95%85\% - 95\%)Thấp / Vừa phảiNhanh
HNSWĐồ thị phân tầng đa lớp (Skip-Graph)Cực nhanh (<10ms< 10\text{ms})Xuất sắc (98%99%98\% - 99\%)Cao (Lưu thêm cấu trúc đồ thị)Lâu hơn
IVF-PQ (Quantized)Nén vector thành mã đại diệnNhanhTrung bình (80%90%80\% - 90\%)Siêu tiết kiệm (giảm 80%)Lâu (cần train quantizer)

📊 Bảng 2: So Sánh Dedicated Vector DB vs. PostgreSQL pgvector

Tiêu chíDedicated Vector DB (Milvus, Qdrant, Pinecone)Relational Extension (PostgreSQL + pgvector)
Quy mô Vector tối đaHàng chục triệu đến hàng tỷ vectors phân tánThích hợp cho quy mô <5 triệu< 5\text{ triệu} vectors
Hỗ trợ IndexingHNSW, IVF-PQ, DiskANN, SCaNN được tối ưu hóa C++/RustHNSW, IVFFlat (chạy trên engine của Postgres)
Metadata FilteringLọc metadata kết hợp vector cực nhanh trong 1 chu kỳTận dụng toàn bộ sức mạnh SQL JOIN/Filter của Postgres
Độ phức tạp vận hànhCần duy trì một cụm cluster riêng biệtRất đơn giản (Tận dụng ngay Postgres DB có sẵn)
Chi phí hạ tầngCao hơn (Cần node RAM/SSD lớn)Thấp (Dùng chung DB của ứng dụng)
Khuyến nghị sử dụngDoanh nghiệp lớn, RAG chuyên sâu, khối lượng dữ liệu khổng lồGiai đoạn MVP / Startup, hệ thống có <1M< 1\text{M} documents

📊 Bảng 3: So Sánh Các Độ Đo Khoảng Cách Vector (Distance Metrics)

Độ đo (Metric)Công thứcDải giá trịỨng dụng tối ưu
Cosine SimilarityABAB\frac{A \cdot B}{\|A\| \|B\|}[1,1][-1, 1] (1: trùng khớp, 0: trực giao, -1: đối lập)So sánh ngữ nghĩa văn bản, tài liệu dài ngắn khác nhau
Dot ProductAB=AiBiA \cdot B = \sum A_i B_i(,+)(-\infty, +\infty)Tìm kiếm khi các vector đã được L2L2-normalized
Euclidean (L2L2)(AiBi)2\sqrt{\sum (A_i - B_i)^2}[0,+)[0, +\infty) (0: trùng khớp tuyệt đối)Xử lý ảnh (Computer Vision), Dữ liệu định lượng vị trí

4. Best Practices & Tối Ưu Hóa RAG Data Pipeline (Pro-Tips)

💡 Xử lý Embedding Batching trên Apache Spark

  • Vấn đề: Gửi từng câu đơn lẻ lên API ngoài (OpenAI/Cohere) để lấy embedding sẽ bị nghẽn mạng và vượt giới hạn Rate Limit (429 Too Many Requests).
  • Giải pháp: Sử dụng Spark để gom batch 100500100 - 500 chunks, sử dụng thư viện asyncio hoặc chạy mô hình Embedding mã nguồn mở (như BGE-large, E5) trực tiếp trên các worker nodes có gắn GPU thông qua Pandas UDF (Vectorized UDF):
from pyspark.sql.functions import pandas_udf
import pandas as pd

@pandas_udf("array<float>")
def generate_embeddings_udf(texts: pd.Series) -> pd.Series:
    # Tận dụng mô hình nạp sẵn trên GPU của Worker để encode cả Series:
    embeddings = local_model.encode(texts.tolist(), batch_size=64)
    return pd.Series(embeddings.tolist())

💡 Chiến lược Đồng Bộ Hóa (CDC Sync) từ Lakehouse sang Vector DB

  • Khi một văn bản trong Data Lakehouse bị sửa đổi hoặc xóa (GDPR):
    1. Gán cho mỗi Chunk một ID có tính xác định: chunk_id = MD5(doc_id + "_" + chunk_index).
    2. Lưu metadata doc_id, updated_at, chunk_id cùng với Vector trong Vector DB.
    3. Khi có sự kiện CDC DELETE tài liệu từ nguồn, thực hiện lệnh delete_by_metadata(filter={"doc_id": "X"}) trên Vector DB mà không cần quét lại toàn bộ kho dữ liệu.

5. Góc Ôn Luyện Phỏng Vấn (Interview Corner)

❓ Câu hỏi 1: Giải thích cơ chế hoạt động của thuật toán HNSW (Hierarchical Navigable Small World). Tại sao nó lại là thuật toán lập chỉ mục vector được ưa chuộng nhất hiện nay?

  • Gợi ý trả lời:
    • Cấu trúc phân lớp (Multi-layer Graph):
      • HNSW lấy cảm hứng từ cấu trúc dữ liệu Skip-List áp dụng lên đồ thị.
      • Đồ thị được chia thành nhiều tầng (từ Tầng 00 lên Tầng LmaxL_{max}). Tầng trên cùng có rất ít node với các liên kết dài; càng xuống các tầng dưới, số lượng node càng dày đặc với các liên kết ngắn cục bộ.
    • Quy trình tìm kiếm (Greedy Search):
      1. Bắt đầu từ một Entry Point ở tầng cao nhất, thuật toán duyệt qua các node lân cận để tìm node gần vector truy vấn nhất.
      2. Khi không tìm được node nào gần hơn ở tầng hiện tại, thuật toán "nhảy xuống" tầng tiếp theo bên dưới tại vị trí node đó.
      3. Quá trình lặp lại cho đến Tầng 00 – nơi tập trung toàn bộ các node – để thực hiện tìm kiếm cục bộ chính xác các điểm KK-Nearest Neighbors.
    • Lý do vượt trội:
      • Giảm độ phức tạp tìm kiếm từ O(N)O(N) xuống O(logN)O(\log N).
      • Đạt độ chính xác (Recall) cực cao (>98%> 98\%) với độ trễ tính bằng mili-giây, vượt trội hoàn toàn so với IVFFlat.

❓ Câu hỏi 2: Hybrid Search là gì? Tại sao chỉ sử dụng Dense Vector Search thôi là chưa đủ trong các hệ thống RAG doanh nghiệp?

  • Gợi ý trả lời:
    • Hạn chế của Dense Vector Search:
      • Vector Embeddings nén toàn bộ ngữ nghĩa của câu vào một không gian vector liên tục. Điều này khiến nó làm rất tốt việc tìm các từ đồng nghĩa hoặc ý nghĩa tương tự, nhưng bị "mù" trước các từ khóa chính xác, thuật ngữ viết tắt, mã lỗi, tên biến hoặc các con số cụ thể.
    • Bản chất của Hybrid Search:
      • Kết hợp cả hai phương pháp tìm kiếm bổ trợ cho nhau:
        1. Dense Retrieval (Semantic Search): Bắt trọn ý định trừu tượng và ngữ cảnh người dùng.
        2. Sparse Retrieval (Lexical / BM25 Search): Khớp chính xác các từ khóa đặc thù (Exact Keywords).
    • Hợp nhất kết quả bằng RRF (Reciprocal Rank Fusion):
      • Không cộng điểm trực tiếp (vì dải điểm của Vector distance và BM25 khác nhau), RRF sử dụng thứ hạng (Ranks) của tài liệu trong từng danh sách kết quả để tính điểm tổng hợp, đưa các tài liệu xuất hiện ở thứ hạng cao trên cả hai luồng lên vị trí đầu tiên.

❓ Câu hỏi 3: Khi triển khai Vector Search trên tập dữ liệu hàng chục triệu bản ghi có kèm điều kiện lọc Metadata (ví dụ: category = 'finance' AND year = 2026), Single-Stage Filtering (Filtered HNSW) tối ưu hơn Pre-Filtering và Post-Filtering như thế nào?

  • Gợi ý trả lời:
    • Pre-Filtering (Lọc trước): Lọc theo metadata trước \rightarrow Tập kết quả còn lại quá nhỏ hoặc bị phân tán, khiến cấu trúc đồ thị HNSW bị đứt gãy, không thể duyệt đồ thị hiệu quả.
    • Post-Filtering (Lọc sau): Chạy HNSW tìm ra Top KK vectors gần nhất \rightarrow Sau đó mới áp dụng bộ lọc metadata. Nếu bộ lọc quá chặt (ví dụ chỉ có 1%1\% tài liệu khớp category='finance'), Top KK tìm được có thể không chứa tài liệu nào khớp metadata \rightarrow Trả về kết quả rỗng!
    • Single-Stage / Iterative Filtering (Filtered HNSW):
      • Tích hợp bộ lọc metadata trực tiếp vào quá trình duyệt đồ thị HNSW. Khi thuật toán nhảy qua các node lân cận, nó kiểm tra điều kiện metadata song song và chỉ thêm các node thỏa mãn vào danh sách ứng viên (Candidate Pool) cho đến khi gom đủ Top KK kết quả mong muốn.

6. Tóm Tắt Ghi Nhớ Nhanh (Key Takeaways)

  1. RAG Data Pipeline đòi hỏi kỹ năng Data Engineering vững chắc: Document Parsing \rightarrow Smart Chunking \rightarrow Batch Embedding \rightarrow Vector Indexing.
  2. HNSW là thuật toán Vector Indexing tiêu chuẩn vàng (Tốc độ O(logN)O(\log N), Recall >98%> 98\%).
  3. Hybrid Search (Dense Vector + Sparse BM25) kết hợp RRF là bắt buộc cho hệ thống RAG doanh nghiệp để vừa hiểu ngữ nghĩa vừa bắt chính xác từ khóa.
  4. Quản lý vòng đời Vector bằng Deterministic Chunk IDs kết hợp CDC Sync để cập nhật và xóa dữ liệu kịp thời.
0Claps