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.
Usługa Azure AI Search obsługuje kwantyzację skalarną i binarną w celu zmniejszenia rozmiaru wektorów w indeksie wyszukiwania. Zaleca się kwantyzację, ponieważ zmniejsza zarówno pamięć, jak i magazyn dyskowy na potrzeby osadzania float16 i float32. Aby zrównoważyć efekty kompresji stratnej, można dodać nadpróbkowanie i ponowne ocenianie.
Aby użyć wbudowanej kwantyzacji, wykonaj następujące kroki:
- Zacznij od pól wektorowych i
vectorSearchkonfiguracji indeksu - Dodaj
vectorSearch.compressions - Dodaj konfigurację
scalarQuantizationlubbinaryQuantizationi nadaj jej nazwę - Ustaw opcjonalne właściwości w celu ograniczenia skutków indeksowania stratnego
- Tworzenie nowego profilu wektora korzystającego z nazwanej konfiguracji
- Tworzenie nowego pola wektora o nowym profilu wektora
- Załaduj indeks przy użyciu danych float32 lub float16, które są kwantyzowane podczas indeksowania przy użyciu zdefiniowanej konfiguracji
- Opcjonalnie wykonaj zapytanie dotyczące kwantowanych danych przy użyciu parametru nadpróbkowania. Jeśli pole wektorowe nie określa nadpróbkowania w swojej definicji, możesz dodać je podczas zapytania.
Wskazówka
Wyszukiwanie sztucznej inteligencji platformy Azure: obniżenie kosztów wektorów do 92,5% przy użyciu nowych technik kompresji porównuje strategie kompresji i wyjaśnia oszczędności w magazynie i kosztach. Zawiera również metryki pomiaru istotności na podstawie znormalizowanego zdyskontowanego zysku skumulowanego (NDCG), pokazujące, że można skompresować dane bez poświęcania jakości wyszukiwania.
Wymagania wstępne
-
Pola wektorowe w indeksie wyszukiwania z konfiguracją
vectorSearchokreślającą albo hierarchiczny algorytm Nawigatorów Małych Światów (HNSW), albo dokładny algorytm K-najbliższych sąsiadów (KNN), oraz nowym profilem wektorowym.
Obsługiwane techniki kwantyzacji
Kwantyzacja ma zastosowanie do pól wektorów odbierających wektory typu zmiennoprzecinkowego. W przykładach w tym artykule typ danych pola dla przychodzących osadzeń to Collection(Edm.Single) float32, ale obsługiwany jest także float16. Gdy wektory są odbierane w polu ze skonfigurowaną kompresją, aparat wykonuje kwantyzację, aby zmniejszyć ślad danych wektorowych w pamięci i na dysku.
Obsługiwane są dwa typy kwantyzacji:
Kwantyzacja skalarna kompresuje wartości zmiennopozycyjne do węższych typów danych. Wyszukiwanie sztucznej inteligencji obsługuje obecnie int8, czyli 8 bitów, zmniejszając rozmiar indeksu wektorowego cztery razy.
Kwantyzacja binarna konwertuje zmiennoprzecinkowe na bity binarne, co zajmuje 1 bit. Powoduje to maksymalnie 28-krotny zmniejszenie rozmiaru indeksu wektorowego.
Uwaga
Chociaż bezpłatne usługi obsługują kwantyzację, nie pokazują one pełnych oszczędności przestrzeni magazynowej ze względu na ograniczony limit przydziału.
Jak działa kwantyzacja skalarna w usłudze Azure AI Search
Kwantyzacja skalarna zmniejsza rozdzielczość każdej liczby w ramach każdego osadzania wektorów. Zamiast opisywać każdą liczbę jako 16-bitową lub 32-bitową liczbę zmiennoprzecinkową, używa 8-bitowej liczby całkowitej. Identyfikuje zakres liczb (zazwyczaj 99. percentyl wartości minimalnej i maksymalnej) i dzieli je na skończoną liczbę poziomów lub przedziałów, przypisując każdemu przedziałowi identyfikator. W 8-bitowej kwantyzacji skalarnej istnieje 2^8 lub 256 możliwych pojemników.
Każdy składnik wektora jest mapowany na najbliższą wartość reprezentatywną w tym zestawie poziomów kwantyzacji w procesie zbliżonym do zaokrąglania liczby rzeczywistej do najbliższej liczby całkowitej. W wektorze kwantyzowanym 8-bitowym numer identyfikatora znajduje się zamiast oryginalnej wartości. Po kwantyzacji każdy wektor jest reprezentowany przez tablicę identyfikatorów dla pojemników, do których należą jego składniki. Te kwantyzowane wektory wymagają znacznie mniejszej ilości bitów do przechowywania w porównaniu z oryginalnym wektorem, co zmniejsza zapotrzebowanie na magazyn i zużycie pamięci.
Jak działa kwantyzacja binarna w usłudze Azure AI Search
Kwantyzacja binarna kompresuje wektory wielowymiarowe, reprezentując każdy składnik jako pojedynczy bit ( 0 lub 1). Ta metoda znacząco zmniejsza zużycie pamięci i przyspiesza operacje porównania wektorów, które mają kluczowe znaczenie dla zadań wyszukiwania i pobierania. Testy porównawcze pokazują do 96% zmniejszenie rozmiaru indeksu wektorowego.
Jest szczególnie skuteczny w przypadku osadzania z wymiarami większymi niż 1024. W przypadku mniejszych wymiarów zalecamy przetestowanie jakości kwantyzacji binarnej lub wypróbowanie skalarnej. Ponadto ustaliliśmy, że kwantyzacja binarna działa bardzo dobrze, gdy osadzanie jest wyśrodkowane wokół zera. Najbardziej popularne modele osadzania oferowane przez openAI, Cohere i Mistral są wyśrodkowane wokół zera.
Obsługiwane techniki przeliczenia wyników
Rescoring to opcjonalna technika służąca do zrekompensowania straty informacji wynikającej z kwantyzacji wektorów. Podczas wykonywania zapytania używa "oversampling" do pobierania dodatkowych wektorów oraz informacji uzupełniających w celu ponownej oceny początkowych wyników znalezionych przez zapytanie. Informacje uzupełniające to albo nieskompresowane oryginalne wektory pełnej precyzji, albo w przypadku kwantyzacji binarnej, masz możliwość ponownego skorowania przy użyciu binarnie skwantyzowanych kandydatów dokumentów względem wektora zapytania.
Tylko grafy HNSW pozwalają na ponowne ocenianie. Wyczerpujący KNN nie obsługuje ponownego skanowania, ponieważ według definicji wszystkie wektory są przetwarzane w czasie zapytania, co sprawia, że ponowne skanowanie i resampling jest nieistotne.
Opcje ponownego szacowania są określone w indeksie, ale można wywołać ponowne szacowanie w momencie zapytania, dodając parametr zapytania oversampling.
| Object | Właściwości |
|---|---|
| Index | Dodaj RescoringOptions do sekcji kompresji wektorów. Przykłady w tym artykule używają RescoringOptions. |
| Query | Dodaj oversampling do definicji RawVectorQuery lub VectorizableTextQuery. Dodawanie oversampling wywołuje ponowne ocenianie w czasie zapytania. |
Uwaga
Nazwy parametrów reskorowania zmieniły się w ciągu ostatnich kilku wersji. Jeśli używasz starszego interfejsu API w wersji zapoznawczej, zapoznaj się z instrukcjami uaktualniania dotyczącymi rozwiązywania zmian powodujących niezgodność.
Uogólniony proces ponownej oceny wyników to:
- Zapytanie wektorowe jest wykonywane na skompresowanych polach wektorów.
- Zapytanie wektorowe zwraca k najlepszych nadpróbkowanych kandydatów.
- Nadpróbkowanych k kandydatów ocenia się ponownie przy użyciu oryginalnych, nieskompresowanych wektorów do kwantyzacji skalarnej lub iloczynu skalarnego kwantyzacji binarnej.
- Po ponownym przypisaniu punktacji wyniki są dostosowywane tak, aby w pierwszej kolejności pojawiały się bardziej istotne dopasowania.
Nadpróbkowanie dla kwantyzowanych wektorów skalarnych wymaga dostępu do oryginalnych wektorów o pełnej precyzji. Nadpróbkowanie dla kwantyzowanych wektorów binarnych może używać wektorów pełnej precyzji (preserveOriginals) lub iloczynu skalarnego wektora binarnego (discardOriginals). Jeśli optymalizujesz magazyn wektorów, upewnij się, że w indeksie zachowasz pełne wektory precyzji, jeśli są one potrzebne do celów reskorowania. Aby uzyskać więcej informacji, zobacz Eliminowanie opcjonalnych wystąpień wektorów z pamięci.
Dodawanie "kompresji" do indeksu wyszukiwania
W tej sekcji wyjaśniono, jak określić sekcję vectorsSearch.compressions w indeksie. W poniższym przykładzie przedstawiono częściową definicję indeksu z kolekcją pól zawierającą pole wektora.
Przykład kompresji obejmuje zarówno scalarQuantization, jak i binaryQuantization. Możesz określić dowolną liczbę konfiguracji kompresji, a następnie przypisać te, które chcesz, do profilu wektorowego.
Składnia dla vectorSearch.Compressions różni się między stabilnymi a zapoznawczymi interfejsami API REST, przy czym wersja zapoznawcza dodaje więcej opcji optymalizacji przechowywania, a także zmiany w istniejącej składni. Zgodność z poprzednimi wersjami jest zachowywana za pomocą wewnętrznych mapowań interfejsu API, ale zalecamy wdrożenie nowszych właściwości w kodzie, który jest przeznaczony dla wersji 2024-11-01-preview i przyszłych wersji.
Konfigurowanie ustawień kompresji za pomocą interfejsu API REST tworzenia indeksu lub tworzenia lub aktualizowania indeksu.
POST https://[servicename].search.windows.net/indexes?api-version=2025-09-01
{
"name": "my-index",
"description": "This is a description of this index",
"fields": [
{ "name": "Id", "type": "Edm.String", "key": true, "retrievable": true, "searchable": true, "filterable": true },
{ "name": "content", "type": "Edm.String", "retrievable": true, "searchable": true },
{ "name": "vectorContent", "type": "Collection(Edm.Single)", "retrievable": false, "searchable": true, "dimensions": 1536,"vectorSearchProfile": "vector-profile-1"},
],
"vectorSearch": {
"profiles": [
{
"name": "vector-profile-1",
"algorithm": "use-hnsw",
"compression": "use-scalar"
}
],
"algorithms": [
{
"name": "use-hnsw",
"kind": "hnsw",
"hnswParameters": { },
"exhaustiveKnnParameters": null
}
],
"compressions": [
{
"scalarQuantizationParameters": {
"quantizedDataType": "int8"
},
"name": "mySQ8",
"kind": "scalarQuantization",
"rescoringOptions": {
"enableRescoring": true,
"defaultOversampling": 10,
"rescoreStorageMethod": "preserveOriginals"
},
"truncationDimension": 2
},
{
"name": "myBQC",
"kind": "binaryQuantization",
"rescoringOptions": {
"enableRescoring": true,
"defaultOversampling": 10,
"rescoreStorageMethod": "discardOriginals"
},
"truncationDimension": 2
}
]
},
}
Kluczowe punkty:
kindmusi być ustawiona nascalarQuantizationlubbinaryQuantization.rescoringOptionsto kolekcja właściwości używanych do zrekompensowania kompresji stratnej poprzez ponowne ocenianie wyników zapytania przy użyciu oryginalnych wektorów pełnej precyzji, które istnieją przed kwantyzacją. Aby przeprowadzić ponowną ocenę, musisz mieć wystąpienie wektora, które dostarcza tę zawartość. UstawienierescoreStorageMethodnadiscardOriginalsuniemożliwia korzystanie zenableRescoringlubdefaultOversampling. Aby uzyskać więcej informacji na temat magazynu wektorów, zobacz Eliminowanie opcjonalnych wystąpień wektorów z magazynu."rescoreStorageMethod": "preserveOriginals"Przeprowadzenie ponownej oceny wyników wyszukiwania wektorów przy użyciu oryginalnych wektorów pełnej precyzji może doprowadzić do dostosowania wyników i klasyfikacji, promując bardziej adekwatne dopasowania zgodnie z etapem ponownej oceny. W przypadku kwantyzacji binarnej można ustawićrescoreStorageMethodidiscardOriginalsw celu dalszego zmniejszenia ilości miejsca do magazynowania bez obniżania jakości. Oryginalne wektory nie są potrzebne do kwantyzacji binarnej.defaultOversamplingrozważa szerszy zestaw potencjalnych wyników, aby zrównoważyć zmniejszenie ilości informacji z kwantyzacji. Formuła potencjalnych wyników składa się z elementukw zapytaniu oraz mnożnika próbkowania nadmiarowego. Jeśli na przykład zapytanie określakwartość 5, a oversampling wynosi 20, zapytanie skutecznie żąda 100 dokumentów do użycia w ponownym rangowaniu przy użyciu oryginalnego nieskompresowanego wektora w tym celu. Zwracane są tylko najwyżej sklasyfikowane wyniki po ponownym rankingowaniu. Ta właściwość jest opcjonalna. Wartość domyślna to 4.quantizedDataTypejest opcjonalny i ma zastosowanie tylko do kwantyzacji skalarnych. Jeśli ją dodasz, musi być ustawiona naint8. Jest to obecnie jedyny pierwotny typ danych obsługiwany dla kwantyzacji skalarnych. Wartość domyślna toint8.truncationDimensionwykorzystuje wrodzone możliwości modeli osadzania tekstu-3, aby "zakodować informacje o różnych stopniach szczegółowości i pozwala na adaptację pojedynczego osadzenia do ograniczeń obliczeniowych zadań podrzędnych" (zobacz Uczenie reprezentacji Matryoshka). Można użyć obcinanych wymiarów z opcjami reskorowania lub bez nich. Aby uzyskać więcej informacji na temat implementacji tej funkcji w usłudze Azure AI Search, zobacz Obcinanie wymiarów przy użyciu kompresji MRL.
Dodawanie algorytmu wyszukiwania wektorów
Możesz użyć algorytmu HNSW lub eKNN w interfejsie API REST 2024-11-01-preview lub nowszym. W przypadku stabilnej wersji użyj tylko HNSW. Jeśli chcesz przeprowadzić reskorowanie, musisz wybrać HNSW.
"vectorSearch": {
"profiles": [ ],
"algorithms": [
{
"name": "use-hnsw",
"kind": "hnsw",
"hnswParameters": {
"m": 4,
"efConstruction": 400,
"efSearch": 500,
"metric": "cosine"
}
}
],
"compressions": [ <see previous section>]
}
Tworzenie i przypisywanie nowego profilu wektora
Aby użyć nowej konfiguracji kwantyzacji, należy utworzyć nowy profil wektora. Utworzenie nowego profilu wektorowego jest niezbędne do tworzenia skompresowanych indeksów w pamięci. Nowy profil używa HNSW.
W tej samej definicji indeksu utwórz nowy profil wektora i dodaj właściwość kompresji i algorytm. Poniżej przedstawiono dwa profile— jeden dla każdego podejścia kwantyzacji.
"vectorSearch": { "profiles": [ { "name": "vector-profile-hnsw-scalar", "compression": "use-scalar", "algorithm": "use-hnsw", "vectorizer": null }, { "name": "vector-profile-hnsw-binary", "compression": "use-binary", "algorithm": "use-hnsw", "vectorizer": null } ], "algorithms": [ <see previous section> ], "compressions": [ <see previous section> ] }Przypisz profil wektora do nowego pola wektora. Typ danych pola to float32 lub float16.
W usłudze Azure AI Search odpowiedniki modelu danych jednostek (EDM) dla typów float32 i float16 to odpowiednio
Collection(Edm.Single)iCollection(Edm.Half).{ "name": "vectorContent", "type": "Collection(Edm.Single)", "searchable": true, "retrievable": true, "dimensions": 1536, "vectorSearchProfile": "vector-profile-hnsw-scalar", }Załaduj indeks przy użyciu indeksatorów do indeksowania w modelu pobierania lub interfejsów API do indeksowania w modelu wypychanym.
Wykonywanie zapytań względem kwantyzowanego pola wektora przy użyciu oversampling
Składnia zapytań dla skompresowanego lub kwantyzowanego pola wektorowego jest taka sama jak w przypadku nieskompresowanych pól wektorowych, chyba że chcesz zastąpić parametry skojarzone z przespróbowaniem i ponownymcorowaniem. Możesz dodać parametr oversampling do wywołania nadpróbkowania i ponownej oceny podczas zapytania.
Użyj funkcji Wyszukaj dokumenty dla żądania.
Pamiętaj, że definicja kompresji wektora w indeksie ma ustawienia enableRescoring, rescoreStorageMethod i defaultOversampling w celu złagodzenia skutków stratnej kompresji. Wartości domyślne można zastąpić, aby zmieniać zachowanie w czasie wykonywania zapytania. Na przykład jeśli defaultOversampling wartość to 10.0, możesz zmienić ją na inną w żądaniu zapytania.
Parametr oversampling można ustawić nawet wtedy, gdy indeks wprost nie ma opcji przeszacowania lub defaultOversampling definicji. Podanie oversampling w czasie zapytania zastępuje ustawienia indeksu dla tego zapytania i wykonuje zapytanie z obowiązującą enableRescoring wartością true.
POST https://[service-name].search.windows.net/indexes/demo-index/docs/search?api-version=2025-09-01
{
"vectorQueries": [
{
"kind": "vector",
"vector": [8, 2, 3, 4, 3, 5, 2, 1],
"fields": "myvector",
"oversampling": 12.0,
"k": 5
}
]
}
Kluczowe punkty:
Nadpróbkowanie dotyczy pól wektorowych, które przechodzą kompresję wektorową, zgodnie z przypisaniem profilu wektorowego.
Oversampling w zapytaniu zastępuje wartość
defaultOversamplingw indeksie lub wywołuje przepróbkowanie i ponowne ocenianie przy zapytaniu, nawet jeśli konfiguracja kompresji indeksu nie określiła opcji przepróbkowania lub ponownego szeregowania.