Sdílet prostřednictvím


Vektorové vyhledávání ve službě Azure Cosmos DB for NoSQL (Preview)

PLATÍ PRO: NoSQL

Azure Cosmos DB for NoSQL teď nabízí vektorové indexování a vyhledávání ve verzi Preview. Tato funkce je navržená tak, aby zpracovávala vysoce dimenzionální vektory a umožňovala efektivní a přesné vektorové vyhledávání v libovolném měřítku. Vektory teď můžete ukládat přímo v dokumentech spolu s daty. To znamená, že každý dokument v databázi může obsahovat nejen tradiční data bez schématu, ale také vysoce dimenzionální vektory jako další vlastnosti dokumentů. Toto umístění dat a vektorů umožňuje efektivní indexování a vyhledávání, protože vektory jsou uloženy ve stejné logické jednotce jako data, která představují. To zjednodušuje správu dat, architektury aplikací AI a efektivitu operací založených na vektorech.

Azure Cosmos DB for NoSQL nabízí flexibilitu, která nabízí při výběru metody indexování vektorů:

  • Přesné vyhledávání "plochých" nebo k-nejbližších sousedů (někdy označované jako hrubá síla) může poskytnout 100% odvolání načítání pro menší, prioritní vektorové vyhledávání. zejména v kombinaci s filtry dotazů a klíči oddílů.
  • Kvantovaný plochý index, který komprimuje vektory pomocí metod kvantování založených na DiskANN pro lepší efektivitu při hledání kNN.
  • DiskANN, sada špičkových vektorových indexovacích algoritmů vyvinutých společností Microsoft Research, která umožňuje efektivní a vysoce přesné vektorové vyhledávání v libovolném měřítku.

Další informace o indexování vektorů najdete tady.

Vektorové vyhledávání ve službě Azure Cosmos DB je možné kombinovat se všemi ostatními podporovanými filtry a indexy dotazů NoSQL ve službě Azure Cosmos DB pomocí WHERE klauzulí. To umožňuje, aby vaše vektorové vyhledávání byla nejrelevavantnějšími daty pro vaše aplikace.

Tato funkce vylepšuje základní funkce služby Azure Cosmos DB, takže je všestrannější pro zpracování požadavků na vektorová data a vyhledávání v aplikacích AI.

Co je úložiště vektorů?

Vektorové úložiště nebo vektorová databáze je databáze určená k ukládání a správě vkládání vektorů, což jsou matematické reprezentace dat ve vysokodimenzionálním prostoru. V tomto prostoru každá dimenze odpovídá funkci dat a desítky tisíc dimenzí se můžou použít k reprezentaci sofistikovaných dat. Pozice vektoru v tomto prostoru představuje jeho vlastnosti. Slova, fráze nebo celé dokumenty a obrázky, zvuk a další typy dat můžou být vektorizovány.

Jak funguje úložiště vektorů?

V úložišti vektorů se algoritmy vektorového vyhledávání používají k indexování a vkládání dotazů. Mezi dobře známé algoritmy vektorového vyhledávání patří Hierarchical Navigable Small World (HNSW), Inverted File (IVF), DiskANN atd. Vektorové vyhledávání je metoda, která vám pomůže najít podobné položky na základě jejich charakteristik dat, nikoli přesných shod v poli vlastnosti. Tato technika je užitečná v aplikacích, jako je hledání podobného textu, hledání souvisejících obrázků, vytváření doporučení nebo dokonce zjišťování anomálií. Používá se k dotazování vektorových vkládání dat, která jste vytvořili pomocí modelu strojového učení pomocí rozhraní API pro vkládání. Příklady rozhraní API pro vkládání jsou vkládání Azure OpenAI Embeddings nebo Hugging Face v Azure. Vektorové vyhledávání měří vzdálenost mezi datovými vektory a vektorem dotazu. Datové vektory, které jsou nejblíže vašemu vektoru dotazu, jsou ty, které jsou nalezeny nejvíce podobné sémanticky.

V integrované vektorové databázi ve službě Azure Cosmos DB for NoSQL je možné vkládání ukládat, indexovat a dotazovat společně s původními daty. Tento přístup eliminuje dodatečné náklady na replikaci dat v samostatné čistě vektorové databázi. Tato architektura navíc udržuje vektorové vkládání a původní data pohromadě, což usnadňuje operace s více modálními daty a umožňuje větší konzistenci dat, škálování a výkon.

Registrace do funkce Preview vektorového vyhledávání

Vektorové vyhledávání služby Azure Cosmos DB for NoSQL vyžaduje registraci funkcí ve verzi Preview na stránce Funkce ve službě Azure Cosmos DB. Pokud se chcete zaregistrovat, postupujte následovně:

  1. Přejděte na stránku prostředku Azure Cosmos DB for NoSQL.

  2. V položce nabídky Nastavení vyberte podokno Funkce.

  3. Vyberte možnost Vektorové vyhledávání ve službě Azure Cosmos DB for NoSQL.

  4. Přečtěte si popis funkce a potvrďte, že se chcete zaregistrovat ve verzi Preview.

  5. Výběrem možnosti Povolit se zaregistrujte ve verzi Preview.

Poznámka:

Žádost o registraci bude automaticky schválena, ale může trvat několik minut, než se projeví.

Poznámka:

DiskANN je k dispozici v rané verzi Gated-Preview a vyžaduje vyplnění tohoto formuláře. Kontaktuje vás člen týmu služby Azure Cosmos DB, když se váš prostředek připojí k používání indexu DiskANN.

Tip

Alternativně můžete pomocí Azure CLI aktualizovat možnosti vašeho účtu tak, aby podporovaly vektorové vyhledávání NoSQL.

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

Zásady vektoru kontejneru

Provádění vektorového vyhledávání ve službě Azure Cosmos DB for NoSQL vyžaduje, abyste definovali zásadu vektoru kontejneru. To poskytuje základní informace pro databázový stroj k provádění efektivního vyhledávání podobnosti vektorů nalezených v dokumentech kontejneru. To také informuje zásadu indexování vektorů o nezbytných informacích, pokud se rozhodnete určit jednu. Do zásad obsažených vektorů jsou zahrnuty následující informace:

  • "path": vlastnost obsahující vektor (povinné).
  • "datatype": datový typ vektorové vlastnosti (výchozí float32). 
  • "dimenze": Dimenze nebo délka každého vektoru v cestě. Všechny vektory v cestě by měly mít stejný počet dimenzí. (výchozí hodnota 1536).
  • "distanceFunction": Metrika použitá k výpočtu vzdálenosti a podobnosti. Podporované metriky jsou:
    • kosinus, který má hodnoty od -1 (nejméně podobné) na +1 (nejvíce podobné).
    • dotproduct, který obsahuje hodnoty -inf (nejméně simialr) až +inf (nejvíce podobné).
    • euclidean, který má hodnoty od 0 (nejvíce podobné) na +inf) (nejméně podobné).

Poznámka:

Každá jedinečná cesta může mít maximálně jednu zásadu. Je však možné zadat více zásad za předpokladu, že všechny cílí na jinou cestu.

Zásady vektoru kontejneru je možné popsat jako objekty JSON. Tady jsou dva příklady platných zásad vektoru kontejneru:

Zásada s jednou vektorovou cestou

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

Zásada se dvěma vektorovými cestami

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

Zásady indexování vektorů

Vektorové indexy zvyšují efektivitu při provádění vektorových hledání pomocí VectorDistance systémové funkce. Při použití vektorového indexu mají hledání vektorů nižší latenci, vyšší propustnost a nižší spotřebu RU. Můžete zadat následující typy zásad indexu vektorů:

Typ Popis Maximální rozměry
flat Ukládá vektory do stejného indexu jako ostatní indexované vlastnosti. 505
quantizedFlat Kvantuje (komprimuje) vektory před uložením do indexu. To může zlepšit latenci a propustnost za cenu malé přesnosti. 4096
diskANN Vytvoří index založený na diskANN pro rychlé a efektivní přibližné vyhledávání. 4096

Několik bodů na poznámku:

  • quantizedFlat Typy flat indexů používají index služby Azure Cosmos DB k ukládání a čtení jednotlivých vektorů při hledání vektorů. Vektorové vyhledávání s indexem jsou vyhledávání hrubou flat silou a vytvářejí 100% přesnost nebo úplnost. To znamená, že zaručuje nalezení nejvíce podobných vektorů v datové sadě. Existují však omezení 505 dimenzí vektorů na plochém indexu.

  • Index quantizedFlat ukládá do indexu kvantované (komprimované) vektory. Vektorové vyhledávání s indexem quantizedFlat jsou také hrubou silou hledání, ale jejich přesnost může být o něco menší než 100 %, protože vektory jsou před přidáním do indexu kvantovány. Hledání vektorů by quantized flat ale mělo mít nižší latenci, vyšší propustnost a nižší náklady na RU než vektorové vyhledávání v indexu flat . Tato možnost je vhodná pro menší scénáře nebo scénáře, ve kterých používáte filtry dotazů k zúžení vektorového vyhledávání na relativně malou sadu vektorů. quantizedFlat pokud je v kontejneru alespoň 1 000 vektorů a méně než 100 000 vektorů.

  • Index diskANN je samostatný index definovaný speciálně pro vektory využívající DiskANN, sadu algoritmů indexování vektorů s vysokým výkonem vyvinutých společností Microsoft Research. Indexy DiskANN můžou nabízet některé dotazy s nejnižší latencí, nejvyšší propustností a nejnižšími náklady na RU a přitom zachovat vysokou přesnost. Vzhledem k tomu, že diskANN je přibližný index nejbližších sousedů (ANN), může být přesnost nižší než quantizedFlat nebo flat. DiskANN je k dispozici v rané verzi Gated-Preview a vyžaduje vyplnění tohoto formuláře.

Tady jsou příklady platných zásad indexu vektorů:

{
    "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"
        }
    ]
}

Poznámka:

Indexy Quantized Flat a DiskANN vyžadují, aby bylo vloženo alespoň 1 000 vektorů. Tím zajistíte přesnost procesu kvantování. Pokud existuje méně než 1 000 vektorů, provede se místo toho úplná kontrola a zvýší se poplatky za RU pro dotaz vektorového vyhledávání.

Důležité

V tuto chvíli ve verzi Preview vektorového vyhledávání nepoužívejte vnořené cesty ani zástupné znaky v cestě zásad vektoru. Operace nahrazení zásad vektoru se v současné době nepodporují.

Provádění vektorových vyhledávání pomocí dotazů pomocí VectorDistance()

Po vytvoření kontejneru s požadovanými zásadami vektoru a vložením vektorových dat do kontejneru můžete provést vektorové vyhledávání pomocí systémové funkce Vektorová vzdálenost v dotazu. Příklad dotazu NoSQL, který promítá skóre podobnosti jako alias SimilarityScore, a řazení v pořadí od většiny podobných nejméně podobných je znázorněno níže:

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

Aktuální limity a omezení

Indexování vektorů a vyhledávání ve službě Azure Cosmos DB for NoSQL má určitá omezení, zatímco v počátečních fázích verze Public Preview.

  • V zásadách vektorového indexu můžete zadat maximálně jeden typ indexu na cestu.
  • Pro každý kontejner můžete zadat maximálně jeden typ indexu DiskANN.
  • Indexování vektorů je podporováno pouze u nových kontejnerů.
  • Vektory indexované pomocí flat typu indexu mohou mít maximálně 505 dimenzí. Vektory indexované pomocí quantizedFlat typu nebo DiskANN indexu můžou mít maximálně 4 096 dimenzí.
  • quantizedFlat využívá stejnou metodu kvantování jako DiskANN a v tuto chvíli ji nelze konfigurovat.
  • Databáze se sdílenou propustností momentálně nemůžou používat funkci náhledu vektorového vyhledávání.
  • Rychlost příjmu dat by měla být omezená při použití dřívější verze Preview disku DISKANN.

Další krok