Dela via


Vektorsökning i Azure Cosmos DB för NoSQL (förhandsversion)

GÄLLER FÖR: NoSQL

Azure Cosmos DB for NoSQL erbjuder nu vektorindexering och sökning i förhandsversion. Den här funktionen är utformad för att hantera högdimensionella vektorer, vilket möjliggör effektiv och korrekt vektorsökning i valfri skala. Nu kan du lagra vektorer direkt i dokumenten tillsammans med dina data. Det innebär att varje dokument i databasen kan innehålla inte bara traditionella schemafria data, utan även högdimensionella vektorer som andra egenskaper för dokumenten. Den här samlokaliseringen av data och vektorer möjliggör effektiv indexering och sökning, eftersom vektorerna lagras i samma logiska enhet som de data de representerar. Detta förenklar datahantering, AI-programarkitekturer och effektiviteten i vektorbaserade åtgärder.

Azure Cosmos DB for NoSQL erbjuder den flexibilitet som erbjuds när du väljer vektorindexeringsmetod:

  • En "platt" eller k-närmaste granne exakt sökning (kallas ibland brute-force) kan ge 100% hämtningsåterkallelse för mindre, fokuserade vektorsökningar. särskilt när de kombineras med frågefilter och partitionsnycklar.
  • Ett kvantiserat platt index som komprimerar vektorer med hjälp av DiskANN-baserade kvantiseringsmetoder för bättre effektivitet i kNN-sökningen.
  • DiskANN, en uppsättning toppmoderna vektorindexeringsalgoritmer som utvecklats av Microsoft Research för att driva effektiv vektorsökning med hög noggrannhet i valfri skala.

Läs mer om vektorindexering här

Vektorsökning i Azure Cosmos DB kan kombineras med alla andra Azure Cosmos DB NoSQL-frågefilter och -index som stöds med hjälp av WHERE satser. På så sätt kan dina vektorsökningar vara de mest relevanta data för dina program.

Den här funktionen förbättrar kärnfunktionerna i Azure Cosmos DB, vilket gör den mer mångsidig för hantering av vektordata och sökkrav i AI-program.

Vad är ett vektorlager?

Ett vektorlager eller en vektordatabas är en databas som är utformad för att lagra och hantera inbäddningar av vektorer, som är matematiska representationer av data i ett högdimensionellt utrymme. I det här utrymmet motsvarar varje dimension en funktion i data och tiotusentals dimensioner kan användas för att representera avancerade data. En vektors position i det här utrymmet representerar dess egenskaper. Ord, fraser eller hela dokument och bilder, ljud och andra typer av data kan alla vektoriseras.

Hur fungerar ett vektorlager?

I ett vektorlager används algoritmer för vektorsökning för att indexera och fråga inbäddningar. Några välkända vektorsökningsalgoritmer är HNSW (Hierarchical Navigable Small World), Inverted File (IVF), DiskANN osv. Vektorsökning är en metod som hjälper dig att hitta liknande objekt baserat på deras dataegenskaper i stället för exakta matchningar i ett egenskapsfält. Den här tekniken är användbar i program som att söka efter liknande text, hitta relaterade bilder, göra rekommendationer eller till och med identifiera avvikelser. Den används för att köra frågor mot vektorinbäddningar av dina data som du skapade med hjälp av en maskininlärningsmodell med hjälp av ett inbäddnings-API. Exempel på API:er för inbäddningar är Azure OpenAI-inbäddningar eller Hugging Face på Azure. Vektorsökning mäter avståndet mellan datavektorerna och frågevektorn. De datavektorer som är närmast din frågevektor är de som är mest lika semantiskt.

I den integrerade vektordatabasen i Azure Cosmos DB för NoSQL kan inbäddningar lagras, indexeras och efterfrågas tillsammans med de ursprungliga data. Den här metoden eliminerar den extra kostnaden för att replikera data i en separat ren vektordatabas. Dessutom håller den här arkitekturen samman vektorbäddningar och ursprungliga data, vilket bättre underlättar multimodala dataåtgärder och ger bättre datakonsekvens, skalning och prestanda.

Registrera dig i funktionen Förhandsgranskning av vektorsökning

Vektorsökning för Azure Cosmos DB for NoSQL kräver förhandsversion av funktionsregistrering på sidan Funktioner i Azure Cosmos DB . Följ stegen nedan för att registrera dig:

  1. Gå till resurssidan för Azure Cosmos DB for NoSQL.

  2. Välj fönstret "Funktioner" under menyalternativet "Inställningar".

  3. Välj "Vector Search in Azure Cosmos DB for NoSQL".

  4. Läs beskrivningen av funktionen för att bekräfta att du vill registrera dig i förhandsversionen.

  5. Välj "Aktivera" för att registrera dig i förhandsversionen.

Kommentar

Registreringsbegäran godkänns automatiskt, men det kan ta flera minuter att börja gälla.

Kommentar

DiskANN är tillgängligt i tidig gated-preview och kräver att du fyller i det här formuläret. Du kommer att kontaktas av en medlem i Azure Cosmos DB-teamet när din resurs har registrerats för att använda DiskANN-indexet.

Dricks

Du kan också använda Azure CLI för att uppdatera funktionerna i ditt konto för att stödja NoSQL-vektorsökning.

az cosmosdb update \
     --resource-group <resource-group-name> \
     --name <account-name> \
     --capabilities EnableNoSQLVectorSearch

Principer för containervektor

Om du utför vektorsökning med Azure Cosmos DB för NoSQL måste du definiera en vektorprincip för containern. Detta ger viktig information för databasmotorn för att utföra effektiv likhetssökning efter vektorer som finns i containerns dokument. Detta informerar också vektorindexeringsprincipen om nödvändig information, om du väljer att ange en. Följande information ingår i policyn för inneslutna vektorer:

  • "path": egenskapen som innehåller vektorn (krävs).
  • "datatype": datatypen för vektoregenskapen (standard float32). 
  • "dimensions": Dimensioniteten eller längden på varje vektor i sökvägen. Alla vektorer i en sökväg bör ha samma antal dimensioner. (standard 1536).
  • "distanceFunction": Måttet som används för att beräkna avstånd/likhet. Mått som stöds är:
    • cosinin, som har värden från -1 (minst lika) till +1 (mest liknande).
    • dotproduct, som har värden från -inf (minst simialr) till +inf (mest liknande).
    • euclidean, som har värden från 0 (mest liknande) till +inf) (minst lika).

Kommentar

Varje unik sökväg kan ha högst en princip. Flera principer kan dock anges förutsatt att de alla riktar in sig på en annan sökväg.

Containervektorprincipen kan beskrivas som JSON-objekt. Här är två exempel på giltiga principer för containervektorer:

En princip med en enda vektorsökväg

{
    "vectorEmbeddings": [
        {
            "path":"/vector1",
            "dataType":"float32",
            "distanceFunction":"cosine",
            "dimensions":1536
        }
    ]
}

En princip med två vektorsökvägar

{
    "vectorEmbeddings": [
        {
            "path":"/vector1",
            "dataType":"float32",
            "distanceFunction":"cosine",
            "dimensions":1536
        },
        {
            "path":"/vector2",
            "dataType":"int8",
            "distanceFunction":"dotproduct",
            "dimensions":100
        }
    ]
}

Principer för vektorindexering

Vektorindex ökar effektiviteten när du utför vektorsökningar med hjälp av VectorDistance systemfunktionen. Vektorsökningar har lägre svarstid, högre dataflöde och mindre RU-förbrukning när du använder ett vektorindex. Du kan ange följande typer av vektorindexprinciper:

Typ Beskrivning Maximalt antal dimensioner
flat Lagrar vektorer i samma index som andra indexerade egenskaper. 505
quantizedFlat Kvantifierar (komprimerar) vektorer innan de lagras i indexet. Detta kan förbättra svarstiden och dataflödet på bekostnad av en liten mängd noggrannhet. 4096
diskANN Skapar ett index baserat på DiskANN för snabb och effektiv ungefärlig sökning. 4096

Några punkter att notera:

  • Indextyperna flat och quantizedFlat använder Azure Cosmos DB:s index för att lagra och läsa varje vektor när du utför en vektorsökning. Vektorsökningar med ett flat index är råstyrkesökningar och ger 100 % noggrannhet eller återkallande. Det vill: det är garanterat att hitta de mest liknande vektorerna i datamängden. Det finns dock en begränsning av 505 dimensioner för vektorer i ett platt index.

  • Indexet quantizedFlat lagrar kvantiserade (komprimerade) vektorer i indexet. Vektorsökningar med quantizedFlat index är också råstyrkesökningar, men deras noggrannhet kan vara något mindre än 100 % eftersom vektorerna kvantifieras innan de läggs till i indexet. Vektorsökningar med quantized flat bör dock ha lägre svarstid, högre dataflöde och lägre RU-kostnad än vektorsökningar i ett flat index. Det här är ett bra alternativ för mindre scenarier eller scenarier där du använder frågefilter för att begränsa vektorsökningen till en relativt liten uppsättning vektorer. quantizedFlat ska användas när det finns minst 1 000 vektorer och färre än 100 000 vektorer i containern.

  • Indexet diskANN är ett separat index som definierats specifikt för vektorer som använder DiskANN, en uppsättning vektorindexeringsalgoritmer med höga prestanda som utvecklats av Microsoft Research. DiskANN-index kan erbjuda några av de lägsta svarstiderna, det högsta dataflödet och de lägsta RU-kostnadsfrågorna, samtidigt som hög noggrannhet bibehålls. Men eftersom DiskANN är ett ungefärligt närmsta grannindex (ANN) kan noggrannheten vara lägre än quantizedFlat eller flat. DiskANN är tillgängligt i tidig gated-preview och kräver att du fyller i det här formuläret.

Här är exempel på giltiga principer för vektorindex:

{
    "indexingMode": "consistent",
    "automatic": true,
    "includedPaths": [
        {
            "path": "/*"
        }
    ],
    "excludedPaths": [
        {
            "path": "/_etag/?"
        }
    ],
    "vectorIndexes": [
        {
            "path": "/vector1",
            "type": "quantizedFlat"
        }
    ]
}
{
    "indexingMode": "consistent",
    "automatic": true,
    "includedPaths": [
        {
            "path": "/*"
        }
    ],
    "excludedPaths": [
        {
            "path": "/_etag/?"
        }
    ],
    "vectorIndexes": [
        {
            "path": "/vector1",
            "type": "quantizedFlat"
        },
        {
            "path": "/vector2",
            "type": "DiskANN"
        }
    ]
}

Kommentar

Indexen Quantized Flat och DiskANN kräver att minst 1 000 vektorer infogas. Detta för att säkerställa noggrannheten i kvantiseringsprocessen. Om det finns färre än 1 000 vektorer körs en fullständig genomsökning i stället och leder till högre RU-avgifter för en vektorsökningsfråga.

Viktigt!

I förhandsversionen av vektorsökningen används för närvarande inte kapslade sökvägar eller jokertecken i vektorprincipens sökväg. Ersätt åtgärder för vektorprincipen stöds för närvarande inte.

Utföra vektorsökning med frågor med VectorDistance()

När du har skapat en container med önskad vektorprincip och infogat vektordata i containern kan du utföra en vektorsökning med hjälp av systemfunktionen Vektoravstånd i en fråga. Ett exempel på en NoSQL-fråga som projicerar likhetspoängen som alias SimilarityScoreoch sorterar i den ordning som mest liknar minst liknar visas nedan:

SELECT c.title, VectorDistance(c.contentVector, [1,2,3]) AS SimilarityScore   
FROM c  
ORDER BY VectorDistance(c.contentVector, [1,2,3])   

Aktuella gränser och begränsningar

Vektorindexering och sökning i Azure Cosmos DB för NoSQL har vissa begränsningar i tidiga skeden av den offentliga förhandsversionen.

  • Du kan som mest ange en indextyp per sökväg i vektorindexprincipen
  • Du kan som mest ange en DiskANN-indextyp per container
  • Vektorindexering stöds endast på nya containrar.
  • Vektorer som indexeras med flat indextypen kan vara högst 505 dimensioner. Vektorer som indexeras med quantizedFlat indextypen eller DiskANN kan vara högst 4 096 dimensioner.
  • quantizedFlat använder samma kvantiseringsmetod som DiskANN och kan inte konfigureras just nu.
  • Databaser med delat dataflöde kan för närvarande inte använda funktionen för förhandsversion av vektorsökning.
  • Inmatningshastigheten bör begränsas när du använder en tidig förhandsversion av DiskANN.

Gå vidare