Vector Databases

📚 Giới Thiệu

Cơ sở dữ liệu vector là một loại cơ sở dữ liệu mới được thiết kế đặc biệt để lưu trữ, quản lý và tìm kiếm các vector nhúng (vector embeddings) có chiều cao. Các vector nhúng này là các biểu diễn số của dữ liệu phi cấu trúc (như văn bản, hình ảnh, âm thanh) và chúng là nền tảng của nhiều ứng dụng AI hiện đại.

Vector nhúng là gì?

Một vector nhúng là một danh sách các số (một vector) nắm bắt được "ý nghĩa" hoặc "bản chất" ngữ nghĩa của một đối tượng. Các mô hình học máy, đặc biệt là các mô hình ngôn ngữ lớn (LLM), được sử dụng để tạo ra các nhúng này. Các đối tượng có ý nghĩa tương tự sẽ có các vector nhúng gần nhau trong không gian vector.

Ví dụ: - embedding("king") - embedding("man") + embedding("woman") sẽ rất gần với embedding("queen"). - Nhúng của một hình ảnh một con mèo sẽ gần với nhúng của một hình ảnh một con hổ hơn là nhúng của một hình ảnh một chiếc ô tô.


❓ Tại sao cơ sở dữ liệu truyền thống không hoạt động?

Cơ sở dữ liệu truyền thống (quan hệ và NoSQL) không được thiết kế để xử lý loại dữ liệu này. Chúng rất giỏi trong việc lọc chính xác trên các trường có cấu trúc (ví dụ: WHERE status = 'active'), nhưng chúng không thể trả lời các câu hỏi như "tìm cho tôi tất cả các hình ảnh tương tự như hình ảnh này".

Việc tìm kiếm các vector tương tự trong một không gian có chiều cao (thường là hàng trăm hoặc hàng nghìn chiều) đòi hỏi các thuật toán chuyên dụng.


🚀 Cách hoạt động của cơ sở dữ liệu vector

Cơ sở dữ liệu vector sử dụng các thuật toán Tìm kiếm hàng xóm gần đúng (Approximate Nearest Neighbor - ANN) để tìm kiếm các vector tương tự một cách hiệu quả mà không cần phải so sánh vector truy vấn với mọi vector khác trong cơ sở dữ liệu.

Các thuật toán ANN phổ biến bao gồm:

  1. HNSW (Hierarchical Navigable Small World): Xây dựng một cấu trúc đồ thị phân cấp, nhiều lớp, cho phép điều hướng hiệu quả qua không gian vector.
  2. IVF (Inverted File Index): Phân cụm các vector và sau đó chỉ tìm kiếm trong các cụm có khả năng chứa các hàng xóm gần nhất.
  3. LSH (Locality-Sensitive Hashing): Sử dụng các hàm băm để nhóm các vector tương tự lại với nhau.

Quy trình làm việc điển hình

  1. Lập chỉ mục (Indexing): Dữ liệu phi cấu trúc (văn bản, hình ảnh) được chuyển đổi thành các vector nhúng bằng một mô hình ML. Các nhúng này sau đó được tải vào cơ sở dữ liệu vector và được lập chỉ mục bằng một thuật toán ANN.
  2. Truy vấn (Querying): Một truy vấn đến (ví dụ: một câu, một hình ảnh) cũng được chuyển đổi thành một vector nhúng. Cơ sở dữ liệu vector sau đó sử dụng chỉ mục ANN của nó để tìm các vector "gần nhất" (tương tự nhất) với vector truy vấn.
  3. Truy xuất: Cơ sở dữ liệu trả về các đối tượng tương ứng với các vector tương tự nhất được tìm thấy.

🛠️ Các trường hợp sử dụng

  • Tìm kiếm ngữ nghĩa (Semantic Search): Tìm kiếm dựa trên ý nghĩa, không chỉ là từ khóa. Ví dụ: tìm kiếm "quần áo mùa hè" có thể trả về hình ảnh của váy và quần short, ngay cả khi các từ đó không có trong mô tả.
  • Hệ thống đề xuất (Recommendation Systems): Đề xuất các mặt hàng, bài hát hoặc phim tương tự dựa trên lịch sử duyệt web của người dùng.
  • Truy xuất-Tăng cường-Tạo sinh (Retrieval-Augmented Generation - RAG): Nâng cao khả năng của các LLM bằng cách cung cấp cho chúng ngữ cảnh có liên quan được truy xuất từ một cơ sở kiến thức. Đây là một trường hợp sử dụng chính để giảm "ảo giác" của LLM.
  • Phát hiện bất thường: Xác định các điểm dữ liệu khác biệt đáng kể so với phần còn lại.
  • Nhận dạng hình ảnh và khuôn mặt.

🌐 Các cơ sở dữ liệu vector phổ biến

  • Pinecone: Một dịch vụ cơ sở dữ liệu vector được quản lý hoàn toàn, phổ biến.
  • Milvus: Một cơ sở dữ liệu vector mã nguồn mở, hiệu suất cao.
  • Weaviate: Một cơ sở dữ liệu vector mã nguồn mở với các khả năng tìm kiếm đồ thị.
  • Chroma DB: Một cơ sở dữ liệu vector mã nguồn mở tập trung vào sự đơn giản và tích hợp.
  • Postgres với pgvector: Một phần mở rộng cho PostgreSQL cho phép lưu trữ và truy vấn các vector nhúng, biến nó thành một giải pháp cơ sở dữ liệu vector khả thi.