Cơ sở dữ liệu vector: Nhập môn kỹ thuật [PDF]
(tge-data-web.nyc3.digitaloceanspaces.com)- Khi các ứng dụng AI xử lý dữ liệu phi cấu trúc và đa chiều, cơ sở dữ liệu vector ngày càng trở nên quan trọng như một hệ thống chuyên dụng để lưu trữ và tìm kiếm dữ liệu dưới dạng mảng số
- Điểm cốt lõi là thay vì dựa vào hàng, cột hay các quan hệ tường minh, hệ thống này kết nối các bản ghi dựa trên độ tương đồng giữa các thuộc tính dữ liệu để khai thác ý nghĩa ngầm
- Khi các quan hệ ngữ nghĩa được mã hóa thành vector đa chiều, có thể thực hiện nhanh hơn các tác vụ phân tích như tìm kiếm tương đồng, phân cụm và phân loại
- Trong AI tạo sinh, nó được dùng để quản lý khối lượng lớn dữ liệu đa chiều và cải thiện tốc độ huấn luyện và suy luận cũng như kết quả cá nhân hóa thông qua tìm kiếm vector tương đồng
- Lập chỉ mục nâng cao giúp thu hẹp đối tượng tìm kiếm xuống các tập con có mức độ liên quan cao, giảm thời gian tìm kiếm và cho phép các truy vấn phức tạp kết hợp độ tương đồng với những điều kiện khác
Các dạng dữ liệu mà cơ sở dữ liệu vector xử lý
- Cơ sở dữ liệu vector là loại cơ sở dữ liệu chuyên biệt để lưu trữ, quản lý và xử lý vector, tức biểu diễn dữ liệu đa chiều
- Khác với cơ sở dữ liệu truyền thống lưu dữ liệu theo hàng và cột, cơ sở dữ liệu vector lưu dữ liệu dưới dạng vector trong không gian đa chiều
- Mỗi vector là một mảng số biểu thị đặc trưng hoặc thuộc tính của một điểm dữ liệu
Kết nối dựa trên ngữ nghĩa và độ tương đồng
- Cơ sở dữ liệu truyền thống thiết lập quan hệ giữa các phần tử dựa trên liên kết hoặc phân cấp tường minh
- Cơ sở dữ liệu vector kết nối các bản ghi theo cách thuật toán dựa trên độ tương đồng của các thuộc tính dữ liệu
- Cách tiếp cận này có thể tạo ra những kết nối trực quan hơn dựa trên ý nghĩa ngầm bên trong các phần tử của cơ sở dữ liệu
Cấu trúc phù hợp với truy vấn phân tích
- Khi dữ liệu được mã hóa thành các vector đa chiều phản ánh quan hệ ngữ nghĩa, tức các mảng số, có thể thực hiện nhanh các tác vụ phân tích nâng cao
- Các tác vụ được hỗ trợ bao gồm tìm kiếm tương đồng, phân cụm và phân loại
- Mô hình tính toán này phù hợp với phát hiện mẫu, phân tích dự báo và các ứng dụng có yêu cầu phân tích cao
Ứng dụng trong AI và AI tạo sinh
- Sự phổ biến của AI và machine learning là nền tảng chính khiến nhu cầu về cơ sở dữ liệu vector tăng mạnh
- Trong lĩnh vực AI tạo sinh, cơ sở dữ liệu vector được thiết kế để lưu trữ và quản lý hiệu quả khối lượng lớn dữ liệu đa chiều
- Khả năng nhanh chóng tìm kiếm và truy xuất các vector tương đồng giúp đẩy nhanh đáng kể quá trình huấn luyện và suy luận của các mô hình AI tạo sinh
- Nó cũng được dùng để giúp các hệ thống AI tạo sinh cung cấp nội dung có mức độ cá nhân hóa và liên quan cao hơn cho người dùng
Lập chỉ mục và điều kiện tìm kiếm phức tạp
- Cơ sở dữ liệu vector sử dụng các kỹ thuật lập chỉ mục nâng cao để tra cứu và tìm kiếm nhanh các vector tương đồng
- Chỉ mục thu hẹp phạm vi tìm kiếm xuống những tập con vector nhỏ hơn nhưng có mức độ liên quan cao, từ đó giảm đáng kể thời gian tìm kiếm
- Nó cũng có thể xử lý truy vấn phức tạp kết hợp điều kiện độ tương đồng với các tiêu chí tìm kiếm khác
- Tính linh hoạt này đặc biệt quan trọng trong các ứng dụng AI nâng cao cần khả năng tìm kiếm tinh vi
1 bình luận
Ý kiến trên Hacker News
A Comprehensive Survey on Vector Database: Storage and Retrieval Technique, Challenge: https://arxiv.org/abs/2310.11703
Survey of Vector Database Management Systems: https://arxiv.org/abs/2310.14021
What are Embeddings: https://raw.githubusercontent.com/veekaybee/what_are_embeddi...
Ghi nguồn: https://twitter.com/eatonphil/status/1745524630624862314 và https://twitter.com/ChristophMolnar/status/17457316026829826...
Cũng có dưới dạng slide thuyết trình có chú thích và video 38 phút tùy chọn
Bài Wikipedia: https://en.wikipedia.org/wiki/Vector_database
Vector Database 101: https://zilliz.com/learn/introduction-to-unstructured-data
Láng giềng gần nhất xấp xỉ và tìm kiếm độ tương đồng: https://vinija.ai/concepts/ann-similarity-search/
Cơ sở dữ liệu phân tán: https://15445.courses.cs.cmu.edu/fall2021/notes/21-distribut...
Đây cũng là phần tôi tò mò, nên sẽ tốt nếu có tiêu chí hoặc quy tắc kinh nghiệm nào đó
Gần đây tôi đã thử xử lý embedding bằng công cụ
llmtuyệt vời của Simon Willison, và cách tiếp cận của nó là đơn giản nhất: lưu embedding trong SQLite cùng với vài UDF để tính khoảng cáchSự đơn giản này rất hấp dẫn, nhưng khi lưu lượng và dữ liệu vượt qua một mức nào đó thì chắc sẽ cần một cơ sở dữ liệu chuyên biệt hơn; tôi muốn biết ranh giới đó nằm khoảng đâu
Việc tìm kiếm được làm theo cách đơn giản nhất là quét toàn bộ rồi so sánh bằng khoảng cách Hamming (
xorvàpopcount), và trên một lõi đơn của MBP đời 2011, nó có thể quét 200.000 hash trong dưới 10ms để tìm mục giống nhấtĐại khái chỉ khoảng 1.000 dòng code nên cuối cùng không cần cơ sở dữ liệu vector bên ngoài
Nhưng vượt mức đó thì các lựa chọn khả dụng như Pinecone trở nên phức tạp, chậm và đắt một cách vô lý
Theo tôi biết, lựa chọn tốt nhất là turbopuffer.com, rẻ hơn Pinecone khoảng 100 lần và có vẻ thực sự scale được
Nó không có trong danh sách vector DB được slide khuyến nghị, nên tôi nêu ra như một gợi ý đáng cân nhắc
https://news.ycombinator.com/item?id=38703943
Bài giảng này pha trộn giữa lý thuyết và demo, bao quát các khái niệm cơ bản về vector, cơ sở dữ liệu vector, chỉ mục, tìm kiếm độ tương đồng, và kết thúc bằng demo cơ sở dữ liệu Pinecone và Weaviate
Ở bước này, phán đoán của con người được đưa vào một cách rất tinh vi, đôi khi gần như bị xem nhẹ, khiến bề ngoài trông như một hệ thống “chỉ là toán học” được tự động hóa rất cao
Lấy âm thanh làm ví dụ: để tạo một vector N chiều, ta sẽ trích xuất những đặc trưng nào? Câu trả lời dễ dãi có thể là “càng nhiều càng tốt”
Nhưng thứ nhất, ngay cả những đặc trưng có thể đặt tên dễ dàng cũng có thể không truy cập được trong dữ liệu đặc trưng hóa
Thứ hai, nếu không có kiến thức miền sâu, bạn có thể thậm chí không biết đến sự tồn tại của những đặc trưng tiềm năng nên dùng
Thứ ba, ngay cả khi có kiến thức miền sâu, bạn vẫn có thể không biết những đặc trưng tiềm năng nào nên dùng
Ví dụ, giả sử bạn là người hâm mộ nhạc tối giản dịch pha kiểu Reich. Bạn truy vấn gián tiếp vào cơ sở dữ liệu vector để tìm loại nhạc giống các tác phẩm tiêu biểu của thể loại này, chẳng hạn như Piano Phase
Cơ sở dữ liệu sử dụng nhiều đặc trưng âm thanh và âm nhạc như tần số chủ đạo, khoảng cách giữa các lần bắt đầu nốt, âm lượng, đặc trưng âm sắc dựa trên phân bố tần số, âm gốc và thang âm biểu kiến
Nhưng nếu tập đặc trưng của cơ sở dữ liệu không có “khoảng cách giữa các nốt theo thời gian là đều nhau”, thì truy vấn có thể tìm được những thứ tương tự về âm sắc, hòa âm, giai điệu và nhịp điệu, nhưng việc tìm các bản nhạc cùng chia sẻ đặc điểm cốt lõi là pha tương đối của hai tuyến giai điệu thay đổi đều đặn sẽ hoàn toàn phó mặc cho may rủi
Không khó để tạo ra các ví dụ tương tự với bất kỳ loại dữ liệu nào như thị giác, văn bản, số liệu, v.v.
Tất nhiên điều này không có nghĩa là cơ sở dữ liệu vector và phân loại đặc trưng là vô dụng
Một trong những câu hỏi ban đầu cần đặt ra khi tìm thấy hoặc không tìm thấy mẫu khớp trong một dataset cụ thể là liệu có bảo đảm mạnh rằng tập đặc trưng là đầy đủ hay không, và nếu không thì phải mở rộng nó như thế nào
Cơ sở dữ liệu vector được thiết kế cho tìm kiếm và truy xuất kết quả tìm kiếm
Thông thường, cách tạo vector là tinh chỉnh một mô hình tiền huấn luyện quy mô lớn rồi trích xuất biểu diễn bên trong của nó
Vì dataset có chứa các truy vấn thành công và kết quả truy xuất, chỉ cần dùng đầu vào thô để tối ưu hàm mất mát theo mục tiêu độ tương tự mà cơ sở dữ liệu vector hỗ trợ
Với các modality phổ biến như bảng, văn bản, hình ảnh, âm thanh, gần như không cần phán đoán của con người trong việc chọn đặc trưng, cứ áp dụng attention là được
Nhân tiện, các mô hình văn bản-thành-vector mới như E5-Mistral thậm chí không cần dataset được con người tuyển chọn
Bạn đã chỉ đúng điểm “không biết điều mình không biết”
Rất vui khi lại gặp một người thích Steve Reich, và tôi tò mò muốn được gợi ý các bản nhạc giống Music for 18 Musicians mà tôi yêu thích
Đây là một phần tổng quan tuyệt vời, nhưng mục cuối không xử lý câu hỏi quen thuộc là nên dùng kho vector như Postgres+pgvector hay cơ sở dữ liệu vector như Pinecone
Tôi muốn thấy thêm các bài trình bày bàn về nhiều đánh đổi như tốc độ truy vấn, tốc độ chèn và xây dựng chỉ mục, mức độ dễ dùng, v.v. để giúp chọn lựa phù hợp cho từng ứng dụng
PR luôn được hoan nghênh
Cơ sở dữ liệu là kho lưu trữ có gắn thêm đủ loại tính năng
digitaloceanspaces.com là nhà cung cấp hosting kiểu S3, nên sẽ tốt hơn nếu Hacker News xử lý đặc biệt và hiển thị kiểu như tge-data-web.nyc3.digitaloceanspaces.com thay vì chỉ đơn giản hiện domain là digitaloceanspaces.com
Tuy nhiên S3 dường như cũng có cùng vấn đề: https://news.ycombinator.com/item?id=38876761
Ở nơi khác đã có tiền lệ. Các site subdomain x.github.io được xử lý đặc biệt ở đây: https://news.ycombinator.com/from?site=lfranke.github.io
Tài liệu này có vẻ khá nguy hiểm nếu kỹ sư lấy làm điểm xuất phát
Những cách diễn đạt như được gom cụm theo ngữ nghĩa hoặc được tối ưu cho phân tích là đáng nghi vấn
Việc gom cụm phụ thuộc vào embedding đã tính. Nếu bạn tin rằng embedding xấp xỉ tốt ý nghĩa của dữ liệu, có thể nghĩ theo cách đó cũng ổn
Nhưng rất dễ tưởng tượng ra các embedding phá vỡ điều này. Ví dụ, ngay cả khi đưa một file âm thanh và một file văn bản có cùng ý nghĩa vào cùng một quy trình embedding, nếu nó không phải multimodal thì trong không gian vector embedding chúng có khả năng nằm rất xa nhau
Tôi cho rằng trong tương lai chắc chắn sẽ có các embedding đặt những thứ gần nhau trong không gian vector theo cách sử dụng hơn là theo độ tương tự ngữ nghĩa
Nếu xây dựng hệ thống gợi ý, bạn sẽ không muốn gom gần nhiều biến thể của một giao dịch mua một lần
Ví dụ, về mặt ngữ nghĩa, chuyến bay giống nhất có thể là chuyến bay khác đến cùng điểm đến vào giờ khác hoặc chuyến bay đến sân bay gần đó, nhưng trên thực tế bạn có thể muốn nhóm nó với khách sạn mà những người mua chuyến bay đó thường mua kèm
Cơ sở dữ liệu vector cũng có thể đưa thêm các chiều như nhận thức thời gian vào dữ liệu. Không nhất thiết phải dùng vector mã hóa ngữ nghĩa
Vì vậy cơ sở dữ liệu vector được tối ưu cho tra cứu hoặc tìm kiếm dựa trên vector đầu vào, chứ không giống truy vấn OLAP
Nó gần với Elasticsearch hơn là Snowflake. Nếu bạn dùng cơ sở dữ liệu vector với kỳ vọng làm báo cáo hoặc phân tích quy mô lớn trên không gian vector, theo tôi biết hiện chưa có sản phẩm nào thực sự dùng được ngay
Tôi hiểu việc đi từ ảnh quả táo đến vector biểu thị “tính chất quả táo”, rồi so sánh vector đó với các vector khác bằng toán học thông thường
Điều tôi không hiểu là ai/cái gì nhận hình ảnh làm đầu vào và xuất ra vector
Tài liệu cũng vậy. Nếu muốn thêm một chiều bằng cách đưa thêm một con số vào mảng, phải sửa phần nào của cơ sở dữ liệu vector để chiều đó được tính vào phép tính vector?
Hay quá trình biến tài liệu, hình ảnh, hoặc bất kỳ thứ gì thành biểu diễn vector được thực hiện theo cách khác bên ngoài cơ sở dữ liệu?
Sửa: tính embedding có vẻ là việc của thuật toán học máy, nhưng như vậy thì thuật toán đó cũng phải được huấn luyện trước. Rốt cuộc lại dẫn đến một chuỗi huấn luyện vô tận
Tôi không hiểu vì sao PQ lại được liệt kê là “chiến lược chỉ mục”
PQ là kỹ thuật nén/lượng tử hóa vector, không phải phương tiện phân chia không gian tìm kiếm
Bạn có thể mã hóa vector bằng PQ trong tìm kiếm vét cạn/chỉ mục phẳng, chỉ mục IVF, HNSW; trong Faiss chúng lần lượt là IndexPQ, IndexIVFPQ, IndexHNSWPQ
Nếu muốn, cũng có thể dùng với k-D tree hoặc ANNOY
Câu “khi tốc độ truy vấn quan trọng hơn độ chính xác, hãy dùng HNSW hoặc Annoy cho dataset rất lớn” cũng có vấn đề
Các kỹ thuật dựa trên đồ thị có overhead bộ nhớ và chi phí xây dựng lớn, và không thực tế với dataset quy mô 1 tỷ
Thông thường chúng chính xác hơn và nhanh hơn kỹ thuật IVF, vì để đạt độ chính xác tương tự IVF phải thăm nhiều cell
Ngược lại, khác với các kỹ thuật khác, IVF có thể mở rộng tới cơ sở dữ liệu quy mô 1 nghìn tỷ mà không có overhead lớn, đồng thời vẫn cung cấp đánh đổi hợp lý giữa tốc độ và độ chính xác
Tôi sẽ nói là “hãy dùng nó cho dataset cỡ trung, khi tốc độ truy vấn quan trọng nhưng bạn cũng muốn độ chính xác cao, và chỉ mục phẳng/vét cạn là không khả thi”
Trước tiên làm PQ, rồi thực hiện KNN trên vector rời rạc mới
Làm vậy có thể nén không gian từ vựng về kích thước cố định
Trong bảng ở slide 15, có vẻ như các ô Indexing & Search Efficiency của Traditional Databases và Vector Databases đã bị hoán đổi cho nhau
Có đề xuất nào về cơ sở dữ liệu embedding nhúng giống SQLite không?
Dù chỉ dùng cho các bài toán quy mô nhỏ, nhưng nếu tiện hơn LMDB + FAISS thì tốt
Nó có thể chạy bên trong một process Python, lưu nội dung vào SQLite và hỗ trợ lưu vector embedding ở các định dạng chỉ mục vector cục bộ (Faiss, HNSW, Annoy)
Nhân tiện, tôi là tác giả chính của txtai
https://github.com/patricktrainer/hackernews-comment-search
llmcủa Simon Willison chỉ dùng SQLite và vài UDFSự đơn giản đó rất hấp dẫn, nhưng tôi chưa thật sự hình dung được khi nào và vì sao nó sẽ không còn đủ nữa
Với Go, gần đây tôi bắt đầu tạo chromem-go, lấy cảm hứng từ giao diện của Chroma: https://github.com/philippgille/chromem-go
Chưa có tính năng nâng cao hay phù hợp cho quy mô lớn, nhưng demo RAG thì chạy được
[1] https://github.com/chroma-core/chroma