Udostępnij przez


indeksowanie wektorów Half-Precision w usłudze Azure DocumentDB

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.

Następny krok