Vectoren in Azure AI Search
Vectorzoekopdrachten is een benadering bij het ophalen van gegevens die ondersteuning biedt voor indexering en query-uitvoering via numerieke weergaven van inhoud. Omdat de inhoud numeriek is in plaats van tekst zonder opmaak, is overeenkomende waarde gebaseerd op vectoren die het meest lijken op de queryvector, waardoor overeenkomsten mogelijk zijn tussen:
- semantische of conceptuele likeness ('hond' en 'canine', conceptueel vergelijkbaar maar taalkundig uniek)
- meertalige inhoud ('hond' in het Engels en 'hund' in het Duits)
- meerdere inhoudstypen ('hond' in tekst zonder opmaak en een foto van een hond in een afbeeldingsbestand)
Dit artikel bevat een inleiding op hoog niveau tot vectoren in Azure AI Search. Ook wordt de integratie met andere Azure-services uitgelegd en worden terminologie en concepten behandeld die betrekking hebben op vectorzoekopdrachten.
We raden dit artikel aan voor achtergrond, maar als u liever aan de slag wilt gaan, volgt u deze stappen:
- Insluitingen opgeven voor uw index of insluiten genereren in een indexeerpijplijn
- Een vectorindex maken
- Vectorquery's uitvoeren
U kunt ook beginnen met de vector quickstart of de codevoorbeelden op GitHub.
Welke scenario's kunnen vectorzoekopdrachten ondersteunen?
Scenario's voor vectorzoekopdrachten zijn:
Overeenkomsten zoeken. Codeer tekst met behulp van insluitmodellen zoals OpenAI-insluitingen of opensource-modellen zoals SBERT, en haal documenten op met query's die ook als vectoren worden gecodeerd.
Zoeken in verschillende inhoudstypen (multimodale). Codeer afbeeldingen en tekst met behulp van multimodale insluitingen (bijvoorbeeld met OpenAI CLIP of GPT-4 Turbo met Vision in Azure OpenAI) en voer een query uit op een insluitruimte die bestaat uit vectoren van beide inhoudstypen.
Hybride zoekopdracht. In Azure AI Search verwijst hybride zoekopdracht naar de uitvoering van vector- en trefwoordquery's in dezelfde aanvraag. Vectorondersteuning wordt geïmplementeerd op veldniveau, met een index die zowel vectorvelden als doorzoekbare tekstvelden bevat. De query's worden parallel uitgevoerd en de resultaten worden samengevoegd in één antwoord. Voeg desgewenst semantische rangschikking toe voor meer nauwkeurigheid met L2-herrankering met behulp van dezelfde taalmodellen die Bing mogelijk maken.
Meertalige zoekopdracht. Het bieden van een zoekervaring in de eigen taal van de gebruikers is mogelijk via het insluiten van modellen en chatmodellen die in meerdere talen zijn getraind. Als u meer controle over vertaling nodig hebt, kunt u de mogelijkheden voor meerdere talen aanvullen die Door Azure AI Search worden ondersteund voor niet-ctorinhoud, in hybride zoekscenario's.
Gefilterde vectorzoekopdrachten. Een queryaanvraag kan een vectorquery en een filterexpressie bevatten. Filters zijn van toepassing op tekst- en numerieke velden, en zijn handig voor metagegevensfilters en het opnemen of uitsluiten van zoekresultaten op basis van filtercriteria. Hoewel een vectorveld zelf niet kan worden gefilterd, kunt u een filterbare tekst of numeriek veld instellen. De zoekmachine kan het filter verwerken voor of nadat de vectorquery wordt uitgevoerd.
Vectordatabase. Azure AI Search slaat de gegevens op die u opvraagt. Gebruik het als een pure vectoropslag wanneer u langetermijngeheugen of een knowledge base nodig hebt, of grondgegevens voor rag-architectuur (Retrieval Augmented Generation) of elke app die vectoren gebruikt.
Hoe vectorzoekopdrachten werken in Azure AI Search
Vectorondersteuning omvat het indexeren, opslaan en opvragen van vector-insluitingen uit een zoekindex.
In het volgende diagram ziet u de indexerings- en querywerkstromen voor vectorzoekopdrachten.
Aan de indexeringszijde gebruikt Azure AI Search vectorinsluitingen en maakt gebruik van een algoritme voor dichtstbijzijnde buren om vergelijkbare vectoren dicht bij elkaar te plaatsen in een index. Intern worden vectorindexen gemaakt voor elk vectorveld.
Hoe u insluitingen krijgt van uw broninhoud in Azure AI Search, is afhankelijk van of u het werk binnen een Indexeringspijplijn van Azure AI Search of extern wilt uitvoeren. Azure AI Search biedt geïntegreerde gegevenssegmentering en vectorisatie in een indexeerpijplijn. U geeft nog steeds de resources (eindpunten en verbindingsgegevens met Azure OpenAI) op, maar Azure AI Search voert alle aanroepen uit en verwerkt de overgangen. Deze benadering vereist een indexeerfunctie, een ondersteunde gegevensbron en een vaardighedenset die segmentering en insluiting aanstuurt. Anders kunt u alle vectorisatie afzonderlijk afhandelen en vervolgens vooraf gevectoriseerde inhoud naar vectorvelden in een vectorarchief pushen.
Aan de queryzijde verzamelt u in uw clienttoepassing de queryinvoer van een gebruiker, meestal via een promptwerkstroom. Vervolgens kunt u een coderingsstap toevoegen waarmee de invoer wordt geconverteerd naar een vector en vervolgens de vectorquery naar uw index in Azure AI Search wordt verzonden voor een zoekopdracht naar overeenkomsten. Net als bij indexering kunt u de geïntegreerde vectorisatie implementeren om de vraag om te zetten in een vector. Voor beide benaderingen retourneert Azure AI Search documenten met de aangevraagde dichtstbijzijnde k
buren (kNN) in de resultaten.
Azure AI Search biedt ondersteuning voor hybride scenario's waarmee vector- en trefwoordzoekopdrachten parallel worden uitgevoerd, waardoor een uniforme resultatenset wordt geretourneerd die vaak betere resultaten biedt dan alleen vector- of trefwoordzoekopdrachten. Voor hybride, vector- en niet-vectorinhoud wordt inhoud opgenomen in dezelfde index, voor query's die naast elkaar worden uitgevoerd.
Beschikbaarheid en prijzen
Vector search is beschikbaar als onderdeel van alle Azure AI Search-lagen in alle regio's zonder extra kosten.
Nieuwere services die zijn gemaakt na 3 april 2024 ondersteunen hogere quota voor vectorindexen.
Vectorzoekopdrachten zijn beschikbaar in:
- Azure Portal: wizard Gegevens importeren en vectoriseren
- Azure REST API‘s
- Azure SDK's voor .NET, Python en JavaScript
- Andere Azure-aanbiedingen, zoals Azure AI Studio.
Notitie
Sommige oudere zoekservices die vóór 1 januari 2019 zijn gemaakt, worden geïmplementeerd op infrastructuur die geen ondersteuning biedt voor vectorworkloads. Als u een vectorveld probeert toe te voegen aan een schema en een fout krijgt, is dit het gevolg van verouderde services. In dit geval moet u een nieuwe zoekservice maken om de vectorfunctie uit te proberen.
Azure-integratie en gerelateerde services
Azure AI Search is diep geïntegreerd in het Azure AI-platform. In de volgende tabel ziet u verschillende die nuttig zijn in vectorworkloads.
Product | Integratie |
---|---|
Azure AI Studio | Voeg in de chat met uw gegevensspeeltuin uw eigen gegevens toe met Behulp van Azure AI Search voor het zoeken naar grondgegevens en conversationele zoekopdrachten. Dit is de eenvoudigste en snelste manier om te chatten met uw gegevens. |
Azure OpenAI | Azure OpenAI biedt insluitingsmodellen en chatmodellen. Demo's en voorbeelden zijn gericht op de tekst-embedding-ada-002. We raden Azure OpenAI aan voor het genereren van insluitingen voor tekst. |
Azure AI Services | Image Retrieval Vectorize Image API(Preview) ondersteunt vectorisatie van afbeeldingsinhoud. We raden deze API aan voor het genereren van insluitingen voor afbeeldingen. |
Azure-gegevensplatforms: Azure Blob Storage, Azure Cosmos DB | U kunt indexeerfuncties gebruiken om gegevensopname te automatiseren en vervolgens geïntegreerde vectorisatie gebruiken om insluitingen te genereren. Azure AI Search kan vectorgegevens uit twee gegevensbronnen automatisch indexeren: Azure Blob-indexeerfuncties en Azure Cosmos DB voor NoSQL-indexeerfuncties. Zie Vectorvelden toevoegen aan een zoekindex voor meer informatie. |
Het wordt ook vaak gebruikt in opensource-frameworks zoals LangChain.
Concepten voor vectorzoekopdrachten
Als u geen idee hebt van vectoren, worden in deze sectie enkele kernconcepten uitgelegd.
Over vectorzoekopdrachten
Vectorzoekopdrachten is een methode voor het ophalen van gegevens waarbij documenten en query's worden weergegeven als vectoren in plaats van tekst zonder opmaak. In vectorzoekopdrachten genereren machine learning-modellen de vectorweergaven van broninvoer, die tekst, afbeeldingen of andere inhoud kunnen zijn. Het hebben van een wiskundige weergave van inhoud biedt een algemene basis voor zoekscenario's. Als alles een vector is, kan een query een overeenkomst vinden in vectorruimte, zelfs als de bijbehorende oorspronkelijke inhoud zich in verschillende media of taal bevindt dan de query.
Waarom vectorzoekopdrachten gebruiken
Wanneer doorzoekbare inhoud wordt weergegeven als vectoren, kan een query sluiten overeenkomsten vinden in vergelijkbare inhoud. Het insluitmodel dat wordt gebruikt voor het genereren van vectoren weet welke woorden en concepten vergelijkbaar zijn en plaatst de resulterende vectoren dicht bij elkaar in de insluitruimte. Gevectoriseerde brondocumenten over 'wolken' en 'mist' worden bijvoorbeeld vaker weergegeven in een query over 'mist', omdat ze semantisch vergelijkbaar zijn, zelfs als ze geen lexicale overeenkomst zijn.
Insluitingen en vectorisatie
Insluitingen zijn een specifiek type vectorweergave van inhoud of een query, gemaakt door machine learning-modellen die de semantische betekenis van tekst of representaties van andere inhoud, zoals afbeeldingen, vastleggen. Machine Learning-modellen in natuurlijke taal worden getraind op grote hoeveelheden gegevens om patronen en relaties tussen woorden te identificeren. Tijdens de training leren ze elke invoer te vertegenwoordigen als een vector van reële getallen in een tussenliggende stap, de encoder genoemd. Nadat de training is voltooid, kunnen deze taalmodellen worden gewijzigd, zodat de tussenliggende vectorweergave de uitvoer van het model wordt. De resulterende insluitingen zijn hoogdimensionale vectoren, waarbij woorden met vergelijkbare betekenissen dichter bij elkaar staan in de vectorruimte, zoals wordt uitgelegd in Insluitingen (Azure OpenAI) begrijpen.
De effectiviteit van vectorzoekopdrachten bij het ophalen van relevante informatie is afhankelijk van de effectiviteit van het insluitmodel bij het destilleren van de betekenis van documenten en query's in de resulterende vector. De beste modellen zijn goed getraind op de typen gegevens die ze vertegenwoordigen. U kunt bestaande modellen evalueren, zoals Azure OpenAI text-embedding-ada-002, bring your own model that's traint direct op de probleemruimte, of een model voor algemeen gebruik verfijnen. Azure AI Search legt geen beperkingen op voor welk model u kiest, dus kies het beste voor uw gegevens.
Als u effectieve insluitingen voor vectorzoekopdrachten wilt maken, is het belangrijk om rekening te houden met beperkingen voor de invoergrootte. U wordt aangeraden de richtlijnen voor het segmenteren van gegevens te volgen voordat u insluitingen genereert. Deze best practice zorgt ervoor dat de insluitingen de relevante informatie nauwkeurig vastleggen en efficiënter vectorzoekopdrachten mogelijk maken.
Wat is de insluitingsruimte?
Het insluiten van ruimte is het corpus voor vectorquery's. Binnen een zoekindex is een insluitingsruimte alle vectorvelden gevuld met insluitingen uit hetzelfde insluitingsmodel. Machine learning-modellen maken de insluitingsruimte door afzonderlijke woorden, woordgroepen of documenten (voor natuurlijke taalverwerking), afbeeldingen of andere vormen van gegevens toe te passen in een weergave van een vector van reële getallen die een coördinaat in een hoogdimensionale ruimte vertegenwoordigen. In deze insluitingsruimte bevinden vergelijkbare items zich dicht bij elkaar en bevinden zich niet-imilare items verder van elkaar.
Documenten die over verschillende soorten honden praten, worden bijvoorbeeld dicht bij elkaar geclusterd in de insluitingsruimte. Documenten over katten zouden dicht bij elkaar liggen, maar verder van het hondencluster terwijl ze nog in de buurt voor dieren zijn. Niet-imilare concepten, zoals cloud-computing, zijn veel verder weg. In de praktijk zijn deze insluitingsruimten abstract en hebben ze geen goed gedefinieerde, door mensen geïnterpreteerde betekenissen, maar het kernidee blijft hetzelfde.
Dichtstbijzijnde buren zoeken
In vectorzoekopdrachten scant de zoekmachine vectoren in de insluitruimte om vectoren te identificeren die zich het dichtst bij de queryvector bevinden. Deze techniek wordt het zoeken van dichtstbijzijnde buren genoemd. Dichtstbijzijnde buren helpen bij het kwantificeren van de gelijkenis tussen items. Een hoge mate van vector vergelijkbaarheid geeft aan dat de oorspronkelijke gegevens ook vergelijkbaar waren. Om snel dichtstbijzijnde buren te zoeken, voert de zoekmachine optimalisaties uit of maakt gebruik van gegevensstructuren en gegevenspartitionering om de zoekruimte te verminderen. Elk vectorzoekalgoritmen lossen de dichtstbijzijnde burenproblemen op verschillende manieren op, omdat ze optimaliseren voor minimale latentie, maximale doorvoer, relevante overeenkomsten en geheugen. Voor het berekenen van overeenkomsten bieden metrische gegevens over overeenkomsten het mechanisme voor het berekenen van afstand.
Azure AI Search ondersteunt momenteel de volgende algoritmen:
Hierarchical Navigable Small World (HNSW): HNSW is een toonaangevend ANN-algoritme dat is geoptimaliseerd voor toepassingen met een hoge relevante, lage latentie waarbij gegevensdistributie onbekend is of vaak kan veranderen. Het ordent high-dimensionale gegevenspunten in een hiërarchische grafiekstructuur die snelle en schaalbare overeenkomsten mogelijk maakt, terwijl een compromis tussen de nauwkeurigheid van de zoekopdracht en de rekenkosten niet kan worden afgenomen. Omdat voor het algoritme alle gegevenspunten in het geheugen moeten worden opgeslagen voor snelle willekeurige toegang, verbruikt dit algoritme het quotum voor de grootte van vectorindexen.
Uitgebreide K-dichtstbijzijnde buren (KNN): berekent de afstanden tussen de queryvector en alle gegevenspunten. Het is rekenintensief, dus het werkt het beste voor kleinere gegevenssets. Omdat voor het algoritme geen snelle willekeurige toegang van gegevenspunten is vereist, verbruikt dit algoritme geen quotum voor de grootte van vectorindexen. Dit algoritme biedt echter de globale set dichtstbijzijnde buren.
Als u deze algoritmen wilt gebruiken, raadpleegt u Een vectorveld maken voor instructies over het opgeven van het algoritme, vectorprofielen en profieltoewijzing.
Algoritmeparameters die worden gebruikt om de index te initialiseren tijdens het maken van de index, kunnen onveranderbaar zijn en kunnen niet worden gewijzigd nadat de index is gemaakt. Parameters die van invloed zijn op de kenmerken van de querytijd (efSearch
) kunnen echter worden gewijzigd.
Daarnaast ondersteunen velden die het HNSW-algoritme opgeven ook uitgebreide KNN-zoekopdrachten met behulp van de queryaanvraagparameter"exhaustive": true
. Het tegenovergestelde is echter niet waar. Als een veld is geïndexeerd exhaustiveKnn
, kunt u HNSW niet gebruiken in de query omdat de extra gegevensstructuren die efficiënt zoeken mogelijk maken, niet bestaan.
Dichtstbijzijnde buren bij benadering
Het zoeken naar dichtstbijzijnde buren (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 om 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 ten opzichte van efficiëntie in moderne toepassingen voor het ophalen van gegevens. U kunt de parameters van uw algoritme aanpassen om de vereisten voor relevante overeenkomsten, latentie, geheugen en schijfvoetafdruk van uw zoektoepassing af te stemmen.
Azure AI Search maakt gebruik van HNSW voor het ANN-algoritme.