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.
Co to jest indeksowanie wektorów Half-Precision?
Indeksowanie wektorów o połowicznej precyzji umożliwia przechowywanie i indeksowanie osadzania wektorów przy użyciu 16-bitowych liczb zmiennoprzecinkowych zamiast standardowych 32-bitowych liczb zmiennoprzecinkowych. Ta optymalizacja prowadzi do znacznego zmniejszenia zarówno użycia pamięci, jak i kosztów magazynowania, dzięki czemu praca z większymi zestawami danych i wektorami o wyższych wymiarach jest bardziej wykonalna. Ponadto dzięki optymalizacji gęstości danych może ona przyczynić się do zwiększenia wydajności zapytań w wielu scenariuszach wyszukiwania wektorowego.
Najważniejsze korzyści
- Obsługa zwiększonego wymiarowości: Dzięki połowie precyzji można teraz indeksować wektory z maksymalnie 4000 wymiarami (wzrost z poprzedniego limitu 2000).
- Zmniejszona ilość miejsca do magazynowania: Przechowywanie wektorów w formacie 16-bitowym znacznie zmniejsza ilość miejsca potrzebnego do magazynowania w porównaniu z wektorami o pełnej precyzji. Może to prowadzić do znacznych oszczędności kosztów, zwłaszcza w przypadku baz danych wektorów na dużą skalę.
- Konfigurowalna wydajność a precyzja: Aby dostosować wyniki wyszukiwania, udostępniamy parametr oversampling podczas wykonywania zapytania. Dzięki temu można kontrolować kompromis między szybkością pobierania a potencjalnym wpływem mniejszej precyzji.
Tworzenie indeksu wektora Half-Precision
Podczas definiowania indeksu wektorowego dla kolekcji można włączyć kompresję o połowę precyzji, określając "compression": "half" opcję w elemencie cosmosSearchOptions.
db.runCommand({
"createIndexes": "<vector_collection_name>",
"indexes": [
{
"key": { "<vector_field_name>": "cosmosSearch" },
"name": "<index_name>",
"cosmosSearchOptions": {
"kind": "vector-hnsw", // or vector-ivf
"similarity": "cos",
"dimensions": integer_value, // max 4000
"compression": "half"
}
}
]
});
Ulepszanie wyszukiwania za pomocą nadpróbkowania
Podczas wykonywania zapytań względem indeksu wektorowego wykorzystującego kompresję o połowę precyzji można użyć parametru oversampling w ramach etapu $search agregacji. Ten parametr pomaga zminimalizować potencjalną utratę precyzji wprowadzoną przez reprezentację 16-bitową.
Współczynnik oversampling umożliwia pobranie większej liczby potencjalnych najbliższych sąsiadów z indeksu o połowie precyzji niż ostateczna liczba żądanych wyników (k). Te kandydaty są następnie porównywane przy użyciu oryginalnych wektorów pełnej precyzji, aby zapewnić większą dokładność w końcowych sklasyfikowanych wynikach.
Na przykład aby uzyskać 10 pierwszych (k=10) najbardziej podobnych wektorów, dobrym najlepszym rozwiązaniem może być ustawienie oversampling wartości takiej jak 1.5 lub 2.0. W systemie "oversampling": 1.5 najpierw zostanie uzyskanych 15 kandydatów z indeksu półprecyzyjnego, a następnie 10 najlepszych zostanie doprecyzowanych przy użyciu danych o pełnej precyzji.
db.collection.aggregate([
{
"$search": {
"cosmosSearch": {
"vector": query_vector,
"path": path_to_property,
"k": num_results_to_return,
"oversampling": double_value
}
}
},
{
"$project": {
"similarityScore": { "$meta": "searchScore" },
"_id": 0
}
}
]);
Uwaga / Notatka
Współczynnik oversampling musi mieć wartość podwójną z minimalną wartością 1.0. Ten czynnik ma zastosowanie tylko w przypadku indeksów wektorowych utworzonych za pomocą "compression": "half".
Half-Precision kontra kwantyzacja produktu
Zarówno Half-Precision, jak i Kwantyzacja produktu (PQ) kompresują indeksy wektorów w usłudze Azure DocumentDB, ale różnią się one sposobem osiągnięcia kompresji i wpływu na wyszukiwanie:
| Funkcja | Półprecyzja | Kwantyzacja produktu (PQ) |
|---|---|---|
| Metoda kompresji | Zmniejsza każdy wymiar wektora do 16 bitów. | Dzieli przestrzeń wektorową na przestrzenie podrzędne i kwantyzuje każde z nich. |
| Maksymalna liczba wymiarów | Do 4 000 | Do 16 000 |
| Zmiana precyzji | Niewielka utrata ze względu na niższą głębokość bitów. | Potencjalnie większa utrata, którą można skonfigurować za pomocą polecenia pqCompressedDims. |
| Szybkość wyszukiwania | Umiarkowany wzrost szybkości z powodu mniejszego indeksu. | Znaczna szybkość zwiększa się z powodu wysoce skompresowanych wektorów. |
| Czas kompilacji indeksu | Stosunkowo szybko. | Może trwać dłużej z powodu treningu centrycznego (pqSampleSize). |
| Obsługa indeksów | HNSW, IVF. | DiskANN. |
| Configuration | Prosto, włącz compression: "half". |
Więcej parametrów: pqCompressedDims, pqSampleSize. |
| Użycie oversamplingu | Pomaga przy niewielkiej utracie precyzji. | Niezbędne do odzyskania dokładności z większej kompresji. |
| Idealne przypadki użycia | Umiarkowana redukcja pamięci, zwiększone wymiary, akceptowalny kompromis precyzji. | Duże zestawy danych, wysoka wymiarowość, priorytet dla szybkiego wyszukiwania, precyzja zarządzana za pomocą nadpróbkowania. |