paint-brush
6 thách thức quan trọng của việc tạo ra tìm kiếm vectơtừ tác giả@rocksetcloud
8,897 lượt đọc
8,897 lượt đọc

6 thách thức quan trọng của việc tạo ra tìm kiếm vectơ

từ tác giả Rockset6m2024/04/23
Read on Terminal Reader

dài quá đọc không nổi

Việc tạo ra tìm kiếm vectơ bao gồm việc giải quyết các thách thức trong việc lập chỉ mục, lọc siêu dữ liệu, ngôn ngữ truy vấn và quản lý vòng đời vectơ. Hiểu được những sự phức tạp này là rất quan trọng để triển khai và phát triển ứng dụng thành công.
featured image - 6 thách thức quan trọng của việc tạo ra tìm kiếm vectơ
Rockset HackerNoon profile picture
0-item


Bạn đã quyết định sử dụng tìm kiếm vectơ trong ứng dụng, sản phẩm hoặc doanh nghiệp của mình. Bạn đã nghiên cứu cách thức và lý do nhúng và tìm kiếm vectơ giúp giải quyết được vấn đề hoặc có thể kích hoạt các tính năng mới. Bạn đã nhúng chân vào khu vực nóng hổi đang nổi lên của các thuật toán lân cận gần nhất và cơ sở dữ liệu vectơ.


Gần như ngay lập tức khi tạo ra các ứng dụng tìm kiếm vector, bạn sẽ bắt đầu gặp phải những khó khăn rất khó khăn và có thể không lường trước được. Blog này cố gắng trang bị cho bạn một số kiến thức về tương lai của bạn, những vấn đề bạn sẽ gặp phải và những câu hỏi mà bạn có thể chưa biết mà bạn cần hỏi.


1. Tìm kiếm vectơ ≠ cơ sở dữ liệu vectơ

Tìm kiếm vectơ và tất cả các thuật toán thông minh liên quan là trí thông minh trung tâm của bất kỳ hệ thống nào đang cố gắng tận dụng vectơ. Tuy nhiên, tất cả cơ sở hạ tầng liên quan để làm cho nó trở nên hữu ích tối đa và sẵn sàng sản xuất là rất lớn và rất rất dễ bị đánh giá thấp.


Nói một cách rõ ràng nhất có thể: một cơ sở dữ liệu vectơ sẵn sàng sản xuất sẽ giải quyết được rất nhiều vấn đề về “cơ sở dữ liệu” hơn là các vấn đề về “vectơ” . Bản thân tìm kiếm vectơ không phải là một vấn đề “dễ” (và chúng tôi sẽ đề cập đến nhiều vấn đề phụ khó dưới đây), nhưng hàng núi vấn đề về cơ sở dữ liệu truyền thống mà cơ sở dữ liệu vectơ cần giải quyết chắc chắn vẫn là “phần khó”. ”


Cơ sở dữ liệu giải quyết một loạt các vấn đề rất thực tế và được nghiên cứu rất kỹ từ tính nguyên tử và giao dịch, tính nhất quán, hiệu suất và tối ưu hóa truy vấn, độ bền, sao lưu, kiểm soát truy cập, nhiều bên thuê, mở rộng quy mô và phân mảnh, v.v. Cơ sở dữ liệu vectơ sẽ yêu cầu câu trả lời ở tất cả các kích thước này cho bất kỳ sản phẩm, doanh nghiệp hoặc doanh nghiệp nào.


Hãy hết sức cảnh giác với “hạ tầng tìm kiếm vectơ” được triển khai tại nhà. Không khó để tải xuống thư viện tìm kiếm vectơ hiện đại và bắt đầu tìm kiếm gần đúng gần nhất theo cách của bạn để hướng tới một nguyên mẫu thú vị. Tuy nhiên, tiếp tục đi theo con đường này là con đường dẫn đến việc vô tình phát minh lại cơ sở dữ liệu của riêng bạn. Đó có lẽ là sự lựa chọn mà bạn muốn thực hiện một cách có ý thức.


2. Lập chỉ mục gia tăng của vectơ

Do tính chất của các thuật toán tìm kiếm vectơ ANN hiện đại nhất, việc cập nhật dần dần chỉ mục vectơ là một thách thức lớn. Đây là một “vấn đề khó” được nhiều người biết đến. Vấn đề ở đây là các chỉ mục này được sắp xếp cẩn thận để tra cứu nhanh và bất kỳ nỗ lực nào nhằm cập nhật dần dần chúng bằng các vectơ mới sẽ nhanh chóng làm giảm các thuộc tính tra cứu nhanh. Như vậy, để duy trì việc tra cứu nhanh chóng khi vectơ được thêm vào, các chỉ mục này cần được xây dựng lại từ đầu theo định kỳ.


Bất kỳ ứng dụng nào hy vọng truyền phát các vectơ mới liên tục, với yêu cầu cả hai vectơ đều hiển thị nhanh trong chỉ mục và các truy vấn vẫn nhanh, sẽ cần được hỗ trợ nghiêm túc cho vấn đề “lập chỉ mục gia tăng”. Đây là lĩnh vực rất quan trọng để bạn hiểu về cơ sở dữ liệu của mình và là nơi thích hợp để đặt một số câu hỏi khó.


Có nhiều cách tiếp cận tiềm năng mà cơ sở dữ liệu có thể thực hiện để giúp giải quyết vấn đề này cho bạn. Một cuộc khảo sát thích hợp về các phương pháp tiếp cận này sẽ lấp đầy nhiều bài đăng trên blog có quy mô này. Điều quan trọng là phải hiểu một số chi tiết kỹ thuật trong cách tiếp cận cơ sở dữ liệu của bạn vì nó có thể gây ra những sự cân bằng hoặc hậu quả không mong muốn trong ứng dụng của bạn. Ví dụ: nếu cơ sở dữ liệu chọn thực hiện lập lại chỉ mục đầy đủ với một số tần suất, điều đó có thể gây ra tải CPU cao và do đó ảnh hưởng định kỳ đến độ trễ truy vấn.


Bạn nên hiểu nhu cầu lập chỉ mục gia tăng của ứng dụng và khả năng của hệ thống mà bạn đang dựa vào để phục vụ bạn.


3. Độ trễ dữ liệu cho cả vectơ và siêu dữ liệu

Mọi ứng dụng phải hiểu nhu cầu và khả năng chịu đựng độ trễ dữ liệu của nó. Các chỉ mục dựa trên vectơ, ít nhất là theo các tiêu chuẩn cơ sở dữ liệu khác, có chi phí lập chỉ mục tương đối cao. Có sự cân bằng đáng kể giữa chi phí và độ trễ dữ liệu.


Bao lâu sau khi bạn 'tạo' một vectơ, bạn có cần nó để có thể tìm kiếm được trong chỉ mục của mình không? Nếu sớm thì độ trễ vectơ là điểm thiết kế chính trong các hệ thống này.


Điều tương tự cũng áp dụng cho siêu dữ liệu của hệ thống của bạn. Theo nguyên tắc chung, việc thay đổi siêu dữ liệu là khá phổ biến (ví dụ: thay đổi xem người dùng có trực tuyến hay không) và do đó, điều rất quan trọng là các truy vấn được lọc siêu dữ liệu phải phản ứng nhanh với các bản cập nhật siêu dữ liệu. Lấy ví dụ trên, sẽ không hữu ích nếu tìm kiếm vectơ của bạn trả về một truy vấn cho một người gần đây đã ngoại tuyến!


Nếu bạn cần truyền vectơ liên tục vào hệ thống hoặc cập nhật siêu dữ liệu của các vectơ đó liên tục, bạn sẽ yêu cầu kiến trúc cơ sở dữ liệu cơ bản khác với trường hợp sử dụng của bạn, ví dụ: xây dựng lại chỉ mục đầy đủ mỗi tối để sử dụng vào ngày hôm sau .


4. Lọc siêu dữ liệu

Tôi sẽ nhấn mạnh điểm này: Tôi nghĩ trong hầu hết mọi trường hợp, trải nghiệm sản phẩm sẽ tốt hơn nếu cơ sở hạ tầng tìm kiếm vectơ cơ bản có thể được tăng cường bằng cách lọc siêu dữ liệu (hoặc tìm kiếm kết hợp).


Chỉ cho tôi tất cả các nhà hàng tôi có thể thích (tìm kiếm vectơ) nằm trong phạm vi 10 dặm và có giá từ thấp đến trung bình (bộ lọc siêu dữ liệu).


Phần thứ hai của truy vấn này là mệnh đề WHERE giống như sql truyền thống được giao với, trong phần đầu tiên, một kết quả tìm kiếm vectơ. Do tính chất của các chỉ mục vectơ lớn, tương đối tĩnh, tương đối nguyên khối này nên rất khó thực hiện tìm kiếm vectơ + siêu dữ liệu chung một cách hiệu quả. Đây là một trong những “vấn đề khó khăn” nổi tiếng khác mà cơ sở dữ liệu vectơ cần thay mặt bạn giải quyết.


Có nhiều phương pháp kỹ thuật mà cơ sở dữ liệu có thể áp dụng để giải quyết vấn đề này cho bạn. Bạn có thể “lọc trước”, nghĩa là áp dụng bộ lọc trước, sau đó thực hiện tra cứu vectơ. Cách tiếp cận này gặp phải vấn đề là không thể tận dụng hiệu quả chỉ mục vectơ dựng sẵn. Bạn có thể “hậu lọc” kết quả sau khi thực hiện tìm kiếm vectơ đầy đủ. Điều này rất hiệu quả trừ khi bộ lọc của bạn có tính chọn lọc cao, trong trường hợp đó, bạn dành rất nhiều thời gian để tìm các vectơ mà sau đó bạn sẽ loại bỏ vì chúng không đáp ứng các tiêu chí đã chỉ định. Đôi khi, như trường hợp của Rockset, bạn có thể thực hiện lọc “một giai đoạn” nhằm cố gắng hợp nhất giai đoạn lọc siêu dữ liệu với giai đoạn tra cứu vectơ theo cách duy trì tốt nhất cả hai thế giới.


Nếu bạn tin rằng việc lọc siêu dữ liệu sẽ rất quan trọng đối với ứng dụng của bạn (và tôi khẳng định ở trên rằng nó hầu như sẽ luôn như vậy), thì sự cân bằng và chức năng của việc lọc siêu dữ liệu sẽ trở thành điều bạn muốn kiểm tra thật cẩn thận.


5. Ngôn ngữ truy vấn siêu dữ liệu

Nếu tôi đúng và việc lọc siêu dữ liệu rất quan trọng đối với ứng dụng bạn đang xây dựng thì xin chúc mừng, bạn lại gặp phải một vấn đề khác. Bạn cần một cách để chỉ định các bộ lọc trên siêu dữ liệu này. Đây là một ngôn ngữ truy vấn.


Xuất phát từ góc độ cơ sở dữ liệu và vì đây là blog Rockset, bạn có thể đoán được tôi sẽ đi đâu với điều này. SQL là cách tiêu chuẩn công nghiệp để diễn đạt những loại câu lệnh này. “Bộ lọc siêu dữ liệu” trong ngôn ngữ vectơ chỉ đơn giản là “mệnh đề WHERE ” đối với cơ sở dữ liệu truyền thống. Nó có ưu điểm là tương đối dễ dàng chuyển đổi giữa các hệ thống khác nhau.


Hơn nữa, các bộ lọc này là các truy vấn và các truy vấn có thể được tối ưu hóa. Sự phức tạp của trình tối ưu hóa truy vấn có thể có tác động rất lớn đến hiệu suất truy vấn của bạn. Ví dụ: trước tiên, các trình tối ưu hóa phức tạp sẽ cố gắng áp dụng bộ lọc siêu dữ liệu có chọn lọc nhất vì điều này sẽ giảm thiểu công việc mà các giai đoạn lọc sau này yêu cầu, mang lại hiệu suất lớn.


Nếu bạn dự định viết các ứng dụng không tầm thường bằng cách sử dụng các bộ lọc siêu dữ liệu và tìm kiếm vectơ, điều quan trọng là bạn phải hiểu và cảm thấy thoải mái với ngôn ngữ truy vấn, cả công thái học và cách triển khai, thì bạn đang đăng ký để sử dụng, viết và duy trì.


6. Quản lý vòng đời của vectơ

Được rồi, bạn đã làm được đến mức này. Bạn có cơ sở dữ liệu vectơ có tất cả các nguyên tắc cơ bản về cơ sở dữ liệu phù hợp mà bạn yêu cầu, có chiến lược lập chỉ mục gia tăng phù hợp cho trường hợp sử dụng của bạn, có câu chuyện hay về nhu cầu lọc siêu dữ liệu của bạn và sẽ luôn cập nhật chỉ mục của nó theo độ trễ bạn có thể chịu đựng được. Tuyệt vời.


Nhóm ML của bạn (hoặc có thể là OpenAI) ra mắt phiên bản mới của mô hình nhúng của họ. Bạn có một cơ sở dữ liệu khổng lồ chứa đầy các vectơ cũ cần được cập nhật. Giờ thì sao? Bạn định thực hiện công việc ML hàng loạt lớn này ở đâu? Bạn sẽ lưu trữ các kết quả trung gian như thế nào? Bạn định chuyển sang phiên bản mới bằng cách nào? Bạn dự định thực hiện việc này như thế nào mà không ảnh hưởng đến khối lượng công việc sản xuất của mình?


Đặt những câu hỏi khó

Tìm kiếm vectơ là một lĩnh vực đang phát triển nhanh chóng và chúng tôi đang thấy rất nhiều người dùng bắt đầu đưa ứng dụng vào sản xuất. Mục tiêu của tôi cho bài đăng này là cung cấp cho bạn một số câu hỏi khó quan trọng mà bạn có thể chưa biết để hỏi. Và bạn sẽ được hưởng lợi rất nhiều từ việc trả lời chúng sớm hơn là muộn hơn.


Trong bài đăng này, điều tôi chưa đề cập đến là Rockset đã và đang nỗ lực giải quyết tất cả những vấn đề này như thế nào cũng như lý do tại sao một số giải pháp của chúng tôi cho những vấn đề này lại mang tính đột phá và tốt hơn hầu hết các nỗ lực khác ở công nghệ tiên tiến nhất. Việc đề cập đến vấn đề đó sẽ đòi hỏi nhiều bài đăng blog cỡ này, tôi nghĩ đó chính xác là những gì chúng tôi sẽ làm. Chơ để biết thêm.