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. 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.
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ě:
Přejděte na stránku prostředku Azure Cosmos DB for NoSQL.
V položce nabídky Nastavení vyberte podokno Funkce.
Vyberte možnost Vektorové vyhledávání ve službě Azure Cosmos DB for NoSQL.
Přečtěte si popis funkce a potvrďte, že se chcete zaregistrovat ve verzi Preview.
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í.
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é).
- 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
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.
Důležité
Během raného náhledu nelze po vytvoření vektorových indexů upravovat. Místo toho budete muset vytvořit nový kontejner s novou zásadou indexu vektoru, pokud je potřeba provést změnu.
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": "quantizedFlat"
}
]
}
{
"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é
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ž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])
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.
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 neboDiskANN
indexu můžou mít maximálně 4 096 dimenzí.Využívá
quantizedFlat
stejnou metodu kvantování jako DiskANN.Rychlost vkládání vektorů by měla být omezena při použití dřívějšího náhledu DiskuANN. 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 současnosti ve verzi Preview se vektorové vyhledávání nepodporuje u účtů s analytickým úložištěm (a Synapse Linkem), sdílenou propustnost, klíče spravované zákazníkem, průběžné zálohování, Analýza úložiště a všechny verze a kanál změn odstranění. Jakmile je náhled vektorového vyhledávání povolený, nedá se zakázat.
Důležité
V současnosti ve verzi Preview se vektorové vyhledávání nepodporuje u účtů s analytickým úložištěm (a Synapse Linkem), sdílenou propustnost, klíče spravované zákazníkem, průběžné zálohování, Analýza úložiště a všechny verze a kanál změn odstranění. Jakmile je náhled vektorového vyhledávání povolený, nedá se zakázat.
Další krok
- 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: