Site logo
Tác giả
  • avatar Nguyễn Đức Xinh
    Name
    Nguyễn Đức Xinh
    Twitter
Ngày xuất bản
Ngày xuất bản

Cách triển khai Semantic Search thực tế với Python + FAISS + Sentence Transformers

1. Giới thiệu

Trong nhiều năm, công cụ tìm kiếm truyền thống (keyword-based search) hoạt động dựa trên việc so khớp chuỗi ký tự — ví dụ, nếu bạn gõ “lập trình viên Python”, hệ thống sẽ tìm các tài liệu chứa đúng cụm từ đó. Tuy nhiên, con người không luôn nói cùng một cách. Một người có thể hỏi “ai viết phần mềm bằng Python?” – dù ý nghĩa tương tự, nhưng các từ khác nhau khiến tìm kiếm truyền thống bỏ sót nhiều kết quả.

Đây chính là lúc Semantic Search (tìm kiếm ngữ nghĩa) xuất hiện.


2. Semantic Search là gì?

Semantic Search là kỹ thuật giúp máy tính hiểu ý nghĩa (semantics) của câu truy vấn và nội dung tài liệu, thay vì chỉ so sánh ký tự. Thay vì tìm kiếm “keyword giống nhau”, Semantic Search tìm kiếm “ý nghĩa tương tự nhau”.

Công nghệ này sử dụng Embedding vectors (vector biểu diễn) — biến câu, đoạn văn, hoặc tài liệu thành vector số học, rồi đo độ tương đồng (cosine similarity) giữa các vector để xác định mức độ liên quan.


Quy trình này thường gồm 5 bước chính:

Bước 1. Nhập dữ liệu (Documents)

Thu thập dữ liệu nội bộ, tài liệu PDF, hướng dẫn sử dụng, email, ghi chú, hoặc database text.

Bước 2. Tiền xử lý (Preprocessing)

  • Làm sạch dữ liệu (loại bỏ ký tự đặc biệt, HTML, tag, metadata)
  • Chia nhỏ văn bản (chunking) — ví dụ: 512 hoặc 1024 token mỗi đoạn để phù hợp với mô hình embedding.

Bước 3. Tạo Embedding

Sử dụng mô hình embedding (ví dụ: text-embedding-3-large, all-MiniLM-L6-v2, hoặc sentence-transformers) để chuyển mỗi đoạn văn thành vector trong không gian nhiều chiều (thường 768 hoặc 1536 chiều).

Bước 4. Lưu trữ vector

Lưu các vector này vào Vector Database như:

  • FAISS (Meta)
  • Pinecone
  • Weaviate
  • Milvus
  • Chroma

Bước 5. Truy vấn tìm kiếm

Khi người dùng đặt câu hỏi, hệ thống:

  1. Biến câu hỏi thành vector embedding.
  2. So sánh vector câu hỏi với các vector tài liệu trong database.
  3. Lấy ra các đoạn có độ tương đồng cao nhất.
  4. (Tùy chọn) Gửi kết quả này đến mô hình ngôn ngữ (LLM) để tạo câu trả lời tự nhiên.

4. Ví dụ thực tế

Tình huống: Người dùng hỏi:

“Làm sao để deploy ứng dụng NestJS lên AWS EC2?”

Semantic Search sẽ hiểu rằng các đoạn có chứa “triển khai NestJS trên EC2”, “cài đặt backend trên AWS”, “chạy ứng dụng NodeJS trên server cloud” đều liên quan ngữ nghĩa, và trả về đúng nội dung mong muốn — dù không chứa từ khóa “deploy”.


5. Các vấn đề thường gặp và cách xử lý

1. Câu bị đứt đoạn hoặc mất ngữ cảnh

Nguyên nhân: Chunking quá nhỏ → ngữ nghĩa không đầy đủ. Cách xử lý:

  • Dùng overlapping window khi chunk (ví dụ: 512 token, overlap 100).
  • Sử dụng sentence-aware chunking để không cắt giữa câu.

2. Context bị sai lệch

Nguyên nhân: Embedding không đủ “ngữ cảnh” hoặc vector database chưa cập nhật. Cách xử lý:

  • Dùng mô hình embedding mạnh hơn (text-embedding-3-large hoặc bge-large).
  • Làm mới database định kỳ nếu tài liệu thay đổi thường xuyên.

3. Kết quả sai hoặc lặp lại

Nguyên nhân: Không có bước ranking (xếp hạng). Cách xử lý:

  • Dùng hybrid search: kết hợp keyword search + semantic search.
  • Áp dụng re-ranking models (như cross-encoder/ms-marco-MiniLM-L-6-v2).

6. Best Practices

Mục tiêu Cách thực hiện
Giữ ngữ cảnh tự nhiên Dùng chunk overlapping (50–100 token)
Tăng độ chính xác Dùng mô hình embedding hiện đại, fine-tune nếu cần
Giảm latency Lưu vector vào FAISS hoặc Pinecone với index tối ưu
Tối ưu truy vấn Chuẩn hóa câu hỏi người dùng bằng NLP trước khi embed
Hiệu quả lâu dài Triển khai RAG (Retrieval-Augmented Generation) để kết hợp LLM

7. Semantic Search trong hệ thống RAG

Semantic Search là linh hồn của RAG (Retrieval-Augmented Generation). Trong RAG, Semantic Search đảm nhận phần “Retrieval” — tức là tìm đoạn nội dung liên quan nhất từ tài liệu nội bộ, sau đó LLM (như LLaMA, GPT, Mistral, Claude...) sẽ đọc và tạo câu trả lời chính xác, tự nhiên.


8. Kết luận

Semantic Search đã mở ra kỷ nguyên tìm kiếm thông minh hơn, nơi máy tính không chỉ “nhìn thấy từ khóa” mà còn “hiểu được ý nghĩa”. Nó là nền tảng cho nhiều ứng dụng hiện đại như RAG Chatbot, hệ thống hỏi đáp nội bộ doanh nghiệp, công cụ tìm tài liệu học tập, và các trợ lý ảo AI thông minh.