Vector database là gì? Cơ sở dữ liệu cho thời đại AI

  • author-image

    Nguyễn Đình Cường

  • blog-tag
  • blog-comment 0 comment
  • created-date 09 Nov, 2026
blog-thumbnail

Cơ sở dữ liệu quen thuộc giỏi tìm "bản ghi có id bằng 5" hay "tên chứa chữ An". Nhưng nếu bạn muốn tìm "những bài viết có ý nghĩa gần giống câu này" thì sao? Đó là lúc vector database xuất hiện. Hãy xem nó hoạt động thế nào và khi nào bạn thật sự cần.

Embedding: biến ý nghĩa thành con số

Một mô hình embedding nhận văn bản (hoặc ảnh, âm thanh) và trả về một dãy số, gọi là vector, thường dài vài trăm đến vài nghìn chiều. Hai nội dung có ý nghĩa gần nhau sẽ cho hai vector nằm gần nhau trong không gian. Chẳng hạn "cách đổi mật khẩu" và "quên mật khẩu phải làm sao" nằm gần nhau, dù không trùng từ nào.

Vector database làm gì?

Vector database lưu các vector cùng dữ liệu đi kèm (nội dung gốc, id, nhãn) và cho phép truy vấn láng giềng gần nhất: cho một vector, trả về k vector giống nó nhất. Việc này nếu làm vét cạn trên hàng triệu vector sẽ chậm, nên các hệ thống dùng chỉ mục xấp xỉ để tìm nhanh, đổi lại kết quả có thể không tuyệt đối chính xác.

Cách đo độ giống nhau

  • Cosine similarity: đo góc giữa hai vector, phổ biến cho văn bản.
  • Khoảng cách Euclid: đo khoảng cách thẳng giữa hai điểm.
  • Tích vô hướng (dot product): nhanh, hay dùng khi vector đã chuẩn hóa.

Hãy dùng đúng phép đo mà mô hình embedding khuyến nghị, vì chọn sai có thể làm kết quả lệch.

Minh họa với Python

Ví dụ nhỏ tìm láng giềng gần nhất bằng cách vét cạn. Với dữ liệu ít thì cách này hoàn toàn ổn:

import math

def cosine(a, b):
    dot = sum(x * y for x, y in zip(a, b))
    return dot / (math.sqrt(sum(x*x for x in a)) * math.sqrt(sum(y*y for y in b)))

items = {
    "mèo": [0.9, 0.1],
    "chó": [0.8, 0.2],
    "xe máy": [0.1, 0.9],
}

def search(query, k=2):
    scored = [(name, cosine(query, vec)) for name, vec in items.items()]
    return sorted(scored, key=lambda t: t[1], reverse=True)[:k]

print(search([0.85, 0.15]))

Các lựa chọn phổ biến

  1. Dịch vụ chuyên dụng: các cơ sở dữ liệu vector chuyên biệt, tối ưu cho tìm kiếm xấp xỉ ở quy mô lớn.
  2. Mở rộng cho cơ sở dữ liệu quen thuộc: PostgreSQL có tiện ích mở rộng lưu và tìm kiếm vector; một số hệ thống như Redis hay Elasticsearch cũng có chức năng tương tự.
  3. Thư viện chạy trong tiến trình: phù hợp thử nghiệm và dữ liệu vừa phải.

Nếu bạn đã dùng PostgreSQL, thử tiện ích mở rộng vector trước thường là cách ít phức tạp nhất.

Khi nào bạn cần vector database?

  • Tìm kiếm theo ý nghĩa thay vì từ khóa chính xác.
  • Hệ thống gợi ý: "sản phẩm tương tự", "bài viết liên quan".
  • Chatbot dùng RAG để truy xuất tài liệu.
  • Tìm ảnh giống nhau, phát hiện nội dung trùng lặp.

Khi nào chưa cần?

Nếu dữ liệu chỉ vài nghìn mục, tìm kiếm từ khóa thông thường hoặc vét cạn trong bộ nhớ có thể đủ. Cũng đừng bỏ qua tìm kiếm từ khóa: kết hợp cả hai (tìm kiếm lai) thường cho kết quả tốt nhất khi cần khớp chính xác tên riêng hoặc mã sản phẩm.

Lưu ý khi triển khai

  • Lưu kèm thông tin phiên bản mô hình embedding, vì đổi mô hình là phải tính lại toàn bộ vector.
  • Đồng bộ dữ liệu: khi nội dung gốc đổi, vector cũng phải cập nhật.
  • Cân nhắc quyền truy cập và dữ liệu nhạy cảm, vì vector vẫn mang thông tin của văn bản gốc.
  • Đánh giá chất lượng bằng bộ câu hỏi mẫu thay vì cảm tính.

Câu hỏi thường gặp

Vector database khác gì chỉ mục tìm kiếm toàn văn?

Tìm kiếm toàn văn khớp theo từ ngữ, còn vector tìm theo ý nghĩa. Hai cách có thế mạnh khác nhau và thường được kết hợp.

Có cần tự huấn luyện mô hình embedding không?

Hiếm khi. Phần lớn dự án dùng mô hình embedding có sẵn, chỉ cần chọn mô hình hỗ trợ tốt ngôn ngữ của bạn và đánh giá trên dữ liệu thật.

Kết luận

Vector database không thay thế cơ sở dữ liệu quan hệ mà bổ sung khả năng tìm theo ý nghĩa. Khi hiểu embedding và phép đo độ giống, bạn có thể tự tin thiết kế tính năng tìm kiếm thông minh và các ứng dụng AI truy xuất dữ liệu.

Để học vững cơ sở dữ liệu từ nền tảng, mời bạn xem các khóa học liên quan tại codebem.com.

author_photo
Nguyễn Đình Cường

0 comment