Relevancia a vektorkeresésben
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 után a rendszer a hasonlósági metrikákat használja 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.
Vektorkeresésben használt algoritmusok
A vektorkeresési algoritmusok tartalmazzák a teljes k-legközelebbi szomszédokat (KNN) és a hierarchikus navigálható kisvilágot (HNSW).
A teljes KNN találgatásos keresést végez, amely a teljes vektorteret megvizsgálja.
A HNSW a legközelebbi szomszédkeresést (ANN) hajtja végre.
Csak az indexben vagy searchFields
a lekérdezésben megjelölt searchable
vektormezőket használja a rendszer a kereséshez és a pontozáshoz.
Mikor érdemes a teljes KNN-t használni?
A teljes KNN kiszámítja az adatpontok párjai közötti távolságot, és megkeresi a lekérdezési pontok legközelebbi k
szomszédjait. Olyan forgatókönyvekhez készült, ahol a magas visszahívás rendkívül fontos, és a felhasználók hajlandóak elfogadni a lekérdezési késéssel kapcsolatos kompromisszumokat. Mivel számításigényes, használjon teljes körű KNN-t kis és közepes adathalmazokhoz, vagy ha a pontossági követelmények meghaladják a lekérdezési teljesítmény szempontjait.
A másodlagos használati eset egy adatkészlet létrehozása a legközelebbi szomszéd algoritmusok visszahívásának kiértékeléséhez. A teljes KNN a legközelebbi szomszédok alapigaz készletének összeállítására használható.
Mikor érdemes használni a HNSW-t?
Az indexelés során a HNSW további adatstruktúrákat hoz létre a gyorsabb kereséshez, és hierarchikus gráfstruktúrába rendezi az adatpontokat. A HNSW számos konfigurációs paraméterrel rendelkezik, amelyek hangolhatók a keresési alkalmazás átviteli sebességének, késésének és visszahívási célkitűzéseinek eléréséhez. Lekérdezéskor például megadhatja a teljes keresés lehetőségeit, még akkor is, ha a vektormező indexelve van a HNSW-hez.
A lekérdezés végrehajtása során a HNSW gyors szomszéd lekérdezéseket tesz lehetővé a gráfon való navigálással. Ez a megközelítés egyensúlyt teremt a keresési pontosság és a számítási hatékonyság között. A HNSW a legtöbb forgatókönyvhöz ajánlott, mivel nagyobb adathalmazok keresésekor a hatékonysága miatt ajánlott.
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 a legközelebbi szomszédkeresés hatékony legyen. A következő lépések összefoglalják a folyamatot:
Inicializálás: Kezdje egy üres HNSW-gráfmal vagy a meglévő HNSW-gráfmal, ha az nem új index.
Belépési pont: Ez a hierarchikus gráf legfelső szintje, és az indexelés kiindulópontjaként szolgál.
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 a közelben lévő szomszédokhoz
m
csatlakozik. Ez am
paraméter.A jelölt kapcsolatoknak tekintett adatpontok számát a
efConstruction
paraméter 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 magasabbefConstruction
é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 "távolsági" kapcsolatok, amelyek különböző hierarchikus szinteken csatlakoznak, és olyan billentyűparancsokat hoznak létre a grafikonon, amelyek növelik a keresési hatékonyságot.
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.
Navigálás a HNSW-diagramon lekérdezéskor
A vektoros lekérdezések a hierarchikus gráfstruktúrában navigálnak az egyezések kereséséhez. Az alábbiakban összefoglaljuk a folyamat lépéseit:
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.
Bejárás: Ezután szint szerint halad át a gráfszinten, a felső szinttől az alacsonyabb szintekig haladva kiválasztja a lekérdezésvektorhoz közelebb álló jelölt csomópontokat a konfigurált távolságmetrika alapján, például a koszinusz hasonlósága alapján.
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. Ez úgy érhető el, hogy fenntartja a potenciális jelöltek prioritási üzenetsorát, és frissíti azt a keresés előrehaladása során. Az üzenetsor hosszát a paraméter
efSearch
konfigurálja.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, ami lehetővé teszi a vektorok jelölt készletének pontosítását, és javítja a pontosságot.
Befejezés: A keresés akkor fejeződik be, ha a legközelebbi szomszédok kívánt számát azonosították, vagy ha más leállítási feltételek teljesülnek. A legközelebbi szomszédok kívánt számát a lekérdezési idő paraméter
k
szabályozza.
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 az algoritmus befejezésekor a rangsorolt eredményhalmazt alkotja.
Metrika | Leírás |
---|---|
cosine |
Ez a metrika két vektor szögét 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 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. |
Feljegyzé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 pontszámok kiszámítása és hozzárendelése az egyes egyezésekhez történik, és a legmagasabb találatok lesznek eredményként k
visszaadva. 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 csökken.
Keresési módszer | Paraméter | Pontozási metrika | Tartomány |
---|---|---|---|
vektoros keresés | @search.score |
Koszinusz | 0.333 - 1.00 |
A metrika esetébencosine
fontos megjegyezni, hogy a számított @search.score
érték nem a lekérdezésvektor és a dokumentumvektorok koszinuszértéke. Ehelyett az Azure AI Search olyan átalakításokat alkalmaz, hogy a pontszámfüggvény monoton módon csökken, ami azt jelenti, hogy a pontszámértékek mindig csökkennek az értékben, ahogy a hasonlóság rosszabbá válik. Ez az átalakítás biztosítja, hogy a keresési pontszámok felhasználhatók legyenek rangsorolási célokra.
Vannak olyan árnyalatok, amelyek hasonlósági pontszámokkal vannak elbúvóak:
- 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_similarity
van definiálva: .
Monoton módon csökkenő függvény létrehozásához a függvény a @search.score
következőképpen van definiálva 1 / (1 + cosine_distance)
: .
Azok a fejlesztők, akiknek a szintetikus érték helyett koszinuszértékre van szükségük, képlet használatával visszakonvertálja 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, kísérletezzen a lekérdezés konfigurációjának módosításával. A vektoros lekérdezésekhez nincsenek konkrét hangolási funkciók, például pontozási profil vagy mező vagy kifejezésnövelés:
Kísérletezzen az adattömb méretével és átfedésével. Próbálja meg növelni az adattömb méretét, és gondoskodjon arról, hogy elegendő átfedés legyen az adattömbök környezetének vagy folytonosságának megőrzéséhez.
A HNSW esetében próbálkozzon különböző szinteken
efConstruction
a közelségi gráf belső összetételé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 keresési találatot adhat hozzá egy csevegési modellhez, 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.