Dela via


Vad är vektorinbäddningar och vektorsökning i Azure Cache for Redis?

Vektorlikhetssökning (VSS) har blivit en populär teknik för AI-baserade intelligenta program. Azure Cache for Redis kan användas som en vektordatabas genom att kombinera modeller som Azure OpenAI for Retrieval-Augmented Generative AI och analysscenarier. Den här artikeln är en introduktion på hög nivå till begreppet vektorinbäddningar, vektorlikhetssökning och hur Redis kan användas som en vektordatabas som driver intelligenta program.

Självstudier och exempelprogram om hur du använder Azure Cache for Redis och Azure OpenAI för att utföra vektorlikhetssökning finns i följande:

Tillgänglighetsomfång

Vektorsökningsfunktioner i Redis kräver Redis Stack, särskilt RediSearch-modulen . Den här funktionen är endast tillgänglig på Enterprise-nivåerna i Azure Cache for Redis.

Den här tabellen innehåller information om tillgänglighet för vektorsökning på olika nivåer.

Nivå Basic/Standard Premium Stora företag Enterprise Flash Azure Managed Redis (förhandsversion)
Tillgängligt Nej Nej Ja Ja (förhandsversion) Ja

Vad är vektorbäddningar?

Koncept

Vektorinbäddningar är ett grundläggande begrepp inom maskininlärning och bearbetning av naturligt språk som möjliggör representation av data, till exempel ord, dokument eller bilder som numeriska vektorer i ett högdimensionerat vektorutrymme. Den primära idén bakom inbäddningar av vektorer är att samla in underliggande relationer och semantik för data genom att mappa dem till punkter i det här vektorutrymmet. Det innebär att konvertera text eller bilder till en sekvens med tal som representerar data och sedan jämföra de olika talsekvenserna. Detta gör att komplexa data kan manipuleras och analyseras matematiskt, vilket gör det enklare att utföra uppgifter som likhetsjämförelse, rekommendation och klassificering.

Varje maskininlärningsmodell klassificerar data och skapar vektorn på olika sätt. Dessutom är det vanligtvis inte möjligt att avgöra exakt vilken semantisk betydelse varje vektordimension representerar. Men eftersom modellen är konsekvent mellan varje block med indata har liknande ord, dokument eller bilder vektorer som också är liknande. Till exempel har ord basketball och baseball inbäddningar vektorer mycket närmare varandra än ett ord som rainforest.

Jämförelse av vektor

Vektorer kan jämföras med olika mått. Det mest populära sättet att jämföra vektorer är att använda cosinélikhet, som mäter vinkelns cosiné mellan två vektorer i ett flerdimensionellt utrymme. Ju närmare vektorerna, desto mindre vinkel. Andra vanliga avståndsmått är Euklidiska avstånd och inre produkt.

Generera inbäddningar

Många maskininlärningsmodeller stöder API:er för inbäddning. Ett exempel på hur du skapar vektorinbäddningar med Azure OpenAI Service finns i Lär dig hur du genererar inbäddningar med Azure OpenAI.

Vad är en vektordatabas?

En vektordatabas är en databas som kan lagra, hantera, hämta och jämföra vektorer. Vektordatabaser måste effektivt kunna lagra en högdimensionell vektor och hämta den med minimal svarstid och högt dataflöde. Icke-relationella datalager används oftast som vektordatabaser, även om det är möjligt att använda relationsdatabaser som PostgreSQL, till exempel med pgvector-tillägget .

Index- och sökmetod

Vektordatabaser måste indexeras för snabb sökning och hämtning. Dessutom bör en vektordatabas ha stöd för inbyggda sökfrågor för förenklade programmeringsupplevelser.

Det finns flera indexeringsmetoder, till exempel:

  • FLAT – Brute-force-index
  • HNSW – Effektiv och robust ungefärlig närmsta grannsökning med hjälp av hierarkisk navigeringsbar liten värld-grafer

Det finns flera vanliga sökmetoder, bland annat:

  • K-Nearest Neighbors (KNN) – en fullständig metod som ger mest precision men med högre beräkningskostnad.
  • Ungefärliga närmaste grannar (ANN) – en effektivare genom att handla precision för högre hastighet och lägre bearbetningskostnader.

Sökfunktioner

Slutligen kör vektordatabaser vektorsökningar med hjälp av den valda vektorjämförelsemetoden för att returnera de mest liknande vektorerna. Vissa vektordatabaser kan också utföra hybridsökningar genom att först begränsa resultaten baserat på egenskaper eller metadata som också lagras i databasen innan vektorsökningen utförs. Det här är ett sätt att göra vektorsökningen mer effektiv och anpassningsbar. En vektorsökning kan till exempel begränsas till endast vektorer med en specifik tagg i databasen, eller vektorer med geoplatsdata i en viss region.

Scenarier för vektorsökningsnyckel

Vektorlikhetssökning kan användas i flera program. Några vanliga användningsfall är:

  • Semantisk Q&A. Skapa en chattrobot som kan svara på frågor om dina egna data. Till exempel en chattrobot som kan svara på anställdas frågor om deras sjukvårdstäckning. Hundratals sidor med kompakt dokumentation om sjukvårdstäckning kan delas upp i segment, konverteras till inbäddningsvektorer och sökas baserat på vektorlikhet. De resulterande dokumenten kan sedan sammanfattas för anställda med hjälp av en annan stor språkmodell (LLM). Semantisk Q&A-exempel
  • Dokumenthämtning. Använd den djupare semantiska förståelsen av text som tillhandahålls av LLM:er för att ge en mer omfattande dokumentsökningsupplevelse där traditionell nyckelordsbaserad sökning misslyckas. Exempel på dokumenthämtning
  • Produktrekommendations. Hitta liknande produkter eller tjänster att rekommendera baserat på tidigare användaraktiviteter, till exempel sökhistorik eller tidigare köp. Exempel på produktrekommendations
  • Visuell sökning. Sök efter produkter som liknar en bild som tagits av en användare eller en bild av en annan produkt. Exempel på visuell sökning
  • Semantisk cachelagring. Minska kostnaden och svarstiden för LLM genom att cachelagra LLM-slutföranden. LLM-frågor jämförs med vektorlikhet. Om en ny fråga liknar en tidigare cachelagrad fråga returneras den cachelagrade frågan. Exempel på semantisk cachelagring med LangChain
  • LLM-konversationsminne. Spara konversationshistorik med en LLM som inbäddningar i en vektordatabas. Ditt program kan använda vektorsökning för att hämta relevant historik eller "minnen" till svaret från LLM. Exempel på LLM-konversationsminne

Varför ska du välja Azure Cache for Redis för att lagra och söka efter vektorer?

Azure Cache for Redis kan användas effektivt som en vektordatabas för att lagra inbäddningsvektorer och för att utföra vektorlikhetssökningar. Stöd för lagring och sökning av vektorer har varit tillgängligt i många viktiga maskininlärningsramverk som:

Dessa ramverk har omfattande integreringar med Redis. Till exempel genererar Redis LangChain-integreringen automatiskt ett indexschema för metadata som skickas in när Redis används som vektorlager. Detta gör det mycket enklare att filtrera resultat baserat på metadata.

Redis har ett brett utbud av sökfunktioner via RediSearch-modulen, som är tillgänglig på Enterprise-nivån i Azure Cache for Redis. Dessa kan vara:

  • Mått för flera avstånd, inklusive Euclidean, Cosineoch Internal Product.
  • Stöd för både KNN (med hjälp av FLAT) och ANN (med hjälp av HNSW) indexeringsmetoder.
  • Vektorlagring i hash- eller JSON-datastrukturer
  • Topp K-frågor
  • Frågor om vektorintervall (det vill: hitta alla objekt inom ett specifikt vektoravstånd)
  • Hybridsökning med kraftfulla frågefunktioner som:
    • Geospatial filtrering
    • Numeriska filter och textfilter
    • Prefix och fuzzy-matchning
    • Fonetikmatchning
    • Booleska frågor

Dessutom är Redis ofta ett ekonomiskt val eftersom det redan används så ofta för cachelagrings- eller sessionslagringsprogram. I dessa scenarier kan den dra dubbel plikt genom att hantera en typisk cachelagringsroll samtidigt som vektorsökningsprogram hanteras.

Vilka är mina andra alternativ för att lagra och söka efter vektorer?

Det finns flera andra lösningar på Azure för vektorlagring och sökning. Andra lösningar är:

Det bästa sättet att komma igång med inbäddningar och vektorsökning är att prova själv!