Udostępnij za pośrednictwem


Wyszukiwanie wektorowe w usłudze Azure Cosmos DB dla NoSQL (wersja zapoznawcza)

DOTYCZY: NoSQL

Usługa Azure Cosmos DB for NoSQL oferuje teraz indeksowanie wektorów i wyszukiwanie w wersji zapoznawczej. Ta funkcja jest przeznaczona do obsługi wektorów o wysokiej wymiarach, umożliwiając wydajne i dokładne wyszukiwanie wektorów w dowolnej skali. Teraz można przechowywać wektory bezpośrednio w dokumentach wraz z danymi. Każdy dokument w bazie danych może zawierać nie tylko tradycyjne dane bez schematu, ale także wektory o wysokim wymiarach jako inne właściwości dokumentów. Ta kolokacja danych i wektorów umożliwia efektywne indeksowanie i wyszukiwanie, ponieważ wektory są przechowywane w tej samej jednostce logicznej, co dane, które reprezentują. Utrzymywanie wektorów i danych razem upraszcza zarządzanie danymi, architektury aplikacji sztucznej inteligencji i wydajność operacji opartych na wektorach.

Usługa Azure Cosmos DB for NoSQL oferuje elastyczność wyboru metody indeksowania wektorowego:

  • "płaskie" lub k najbliższych sąsiadów dokładne wyszukiwanie (czasami nazywane siłą siłową) może zapewnić 100% przypomnienie pobierania dla mniejszych, ukierunkowanych wyszukiwań wektorów. szczególnie w połączeniu z filtrami zapytań i kluczami partycji.
  • Kwantyzowany indeks płaski, który kompresuje wektory przy użyciu metod kwantyzacji opartych na protokole DiskANN w celu uzyskania lepszej wydajności wyszukiwania kNN.
  • DiskANN, zestaw najnowocześniejszych algorytmów indeksowania wektorów opracowanych przez firmę Microsoft Research w celu wydajnego, wysokiej dokładności wyszukiwania wektorów w dowolnej skali.

Dowiedz się więcej o indeksowaniu wektorów tutaj

Wyszukiwanie wektorowe w usłudze Azure Cosmos DB można łączyć ze wszystkimi innymi obsługiwanymi filtrami zapytań NoSQL i indeksami usługi Azure Cosmos DB przy użyciu WHERE klauzul. Dzięki temu wyszukiwanie wektorów może być najbardziej odpowiednimi danymi dla aplikacji.

Ta funkcja zwiększa podstawowe możliwości usługi Azure Cosmos DB, dzięki czemu jest bardziej wszechstronna do obsługi wymagań dotyczących wektorów i wyszukiwania w aplikacjach sztucznej inteligencji.

Co to jest magazyn wektorów?

Magazyn wektorów lub baza danych wektorów to baza danych przeznaczona do przechowywania osadzeń wektorów i zarządzania nimi, które są matematycznymi reprezentacjami danych w przestrzeni wielowymiarowej. W tej przestrzeni każdy wymiar odpowiada funkcji danych, a dziesiątki tysięcy wymiarów może służyć do reprezentowania zaawansowanych danych. Położenie wektora w tym obszarze reprezentuje jego cechy. Wyrazy, frazy lub całe dokumenty oraz obrazy, dźwięk i inne typy danych mogą być wektoryzowane.

Jak działa magazyn wektorów?

W magazynie wektorów algorytmy wyszukiwania wektorowego są używane do indeksowania i osadzania zapytań. Niektóre dobrze znane algorytmy wyszukiwania wektorów obejmują hierarchiczny mały świat (HNSW), odwrócony plik (IVF), DiskANN itp. Wyszukiwanie wektorowe to metoda, która ułatwia znajdowanie podobnych elementów na podstawie ich cech danych, a nie dokładnych dopasowań w polu właściwości. Ta technika jest przydatna w aplikacjach, takich jak wyszukiwanie podobnego tekstu, znajdowanie powiązanych obrazów, tworzenie zaleceń, a nawet wykrywanie anomalii. Służy do wykonywania zapytań dotyczących wektorowych osadzeń danych utworzonych przy użyciu modelu uczenia maszynowego przy użyciu interfejsu API osadzania. Przykładami osadzania interfejsów API są osadzanie w usłudze Azure OpenAI lub przytulanie twarzy na platformie Azure. Wyszukiwanie wektorowe mierzy odległość między wektorami danych a wektorem zapytania. Wektory danych, które znajdują się najbliżej wektora zapytania, to te, które są najbardziej podobne semantycznie.

W zintegrowanej bazie danych wektorów w usłudze Azure Cosmos DB for NoSQL osadzanie można przechowywać, indeksować i wykonywać zapytania obok oryginalnych danych. Takie podejście eliminuje dodatkowy koszt replikowania danych w oddzielnej czystej bazie danych wektorów. Ponadto ta architektura przechowuje wektorowe osadzania i oryginalne dane razem, co usprawnia operacje na danych wielomodalnych i zapewnia większą spójność danych, skalę i wydajność.

Rejestrowanie w funkcji wyszukiwania wektorowego w wersji zapoznawczej

Wyszukiwanie wektorowe dla usługi Azure Cosmos DB dla noSQL wymaga rejestracji funkcji w wersji zapoznawczej na stronie Funkcje usługi Azure Cosmos DB. Wykonaj poniższe kroki, aby się zarejestrować:

  1. Przejdź do strony zasobów usługi Azure Cosmos DB for NoSQL.

  2. Wybierz okienko "Funkcje" w elemencie menu "Ustawienia".

  3. Wybierz pozycję "Wyszukiwanie wektorowe w usłudze Azure Cosmos DB for NoSQL".

  4. Przeczytaj opis funkcji, aby potwierdzić, że chcesz zarejestrować się w wersji zapoznawczej.

  5. Wybierz pozycję "Włącz", aby zarejestrować się w wersji zapoznawczej.

Uwaga

Żądanie rejestracji zostanie automatycznie zatwierdzone, ale może upłynąć kilka minut.

Uwaga

Nazwa diskANN jest dostępna we wczesnej wersji zapoznawczej i wymaga wypełnienia tego formularza. Skontaktujesz się z członkiem zespołu usługi Azure Cosmos DB, gdy zasób został dołączony do indeksu DiskANN.

Napiwek

Możesz też użyć interfejsu wiersza polecenia platformy Azure, aby zaktualizować możliwości konta w celu obsługi wyszukiwania wektorów NoSQL.

az cosmosdb update \
     --resource-group <resource-group-name> \
     --name <account-name> \
     --capabilities EnableNoSQLVectorSearch

Zasady wektorów kontenerów

Wykonywanie wyszukiwania wektorowego za pomocą usługi Azure Cosmos DB for NoSQL wymaga zdefiniowania zasad wektorów dla kontenera. Zapewnia to podstawowe informacje dotyczące aparatu bazy danych do przeprowadzania wydajnego wyszukiwania wektorów podobieństwa znalezionych w dokumentach kontenera. Informuje to również zasady indeksowania wektorów o niezbędnych informacjach, jeśli chcesz je określić. Następujące informacje znajdują się w zasadach zawartych wektorów:

  • "path": właściwość zawierająca wektor (wymagany).
  • "datatype": typ danych właściwości wektora (wartość domyślna Float32). 
  • "dimensions": wymiarowość lub długość każdego wektora w ścieżce. Wszystkie wektory w ścieżce powinny mieć taką samą liczbę wymiarów. (wartość domyślna 1536).
  • "distanceFunction": metryka używana do obliczania odległości/podobieństwa. Obsługiwane metryki to:
    • cosinus, który ma wartości z -1 (najmniej podobne) do +1 (najbardziej podobne).
    • dot product, który ma wartości z -inf (najmniej podobne) do +inf (najbardziej podobne).
    • euclidean, który ma wartości od 0 (najbardziej podobne) do +inf) (najmniej podobne).

Uwaga

Każda unikatowa ścieżka może mieć co najwyżej jedną zasadę. Można jednak określić wiele zasad, które mają być przeznaczone dla innej ścieżki.

Zasady wektorów kontenerów można opisać jako obiekty JSON. Oto dwa przykłady prawidłowych zasad wektorów kontenerów:

Zasady z pojedynczą ścieżką wektorową

{
    "vectorEmbeddings": [
        {
            "path":"/vector1",
            "dataType":"float32",
            "distanceFunction":"cosine",
            "dimensions":1536
        }
    ]
}

Zasady z dwoma ścieżkami wektorów

{
    "vectorEmbeddings": [
        {
            "path":"/vector1",
            "dataType":"float32",
            "distanceFunction":"cosine",
            "dimensions":1536
        },
        {
            "path":"/vector2",
            "dataType":"int8",
            "distanceFunction":"dotproduct",
            "dimensions":100
        }
    ]
}

Zasady indeksowania wektorów

Indeksy wektorowe zwiększają wydajność podczas przeprowadzania wyszukiwania wektorów przy użyciu funkcji systemowej VectorDistance . Wyszukiwania wektorów mają mniejsze opóźnienia, wyższą przepływność i mniejsze użycie jednostek RU podczas korzystania z indeksu wektorowego. Można określić następujące typy zasad indeksu wektorowego:

Type Opis Maksymalna liczba wymiarów
flat Przechowuje wektory na tym samym indeksie co inne właściwości indeksowane. 505
quantizedFlat Kwantyzuje (kompresuje) wektory przed zapisaniem w indeksie. Może to poprawić opóźnienie i przepływność kosztem niewielkiej dokładności. 4096
diskANN Tworzy indeks na podstawie nazwy DiskANN na potrzeby szybkiego i wydajnego przybliżonego wyszukiwania. 4096

Kilka kwestii, które należy zwrócić uwagę:

  • Typy flat indeksów i quantizedFlat używają indeksu usługi Azure Cosmos DB do przechowywania i odczytywania każdego wektora podczas wykonywania wyszukiwania wektorowego. Wyszukiwania wektorowe z indeksem flat to wyszukiwania siłowe i generują 100% dokładności lub kompletności. Oznacza to, że gwarantowane jest znalezienie najbardziej podobnych wektorów w zestawie danych. Istnieje jednak ograniczenie 505 wymiarów dla wektorów w indeksie płaskim.

  • Indeks quantizedFlat przechowuje kwantyzowane (skompresowane) wektory indeksu. Wyszukiwania wektorowe z indeksem quantizedFlat są również wyszukiwaniem siłowym, jednak ich dokładność może być nieco mniejsza niż 100%, ponieważ wektory są kwantyzowane przed dodaniem do indeksu. Jednak wyszukiwanie wektorów z quantized flat użyciem powinno mieć mniejsze opóźnienie, wyższą przepływność i niższy koszt jednostek RU niż wyszukiwanie wektorów w indeksie flat . Jest to dobra opcja w przypadku mniejszych scenariuszy lub scenariuszy, w których używasz filtrów zapytań, aby zawęzić wyszukiwanie wektorów do stosunkowo małego zestawu wektorów. quantizedFlat należy użyć, gdy w kontenerze znajduje się co najmniej 1000 wektorów i mniej niż 100 000 wektorów.

  • Indeks diskANN jest oddzielnym indeksem zdefiniowanym specjalnie dla wektorów korzystających z nazwy DiskANN, zestawu algorytmów indeksowania wektorów o wysokiej wydajności opracowanych przez firmę Microsoft Research. Indeksy DiskANN mogą oferować jedne z najniższych opóźnień, najwyższej przepływności i najniższych zapytań dotyczących kosztów jednostek RU, przy jednoczesnym zachowaniu wysokiej dokładności. Jednak ponieważ diskANN jest przybliżonym indeksem najbliższych sąsiadów (ANN), dokładność może być niższa niż quantizedFlat lub flat. Nazwa diskANN jest dostępna we wczesnej wersji zapoznawczej i wymaga wypełnienia tego formularza.

Oto przykłady prawidłowych zasad indeksu wektorowego:

{
    "indexingMode": "consistent",
    "automatic": true,
    "includedPaths": [
        {
            "path": "/*"
        }
    ],
    "excludedPaths": [
        {
            "path": "/_etag/?"
        }
    ],
    "vectorIndexes": [
        {
            "path": "/vector1",
            "type": "quantizedFlat"
        }
    ]
}
{
    "indexingMode": "consistent",
    "automatic": true,
    "includedPaths": [
        {
            "path": "/*"
        }
    ],
    "excludedPaths": [
        {
            "path": "/_etag/?"
        }
    ],
    "vectorIndexes": [
        {
            "path": "/vector1",
            "type": "quantizedFlat"
        },
        {
            "path": "/vector2",
            "type": "DiskANN"
        }
    ]
}

Uwaga

Indeksy Quantized Flat i DiskANN wymagają wstawienia co najmniej 1000 wektorów. Ma to zapewnić dokładność procesu kwantyzacji. Jeśli istnieje mniej niż 1000 wektorów, zamiast tego zostanie wykonane pełne skanowanie i spowoduje wyższe opłaty za jednostkę RU dla zapytania wyszukiwania wektorowego.

Ważne

Obecnie w podglądzie wyszukiwania wektorowego nie należy używać zagnieżdżonych ścieżek ani symboli wieloznacznych w ścieżce zasad wektorów. Operacje zastępowania w zasadach wektorów nie są obecnie obsługiwane.

Wykonywanie wyszukiwania wektorów przy użyciu zapytań przy użyciu funkcji VectorDistance()

Po utworzeniu kontenera z żądanymi zasadami wektorów i wstawieniu danych wektorowych do kontenera można przeprowadzić wyszukiwanie wektorów przy użyciu funkcji systemowej Vector Distance w zapytaniu. Przykład zapytania NoSQL, które projektuje wynik podobieństwa jako alias SimilarityScore, i sortuje w kolejności najbardziej podobnej do najmniej podobnej:

SELECT c.title, VectorDistance(c.contentVector, [1,2,3]) AS SimilarityScore   
FROM c  
ORDER BY VectorDistance(c.contentVector, [1,2,3])   

Bieżące limity i ograniczenia

Indeksowanie wektorów i wyszukiwanie w usłudze Azure Cosmos DB for NoSQL ma pewne ograniczenia podczas wczesnych etapów publicznej wersji zapoznawczej.

  • W zasadach indeksu wektorowego można określić co najwyżej jeden typ indeksu na ścieżkę
  • Można określić co najwyżej jeden typ indeksu DiskANN na kontener
  • Indeksowanie wektorów jest obsługiwane tylko w nowych kontenerach.
  • Wektory indeksowane z typem indeksu flat mogą mieć najwyżej 505 wymiarów. Wektory indeksowane z typem indeksu quantizedFlat lub DiskANN mogą mieć co najwyżej 4096 wymiarów.
  • quantizedFlat korzysta z tej samej metody kwantyzacji co nazwa DiskANN i nie jest w tej chwili konfigurowalna.
  • Bazy danych z udostępnioną przepływnością nie mogą obecnie używać funkcji wyszukiwania wektorowego w wersji zapoznawczej.
  • Szybkość pozyskiwania powinna być ograniczona podczas korzystania z wczesnej wersji zapoznawczej nazwy DiskANN.

Następny krok