Udostępnij za pośrednictwem


Wyszukiwanie wektorów Mosaic AI

Ten artykuł przedstawia przegląd rozwiązania Databricks do baz danych wektorowych, Mosaic AI Vector Search, w tym czym jest i jak działa.

Mosaic AI Vector Search to wektorowa baza danych wbudowana w platformę analizy danych usługi Databricks i zintegrowana z jej narzędziami do zapewniania ładu i produktywności. Wektorowa baza danych to baza danych zoptymalizowana pod kątem przechowywania i pobierania wektorów. Osadzanie to matematyczne reprezentacje semantycznej zawartości danych, zwykle danych tekstowych lub obrazów. Osadzanie jest generowane przez duży model językowy i jest kluczowym składnikiem wielu generowanych aplikacji sztucznej inteligencji, które zależą od znajdowania dokumentów lub obrazów, które są podobne do siebie. Przykłady to systemy RAG, systemy rekomendacji oraz rozpoznawanie obrazów i wideo.

Z Mosaic AI Vector Search, tworzysz indeks wyszukiwania wektorów na podstawie tabeli Delta. Indeks zawiera osadzone dane z metadanymi. Następnie możesz wykonać zapytanie względem indeksu przy użyciu interfejsu API REST, aby zidentyfikować najbardziej podobne wektory i zwrócić skojarzone dokumenty. Można skonstruować indeks tak, aby automatycznie się synchronizował po zaktualizowaniu bazowej tabeli Delta.

Aplikacja Mosaic AI Vector Search obsługuje następujące elementy:

Jak działa wyszukiwanie wektorów Mosaic AI?

Wyszukiwarka wektorów Mosaic AI używa algorytmu Hierarchicznego Nawigowalnego Małego Świata (HNSW) do przybliżonego wyszukiwania najbliższych sąsiadów oraz metryki L2 w celu mierzenia podobieństwa wektorów osadzenia. Jeśli chcesz użyć podobieństwa cosinusowego, musisz znormalizować osadzenia punktu danych przed wprowadzeniem ich do wyszukiwania wektorowego. Gdy punkty danych są znormalizowane, klasyfikacja wygenerowana przez odległość L2 jest taka sama jak ta generowana przez podobieństwo cosinusowe.

Mosaic AI Vector Search obsługuje również hybrydowe wyszukiwanie słów kluczowych, które łączy wyszukiwanie osadzeń opartych na wektorach z tradycyjnymi technikami wyszukiwania opartymi na słowach kluczowych. Takie podejście dopasowuje dokładne wyrazy w zapytaniu, a jednocześnie używa wyszukiwania podobieństwa opartego na wektorach w celu przechwycenia relacji semantycznych i kontekstu zapytania.

Dzięki zintegrowaniu tych dwóch technik wyszukiwanie słów kluczowych hybrydowych pobiera dokumenty zawierające nie tylko dokładne słowa kluczowe, ale także te, które są koncepcyjnie podobne, zapewniając bardziej kompleksowe i odpowiednie wyniki wyszukiwania. Ta metoda jest szczególnie przydatna w aplikacjach RAG, w których dane źródłowe mają unikatowe słowa kluczowe, takie jak jednostki SKU lub identyfikatory, które nie są odpowiednie do wyszukiwania czystego podobieństwa.

Aby uzyskać szczegółowe informacje na temat interfejsu API, zobacz Dokumentację zestawu SDK języka Python i Wykonywanie zapytań względem punktu końcowego wyszukiwania wektorów.

Obliczanie wyszukiwania podobieństwa

Obliczenie wyszukiwania podobieństwa używa następującej formuły:

odwrotnie 1 plus odległość kwadratowa

gdzie dist to odległość euklidesowa między q zapytania a wpisem indeksu x:

Odległość Euklidesowa, pierwiastek kwadratowy sumy różnic podniesionych do kwadratu

Algorytm wyszukiwania słów kluczowych

Wyniki istotności są obliczane przy użyciu rozwiązania Okapi BM25. Przeszukiwane są wszystkie kolumny tekstowe lub ciągowe, w tym kolumny osadzania tekstu źródłowego i metadanych w formacie tekstowym lub ciągowym. Funkcja tokenizacji dzieli się na granice wyrazów, usuwa znaki interpunkcyjne i konwertuje cały tekst na małe litery.

Jak połączone są wyszukiwanie podobieństwa i wyszukiwanie słów kluczowych

Wyniki wyszukiwania słów kluczowych i wyszukiwania podobieństwa są łączone przy użyciu funkcji RRF (Reciprocal Rank Fusion).

Funkcja RRF ponownie ocenia każdy dokument z każdej użytej metody na podstawie wyniku.

Równanie RRF

W powyższym równaniu ranking zaczyna się od 0, sumuje oceny dla każdego dokumentu i zwraca dokumenty z najwyższymi wynikami.

rrf_param steruje względnym znaczeniem dokumentów o wyższych i niższych rangach. Na podstawie literatury rrf_param ma wartość 60.

Wyniki są znormalizowane, tak aby najwyższy wynik wynosi 1, a najniższy wynik wynosi 0, używając następującego równania:

normalizacja

Opcje dostarczania zanurzeń wektorów

Aby utworzyć bazę danych wektorów w usłudze Databricks, musisz najpierw zdecydować, jak zapewnić osadzanie wektorów. Usługa Databricks obsługuje trzy opcje:

  • Opcja 1: Delta Sync Index z osadzaniem obliczeń przez Databricks Udostępniasz źródłową tabelę Delta, która zawiera dane w formacie tekstowym. Usługa Databricks oblicza osadzenia, używając określonego modelu, i opcjonalnie zapisuje osadzenia do tabeli w Unity Catalog. Podczas aktualizowania tabeli delty indeks pozostaje zsynchronizowany z tabelą delty.

    Na poniższym diagramie przedstawiono proces:

    1. Obliczanie osadzania zapytań. Zapytanie może zawierać filtry metadanych.
    2. Wykonaj wyszukiwanie podobieństwa, aby zidentyfikować najbardziej odpowiednie dokumenty.
    3. Zwróć najbardziej odpowiednie dokumenty i dołącz je jako część zapytania.

    wektorowa baza danych, usługa Databricks oblicza osadzanie

  • opcja 2: Indeks synchronizacji Delta z własnoręcznie zarządzanymi osadzeniami Zapewniasz źródłową tabelę Delta zawierającą wstępnie obliczone osadzenia. Podczas aktualizowania tabeli delty indeks pozostaje zsynchronizowany z tabelą delty.

    Na poniższym diagramie przedstawiono proces:

    1. Zapytanie składa się z osadzeń i może zawierać filtry metadanych.
    2. Wykonaj wyszukiwanie podobieństwa, aby zidentyfikować najbardziej odpowiednie dokumenty. Zwróć najbardziej odpowiednie dokumenty i dodaj je do zapytania.

    wektorowa baza danych, wstępnie obliczone osadzanie

  • opcja 3: indeks bezpośredniego dostępu wektorowego Należy ręcznie zaktualizować indeks przy użyciu interfejsu API REST po zmianie tabeli osadzania.

    Na poniższym diagramie przedstawiono proces:

    wektorowa baza danych, wstępnie obliczone osadzanie bez automatycznej synchronizacji

Aby użyć funkcji Mosaic AI Vector Search, należy utworzyć następujące elementy:

  • Punkt końcowy wyszukiwania wektorów. Ten punkt końcowy obsługuje indeks wyszukiwania wektorowego. Można zapytać i aktualizować punkt końcowy przy użyciu interfejsu API REST lub SDK. Aby uzyskać instrukcje, zobacz Tworzenie punktu końcowego wyszukiwania wektorów.

    Punkty końcowe są skalowane automatycznie w górę, aby obsługiwać rozmiar indeksu lub liczbę współbieżnych żądań. Punkty końcowe nie są automatycznie skalowane w dół.

  • Indeks wyszukiwania wektorowego. Indeks wyszukiwania wektorów jest tworzony na podstawie tabeli delty i jest zoptymalizowany pod kątem zapewniania przybliżonych wyszukiwań najbliższych sąsiadów w czasie rzeczywistym. Celem wyszukiwania jest zidentyfikowanie dokumentów, które są podobne do zapytania. Indeksy wyszukiwania wektorowego pojawiają się i są zarządzane przez Unity Catalog. Aby uzyskać instrukcje, zobacz Tworzenie indeksu wyszukiwania wektorów.

Ponadto jeśli zdecydujesz się, aby usługa Databricks obliczała osadzanie, możesz użyć wstępnie skonfigurowanego punktu końcowego interfejsów API modelu podstawowego lub utworzyć punkt końcowy obsługujący model służący do obsługi wybranego modelu osadzania. Aby uzyskać instrukcje, zobacz interfejsy API modelu modelu z płatnością za token lub Tworzenie modelu podstawowego obsługującego punkty końcowe.

Aby wykonać zapytanie dotyczące punktu końcowego obsługującego model, należy użyć interfejsu API REST lub zestawu SDK języka Python. Zapytanie może definiować filtry na podstawie dowolnej kolumny w tabeli delty. Aby uzyskać szczegółowe informacje, zobacz Używanie filtrów dla zapytań, dokumentacji interfejsu API lub dokumentacji zestawu SDK języka Python.

Wymagania

Uprawnienia do tworzenia punktów końcowych wyszukiwania wektorów i zarządzania nimi są konfigurowane przy użyciu list kontroli dostępu. Zobacz ACL (Listy Kontroli Dostępu) punktu końcowego wyszukiwania wektorów.

Ochrona i uwierzytelnianie danych

Usługa Databricks implementuje następujące mechanizmy kontroli zabezpieczeń w celu ochrony danych:

  • Każde żądanie klienta do Mosaic AI Vector Search jest logicznie izolowane, uwierzytelniane i autoryzowane.
  • Mosaic AI Vector Search szyfruje wszystkie dane w spoczynku (AES-256) i podczas przesyłania (TLS 1.2+).

Aplikacja Mosaic AI Vector Search obsługuje dwa tryby uwierzytelniania:

  • Token głównego obiektu usługi. Administrator może wygenerować token jednostki usługi i przekazać go do API lub SDK. Zobacz Use service principals (Używanie jednostek usługi). Dla zastosowań w środowisku produkcyjnym Databricks zaleca użycie tokenu jednostki usługi.

    # Pass in a service principal
    vsc = VectorSearchClient(workspace_url="...",
            service_principal_client_id="...",
            service_principal_client_secret="..."
            )
    
  • Osobisty token dostępu. Możesz użyć osobistego tokenu dostępu do uwierzytelniania za pomocą narzędzia Mosaic AI Vector Search. Zobacz token uwierzytelniania dostępu osobistego. Jeśli używasz zestawu SDK w środowisku notatnika, zestaw SDK automatycznie generuje token PAT na potrzeby uwierzytelniania.

    # Pass in the PAT token
    client = VectorSearchClient(workspace_url="...", personal_access_token="...")
    

Klucze zarządzane przez klienta (CMK) są obsługiwane w punktach końcowych utworzonych 8 maja 2024 r. lub później.

Monitorowanie użycia i kosztów

Tabela rozliczanego systemu użycia umożliwia monitorowanie użycia i kosztów skojarzonych z indeksami wyszukiwania wektorowego i punktami końcowymi. Oto przykładowe zapytanie:

WITH all_vector_search_usage (
  SELECT *,
         CASE WHEN usage_metadata.endpoint_name IS NULL THEN 'ingest'
              WHEN usage_type = "STORAGE_SPACE" THEN 'storage'
              ELSE 'serving'
        END as workload_type
    FROM system.billing.usage
   WHERE billing_origin_product = 'VECTOR_SEARCH'
),
daily_dbus AS (
  SELECT workspace_id,
       cloud,
       usage_date,
       workload_type,
       usage_metadata.endpoint_name as vector_search_endpoint,
       CASE WHEN workload_type = 'serving' THEN SUM(usage_quantity)
            WHEN workload_type = 'ingest' THEN SUM(usage_quantity)
            ELSE null
            END as dbus,
       CASE WHEN workload_type = 'storage' THEN SUM(usage_quantity)
            ELSE null
            END as dsus
 FROM all_vector_search_usage
 GROUP BY all
ORDER BY 1,2,3,4,5 DESC
)
SELECT * FROM daily_dbus

Aby uzyskać szczegółowe informacje na temat zawartości tabeli użycia rozliczeniowego, zobacz Billable usage system table reference. Dodatkowe zapytania znajdują się w poniższym przykładowym notesie.

Notatnik dla zapytań dotyczących tabel systemu wyszukiwania wektorowego

Weź notatnik

Limity rozmiaru zasobów i danych

W poniższej tabeli przedstawiono podsumowanie limitów rozmiaru zasobów i danych dla punktów końcowych i indeksów wyszukiwania wektorów:

Zasób Poziom szczegółowości Ograniczenie
Punkty końcowe wyszukiwania wektorowego Na obszar roboczy 100
Osadzanie Na każdy punkt końcowy 320 000 000
Wymiar osadzania Na indeks 4096
Indeksy Dla każdego punktu końcowego 50
Kolumny Na indeks 50
Kolumny Obsługiwane typy: bajty, krótkie, liczba całkowita, długa, zmiennoprzecinkowa, podwójna, wartość logiczna, ciąg, sygnatura czasowa, data
Pola metadanych Per indeks 50
Nazwa indeksu Według indeksu 128 znaków

Następujące limity dotyczą tworzenia i aktualizowania indeksów wyszukiwania wektorowego:

Zasób Poziom szczegółowości Ograniczenie
Rozmiar wiersza dla indeksu Delta Sync Na każdy indeks 100 KB
Osadzanie rozmiaru kolumny źródłowej dla indeksu usługi Delta Sync Na indeks 32764 bajty
Limit rozmiaru zbiorczego żądania wstawiania lub aktualizacji dla indeksu bezpośredniego wektora Według indeksu 10 MB
Limit rozmiaru żądania usuwania zbiorczego dla indeksu wektora bezpośredniego Na jednostkę indeksu 10 MB

Następujące limity dotyczą interfejsu API zapytań.

Zasób Poziom szczegółowości Ograniczenie
Długość tekstu kwerendy Na zapytanie 32764 bajtów
Maksymalna liczba zwróconych wyników Na zapytanie 10 000

Ograniczenie

Uprawnienia na poziomie wierszy i kolumn nie są obsługiwane. Można jednak zaimplementować własne listy kontroli dostępu (ACL) na poziomie aplikacji, korzystając z interfejsu API filtrowania.

Dodatkowe zasoby