Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Cosmos DB w Fabric teraz oferuje wydajne indeksowanie wektorowe i wyszukiwanie. Ta funkcja jest przeznaczona do obsługi wielomodalnych, wielowymiarowych wektorów, 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 wielomodalne wektory wielowymiarowe 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.
Cosmos DB w Fabric oferuje elastyczność wyboru metody indeksowania wektorowego:
"Metoda płaska" lub metoda k najbliższych sąsiadów do dokładnego wyszukiwania (czasami nazywana metodą brutalnej siły) może zapewnić 100% odtworzenie wyników dla mniejszych, ukierunkowanych wyszukiwań wektorowych. 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 zapewnienia wydajnego, wysokiej dokładności wyszukiwania wektorów wielomodalnych na dowolną skalę.
Wyszukiwanie wektorowe w usłudze Cosmos DB można łączyć ze wszystkimi innymi obsługiwanymi filtrami zapytań NoSQL i indeksami przy użyciu WHERE klauzul. Ta kombinacja umożliwia, aby wyniki wyszukiwań wektorowych były najbardziej odpowiednimi danymi dla twoich aplikacji.
Ta funkcja zwiększa podstawowe możliwości usługi Cosmos DB, dzięki czemu jest bardziej wszechstronna do obsługi wymagań dotyczących danych wektorowych 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 API do osadzania są Azure OpenAI Embeddings lub Hugging Face na 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 Cosmos DB w Fabric można przechowywać, indeksować i wykonywać zapytania na embedingach 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ść.
Zasady wektorów kontenerów
Wykonywanie wyszukiwania wektorowego za pomocą usługi Cosmos DB w Fabric wymaga zdefiniowania polityki wektorowej dla kontenera. Ta polityka dostarcza podstawowe informacje dla silnika bazy danych, aby przeprowadzić wydajne wyszukiwanie wektorów podobieństwa, które znajdują się w dokumentach w kontenerze. Ta konfiguracja informuje również zasady indeksowania wektorów o niezbędnych informacjach, jeśli chcesz je określić. Następujące informacje są zawarte w polityce wektora:
path: właściwość zawierająca wektor (wymagany).datatype: typ danych właściwości wektora. Obsługiwane typy tofloat32(domyślne),int8iuint8.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ślna1536).distanceFunction: Metryka używana do obliczania odległości/podobieństwa. Obsługiwane metryki to:cosine, który ma wartości z $-1$ (najmniej podobne) do $+1$ (najbardziej podobne).dot product, który zawiera wartości z $-\infty$ (najmniej podobne) do $+\infty$ (najbardziej podobne).euclidean, który ma wartości z $0$ (najbardziej podobne) do $+\infty$ (najmniej podobne).
Uwaga / Notatka
Każda unikatowa ścieżka może mieć co najwyżej jedną zasadę. Można jednak określić wiele zasad, jeśli wszystkie są 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:
Polityka o pojedynczej ścieżce wektorowej
{
"vectorEmbeddings": [
{
"path": "/vector1",
"dataType": "float32",
"distanceFunction": "cosine",
"dimensions": 1536
}
]
}
Polityka z dwiema ścieżkami wektorowymi
{
"vectorEmbeddings": [
{
"path": "/vector1",
"dataType": "float32",
"distanceFunction": "cosine",
"dimensions": 1536
},
{
"path": "/vector2",
"dataType": "int8",
"distanceFunction": "dotproduct",
"dimensions": 100
}
]
}
Aby uzyskać więcej informacji i przykładów ustawień zasad wektora kontenera, zobacz wektorowe przykłady zasad indeksowania.
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ć te typy zasad indeksu wektorowego:
| Opis | Maksymalne wymiary | |
|---|---|---|
flat |
Przechowuje wektory na tym samym indeksie co inne właściwości indeksowane. | 505 |
quantizedFlat |
Kwantyzuje (kompresuje) wektory przed zapisaniem w indeksie. Te zasady mogą zwiększyć opóźnienie i przepływność kosztem niewielkiej dokładności. | 4096 |
diskANN |
Tworzy indeks na bazie algorytmu DiskANN na potrzeby szybkiego i wydajnego przybliżonego wyszukiwania. | 4096 |
Uwaga / Notatka
Indeksy quantizedFlat i diskANN wymagają wstawienia co najmniej 1000 wektorów . To minimum zapewnia dokładność procesu kwantyzacji. Jeśli istnieje mniej niż 1000 wektorów, wykonywane jest pełne skanowanie, co prowadzi do wyższych kosztów RU dla zapytania wyszukiwania wektorowego.
Kilka kwestii, które należy zwrócić uwagę:
Typy
flatiquantizedFlatindeksów używają indeksu usługi Cosmos DB do przechowywania i odczytywania każdego wektora podczas wyszukiwania wektorowego. Wyszukiwania wektorowe z indeksemflatto wyszukiwania siłowe i generują 100% dokładności lub kompletności. Oznacza to, że mają gwarancję znalezienia najbardziej podobnych wektorów w zestawie danych. Istnieje jednak ograniczenie505wymiarów dla wektorów w indeksie płaskim.Indeks
quantizedFlatprzechowuje kwantyzowane (skompresowane) wektory indeksu. Wyszukiwania wektorowe z indeksemquantizedFlatsą 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 użyciemquantized flatpowinno mieć mniejsze opóźnienie, wyższą przepustowość i niższy koszt RU niż wyszukiwanie wektorów w indeksieflat. Ten indeks jest dobrym rozwiązaniem 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.quantizedFlatzaleca się, gdy liczba wektorów do indeksowania wynosi około 50 000 lub mniej na partycję fizyczną. Jednak to zalecenie jest tylko ogólnymi wytycznymi, a rzeczywista wydajność powinna być testowana, ponieważ każdy scenariusz może być inny.Indeks
diskANNjest oddzielnym indeksem zdefiniowanym specjalnie dla wektorów, które korzystają z systemu DiskANN, zestawu algorytmów o wysokiej wydajności opracowanych przez Microsoft Research. Indeksy DiskANN mogą zapewniać jedne z najniższych opóźnień, najwyższą przepustowość oraz najniższe koszty zapytań RU, a jednocześnie zachowywać wysoką dokładność. Ogólnie rzecz biorąc, DiskANN jest najbardziej wydajnym ze wszystkich typów indeksów, jeśli istnieje ponad 50 000 wektorów na partycję fizyczną.
Oto przykłady prawidłowych zasad indeksu wektorowego:
{
"indexingMode": "consistent",
"automatic": true,
"includedPaths": [
{
"path": "/*"
}
],
"excludedPaths": [
{
"path": "/_etag/?"
},
{
"path": "/vector1/*"
}
],
"vectorIndexes": [
{
"path": "/vector1",
"type": "diskANN"
}
]
}
{
"indexingMode": "consistent",
"automatic": true,
"includedPaths": [
{
"path": "/*"
}
],
"excludedPaths": [
{
"path": "/_etag/?"
},
{
"path": "/vector1/*",
},
{
"path": "/vector2/*",
}
],
"vectorIndexes": [
{
"path": "/vector1",
"type": "quantizedFlat"
},
{
"path": "/vector2",
"type": "diskANN"
}
]
}
Ważne
Ścieżka wektorowa dodana do excludedPaths sekcji zasad indeksowania w celu zapewnienia zoptymalizowanej wydajności wstawiania. Nie dodanie ścieżki wektora do excludedPaths powoduje wyższe opłaty jednostkowe za żądania i opóźnienia przy wstawianiu wektorów.
Ważne
Symbole wieloznaczne (*, []) nie są obecnie obsługiwane w polityce wektora ani indeksie wektorów.
Wykonywanie wyszukiwania wektorów za pomocą zapytań przy użyciu VECTORDISTANCE
Po utworzeniu kontenera z żądanymi zasadami wektora i wstawieniu danych wektorowych do kontenera można przeprowadzić wyszukiwanie wektorów przy użyciu wbudowanej VECTORDISTANCE funkcji w zapytaniu. Przykład zapytania NoSQL, które projektuje wynik podobieństwa jako alias score, i sortuje w kolejności najbardziej podobnej do najmniej podobnej:
SELECT TOP 10
c.title,
VECTORDISTANCE(c.contentVector, [1,2,3]) AS score
FROM
container c
ORDER BY
VECTORDISTANCE(c.contentVector, [1,2,3])
Ważne
Używaj zawsze klauzuli TOP N w instrukcji SELECT zapytania. W przeciwnym razie wyszukiwanie wektorów próbuje zwrócić o wiele więcej wyników, co powoduje, że zapytanie będzie kosztować więcej jednostek żądania (RU) i ma większe opóźnienie niż jest to konieczne.