Relevancia a vektorkeresésben

Megjegyzés

Azure AI Keresés a Azure portálon, REST API-kon és Azure SDK-k keresztül érhető el. Emellett a Foundry IQ-t is támogatja, amely a vállalati tartalmakat újrafelhasználható, engedélytudatos tudásbázisokká alakítja át az Microsoft Foundry portálon található ügynökök számára.

A vektoros lekérdezés végrehajtása során a keresőmotor hasonló vektorokat keres, hogy megtalálja a legjobb jelölteket a keresési eredményekben való visszatéréshez. Attól függően, hogy hogyan indexelte a vektortartalmat, a releváns egyezések keresése teljes körű, vagy a legközelebbi szomszédokra van korlátozva a gyorsabb feldolgozás érdekében. A jelöltek megtalálása esetén a rendszer hasonlósági metrikákat használ az egyes eredmények pontozásához a találatok erőssége alapján.

Ez a cikk a releváns egyezések kereséséhez használt algoritmusokat és a pontozáshoz használt hasonlósági metrikákat ismerteti. Emellett tippeket is kínál a relevancia javításához, ha a keresési eredmények nem felelnek meg az elvárásoknak.

A vektorkeresési algoritmusok a következők:

A rendszer csak az indexben vagy searchable a lekérdezésben megjelölt searchFields vektormezőket használja a kereséshez és a pontozáshoz.

Tudnivalók a kimerítő KNN-ről

A teljes körű KNN kiszámítja az összes adatpontpár közötti távolságokat, és egy lekérdezési ponthoz meghatározza a pontosan k legközelebbi szomszédot. Mivel az algoritmus nem igényel gyors véletlenszerű hozzáférést az adatpontokhoz, a KNN nem használ vektorindex-méretkvótát . Azonban a legközelebbi szomszédok globális készletét biztosítja.

A teljes körű KNN számításigényes, ezért kis és közepes adathalmazokhoz használja, vagy ha a pontosság iránti igény meghaladja a lekérdezési teljesítmény szükségességét. Egy másik használati eset egy ANN-algoritmus visszahívásának kiértékelésére szolgáló adathalmaz létrehozása, mivel a teljes KNN-t a legközelebbi szomszédok alapigazsági készletének létrehozásához használhatja.

A HNSW ismertetése

A HNSW egy ann algoritmus, amely nagy visszahívású, alacsony késésű, ismeretlen vagy változékony adateloszlású alkalmazásokhoz van optimalizálva. Az indexelés során a HNSW további adatstruktúrákat hoz létre, amelyek hierarchikus gráfba rendezik az adatpontokat. A lekérdezés végrehajtása során a HNSW ezen a grafikonon navigálva megkeresi a legrelevánsabb találatokat, így hatékony szomszédkereséseket tesz lehetővé.

A HNSW megköveteli, hogy az összes adatpont a memóriában legyen a gyors véletlenszerű hozzáféréshez, amely vektorindex-méretkvótát használ fel. Ez a kialakítás kiegyensúlyozza a keresési pontosságot a számítási hatékonysággal, és alkalmassá teszi a HNSW-t a legtöbb forgatókönyvre, különösen nagyobb adathalmazok keresésekor.

A HNSW számos beállítható konfigurációs paramétert kínál a keresési alkalmazás átviteli sebességének, késésének és visszahívásának optimalizálásához. A HNSW-t megjelölő mezők például a teljes KNN-t is támogatják a lekérdezéskérési paraméterrel "exhaustive": true. Az indexelt exhaustiveKnn mezők azonban nem támogatják a HNSW-lekérdezéseket, mert a hatékony keresést lehetővé tevő további adatstruktúrák nem léteznek.

Tudnivalók az ANN-ről

Az ANN az algoritmusok osztálya a vektortérben található egyezések kereséséhez. Az algoritmusok ezen osztálya különböző adatstruktúrákat vagy adatparticionálási módszereket használ a keresési terület jelentős csökkentéséhez és a lekérdezések feldolgozásának felgyorsításához.

Az ANN-algoritmusok bizonyos pontosságot feláldoznak, de skálázható és gyorsabb lekérést biztosítanak a legközelebbi szomszédokhoz, így ideálisak a pontosság és a hatékonyság kiegyensúlyozására a modern információlekérési alkalmazásokban. Az algoritmus paramétereit úgy módosíthatja, hogy finomhangolja a keresési alkalmazás visszahívási, késési, memória- és lemezigényét.

Az Azure AI Keresés a HNSW-t használja ann algoritmusához.

A legközelebbi szomszédkeresés működése

A vektoros lekérdezések egy beágyazási területre hajtanak végre, amely ugyanabból a beágyazási modellből létrehozott vektorokból áll. A lekérdezési kérelem bemeneti értéke általában ugyanabba a gépi tanulási modellbe lesz betáplálva, amely beágyazásokat hozott létre a vektorindexben. A kimenet egy vektor ugyanabban a beágyazási térben. Mivel a hasonló vektorok közel vannak egymáshoz csoportosítva, az egyezések keresése egyenértékű a lekérdezésvektorhoz legközelebbi vektorok megkeresésével, és a kapcsolódó dokumentumok keresési eredményként való visszaadásával.

Ha például egy lekérdezési kérelem a szállodákról szól, a modell egy olyan vektorra képezi le a lekérdezést, amely valahol a szállodák dokumentumait képviselő vektorfürtben található. A lekérdezéshez leginkább hasonló vektorok azonosítása egy hasonlósági metrika alapján határozza meg, hogy mely dokumentumok a legrelevánsabbak.

Ha a vektormezők indexelve vannak a teljes KNN-hez, a lekérdezés "minden szomszédon" fut. A HNSW-hez indexelt mezők esetében a keresőmotor egy HNSW-gráf használatával keres a csomópontok egy részhalmazán a vektorindexen belül.

A HNSW-diagram létrehozása

Az indexelés során a keresési szolgáltatás felépíti a HNSW gráfot. Egy új vektor HNSW-gráfba való indexelésének célja, hogy a gráfszerkezethez úgy adja hozzá, hogy az a legközelebbi szomszédkeresést is támogatja. A következő lépések összefoglalják a folyamatot:

  1. Inicializálás: Kezdje egy üres HNSW-gráfmal, vagy ha nem új indexről van szó, akkor a meglévő HNSW-gráfról.

  2. Belépési pont: Ez a hierarchikus gráf legfelső szintje, és az indexelés kiindulópontjaként szolgál.

  3. Hozzáadás a gráfhoz: A különböző hierarchikus szintek a gráf különböző részletességeit jelölik, a magasabb szintek globálisabbak, az alacsonyabb szintek pedig részletesebbek. A gráf minden csomópontja egy vektorpontot jelöl.

    • Minden csomópont legfeljebb m közeli szomszédhoz csatlakozik. Ez a m paraméter.

    • A efConstruction paraméter a jelölt kapcsolatoknak tekintett adatpontok számát szabályozza. Ez a dinamikus lista a meglévő gráf legközelebbi pontjainak készletét képezi az algoritmus számára. A magasabb efConstruction értékek több csomópontot eredményeznek, ami gyakran az egyes vektorok sűrűbb helyi szomszédságához vezet.

    • Ezek a kapcsolatok a konfigurált hasonlóságot metric használják a távolság meghatározásához. Egyes kapcsolatok „nagy távolságú” kapcsolatok, amelyek különböző hierarchikus szintek között teremtenek kapcsolatot, így a gráfban rövidebb utakat hoznak létre, amelyek javítják a keresés hatékonyságát.

  4. Gráfmetszet és -optimalizálás: Ez az összes vektor indexelése után fordulhat elő, és javítja a HNSW-gráf navigálását és hatékonyságát.

A vektoros lekérdezések a hierarchikus gráfstruktúrában navigálnak az egyezések kereséséhez. A következő lépések összefoglalják a folyamatot:

  1. Inicializálás: Az algoritmus a hierarchikus gráf legfelső szintjén kezdeményezi a keresést. Ez a belépési pont azon vektorok készletét tartalmazza, amelyek kiindulópontként szolgálnak a kereséshez.

  2. Bejárás: Ezután szintről szintre bejárja a gráfot, haladva a legfelső szintről az alacsonyabb szintek felé. Olyan jelölt csomópontokat választ ki, amelyek közelebb vannak a lekérdezésvektorhoz a konfigurált távolságmetrika alapján, például a koszinusz hasonlósága alapján.

  3. Metszés: A hatékonyság javítása érdekében az algoritmus csak azokat a csomópontokat veszi figyelembe, amelyek valószínűleg a legközelebbi szomszédokat tartalmazzák. Fenntartja a potenciális jelöltek prioritási üzenetsorát, és frissíti azt a keresés előrehaladtával. Az üzenetsor hosszát a paraméter efSearchkonfigurálja.

  4. Pontosítás: Ahogy az algoritmus alacsonyabb, részletesebb szintre lép, a HNSW több szomszédot is figyelembe veszi a lekérdezés közelében. Ez a szempont lehetővé teszi a jelölt vektorok pontosítását, a pontosság növelését.

  5. Befejezés: A keresés akkor fejeződik be, ha a legközelebbi szomszédok kívánt száma azonosítható, vagy ha más leállítási feltételek teljesülnek. A lekérdezési idő paraméter k szabályozza a legközelebbi szomszédok kívánt számát.

A közelség mérésére használt hasonlósági metrikák

Az algoritmus a hasonlóság kiértékeléséhez keres jelölt vektorokat. A feladat végrehajtásához a hasonlóságmetrika számítása összehasonlítja a jelölt vektort a lekérdezésvektorral, és méri a hasonlóságot. Az algoritmus nyomon követi a talált legtöbb hasonló vektor rendezett készletét, amely a rangsorolt eredményhalmazt alkotja, amikor az algoritmus eléri a befejezést.

Mérőszám Leírás
cosine Ez a metrika két vektor közötti szöget méri, és nem befolyásolja a különböző vektorhosszok. Matematikailag kiszámítja a két vektor közötti szöget. A Cosine az Azure OpenAI beágyazási modelljei által használt hasonlósági metrika, ezért ha Azure OpenAI-t használ, adja meg cosine a vektorkonfigurációban.
dotProduct Ez a metrika az egyes két vektorpárok hosszát és a köztük lévő szöget méri. Matematikailag kiszámítja a vektorok nagyságának és a köztük lévő szögnek a termékeit. Normalizált vektorok esetén ez a metrika megegyezik a cosine hasonlósággal, de valamivel nagyobb teljesítményű.
euclidean (más néven l2 norm) Ez a metrika két vektor közötti vektorkülönbség hosszát méri. Matematikailag kiszámítja a két vektor közötti euklideszi távolságot, ami a két vektor különbségének l2-norma.

Megjegyzés

Ha két vagy több vektoros lekérdezést futtat párhuzamosan, vagy ha olyan hibrid keresést végez, amely ugyanabban a kérelemben egyesíti a vektoros és szöveges lekérdezéseket, akkor a kölcsönös rangsor fúzió (RRF) a végső keresési eredmények pontozására szolgál.

Pontszámok vektoros keresési eredményekben

A rendszer kiszámítja és hozzárendeli a pontszámokat az egyes egyezésekhez. A legmagasabb egyezések eredményként térnek k vissza. A @search.score tulajdonság tartalmazza a pontszámot. Az alábbi táblázat azt a tartományt mutatja be, amelyen belül egy pontszám esik.

Keresési módszer Paraméter Pontozási metrika Tartomány
vektor keresés @search.score Koszinusz 0.333 - 1.00

A cosine metrika esetében a számított @search.score érték nem a lekérdezésvektor és a dokumentumvektorok koszinuszértéke. Ehelyett az Azure AI Keresés átalakításokat alkalmaz, hogy a pontszámfüggvény monoton módon csökkenjön. A pontszámértékek mindig csökkennek, ahogy a hasonlóság rosszabbodik. Ez az átalakítás biztosítja, hogy a keresési pontszámok felhasználhatók legyenek rangsorolási célokra.

Van néhány finomság a hasonlósági pontszámokkal kapcsolatban:

  • A koszinusz-hasonlóság a két vektor közötti szög koszinuszaként van definiálva.
  • A koszinusz távolsága a következőképpen 1 - cosine_similarityvan definiálva: .

Monoton csökkenő függvény létrehozásához a @search.score a következőképpen van definiálva: 1 / (1 + cosine_distance).

Ha a szintetikus érték helyett koszinuszértékre van szüksége, képlet használatával konvertálja vissza a keresési pontszámot koszinusz távolságra:

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

Az eredeti koszinuszérték hasznos lehet olyan egyéni megoldásokban, amelyek küszöbértékeket állítottak be az alacsony minőségű eredmények eredményeinek vágásához.

Tippek a relevanciahangoláshoz

Ha nem kap releváns eredményeket, próbálja meg módosítani a lekérdezés konfigurációját. A vektoros lekérdezések nem rendelkeznek konkrét finomhangolási funkciókkal, például pontozási profillal vagy mezővel vagy kifejezéskiemeléssel:

  • Próbálja ki a különböző adattömbméreteket és átfedési beállításokat. Növelje az adatdarab méretét, és győződjön meg arról, hogy elegendő átfedés van az adatdarabok között a kontextus vagy a kontinuitás megőrzése érdekében.

  • A HNSW-nél próbáljon ki különböző efConstruction értékeket a közelségi gráf belső felépítésének módosításához. Az alapértelmezett érték 400. A tartomány 100 és 1000 között van.

  • A találatok növelésével k több találatot küldhet egy csevegőmodellnek, ha használ egyet.

  • Próbáljon ki hibrid lekérdezéseket szemantikai rangsorolással. A teljesítményteszt-tesztelés során ez a kombináció következetesen a legrelevánsabb eredményeket hozta.