Vektorer i Azure AI Search

Vektorsökning är en metod för informationshämtning som stöder indexering och frågekörning över numeriska representationer av innehåll. Eftersom innehållet är numeriskt snarare än oformaterad text baseras matchningen på vektorer som mest liknar frågevektorn, vilket möjliggör matchning mellan:

  • semantisk eller konceptuell likhet ("hund" och "hund", konceptuellt liknande men språkligt distinkt)
  • flerspråkigt innehåll ("hund" på engelska och "hund" på tyska)
  • flera innehållstyper ("hund" i oformaterad text och ett fotografi av en hund i en bildfil)

Den här artikeln innehåller en introduktion på hög nivå till vektorer i Azure AI Search. Den förklarar även integrering med andra Azure-tjänster och beskriver terminologi och begrepp som rör utveckling av vektorsökning.

Vi rekommenderar den här artikeln för bakgrund, men om du hellre vill komma igång följer du dessa steg:

Du kan också börja med snabbstarten för vektor eller kodexemplen på GitHub.

Vilka scenarier kan stöd för vektorsökning?

Scenarier för vektorsökning är:

  • Likhetssökning. Koda text med inbäddningsmodeller som OpenAI-inbäddningar eller öppen källkod modeller som SBERT och hämta dokument med frågor som också är kodade som vektorer.

  • Sök mellan olika innehållstyper (multimodal). Koda bilder och text med multimodala inbäddningar (till exempel med OpenAI CLIP eller GPT-4 Turbo med Vision i Azure OpenAI) och fråga ett inbäddningsutrymme som består av vektorer från båda innehållstyperna.

  • Hybridsökning. I Azure AI Search refererar hybridsökning till körning av vektor- och nyckelordsfrågor i samma begäran. Vektorstöd implementeras på fältnivå med ett index som innehåller både vektorfält och sökbara textfält. Frågorna körs parallellt och resultaten sammanfogas till ett enda svar. Du kan också lägga till semantisk rangordning för mer noggrannhet med L2-omrankning med samma språkmodeller som driver Bing.

  • Flerspråkig sökning. Genom inbäddningsmodeller och chattmodeller som tränats på flera språk är det möjligt att tillhandahålla en sökupplevelse på användarnas eget språk. Om du behöver mer kontroll över översättningen kan du komplettera med de flerspråksfunktioner som Azure AI Search stöder för icke-klientinnehåll i hybridsökningsscenarier.

  • Filtrerad vektorsökning. En frågebegäran kan innehålla en vektorfråga och ett filteruttryck. Filter gäller för text och numeriska fält och är användbara för metadatafilter och inkluderar eller exkludera sökresultat baserat på filtervillkor. Även om ett vektorfält inte kan filtreras kan du konfigurera en filterbar text eller ett numeriskt fält. Sökmotorn kan bearbeta filtret före eller efter att vektorfrågan har körts.

  • Vektordatabas. Azure AI Search lagrar de data som du frågar efter. Använd det som ett rent vektorlager när du behöver långtidsminne eller en kunskapsbas, eller jordningsdata för RAG-arkitekturen (Retrieval Augmented Generation) eller någon app som använder vektorer.

Vektorstöd omfattar indexering, lagring och frågekörning av vektorinbäddningar från ett sökindex.

Följande diagram visar indexerings- och frågearbetsflöden för vektorsökning.

Arkitektur för arbetsflöde för vektorsökning.

På indexeringssidan tar Azure AI Search vektorinbäddningar och använder en närmaste grannalgoritm för att placera liknande vektorer nära varandra i ett index. Internt skapar den vektorindex för varje vektorfält.

Hur du får inbäddningar från källinnehållet i Azure AI Search beror på din metod och om du kan använda förhandsversionsfunktioner. Du kan vektorisera eller generera inbäddningar som ett preliminärt steg med hjälp av modeller från OpenAI, Azure OpenAI och valfritt antal leverantörer, över en mängd olika källinnehåll, inklusive text, bilder och andra innehållstyper som stöds av modellerna. Du kan sedan push-överföra förläst innehåll till vektorfält i ett vektorlager. Det är den allmänt tillgängliga metoden. Om du kan använda förhandsversionsfunktioner erbjuder Azure AI Search integrerad datasegmentering och vektorisering i en indexerarpipeline. Du tillhandahåller fortfarande resurserna (slutpunkter och anslutningsinformation till Azure OpenAI), men Azure AI Search gör alla anrop och hanterar övergångarna.

På frågesidan, i klientprogrammet, samlar du in frågeindata från en användare, vanligtvis via ett promptarbetsflöde. Du kan sedan lägga till ett kodningssteg som konverterar indata till en vektor och sedan skicka vektorfrågan till ditt index i Azure AI Search för en likhetssökning. Precis som med indexering kan du distribuera den integrerade vektoriseringen (förhandsversion) för att konvertera frågan till en vektor. För båda metoderna returnerar Azure AI Search dokument med de begärda k närmaste grannarna (kNN) i resultatet.

Azure AI Search stöder hybridscenarier som kör vektor- och nyckelordssökning parallellt, vilket returnerar en enhetlig resultatuppsättning som ofta ger bättre resultat än enbart vektor- eller nyckelordssökning. För hybrid-, vektor- och icke-bevektorinnehåll matas innehållet in i samma index för frågor som körs sida vid sida.

Tillgänglighet och priser

Vektorsökning är tillgänglig som en del av alla Azure AI Search-nivåer i alla regioner utan extra kostnad.

Nyare tjänster som skapats efter den 3 april 2024 stöder högre kvoter för vektorindex.

Vektorsökning är tillgängligt i:

Kommentar

Vissa äldre söktjänster som skapats före den 1 januari 2019 distribueras på infrastruktur som inte stöder vektorarbetsbelastningar. Om du försöker lägga till ett vektorfält i ett schema och få ett fel är det ett resultat av inaktuella tjänster. I det här fallet måste du skapa en ny söktjänst för att testa vektorfunktionen.

Azure AI Search är djupt integrerat i Azure AI-plattformen. I följande tabell visas flera som är användbara i vektorarbetsbelastningar.

Produkt Integrering
Azure OpenAI Studio I chatten med din datalekplats använder Lägg till egna data Azure AI Search för grunddata och konversationssökning. Det här är den enklaste och snabbaste metoden för att chatta med dina data.
Azure OpenAI Azure OpenAI tillhandahåller inbäddningsmodeller och chattmodeller. Demonstrationer och exempel är inriktade på text-embedding-ada-002. Vi rekommenderar Azure OpenAI för att generera inbäddningar för text.
Azure AI Services Api för bildhämtning av vektorisera bild (förhandsversion) stöder vektorisering av bildinnehåll. Vi rekommenderar det här API:et för att generera inbäddningar för avbildningar.
Azure-dataplattformar: Azure Blob Storage, Azure Cosmos DB Du kan använda indexerare för att automatisera datainmatning och sedan använda integrerad vektorisering (förhandsversion) för att generera inbäddningar. Azure AI Search kan automatiskt indexera vektordata från två datakällor: Azure Blob-indexerare och Azure Cosmos DB för NoSQL-indexerare. Mer information finns i Lägga till vektorfält i ett sökindex..

Det används också ofta i ramverk med öppen källkod som LangChain.

Begrepp för vektorsökning

Om du är nybörjare på vektorer förklarar det här avsnittet några grundläggande begrepp.

Vektorsökning är en metod för informationshämtning där dokument och frågor representeras som vektorer i stället för oformaterad text. I vektorsökning genererar maskininlärningsmodeller vektorrepresentationer av källindata, som kan vara text, bilder eller annat innehåll. Att ha en matematisk representation av innehåll ger en gemensam grund för sökscenarier. Om allt är en vektor kan en fråga hitta en matchning i vektorutrymmet, även om det associerade ursprungliga innehållet finns i ett annat media eller språk än frågan.

När sökbart innehåll representeras som vektorer kan en fråga hitta nära matchningar i liknande innehåll. Inbäddningsmodellen som används för vektorgenerering vet vilka ord och begrepp som liknar varandra och placerar de resulterande vektorerna nära varandra i inbäddningsutrymmet. Till exempel är det mer troligt att vektoriserade källdokument om "moln" och "dimma" visas i en fråga om "dimma" eftersom de är semantiskt lika, även om de inte är en lexikal matchning.

Inbäddningar och vektorisering

Inbäddningar är en specifik typ av vektorrepresentation av innehåll eller en fråga som skapas av maskininlärningsmodeller som fångar den semantiska innebörden av text eller representationer av annat innehåll, till exempel bilder. Maskininlärningsmodeller för naturligt språk tränas på stora mängder data för att identifiera mönster och relationer mellan ord. Under träningen lär de sig att representera alla indata som en vektor med verkliga tal i ett mellanliggande steg som kallas kodare. När träningen är klar kan dessa språkmodeller ändras så att den mellanliggande vektorrepresentationen blir modellens utdata. De resulterande inbäddningarna är högdimensionella vektorer, där ord med liknande betydelser är närmare varandra i vektorutrymmet, enligt beskrivningen i Förstå inbäddningar (Azure OpenAI).

Vektorsökningens effektivitet vid hämtning av relevant information beror på inbäddningsmodellens effektivitet när det gäller att destillera innebörden av dokument och frågor till den resulterande vektorn. De bästa modellerna är vältränade för de typer av data som de representerar. Du kan utvärdera befintliga modeller, till exempel Azure OpenAI text-embedding-ada-002, ta med din egen modell som tränas direkt på problemutrymmet eller finjustera en generell modell. Azure AI Search har inga begränsningar för vilken modell du väljer, så välj den bästa modellen för dina data.

För att skapa effektiva inbäddningar för vektorsökning är det viktigt att ta hänsyn till begränsningar för indatastorlek. Vi rekommenderar att du följer riktlinjerna för segmentering av data innan du genererar inbäddningar. Den här bästa metoden säkerställer att inbäddningarna korrekt samlar in relevant information och möjliggör effektivare vektorsökning.

Vad är inbäddningsutrymmet?

Inbäddningsutrymme är corpus för vektorfrågor. I ett sökindex är ett inbäddningsutrymme alla vektorfält ifyllda med inbäddningar från samma inbäddningsmodell. Maskininlärningsmodeller skapar inbäddningsutrymmet genom att mappa enskilda ord, fraser eller dokument (för bearbetning av naturligt språk), bilder eller andra former av data till en representation som består av en vektor med verkliga tal som representerar en koordinat i ett högdimensionellt utrymme. I det här inbäddningsutrymmet finns liknande objekt nära varandra och olika objekt ligger längre ifrån varandra.

Dokument som talar om olika hundarter skulle till exempel grupperas nära varandra i inbäddningsutrymmet. Dokument om katter skulle vara nära varandra, men längre från hundklustret medan de fortfarande är i grannskapet för djur. Olika begrepp som molnbaserad databehandling skulle vara mycket längre bort. I praktiken är dessa inbäddningsutrymmen abstrakta och har inte väldefinierade, mänskliga tolkningsbara betydelser, men kärnidén förblir densamma.

I vektorsökning söker sökmotorn igenom vektorer i inbäddningsutrymmet för att identifiera vektorer som är närmast frågevektorn. Den här tekniken kallas för närmaste grannsökning. Närmaste grannar hjälper till att kvantifiera likheten mellan objekt. En hög grad av vektorlikhet indikerar att de ursprungliga data också var liknande. För att underlätta snabb sökning efter närmaste granne utför sökmotorn optimeringar, eller använder datastrukturer och datapartitionering, för att minska sökutrymmet. Varje vektorsökningsalgoritm löser de närmaste grannproblemen på olika sätt när de optimerar för minsta svarstid, maximalt dataflöde, återkallande och minne. För att beräkna likheter tillhandahåller likhetsmått mekanismen för beräkningsavstånd.

Azure AI Search stöder för närvarande följande algoritmer:

  • Hierarkisk navigerbar liten värld (HNSW): HNSW är en ledande ANN-algoritm som optimerats för program med hög träffsäkerhet och låg latens där datadistributionen är okänd eller kan ändras ofta. Den organiserar högdimensionella datapunkter i en hierarkisk grafstruktur som möjliggör snabb och skalbar likhetssökning samtidigt som en justerbar kompromiss mellan söknoggrannhet och beräkningskostnad möjliggörs. Eftersom algoritmen kräver att alla datapunkter finns i minnet för snabb slumpmässig åtkomst använder den här algoritmen kvoten för vektorindexstorlek .

  • Uttömmande K-närmaste grannar (KNN): Beräknar avstånden mellan frågevektorn och alla datapunkter. Det är beräkningsintensivt, så det fungerar bäst för mindre datamängder. Eftersom algoritmen inte kräver snabb slumpmässig åtkomst av datapunkter förbrukar den här algoritmen inte vektorindexstorlekskvot. Den här algoritmen tillhandahåller dock den globala uppsättningen med närmaste grannar.

I en indexdefinition kan du ange en eller flera algoritmer och sedan för varje vektorfält ange vilken algoritm som ska användas:

Algoritmparametrar som används för att initiera indexet när index skapas är oföränderliga och kan inte ändras när indexet har skapats. Parametrar som påverkar frågetidsegenskaperna (efSearch) kan dock ändras.

Dessutom stöder fält som anger HNSW-algoritmen även fullständig KNN-sökning med frågeförfrågansparametern "exhaustive": true. Motsatsen är dock inte sant. Om ett fält indexeras för exhaustiveKnnkan du inte använda HNSW i frågan eftersom de extra datastrukturer som möjliggör effektiv sökning inte finns.

Ungefärliga närmaste grannar

Ungefärlig sökning efter närmaste granne (ANN) är en klass med algoritmer för att hitta matchningar i vektorutrymme. Den här klassen av algoritmer använder olika datastrukturer eller metoder för datapartitionering för att avsevärt minska sökutrymmet för att påskynda frågebearbetningen.

ANN-algoritmer offrar viss noggrannhet, men erbjuder skalbar och snabbare hämtning av ungefärliga närmaste grannar, vilket gör dem idealiska för att balansera noggrannhet mot effektivitet i moderna program för informationshämtning. Du kan justera parametrarna för din algoritm för att finjustera kraven på återkallande, svarstid, minne och diskfotavtryck i sökprogrammet.

Azure AI Search använder HNSW för sin ANN-algoritm.

Nästa steg