Vector Database là gì? Hướng dẫn lưu trữ Dữ liệu vào Vector Database
21 Jan, 2025
Hướng nội
AuthorVector Database là một hệ thống lưu trữ và quản lý dữ liệu dưới dạng vector, giúp tìm kiếm và so sánh dữ liệu dựa trên độ tương đồng

Mục Lục
Trong thời đại công nghệ hiện nay, lượng dữ liệu mà chúng ta tạo ra mỗi ngày là vô cùng lớn – từ văn bản, hình ảnh, âm thanh cho đến video. Vấn đề không chỉ là làm sao để lưu trữ chúng mà còn là tìm kiếm thông tin nhanh chóng và chính xác khi cần.
Khác với các loại cơ sở dữ liệu truyền thống thường lưu trữ dữ liệu theo dạng bảng hoặc tài liệu, Vector Database lưu trữ dữ liệu dưới dạng vector embeddings – một dạng biểu diễn số giúp máy tính hiểu được mối quan hệ giữa các đối tượng. Điều này giúp hệ thống có thể tìm kiếm dữ liệu theo ý nghĩa, thay vì chỉ đơn thuần khớp theo từ khóa. Hãy cùng mình tìm hiểu kĩ hơn về Vector Database trong bài viết sau đây nhé.
1. Tìm hiểu về Vector và Embedding
Khi bạn nhập một câu hỏi vào một hệ thống AI như ChatGPT, nó không thực sự “hiểu” từng từ theo cách con người làm. Thay vào đó, nó chuyển đổi các từ đó thành các con số, gọi là vectors (vector), để xử lý và tìm ra ý nghĩa của chúng.
Hãy tưởng tượng bạn có một bản đồ thành phố. Mỗi địa điểm trên bản đồ có một vị trí cụ thể với tọa độ (ví dụ: kinh độ và vĩ độ). Tương tự như vậy, AI sử dụng embeddings, tức là một tập hợp các con số, để định vị từng từ hoặc câu trong một không gian nhiều chiều, giống như cách xác định vị trí trên bản đồ.

Ví dụ:
- Từ “mèo” có thể được thể hiện bằng một vector như
[0.2, 0.8, 0.5]
- Từ “chó” có thể là
[0.3, 0.7, 0.6]
- Từ “xe hơi” có thể là
[0.9, 0.1, 0.2]
Nhìn vào các con số này, ta thấy vector của "mèo" và "chó" khá gần nhau, có nghĩa là AI hiểu rằng chúng có ý nghĩa tương tự nhau. Trong khi đó, "xe hơi" có vector rất khác biệt, cho thấy nó không liên quan nhiều đến "mèo" hoặc "chó".
Việc chuyển đổi từ ngữ thành các con số giúp AI tìm kiếm sự tương đồng giữa các khái niệm một cách nhanh chóng và chính xác hơn, ngay cả khi bạn sử dụng những từ khác nhau nhưng có cùng ý nghĩa. Ví dụ, nếu bạn tìm kiếm “cún con”, AI có thể hiểu rằng bạn đang nói về “chó con” dù từ này không hoàn toàn giống nhau.
Những mô hình AI lớn như ChatGPT làm việc với hàng triệu từ và khái niệm khác nhau. Vì vậy, vector không chỉ đơn giản có 2-3 con số mà có thể lên đến hàng trăm hoặc hàng nghìn giá trị.
Hãy tưởng tượng bạn có một bản đồ chi tiết của toàn bộ thế giới thay vì chỉ một thành phố nhỏ. Khi số lượng điểm trên bản đồ tăng lên, việc tìm kiếm và phân tích sẽ trở nên khó khăn và tốn nhiều tài nguyên (thời gian, chi phí). Nếu không xử lý đúng cách, AI sẽ mất rất nhiều thời gian để đưa ra kết quả hoặc yêu cầu tài nguyên máy tính khổng lồ để vận hành.
Embeddings: Là quá trình chuyển đổi dữ liệu thô thành một dạng có thể đo lường được mức độ tương đồng và đồng thời giảm kích thước của dữ liệu.
2. Vector Database là gì?
Vector Database (Cơ sở dữ liệu vector) là một hệ thống lưu trữ và quản lý dữ liệu dưới dạng vector, tức là những dãy số biểu diễn thông tin như văn bản, hình ảnh hoặc âm thanh. Vector Database giúp tìm kiếm và so sánh dữ liệu dựa trên độ tương đồng, thay vì chính xác theo từ ngữ như trong các cơ sở dữ liệu truyền thống.
Hãy tưởng tượng bạn có một hệ thống tìm kiếm tài liệu giống như Google, và bạn muốn tìm kiếm nội dung liên quan đến Làm thế nào để nấu món phở bò?
.
Thay vì tìm kiếm từng từ trong câu, hệ thống sẽ hoạt động như sau:
- Chuyển đổi văn bản thành vector: Câu hỏi của bạn là
Làm thế nào để nấu món phở bò?
sẽ được chuyển thành một vector số (ví dụ:[0.12, 0.45, 0.89, ...]
) phản ánh nội dung và ý nghĩa của nó. Tương tự, các tài liệu trong hệ thống cũng đã được chuyển thành vectors trước đó. - Tìm kiếm trong Vector Database: Hệ thống sẽ không tìm kiếm theo từ khóa chính xác như "phở" hay "bò", mà sẽ so sánh vector của câu hỏi với vectors của các tài liệu khác.
Ví dụ, một bài viết có tiêu đề "Công thức nấu phở truyền thống tại nhà" sẽ có vector tương tự câu hỏi của bạn, trong khi một bài viết khác như "Cách làm bánh pizza" sẽ có vector rất khác. - Trả về kết quả phù hợp: Vector Database sẽ trả về tài liệu có nội dung liên quan nhất, chẳng hạn như:
Cách nấu phở bò ngon chuẩn vị Hà Nội
,Những bí quyết làm nước dùng phở đậm đà
. Những kết quả không liên quan nhưLàm bánh pizza
sẽ được xếp hạng thấp hơn hoặc loại bỏ.
3. Hướng dẫn lưu trữ dữ liệu vào Vector Database (ChromaDB)
Phần ví dụ này đã xuất hiện rất nhiều lần trong các bài viết về AI của mình, nên mình xin phép copy lại nhé. Bên dưới là một số embedding model mà Open AI cung cấp:
- text-embedding-3-large: Phù hợp cho các tác vụ yêu cầu độ chính xác cao như tìm kiếm ngữ nghĩa sâu, hệ thống gợi ý nâng cao và phân tích văn bản phức tạp.
- text-embedding-3-small: Thích hợp cho các ứng dụng thời gian thực hoặc trong môi trường có tài nguyên hạn chế, nơi tốc độ và hiệu quả được ưu tiên.
- text-embedding-ada-002: Được sử dụng rộng rãi trong các tác vụ như tìm kiếm ngữ nghĩa, phân loại văn bản và hệ thống gợi ý.
Đây là định dạng file document html của mình, các bạn nhớ lưu vào thành 1 file trong folder docs nhé.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Thông tin khóa học 200Lab</title>
</head>
<body>
<p>- Hiện tại 200Lab có các khóa học sau: DevOps, Backend, Frontend với giá lần lượt là 10$, 20$, và 30$ ở hình thức học Online. Offline thì cộng thêm 10$ trên giá Online.</p>
<p>- Các hình thức thanh toán bao gồm: thẻ tín dụng, chuyển khoản và trả góp.</p>
</body>
</html>
Đọc các file tài liệu định dạng html ở thư mục docs và lưu trữ vào ChromaDB.
from langchain.document_loaders import DirectoryLoader, TextLoader
loader = DirectoryLoader("docs", glob="./*.html", loader_cls=lambda path: TextLoader(path, encoding="utf-8"))
documents = loader.load()
len(documents)
from langchain.text_splitter import RecursiveCharacterTextSplitter
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
documents = text_splitter.split_documents(documents)
len(documents)
from langchain import embeddings
from langchain_openai import OpenAIEmbeddings
db_directory = 'db'
embedding = OpenAIEmbeddings(model="text-embedding-ada-002")
from langchain.vectorstores import Chroma
vector_db = Chroma.from_documents(
documents=documents,
embedding=embedding,
persist_directory=db_directory
)
# Trả về tất cả document đã lưu
vector_db.get()
4. Kết luận
Vector Database là công cụ quan trọng giúp lưu trữ và tìm kiếm dữ liệu hiệu quả bằng cách sử dụng vector embeddings để hiểu và so sánh ý nghĩa giữa các dữ liệu. Công nghệ này giúp tăng tốc độ xử lý, cải thiện độ chính xác và tối ưu chi phí khi làm việc với lượng dữ liệu lớn.
Nhờ vào khả năng tìm kiếm thông minh và mở rộng linh hoạt, Vector Database đang trở thành giải pháp thiết yếu trong các lĩnh vực như AI, hệ thống gợi ý và phân tích dữ liệu.
Các bài viết liên quan:
Bài viết liên quan
Lập trình backend expressjs
xây dựng hệ thống microservices- Kiến trúc Hexagonal và ứng dụng
- TypeScript: OOP và nguyên lý SOLID
- Event-Driven Architecture, Queue & PubSub
- Basic scalable System Design