Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Tijdens het uitvoeren van vectorquery's zoekt de zoekmachine naar vergelijkbare vectoren om de beste kandidaten te vinden die in zoekresultaten kunnen worden geretourneerd. Afhankelijk van hoe u de vectorinhoud hebt geïndexeerd, is de zoekopdracht naar relevante overeenkomsten volledig of beperkt tot dichtstbijzijnde buren voor snellere verwerking. Zodra kandidaten zijn gevonden, worden metrische overeenkomsten gebruikt om elk resultaat te scoren op basis van de sterkte van de overeenkomst.
In dit artikel worden de algoritmen uitgelegd die worden gebruikt om relevante overeenkomsten te vinden en de overeenkomsten metrische gegevens die worden gebruikt voor scoren. Het biedt ook tips voor het verbeteren van relevantie als zoekresultaten niet voldoen aan de verwachtingen.
Algoritmen die worden gebruikt in vectorzoekopdrachten
Vectorzoekalgoritmen zijn onder andere:
Uitgebreide K-Nearest Neighbors (KNN) die een brute-force scan van de gehele vectorruimte uitvoert.
Hierarchical Navigable Small World (HNSW), waarmee een geschatte dichtstbijzijnde buur (ANN) -zoekopdracht wordt uitgevoerd.
Alleen vectorvelden die zijn gemarkeerd als searchable
in de index of searchFields
in de query, worden gebruikt voor het zoeken en scoren.
Over uitgebreide KNN
Uitgebreide KNN berekent de afstanden tussen alle paren gegevenspunten en zoekt de exacte k
dichtstbijzijnde buren voor een querypunt. Omdat het algoritme geen snelle willekeurige toegang tot gegevenspunten vereist, verbruikt KNN geen quotum voor de grootte van vectorindexen . Het biedt echter de volledige set van dichtstbijzijnde buren.
Uitgebreide KNN is rekenintensief, dus gebruik deze voor kleine tot middelgrote gegevenssets of wanneer de behoefte aan precisie opweegt tegen de noodzaak van queryprestaties. Een andere use case is het bouwen van een gegevensset om het geheugen van een ANN-algoritme te evalueren, omdat uitgebreide KNN kan worden gebruikt om de grondwaarheidsset van dichtstbijzijnde buren te bouwen.
Over HNSW
HNSW is een ANN-algoritme dat is geoptimaliseerd voor toepassingen met hoge recall, lage latentie voor onbekende of vluchtige datadistributie. Tijdens het indexeren maakt HNSW extra gegevensstructuren die gegevenspunten ordenen in een hiërarchische grafiek. Tijdens het uitvoeren van query's navigeert HNSW door deze grafiek om de meest relevante overeenkomsten te vinden, waardoor efficiënte zoekopdrachten naar dichtstbijzijnde buren mogelijk zijn.
HNSW vereist dat alle gegevenspunten zich in het geheugen bevinden voor snelle willekeurige toegang, die het quotum voor vectorindexgrootte verbruikt. Dit ontwerp zorgt voor een balans tussen de nauwkeurigheid van zoekopdrachten met rekenefficiëntie en maakt HNSW geschikt voor de meeste scenario's, met name bij het zoeken naar grotere gegevenssets.
HNSW biedt verschillende configureerbare parameters om de doorvoer, latentie en recall voor uw zoektoepassing te optimaliseren. Velden die HNSW opgeven ondersteunen bijvoorbeeld ook uitgebreide KNN met behulp van de queryaanvraagparameter"exhaustive": true
. Velden geïndexeerd voor exhaustiveKnn
bieden echter geen ondersteuning voor HNSW-query's omdat de extra gegevensstructuren die efficiënt zoeken mogelijk maken, niet aanwezig zijn.
Over ANN
ANN is een klasse van algoritmen voor het vinden van overeenkomsten in vectorruimte. Deze klasse van algoritmen maakt gebruik van verschillende gegevensstructuren of methoden voor gegevenspartitionering om de zoekruimte aanzienlijk te verminderen en de verwerking van query's te versnellen.
ANN-algoritmen offeren enige nauwkeurigheid op, maar bieden schaalbaar en sneller ophalen van dichtstbijzijnde buren, waardoor ze ideaal zijn voor het verdelen van nauwkeurigheid en efficiëntie in moderne toepassingen voor het ophalen van gegevens. U kunt de parameters van uw algoritme aanpassen om het terugroeppercentage, de latentie, het geheugen en de schijfvoetafdruk van uw zoekapplicatie beter af te stemmen op de vereisten.
Azure AI Search maakt gebruik van HNSW voor het ANN-algoritme.
Hoe dichtstbijzijnde buren zoeken werkt
Vectorquery's worden uitgevoerd op basis van een insluitruimte die bestaat uit vectoren die zijn gegenereerd op basis van hetzelfde insluitingsmodel. Over het algemeen wordt de invoerwaarde binnen een queryaanvraag ingevoerd in hetzelfde machine learning-model dat insluitingen in de vectorindex heeft gegenereerd. De uitvoer is een vector in dezelfde insluitingsruimte. Omdat vergelijkbare vectoren dicht bij elkaar zijn geclusterd, komt het zoeken naar overeenkomsten overeen met het vinden van de vectoren die het dichtst bij de queryvector liggen en de bijbehorende documenten retourneren als zoekresultaat.
Als een queryaanvraag bijvoorbeeld betrekking heeft op hotels, wijst het model de query toe aan een vector die zich ergens in het cluster van vectoren bevindt die documenten over hotels vertegenwoordigen. Bepalen welke vectoren het meest vergelijkbaar zijn met de query, op basis van een metrische overeenkomst, bepaalt welke documenten het meest relevant zijn.
Wanneer vectorvelden worden geïndexeerd voor een volledige KNN, wordt de query uitgevoerd op alle buren. Voor velden die zijn geïndexeerd voor HNSW, gebruikt de zoekmachine een HNSW-grafiek om te zoeken naar een subset van knooppunten binnen de vectorindex.
De HNSW-grafiek maken
Tijdens het indexeren maakt de zoekservice de HNSW-grafiek. Het doel van het indexeren van een nieuwe vector in een HNSW-grafiek is om deze toe te voegen aan de grafiekstructuur op een manier die efficiënt zoeken naar dichtstbijzijnde buren mogelijk maakt. De volgende stappen geven een overzicht van het proces:
Initialisatie: Begin met een lege HNSW-grafiek of de bestaande HNSW-grafiek als dit geen nieuwe index is.
Toegangspunt: dit is het hoogste niveau van de hiërarchische grafiek en fungeert als uitgangspunt voor indexering.
Toevoegen aan de grafiek: Verschillende hiërarchische niveaus vertegenwoordigen verschillende granulariteiten van de grafiek, waarbij hogere niveaus globaaler zijn en lagere niveaus gedetailleerder zijn. Elk knooppunt in de grafiek vertegenwoordigt een vectorpunt.
Elk knooppunt is verbonden met maximaal
m
buren die zich in de buurt bevinden. Dit is dem
parameter.Het aantal gegevenspunten dat als kandidaatverbindingen wordt beschouwd, wordt bepaald door de
efConstruction
parameter. Deze dynamische lijst vormt de set dichtstbijzijnde punten in de bestaande grafiek die het algoritme kan overwegen. HogereefConstruction
waarden resulteren in meer knooppunten die vaak leiden tot dichtere lokale buurten voor elke vector.Deze verbindingen maken gebruik van de geconfigureerde gelijkenis
metric
om de afstand te bepalen. Sommige verbindingen zijn 'langeafstandsverbindingen' die verbinding maken tussen verschillende hiërarchische niveaus, waardoor snelkoppelingen in de grafiek worden gemaakt die de zoekefficiëntie verbeteren.
Graafsnoeien en optimalisatie: dit kan gebeuren na het indexeren van alle vectoren en verbetert de navigatie en efficiëntie van de HNSW-grafiek.
Navigeren in de HNSW-grafiek tijdens het uitvoeren van query's
Een vectorquery navigeert door de hiërarchische grafiekstructuur om te scannen op overeenkomsten. Hieronder vindt u een overzicht van de stappen in het proces:
Initialisatie: Het algoritme initieert de zoekopdracht op het hoogste niveau van de hiërarchische grafiek. Dit toegangspunt bevat de set vectoren die dienen als uitgangspunt voor zoeken.
Doorkruising: Vervolgens wordt het grafiekniveau op niveau doorlopen, van het hoogste niveau naar lagere niveaus navigeren, kandidaatknooppunten selecteren die zich dichter bij de queryvector bevinden, op basis van de geconfigureerde afstandsmetriek, zoals cosinus-overeenkomsten.
Pruning: Om de efficiëntie te verbeteren, verwijdert het algoritme de zoekruimte door alleen rekening te houden met knooppunten die waarschijnlijk de dichtstbijzijnde buren bevatten. Dit wordt bereikt door een prioriteitswachtrij van potentiële kandidaten te behouden en bij te werken naarmate de zoekopdracht vordert. De lengte van deze wachtrij wordt geconfigureerd door de parameter
efSearch
.Verfijning: Naarmate het algoritme wordt verplaatst naar lagere, gedetailleerdere niveaus, beschouwt HNSW meer buren in de buurt van de query, waardoor de kandidaat-set vectoren kan worden verfijnd, waardoor de nauwkeurigheid wordt verbeterd.
Voltooiing: De zoekopdracht wordt voltooid wanneer het gewenste aantal dichtstbijzijnde buren is geïdentificeerd of wanneer aan andere stopcriteria wordt voldaan. Dit gewenste aantal dichtstbijzijnde buren wordt bepaald door de parameter
k
querytijd.
Metrische overeenkomsten die worden gebruikt om de nabijheid te meten
Het algoritme vindt kandidaatvectoren om overeenkomsten te evalueren. Om deze taak uit te voeren, vergelijkt een metrische vergelijking van de kandidaatvector de kandidaatvector met de queryvector en meet de gelijkenis. Het algoritme houdt de geordende set met de meeste vergelijkbare vectoren bij die zijn gevonden, die de gerangschikte resultatenset vormt wanneer het algoritme is voltooid.
Metrisch | Beschrijving |
---|---|
cosine |
Deze metrische waarde meet de hoek tussen twee vectoren en wordt niet beïnvloed door verschillende vectorlengten. Wiskundig wordt de hoek tussen twee vectoren berekend. Cosinus is de overeenkomstwaarde die wordt gebruikt door Azure OpenAI-insluitingsmodellen, dus als u Azure OpenAI gebruikt, geeft cosine u deze op in de vectorconfiguratie. |
dotProduct |
Deze metrische waarde meet zowel de lengte van elk paar van twee vectoren als de hoek ertussen. Wiskundig berekent het de producten van de grootten van vectoren en de hoek ertussen. Voor genormaliseerde vectoren is dit identiek aan cosine overeenkomsten, maar iets beter presterend. |
euclidean |
(ook wel bekend als l2 norm ) Deze metrische waarde meet de lengte van het vectorverschil tussen twee vectoren. Wiskundig berekent het de Euclidische afstand tussen twee vectoren, wat de l2-norm is van het verschil van de twee vectoren. |
Notitie
Als u twee of meer vectorquery's parallel uitvoert of als u een hybride zoekopdracht uitvoert waarin vector- en tekstquery's in dezelfde aanvraag worden gecombineerd, wordt Wederzijdse Rank Fusion (RRF) gebruikt voor het scoren van de uiteindelijke zoekresultaten.
Scores in een vectorzoekresultaat
Scores worden berekend en toegewezen aan elke overeenkomst, waarbij de hoogste overeenkomsten worden geretourneerd als k
resultaten. De @search.score
eigenschap bevat de score. In de volgende tabel ziet u het bereik waarin een score valt.
Zoekmethode | Kenmerk | Scoremetriek | Bereik |
---|---|---|---|
vector zoeken | @search.score |
Cosinus | 0.333 - 1.00 |
Voorcosine
metrische gegevens is het belangrijk om te weten dat de berekende @search.score
waarde niet de cosinuswaarde is tussen de queryvector en de documentvectoren. In plaats daarvan past Azure AI Search transformaties toe, zodat de scorefunctie monotonisch afneemt, wat betekent dat scorewaarden altijd in waarde afnemen, omdat de gelijkenis erger wordt. Deze transformatie zorgt ervoor dat zoekscores bruikbaar zijn voor classificatiedoeleinden.
Er zijn enkele nuances met overeenkomstenscores:
- Cosinus-gelijkenis wordt gedefinieerd als de cosinus van de hoek tussen twee vectoren.
- Cosinusafstand wordt gedefinieerd als
1 - cosine_similarity
.
Als u een monotonisch afnemende functie wilt maken, wordt de @search.score
functie gedefinieerd als 1 / (1 + cosine_distance)
.
Ontwikkelaars die een cosinuswaarde nodig hebben in plaats van de synthetische waarde, kunnen een formule gebruiken om de zoekscore terug te zetten naar cosinusafstand:
double ScoreToSimilarity(double score)
{
double cosineDistance = (1 - score) / score;
return -cosineDistance + 1;
}
Het gebruik van de oorspronkelijke cosinuswaarde kan nuttig zijn in aangepaste oplossingen die drempelwaarden instellen om de resultaten van resultaten van lage kwaliteit te knippen.
Tips voor het afstemmen van relevantie
Als u geen relevante resultaten krijgt, experimenteer dan met wijzigingen in de queryconfiguratie. Er zijn geen specifieke afstemmingsfuncties, zoals een scoreprofiel of veld of termverhoging, voor vectorquery's:
Experimenteer met segmentgrootte en overlap. Vergroot de segmentgrootte en zorg ervoor dat er voldoende overlap is om de context of continuïteit tussen segmenten te behouden.
Voor HNSW kunt u verschillende niveaus
efConstruction
proberen om de interne samenstelling van de nabijheidsgrafiek te wijzigen. De standaardwaarde is 400. Het bereik is 100 tot 1.000.Verhoog
k
de resultaten om meer zoekresultaten in te voeren in een chatmodel, als u er een gebruikt.Hybride query's proberen met semantische classificatie. Bij benchmarktests leverde deze combinatie consistent de meest relevante resultaten op.