Sdílet prostřednictvím


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

Azure Cosmos DB for NoSQL teď nabízí efektivní indexování vektorů a vyhledávání. Tato funkce je navržená tak, aby zpracovávala multimodální, 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. Každý dokument v databázi může obsahovat nejen tradiční data bez schématu, ale také multimodální 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í. Udržování vektorů a dat společně zjednodušuje správu dat, architektury aplikací AI a efektivitu operací založených na vektorech.

Azure Cosmos DB for NoSQL nabízí flexibilitu tím, že vám umožní zvolit metodu 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% načtení 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 nejmodernějších algoritmů indexování vektorů vyvinutých společností Microsoft Research, která umožňuje efektivní a vysoce přesné multimodální vektorové vyhledávání v libovolném měřítku.

Další informace o indexování vektorů najdete v tématu Vektorové indexy.

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 služby Azure Cosmos DB pomocí WHERE klauzulí. To umožňuje vektorové vyhledávání poskytovat nejrelevavantnější data 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.


Poznámka:

Zajímá vás možnosti vyhledávání vektorů s ultra vysokou propustností? Azure Cosmos DB vyvíjí vylepšené funkce vektorového vyhledávání navržené pro velké vektorové datové sady spárované s ultravýkonnými vkládáními a vyhledáváními. Dokáže pojmout miliony dotazů za sekundu (QPS) s předvídatelnou, nízkou latencí a nesrovnanou nákladovou efektivitou. Zaregistrujte se, abyste se dozvěděli více o příležitostech pro dřívější přístup a dostávali oznámení o tom, kdy budou tyto funkce dostupné.

Zaregistrujte se k rozšířené verzi Private Preview.

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) a DiskANN. 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 vnoření vašich dat, která jste vytvořili pomocí modelu strojového učení využitím API pro vnoření. Příklady rozhraní API pro vkládání jsou Azure OpenAI Embeddings nebo Hugging Face na 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.

Povolení funkce indexování vektorů a vyhledávání

Pokud chcete tuto funkci povolit pro Azure Cosmos DB for NoSQL, postupujte takto:

  1. Přejděte na stránku prostředku Azure Cosmos DB for NoSQL.
  2. V levém podokně v části Nastavení vyberte Funkce.
  3. Vyberte Vektorové vyhledávání pro rozhraní API NoSQL.
  4. Přečtěte si popis funkce a potvrďte, že ji chcete povolit.
  5. Výběrem možnosti Povolit zapnete vektorové vyhledávání ve službě Azure Cosmos DB for NoSQL.

Doporučení

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

Žádost o registraci je automaticky schválena, ale může trvat 15 minut, než se projeví.

Zásady vektorů kontejnerů

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. V politice obsažených vektorů jsou zahrnuty následující informace:

  • path: Cesta k vlastnosti, která obsahuje vektory (povinné).
  • datatype: Datový typ vlastnosti vektoru. Podporované typy jsou float32, float16, int8a uint8.
  • dimensions: Rozměrnost 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 je 1536.
  • distanceFunction: Metrika použitá k výpočtu vzdálenosti/podobnosti. Podporované metriky jsou:
    • kosinus (výchozí), který obsahuje hodnoty z -1 (nejméně podobné) až +1 (nejvíce podobné).
    • tečkovaný součin, který má hodnoty od -inf (nejméně podobné) na +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. Pokud ale všechny cílí na jinou cestu, je možné zadat více zásad.

Poznámka:

Mnoho vložených modelů představuje prvky vektoru pomocí float32. Použití float16 místo toho může snížit nároky na úložiště vektorů o 50%, ale určité snížení přesnosti může mít za následek.

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":"float16",
            "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

Poznámka:

quantizedFlat Indexy 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, což vede k vyšším poplatkům za RU pro dotaz vektorového vyhledávání.

Několik bodů, které je potřeba vzít v úvahu:

  • Typy indexů flat a quantizedFlat používají index služby Azure Cosmos DB k ukládání a čtení jednotlivých vektorů při provádění vektorového vyhledávání. Vektorové vyhledávání s flat indexem je vyhledávání hrubou silou a zaručuje 100% přesnost nebo zachycení. 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. Ale vyhledávání vektorů s quantized flat by mělo mít nižší latenci, vyšší propustnost a nižší náklady na jednotky žádostí (RU) než vyhledávání vektorů na 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 se doporučuje, když je počet vektorů k indexování přibližně 50 000 nebo méně na jeden fyzický oddíl. Jedná se ale pouze o obecné pokyny a skutečný výkon by se měl testovat, protože každý scénář se může lišit.

  • 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. DiskANN je obecně nejvýkonnější ze všech typů indexů, pokud existuje více než 50 000 vektorů na fyzický oddíl.

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

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

Důležité

Zástupné znaky (*, []) a vektorové cesty vnořené uvnitř polí nejsou v současné době podporovány v zásadách vektorů nebo vektorovém indexu.

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ými vektorovými daty do kontejneru můžete provést vektorové vyhledávání pomocí systémové funkce VectorDistance v dotazu. Následující příklad ukazuje dotaz NoSQL, který projektuje skóre podobnosti jako alias SimilarityScore, a seřadí výsledky v pořadí od nejvíce podobného k nejméně podobnému.

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

Důležité

Vždy použijte TOP N klauzuli v SELECT příkazu dotazu. V opačném případě se vektorové vyhledávání pokusí vrátit mnohem více výsledků a spotřebuje více výpočetních jednotek (RU) a má vyšší latenci, než je nutné.

Aktuální omezení

Indexování vektorů a vyhledávání ve službě Azure Cosmos DB for NoSQL má určitá omezení.

  • Indexy quantizedFlat a diskANN vyžadují indexování alespoň 1 000 vektorů k vytvoření přesného kvantování. Pokud je indexováno méně než 1 000 vektorů, použije se místo toho úplná kontrola a poplatky za RU můžou být vyšší.
  • 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í.
  • Rychlost vkládání vektorů by měla být omezená. Velmi velký příjem dat (nad rámec 5M vektorů) v krátkém časovém období může vyžadovat více času sestavení indexu.
  • Funkce vektorového vyhledávání se v současné době nepodporuje u existujících kontejnerů. Pokud ho chcete použít, musí se vytvořit nový kontejner a musí být zadána zásada vkládání vektorů na úrovni kontejneru.
  • Databáze se sdílenou propustností nejsou podporovány.
  • V tuto chvíli se u účtů se sdílenou propustností nepodporuje indexování vektorů a vyhledávání.
  • Jakmile je v kontejneru povolené indexování a vyhledávání vektorů, nedá se zakázat.

Další krok