Istotność w wyszukiwaniu wektorowym
Podczas wykonywania zapytania wektorowego wyszukiwarka szuka podobnych wektorów, aby znaleźć najlepszych kandydatów do zwrócenia w wynikach wyszukiwania. W zależności od sposobu indeksowania zawartości wektorowej wyszukiwanie odpowiednich dopasowań jest wyczerpujące lub ograniczone do blisko sąsiadów w celu szybszego przetwarzania. Po znalezieniu kandydatów metryki podobieństwa są używane do oceniania poszczególnych wyników na podstawie siły meczu.
W tym artykule wyjaśniono algorytmy używane do znajdowania odpowiednich dopasowań i metryk podobieństwa używanych do oceniania. Oferuje również wskazówki dotyczące poprawy istotności, jeśli wyniki wyszukiwania nie spełniają oczekiwań.
Algorytmy używane w wyszukiwaniu wektorowym
Algorytmy wyszukiwania wektorowego obejmują wyczerpujące k najbliższych sąsiadów (KNN) i hierarchiczny mały świat (HNSW).
Wyczerpująca funkcja KNN wykonuje wyszukiwanie siłowe, które skanuje całą przestrzeń wektorów.
HNSW wykonuje przybliżone wyszukiwanie najbliższego sąsiada (ANN).
Do wyszukiwania i oceniania są używane tylko pola wektorowe oznaczone jako searchable
w indeksie lub tak jak searchFields
w zapytaniu.
Kiedy należy używać wyczerpującej nazwy KNN
Wyczerpująca nazwa KNN oblicza odległości między wszystkimi parami punktów danych i znajduje dokładnych k
najbliższych sąsiadów dla punktu zapytania. Jest ona przeznaczona dla scenariuszy, w których duże kompletność ma największe znaczenie, a użytkownicy są gotowi zaakceptować kompromisy w opóźnieniu zapytań. Ponieważ jest intensywnie obciążana obliczeniami, używaj wyczerpującej nazwy KNN dla małych i średnich zestawów danych lub gdy wymagania dotyczące precyzji przewyższają zagadnienia dotyczące wydajności zapytań.
Pomocniczy przypadek użycia polega na utworzeniu zestawu danych w celu oszacowania przybliżonego algorytmu najbliższego sąsiada. Wyczerpująca nazwa KNN może służyć do tworzenia podstawowego zestawu prawdy najbliższych sąsiadów.
Kiedy należy używać HNSW
Podczas indeksowania HNSW tworzy dodatkowe struktury danych na potrzeby szybszego wyszukiwania, organizując punkty danych w hierarchiczną strukturę grafu. Usługa HNSW ma kilka parametrów konfiguracji, które można dostroić w celu osiągnięcia celów przepływności, opóźnień i odwołań dla aplikacji wyszukiwania. Na przykład w czasie zapytania można określić opcje wyczerpującego wyszukiwania, nawet jeśli pole wektora jest indeksowane dla HNSW.
Podczas wykonywania zapytania usługa HNSW umożliwia szybkie zapytania sąsiadów, przechodząc przez graf. Takie podejście zapewnia równowagę między dokładnością wyszukiwania a wydajnością obliczeniową. Usługa HNSW jest zalecana w większości scenariuszy ze względu na jego wydajność podczas wyszukiwania w większych zestawach danych.
Jak działa wyszukiwanie najbliższego sąsiada
Zapytania wektorowe są wykonywane względem miejsca osadzania składającego się z wektorów wygenerowanych na podstawie tego samego modelu osadzania. Ogólnie rzecz biorąc, wartość wejściowa w żądaniu zapytania jest wprowadzana do tego samego modelu uczenia maszynowego, który wygenerował osadzanie w indeksie wektorowym. Dane wyjściowe są wektorem w tym samym miejscu osadzania. Ponieważ podobne wektory są połączone blisko siebie, znajdowanie dopasowań jest równoważne znalezieniu wektorów, które znajdują się najbliżej wektora zapytania, i zwracaniu skojarzonych dokumentów jako wyniku wyszukiwania.
Jeśli na przykład żądanie zapytania dotyczy hoteli, model mapuje zapytanie na wektor, który istnieje gdzieś w klastrze wektorów reprezentujących dokumenty dotyczące hoteli. Określenie, które wektory są najbardziej podobne do zapytania, na podstawie metryki podobieństwa, określa, które dokumenty są najbardziej istotne.
Gdy pola wektorowe są indeksowane w celu uzyskania wyczerpującej nazwy KNN, zapytanie jest wykonywane względem "wszystkich sąsiadów". W przypadku pól indeksowanych dla HNSW aparat wyszukiwania używa grafu HNSW do wyszukiwania w podzestawie węzłów w indeksie wektorowym.
Tworzenie grafu HNSW
Podczas indeksowania usługa wyszukiwania konstruuje graf HNSW. Celem indeksowania nowego wektora do grafu HNSW jest dodanie go do struktury grafu w sposób umożliwiający efektywne wyszukiwanie najbliższych sąsiadów. Poniżej przedstawiono podsumowanie procesu:
Inicjowanie: zacznij od pustego grafu HNSW lub istniejącego grafu HNSW, jeśli nie jest to nowy indeks.
Punkt wejścia: jest to najwyższy poziom wykresu hierarchicznego i służy jako punkt wyjścia do indeksowania.
Dodawanie do grafu: Różne poziomy hierarchiczne reprezentują różne szczegółowości grafu, a wyższe poziomy są bardziej globalne, a niższe poziomy są bardziej szczegółowe. Każdy węzeł na grafie reprezentuje punkt wektorowy.
Każdy węzeł jest połączony z sąsiadami
m
znajdującymi się w pobliżu. Jestm
to parametr .Liczba punktów danych uważanych za połączenia kandydatów jest określana przez
efConstruction
parametr . Ta lista dynamiczna tworzy zestaw najbliższych punktów w istniejącym grafie, który należy wziąć pod uwagę dla algorytmu. WyższeefConstruction
wartości powodują rozważenie większej liczby węzłów, co często prowadzi do gęstszych lokalnych dzielnic dla każdego wektora.Te połączenia używają skonfigurowanego podobieństwa
metric
do określania odległości. Niektóre połączenia to połączenia "dalekie", które łączą się między różnymi poziomami hierarchicznymi, tworząc skróty na grafie, które zwiększają wydajność wyszukiwania.
Oczyszczanie i optymalizacja grafu: może się to zdarzyć po indeksowaniu wszystkich wektorów i poprawia nawigację i wydajność grafu HNSW.
Nawigowanie po grafie HNSW w czasie wykonywania zapytania
Zapytanie wektorowe nawiguje po strukturze wykresu hierarchicznego w celu skanowania pod kątem dopasowań. Poniżej przedstawiono podsumowanie kroków w procesie:
Inicjowanie: algorytm inicjuje wyszukiwanie na najwyższym poziomie grafu hierarchicznego. Ten punkt wejścia zawiera zestaw wektorów, które służą jako punkty początkowe do wyszukiwania.
Przechodzenie: następnie przechodzi przez poziom wykresu, przechodząc z najwyższego poziomu do niższych poziomów, wybierając węzły kandydatów, które znajdują się bliżej wektora zapytania na podstawie skonfigurowanej metryki odległości, takiej jak podobieństwo cosinus.
Oczyszczanie: Aby zwiększyć wydajność, algorytm przycina przestrzeń wyszukiwania, biorąc pod uwagę tylko węzły, które prawdopodobnie będą zawierać najbliższych sąsiadów. Jest to osiągane przez utrzymanie kolejki priorytetów potencjalnych kandydatów i aktualizowanie go w miarę postępu wyszukiwania. Długość tej kolejki jest konfigurowana przez parametr
efSearch
.Uściślenie: gdy algorytm przechodzi do niższych, bardziej szczegółowych poziomów, usługa HNSW rozważa więcej sąsiadów w pobliżu zapytania, co umożliwia uściślenie zestawu wektorów kandydatów, zwiększenie dokładności.
Ukończenie: wyszukiwanie kończy się po zidentyfikowaniu żądanej liczby najbliższych sąsiadów lub spełnieniu innych kryteriów zatrzymania. Ta żądana liczba najbliższych sąsiadów podlega parametrowi
k
czasu zapytania .
Metryki podobieństwa używane do mierzenia zbliżenia
Algorytm wyszukuje wektory kandydatów do oceny podobieństwa. Aby wykonać to zadanie, obliczenie metryki podobieństwa porównuje wektor kandydata z wektorem zapytania i mierzy podobieństwo. Algorytm śledzi uporządkowany zestaw najbardziej podobnych wektorów znalezionych przez algorytm, który tworzy klasyfikowany zestaw wyników po osiągnięciu ukończenia algorytmu.
Metryczne | opis |
---|---|
cosine |
Ta metryka mierzy kąt między dwoma wektorami i nie ma wpływu na różne długości wektorów. Matematycznie oblicza kąt między dwoma wektorami. Cosine to metryka podobieństwa używana przez modele osadzania usługi Azure OpenAI, więc jeśli używasz usługi Azure OpenAI, określ cosine w konfiguracji wektorów. |
dotProduct |
Ta metryka mierzy zarówno długość każdej pary dwóch wektorów, jak i kąt między nimi. Matematycznie oblicza produkty wielkości wektorów i kąt między nimi. W przypadku znormalizowanych wektorów jest to identyczne z cosine podobieństwem, ale nieco bardziej wydajne. |
euclidean |
(znany również jako l2 norm ) Ta metryka mierzy długość różnicy wektorów między dwoma wektorami. Matematycznie oblicza odległość euklidesową między dwoma wektorami, czyli l2-normą różnicy dwóch wektorów. |
Wyniki w wynikach wyszukiwania wektorowego
Wyniki są obliczane i przypisywane do każdego dopasowania, a najwyższe dopasowania są zwracane jako k
wyniki. Właściwość @search.score
zawiera wynik. W poniższej tabeli przedstawiono zakres, w którym wynik spadnie.
Metoda wyszukiwania | Parametr | Metryka oceniania | Zakres |
---|---|---|---|
wyszukiwanie wektorów | @search.score |
Cosinus | 0.333 - 1.00 |
W przypadkucosine
metryki należy pamiętać, że obliczona @search.score
wartość nie jest wartością cosinus między wektorem zapytania a wektorami dokumentów. Zamiast tego usługa Azure AI Search stosuje przekształcenia, dzięki czemu funkcja score jest monotonicznie malejąca, co oznacza, że wartości wyników zawsze będą spadać, ponieważ podobieństwo staje się gorsze. Ta transformacja gwarantuje, że wyniki wyszukiwania będą używane do celów klasyfikacji.
Istnieją pewne niuanse z wynikami podobieństwa:
- Podobieństwo cosinus jest definiowane jako cosinus kąta między dwoma wektorami.
- Odległość cosinusu jest definiowana jako
1 - cosine_similarity
.
Aby utworzyć monotonicznie malejącą funkcję, element jest definiowany @search.score
jako 1 / (1 + cosine_distance)
.
Deweloperzy, którzy potrzebują wartości cosinus zamiast wartości syntetycznej, mogą użyć formuły, aby przekonwertować wynik wyszukiwania z powrotem na odległość cosinus:
double ScoreToSimilarity(double score)
{
double cosineDistance = (1 - score) / score;
return -cosineDistance + 1;
}
Posiadanie oryginalnej wartości cosinus może być przydatne w rozwiązaniach niestandardowych, które konfigurują progi w celu przycinania wyników niskiej jakości.
Porady dotyczące dostrajania istotności
Jeśli nie otrzymujesz odpowiednich wyników, poeksperymentuj ze zmianami w konfiguracji zapytania. W przypadku zapytań wektorowych nie ma określonych funkcji dostrajania, takich jak profil oceniania, profil oceniania lub pole lub zwiększenie terminu:
Poeksperymentuj z rozmiarem fragmentu i nakładają się na siebie. Spróbuj zwiększyć rozmiar fragmentu i zapewnić wystarczające nakładanie się, aby zachować kontekst lub ciągłość między fragmentami.
W przypadku systemu HNSW spróbuj zmienić
efConstruction
wewnętrzny skład grafu zbliżeniowego. Wartość domyślna to 400. Zakres wynosi od 100 do 1000.Zwiększ
k
wyniki, aby podać więcej wyników wyszukiwania do modelu czatu, jeśli używasz go.Wypróbuj zapytania hybrydowe z semantycznym rankingiem. W testach porównawczych ta kombinacja spójnie przyniosła najbardziej istotne wyniki.