Sdílet prostřednictvím


Relevance při hledání vektorů

Během provádění vektorového dotazu hledá vyhledávací web podobné vektory, aby vyhledaly nejlepší kandidáty, které se mají vrátit ve výsledcích hledání. V závislosti na tom, jak jste indexovali obsah vektoru, je hledání relevantních shod buď vyčerpávající, nebo je omezené na nejbližší sousedy pro rychlejší zpracování. Jakmile jsou nalezeni kandidáti, metriky podobnosti se použijí k určení skóre každého výsledku na základě síly shody.

Tento článek vysvětluje algoritmy používané k vyhledání relevantních shod a metrik podobnosti používaných k bodování. Nabízí také tipy pro zlepšení relevance, pokud výsledky hledání nesplňují očekávání.

Algoritmy vektorového vyhledávání zahrnují vyčerpávající k-nejbližší sousedy (KNN) a hierarchické navigace Small World (HNSW).

K vyhledávání a vyhodnocování se používají pouze vektorová pole označená jako searchable v indexu nebo jako searchFields v dotazu.

Kdy použít vyčerpávající síť KNN

Vyčerpávající síť KNN vypočítá vzdálenost mezi všemi páry datových bodů a najde přesné k nejbližší sousedy pro bod dotazu. Je určená pro scénáře, kdy je vysoká úplnost velmi důležitá a uživatelé jsou ochotni přijmout kompromisy v latenci dotazů. Vzhledem k tomu, že je výpočetně náročný, použijte vyčerpávající síť KNN pro malé až střední datové sady nebo když požadavky přesnosti převáží aspekty výkonu dotazů.

Sekundárním případem použití je vytvoření datové sady pro vyhodnocení přibližného odvolání algoritmu nejbližšího souseda. Vyčerpávající síť KNN lze použít k vytvoření základní pravdy sady nejbližších sousedů.

Kdy použít HNSW

Během indexování vytváří HNSW další datové struktury pro rychlejší vyhledávání a uspořádání datových bodů do hierarchické struktury grafu. HNSW má několik parametrů konfigurace, které je možné ladit, aby bylo možné dosáhnout cílů propustnosti, latence a úplnosti pro vaši vyhledávací aplikaci. Například v době dotazu můžete zadat možnosti pro vyčerpávající vyhledávání, i když je vektorové pole indexováno pro HNSW.

Během provádění dotazů umožňuje HNSW rychlé sousedské dotazy procházením grafu. Tento přístup představuje rovnováhu mezi přesností vyhledávání a výpočetní efektivitou. HNSW se doporučuje pro většinu scénářů kvůli její efektivitě při vyhledávání ve větších datových sadách.

Jak funguje hledání nejbližšího souseda

Vektorové dotazy se spouštějí s prostorem pro vložení skládajícím se z vektorů vygenerovaných ze stejného modelu vkládání. Obecně platí, že vstupní hodnota v rámci požadavku dotazu se odesílá do stejného modelu strojového učení, který vygeneroval vkládání do indexu vektorů. Výstup je vektor ve stejném prostoru pro vložení. Vzhledem k tomu, že podobné vektory jsou seskupené blízko sebe, hledání shod odpovídá vyhledání vektorů, které jsou nejblíže vektoru dotazu, a vrácení přidružených dokumentů jako výsledku hledání.

Pokud je například požadavek dotazu o hotely, model mapuje dotaz na vektor, který existuje někde v clusteru vektorů představujících dokumenty o hotelech. Určení vektorů, které jsou nejvíce podobné dotazu na základě metriky podobnosti, určuje, které dokumenty jsou nejrelevavantnější.

Pokud jsou vektorová pole indexována pro vyčerpávající síť KNN, dotaz se provede proti "všem sousedům". Pro pole indexovaná pro HNSW používá vyhledávací web graf HNSW k vyhledávání podmnožiny uzlů v rámci vektorového indexu.

Vytvoření grafu HNSW

Během indexování vytvoří vyhledávací služba graf HNSW. Cílem indexování nového vektoru do grafu HNSW je přidat ho do struktury grafu způsobem, který umožňuje efektivní hledání nejbližšího souseda. Následující kroky shrnují proces:

  1. Inicializace: Začněte prázdným grafem HNSW nebo existujícím grafem HNSW, pokud se nejedná o nový index.

  2. Vstupní bod: Toto je nejvyšší úroveň hierarchického grafu a slouží jako výchozí bod indexování.

  3. Přidání do grafu: Různé hierarchické úrovně představují různé členitosti grafu, přičemž vyšší úrovně jsou více globální a nižší úrovně jsou podrobnější. Každý uzel v grafu představuje vektorový bod.

    • Každý uzel je připojený k m sousedům, které jsou v blízkosti. Toto je m parametr.

    • Počet datových bodů, které se považují za kandidátské připojení, se řídí parametrem efConstruction . Tento dynamický seznam tvoří sadu nejbližších bodů v existujícím grafu, aby algoritmus zvážil. Vyšší efConstruction hodnoty vedou k tomu, že se považuje více uzlů, což často vede k hustším místním sousedstvím pro každý vektor.

    • Tato připojení používají nakonfigurovanou podobnost k určení vzdálenosti metric . Některá připojení jsou "dlouhá" připojení, která se propojují napříč různými hierarchickými úrovněmi a vytvářejí zástupce v grafu, které zvyšují efektivitu vyhledávání.

  4. Vyřezávání a optimalizace grafů: K tomu může dojít po indexování všech vektorů a zlepšuje navigaci a efektivitu grafu HNSW.

Vektorový dotaz prochází hierarchickou strukturu grafu a hledá shody. Následující souhrn kroků v procesu:

  1. Inicializace: Algoritmus zahájí vyhledávání na nejvyšší úrovni hierarchického grafu. Tento vstupní bod obsahuje množinu vektorů, které slouží jako výchozí body pro vyhledávání.

  2. Procházení: Dále prochází úroveň grafu podle úrovně, přejde z nejvyšší úrovně na nižší úroveň, vybere kandidátské uzly, které jsou blíže vektoru dotazu na základě nakonfigurované metriky vzdálenosti, jako je kosinus podobnost.

  3. Vyřazení: Aby se zlepšila efektivita, algoritmus vyřešuje vyhledávací prostor pouze vzhledem k uzlům, které budou pravděpodobně obsahovat nejbližší sousedy. Toho dosáhnete udržováním prioritní fronty potenciálních kandidátů a aktualizací při pokroku hledání. Délka této fronty je nakonfigurována parametrem efSearch.

  4. Upřesnění: Když se algoritmus přesune na nižší, podrobnější úrovně, HNSW bere v úvahu více sousedů v blízkosti dotazu, což umožňuje upřesnit kandidátské množiny vektorů a zlepšit přesnost.

  5. Dokončení: Hledání se dokončí, pokud byl identifikován požadovaný počet nejbližších sousedů nebo když jsou splněna jiná kritéria zastavení. Tento požadovaný počet nejbližších sousedů se řídí parametrem kdoby dotazu .

Metriky podobnosti používané k měření blízkosti

Algoritmus najde kandidátské vektory k vyhodnocení podobnosti. Aby bylo možné tuto úlohu provést, výpočet metriky podobnosti porovnává kandidátní vektor s vektorem dotazu a měří podobnost. Algoritmus sleduje seřazenou množinu většiny podobných vektorů, které tvoří seřazenou sadu výsledků, když algoritmus dosáhl dokončení.

Metrický Popis
cosine Tato metrika měří úhel mezi dvěma vektory a není ovlivněn rozdílnou délkou vektoru. Matematicky vypočítá úhel mezi dvěma vektory. Kosinus je metrika podobnosti, kterou používají modely vkládání Azure OpenAI, takže pokud používáte Azure OpenAI, zadejte cosine v konfiguraci vektoru.
dotProduct Tato metrika měří jak délku každého páru dvou vektorů, tak úhel mezi nimi. Matematicky vypočítá součin velikostí vektorů a úhel mezi nimi. U normalizovaných vektorů je to stejné jako cosine podobnost, ale mírně výkonnější.
euclidean (označované také jako l2 norm) Tato metrika měří délku vektorového rozdílu mezi dvěma vektory. Matematicky vypočítá euklidskou vzdálenost mezi dvěma vektory, což je l2-normou rozdílu dvou vektorů.

Poznámka:

Pokud spouštíte dva nebo více vektorových dotazů paralelně nebo provádíte hybridní vyhledávání, které kombinuje vektorové a textové dotazy ve stejném požadavku, použije se k bodování konečných výsledků hledání reciproční Rank Fusion (RRF ).

Skóre ve výsledcích hledání vektorů

Skóre se počítají a přiřazují ke každé shodě, přičemž nejvyšší shody se vrátí jako k výsledky. Vlastnost @search.score obsahuje skóre. Následující tabulka ukazuje rozsah, ve kterém bude skóre spadat.

Metoda vyhledávání Parametr Metrika vyhodnocování Rozsah
vektorové vyhledávání @search.score Kosinus 0.333 - 1.00

Ucosine metrik je důležité si uvědomit, že vypočítaná @search.score hodnota není kosinusem mezi vektorem dotazu a vektory dokumentu. Místo toho Azure AI Search používá transformace tak, aby funkce skóre monotonicky klesala, což znamená, že hodnoty skóre se vždy sníží, protože podobnost bude horší. Tato transformace zajišťuje, že skóre hledání je možné použít pro účely řazení.

Existují některé nuance se skóre podobnosti:

  • Kosinus podobnost je definována jako kosinus úhlu mezi dvěma vektory.
  • Kosinusová vzdálenost je definována jako 1 - cosine_similarity.

Chcete-li vytvořit monotonicky sestupnou funkci, @search.score je definována jako 1 / (1 + cosine_distance).

Vývojáři, kteří potřebují kosinus místo syntetické hodnoty, můžou pomocí vzorce převést skóre hledání zpět na kosinusovou vzdálenost:

double ScoreToSimilarity(double score)
{
    double cosineDistance = (1 - score) / score;
    return  -cosineDistance + 1;
}

Mít původní kosinus hodnotu může být užitečné ve vlastních řešeních, která nastavují prahové hodnoty pro oříznutí výsledků nízké kvality.

Tipy pro ladění relevance

Pokud se vám nezobrazují relevantní výsledky, experimentujte se změnami konfigurace dotazů. Pro vektorové dotazy neexistují žádné specifické funkce ladění, jako je bodovací profil nebo pole nebo zvýšení termínu:

  • Experimentujte s velikostí bloků dat a překrývajícími se. Zkuste zvětšit velikost bloku dat a zajistit dostatečné překrytí, abyste zachovali kontext nebo kontinuitu mezi bloky dat.

  • Pro HNSW zkuste změnit vnitřní složení grafu blízkosti různými úrovněmi efConstruction . Výchozí hodnota je 400. Rozsah je 100 až 1 000.

  • Pokud používáte chatovací model, zvyšte k výsledky, aby se do modelu chatu vysílaly další výsledky hledání.

  • Vyzkoušejte hybridní dotazy s sémantickým hodnocením. Při srovnávacím testování tato kombinace konzistentně vytvořila nejrelevavantnější výsledky.

Další kroky