Khám phá Tìm kiếm Vector trong MongoDB Atlas với Ollama: Tìm bài hát Eurovision bằng ý nghĩa!
Lê Lân
0
Hướng Dẫn Triển Khai Tìm Kiếm Vector Với MongoDB và Ollama Trên Bộ Dữ Liệu Eurovision
Mở Đầu
Tìm kiếm ngữ nghĩa dựa trên vector đang trở thành một công nghệ then chốt trong xử lý dữ liệu văn bản, giúp cải thiện khả năng tìm kiếm thông tin và gợi ý dựa trên nội dung thực sự của văn bản. Trong bài viết này, chúng ta sẽ tìm hiểu cách áp dụng kỹ thuật này trên một bộ dữ liệu thực tế — bài hát Eurovision — sử dụng MongoDB Atlas kết hợp với mô hình ngôn ngữ lớn (LLM) Ollama để tạo embeddings và thực hiện tìm kiếm vector.
Bộ dữ liệu gồm lời bài hát Eurovision cả bản gốc và bản dịch tiếng Anh, được tải từ Kaggle. Qua đó, ta xây dựng một pipeline xử lý từ tải dữ liệu, nạp vào MongoDB, tạo vector embeddings bằng Ollama, rồi thiết lập chỉ mục tìm kiếm và triển khai truy vấn tìm kiếm ngữ nghĩa hiệu quả với các câu truy vấn dạng tự nhiên. Bài viết sẽ hướng dẫn chi tiết từng bước, đồng thời đi kèm ví dụ minh họa rõ ràng.
1. Chuẩn Bị Dữ Liệu và Môi Trường Phát Triển
1.1 Tải và Giải Nén Dữ Liệu Eurovision
Bộ dữ liệu gồm lời bài hát Eurovision được lưu trên Kaggle, có cả bản gốc và bản dịch tiếng Anh. Bạn có thể tải về và giải nén bằng các lệnh terminal như sau:
Dữ liệu tải về ở định dạng JSON, chứa nhiều trường như Year, Country, Artist, Song, Lyrics translation, v.v.
1.2 Cài Đặt MongoDB Atlas CLI và Khởi Động Local Instance
Tiếp theo, ta cần sử dụng MongoDB Atlas CLI để thiết lập một instance MongoDB cục bộ (local) chạy trong Docker. Thao tác có thể thực hiện bằng lệnh:
curl https://fastdl.mongodb.org/mongocli/mongodb-atlas-cli_1.41.1_linux_arm64.tar.gz | tar -xzvf - && alias atlas=$PWD/mongodb-atlas-cli_1.41.1_linux_arm64/bin/atlas
Điều này đảm bảo ta có một môi trường MongoDB tương thích đầy đủ, phục vụ cho quá trình thử nghiệm.
1.3 Cài Đặt MongoDB Shell Mongosh
Mongosh giúp bạn tương tác với MongoDB thông qua JavaScript và Node.js. Cài đặt và alias bằng lệnh:
curl https://downloads.mongodb.com/compass/mongosh-2.4.2-linux-arm64.tgz | tar -xzvf - && alias mongosh=$PWD/mongosh-2.4.2-linux-arm64/bin/mongosh
1.4 Cài Đặt Ollama Large Language Model (LLM)
Để tạo vector embeddings cho lời bài hát, ta cần một mô hình ngôn ngữ lớn tại chỗ, tránh phụ thuộc dịch vụ bên ngoài. Ollama cung cấp điều này với mô hình nomic-embed-text:
console.log(`Added embeddings for ${doc.Year}${doc.Country}`);
}
} catch (error) {
console.error('Error:', error);
}
}
calculateEmbeddings(db.eurovision);
Quá trình này có thể tốn thời gian vì tính toán embeddings cho tất cả bài hát trong bộ dữ liệu.
4. Thiết Lập Chỉ Mục Tìm Kiếm Vector Trong MongoDB
4.1 Tạo Chỉ Mục Vector Search
MongoDB Atlas cung cấp khả năng tạo chỉ mục tìm kiếm vector dựa trên cosine similarity. Với mô hình nomic-embed-text có kích thước embeddings 768 chiều, ta tạo chỉ mục như sau:
db.eurovision.createSearchIndex(
"vectorSearchOnLyrics",
"vectorSearch",
{
fields: [
{
type: "vector",
numDimensions: 768,
path: "embedding",
similarity: "cosine"
}
]
}
);
4.2 Kiểm Tra Các Chỉ Mục Đã Tạo
db.eurovision.getSearchIndexes();
Lưu ý: Tên chỉ mục cần chính xác khi truy vấn, sai tên sẽ không có kết quả trả về.
5. Truy Vấn Tìm Kiếm Vector Với Pipeline Tổng Hợp (Aggregation Pipeline)
5.1 Hàm Truy Vấn Vector Search
Ta xây dựng hàm nhận vào câu truy vấn dạng tự nhiên (prompt), chuyển nó thành embedding và tìm kiếm các bài hát tương tự:
const ollama = require("ollama");
asyncfunctionvectorSearch(collection, prompt) {
try {
const data = { model: 'nomic-embed-text', prompt: prompt };
console.error('Error during vector search:', error);
}
}
5.2 Một Số Ví Dụ Truy Vấn
Dùng các prompt bằng nhiều ngôn ngữ hoặc mô tả khác nhau:
vectorSearch(db.eurovision, "un nino y un pájaro");
vectorSearch(db.eurovision, "a wax doll singing");
vectorSearch(db.eurovision, "Un chico llamado Mercy");
vectorSearch(db.eurovision, "lyrics were about being unique and not like the others");
Kết quả trả về bao gồm các bài hát có lời bài hát sát nghĩa nhất với prompt, thường là top 1 hoặc 2.
6. Kết Luận
Bài viết đã hướng dẫn cách thiết lập và triển khai tìm kiếm vector bằng MongoDB Atlas kết hợp với mô hình lớn Ollama trên dữ liệu lời bài hát Eurovision. Qua quy trình:
Tải và chuẩn bị dữ liệu
Nạp dữ liệu và tạo vector embeddings trong MongoDB
Thiết lập chỉ mục vector và thực hiện tìm kiếm hiệu quả
Việc lưu embeddings trực tiếp trong các tài liệu giúp giữ tính nhất quán và tận dụng mô hình dữ liệu document của MongoDB. Đây cũng là bước đầu cho các ứng dụng AI tích hợp sâu bên trong cơ sở dữ liệu.
Bước tiếp theo có thể là tích hợp trực tiếp các mô hình AI như Voyager AI vào database, để tạo embedding và truy vấn theo thời gian thực mà không cần di chuyển dữ liệu.
Hãy thử áp dụng phương pháp này cho các bộ dữ liệu văn bản khác để khai thác sức mạnh của tìm kiếm ngữ nghĩa!