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 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é 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, 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.
Povolení funkce indexování vektorů a vyhledávání
Vektorové indexování a vyhledávání ve službě Azure Cosmos DB for NoSQL vyžaduje povolení na stránce Funkce ve službě Azure Cosmos DB. Pokud se chcete zaregistrovat, postupujte následovně:
Přejděte na stránku prostředku Azure Cosmos DB for NoSQL.
V položce nabídky Nastavení vyberte podokno Funkce.
Vyberte funkci Vektorové vyhledávání ve službě Azure Cosmos DB for NoSQL.
Přečtěte si popis funkce a potvrďte, že ji chcete povolit.
Výběrem možnosti Povolit zapnete funkci indexování vektorů a vyhledávání.
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
Poznámka:
Žádost o registraci bude automaticky schválena; úplné aktivace účtu však může trvat 15 minut.
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é).
- 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. 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 |
Poznámka:
Indexy quantizedFlat
a diskANN
indexy 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 bude vést k vyšším poplatkům za RU pro dotaz vektorového vyhledávání.
Několik bodů na poznámku:
quantizedFlat
Typyflat
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í hrubouflat
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 indexemquantizedFlat
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ů byquantized flat
ale mělo mít nižší latenci, vyšší propustnost a nižší náklady na RU než vektorové vyhledávání v indexuflat
. 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ů, které se mají indexovat, někde přibližně 50 000 nebo méně na 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/?"
},
{
"path": "/vector1/*",
},
{
"path": "/vector2/*",
}
],
"vectorIndexes": [
{
"path": "/vector1",
"type": "quantizedFlat"
},
{
"path": "/vector2",
"type": "diskANN"
}
]
}
Důležité
Vektorová cesta přidaná do oddílu "excludedPaths" zásad indexování, aby se zajistil optimalizovaný výkon pro vložení. Přidáním vektorové cesty do vyloučených cest způsobíte vyšší poplatky za RU a latenci při vkládání vektorů.
Důležité
Zástupné znaky (*, []) nejsou v současné době podporovány v zásadách vektoru nebo vektorovém indexu.
Provádění vektorových vyhledávání pomocí dotazů pomocí VectorDistance()
Po vytvoření kontejneru s požadovanou zásadou vektoru a vložením vektorových dat do kontejneru můžete provést vektorové vyhledávání pomocí systémové funkce Vector Distance v dotazu. Příklad dotazu NoSQL, který projektuje skóre podobnosti jako alias SimilarityScore
, a seřadí pořadí podle většiny podobných:
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 dotaz bude stát více RU a bude mít vyšší latenci, než je potřeba.
Aktuální omezení
Indexování vektorů a vyhledávání ve službě Azure Cosmos DB for NoSQL má určitá omezení.
quantizedFlat
indexydiskANN
a indexy vyžadují indexování alespoň 1 000 vektorů, aby bylo zajištěno, že kvantování je přesné. 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 neboDiskANN
indexu můžou mít maximálně 4 096 dimenzí. - Index
quantizedFlat
využívá stejnou metodu kvantování jako DiskANN. - Rychlost vkládání vektorů by měla být omezená. Velmi velký příjem dat (nad rámec 5M vektorů) může vyžadovat další dobu sestavení indexu.
- Databáze se sdílenou propustností nejsou podporovány.
- V tuto chvíli se vektorové indexování a vyhledávání nepodporuje u účtů s analytickým úložištěm (a Synapse Linkem) a sdílenou propustností.
- Jakmile je u kontejneru povolené indexování vektorů a vyhledávání, nedá se zakázat.
Související obsah
- DiskANN + Azure Cosmos DB – Video Microsoft Mechanics
- .NET – Indexování a dotazování vektorových dat
- Python – Indexování a dotazování vektorových dat
- Java – Indexování a dotazování vektorových dat
- Funkce systému VectorDistance
- Přehled vektorových indexů
- Zásady vektorových indexů
- Správa indexu
- Integrace: