Vektorkeresés az Azure Cosmos DB for NoSQL-ben
Az Azure Cosmos DB for NoSQL mostantól hatékony vektorindexelést és keresést biztosít. Ez a funkció nagy dimenziójú vektorok kezelésére lett kialakítva, így hatékony és pontos vektorkeresést tesz lehetővé bármilyen léptékben. Mostantól közvetlenül a dokumentumokban is tárolhat vektorokat az adatok mellett. Az adatbázis minden dokumentuma tartalmazhat nem csak hagyományos sémamentes adatokat, hanem nagy dimenziójú vektorokat is, mint a dokumentumok egyéb tulajdonságait. Az adatok és vektorok együttes használata hatékony indexelést és keresést tesz lehetővé, mivel a vektorok ugyanabban a logikai egységben vannak tárolva, mint az általuk képviselt adatok. A vektorok és az adatok együttes megtartása leegyszerűsíti az adatkezelést, az AI-alkalmazásarchitektúrákat és a vektoralapú műveletek hatékonyságát.
Az Azure Cosmos DB for NoSQL rugalmasságot kínál a vektorindexelési módszer kiválasztásához:
- A "lapos" vagy k-legközelebbi szomszéd pontos keresés (más néven találgatásos erő) 100%-os visszahívást biztosíthat a kisebb, szűrt vektorkeresésekhez. különösen lekérdezési szűrőkkel és partíciókulcsokkal kombinálva.
- Egy kvantált lapos index, amely DiskANN-alapú kvantálási módszerekkel tömöríti a vektorokat a jobb hatékonyság érdekében a kNN-keresésben.
- A DiskANN, a Microsoft Research által kifejlesztett modern vektorindexelési algoritmusok egy csomagja, amely hatékony, nagy pontosságú vektorkeresést végez bármilyen léptékben.
További információ a vektorindexelésről itt
Az Azure Cosmos DB vektorkeresése kombinálható az összes többi támogatott Azure Cosmos DB NoSQL-lekérdezési szűrővel és indexel WHERE
záradékokkal. Ez lehetővé teszi, hogy a vektorkeresések az alkalmazások szempontjából legfontosabb adatok legyenek.
Ez a funkció javítja az Azure Cosmos DB alapvető képességeit, így sokoldalúbbá teszi a vektoradatok kezelését és a keresési követelményeket az AI-alkalmazásokban.
Mi az a vektortároló?
A vektortárolók vagy vektoradatbázisok vektoros beágyazások tárolására és kezelésére szolgáló adatbázisok, amelyek nagy dimenziójú térben lévő adatok matematikai ábrázolásai. Ebben a térben minden dimenzió megfelel az adatok egy funkciójának, és több tízezer dimenzió használható kifinomult adatok megjelenítésére. A vektor pozíciója ebben a térben annak jellemzőit jelöli. Szavak, kifejezések vagy teljes dokumentumok, képek, hang és más típusú adatok mind vektorizálhatók.
Hogyan működik a vektortároló?
A vektortárakban a vektorkeresési algoritmusok a beágyazások indexelésére és lekérdezésére szolgálnak. Néhány jól ismert vektorkeresési algoritmus a hierarchikus Navigable Small World (HNSW), az Inverted File (IVF), a DiskANN stb. A vektoros keresés egy olyan módszer, amely segít megtalálni a hasonló elemeket az adattulajdonságuk alapján, nem pedig egy tulajdonságmező pontos egyezései alapján. Ez a technika olyan alkalmazásokban hasznos, mint a hasonló szövegek keresése, a kapcsolódó képek keresése, javaslatok készítése vagy akár a rendellenességek észlelése. A gépi tanulási modellel létrehozott adatok vektoros beágyazásainak lekérdezésére szolgál egy beágyazási API használatával. A beágyazási API-k például az Azure OpenAI-beágyazások vagy a Face ölelése az Azure-ban. A vektorkeresés az adatvektorok és a lekérdezésvektor közötti távolságot méri. A lekérdezésvektorhoz legközelebb eső adatvektorok azok, amelyek szemantikailag a leginkább hasonlítanak.
Az Azure Cosmos DB for NoSQL integrált vektoradatbázisában a beágyazások az eredeti adatok mellett tárolhatók, indexelhetők és lekérdezhetők. Ez a módszer kiküszöböli az adatok egy különálló, tiszta vektoradatbázisban való replikálásának többletköltségét. Emellett ez az architektúra együtt tartja a vektoros beágyazásokat és az eredeti adatokat, ami jobban megkönnyíti a több modális adatműveleteket, és nagyobb adatkonzisztenciát, skálázást és teljesítményt tesz lehetővé.
A vektorindexelési és keresési funkció engedélyezése
Az Azure Cosmos DB for NoSQL vektorindexeléséhez és kereséséhez engedélyezni kell az Azure Cosmos DB Szolgáltatások lapján. A regisztrációhoz kövesse az alábbi lépéseket:
Lépjen az Azure Cosmos DB for NoSQL erőforráslapjára.
Válassza a "Szolgáltatások" panelt a "Beállítások" menüelem alatt.
Válassza a "Vektorkeresés az Azure Cosmos DB for NoSQL-ben" funkciót.
Olvassa el a funkció leírását, és győződjön meg arról, hogy engedélyezni szeretné.
Válassza az "Engedélyezés" lehetőséget a vektorindexelés és a keresési képesség bekapcsolásához.
Tipp.
Másik lehetőségként az Azure CLI-vel frissítheti a fiókja képességeit a NoSQL-vektorkeresés támogatásához.
az cosmosdb update \ --resource-group <resource-group-name> \ --name <account-name> \ --capabilities EnableNoSQLVectorSearch
Feljegyzés
A regisztrációs kérelem automatikusan lesz alkalmazva; azonban a fiók teljes aktiválása 15 percet is igénybe vehet.
Tárolóvektor-szabályzatok
Ha vektorkeresést végez az Azure Cosmos DB for NoSQL-ben, meg kell határoznia egy vektorszabályzatot a tárolóhoz. Ez alapvető információkat nyújt az adatbázismotor számára a tároló dokumentumaiban található vektorok hatékony hasonlósági kereséséhez. Ez tájékoztatja a vektorindexelési szabályzatot is a szükséges információkról, ha úgy dönt, hogy megad egyet. A tartalmazott vektorszabályzat a következő információkat tartalmazza:
- "path": a vektort tartalmazó tulajdonság (kötelező).
- "datatype": a vektortulajdonság adattípusa (alapértelmezett Float32).
- "dimenziók": Az elérési út egyes vektorainak dimenziója vagy hossza. Az elérési út összes vektorának azonos számú dimenzióval kell rendelkeznie. (alapértelmezett 1536).
- "distanceFunction": A távolság/hasonlóság kiszámításához használt metrika. A támogatott metrikák a következők:
- koszinusz, amely -1 (legkevésbé hasonló) és +1 (leginkább hasonló) értékekkel rendelkezik.
- pont termék, amely -inf (legkevésbé hasonló) és +inf (leginkább hasonló) értékekkel rendelkezik.
- euklideszi, amelynek értéke 0 (leginkább hasonló) és +inf) (legkevésbé hasonló).
Feljegyzés
Minden egyedi elérési út legfeljebb egy szabályzattal rendelkezhet. Azonban több szabályzat is megadható, feltéve, hogy mindegyik más elérési utat céloz meg.
A tárolóvektor-szabályzat JSON-objektumokként írható le. Íme két példa az érvényes tárolóvektor-szabályzatokra:
Egyetlen vektorútvonallal rendelkező szabályzat
{
"vectorEmbeddings": [
{
"path":"/vector1",
"dataType":"float32",
"distanceFunction":"cosine",
"dimensions":1536
}
]
}
Két vektorútvonallal rendelkező szabályzat
{
"vectorEmbeddings": [
{
"path":"/vector1",
"dataType":"float32",
"distanceFunction":"cosine",
"dimensions":1536
},
{
"path":"/vector2",
"dataType":"int8",
"distanceFunction":"dotproduct",
"dimensions":100
}
]
}
Vektorindexelési szabályzatok
A vektorindexek növelik a hatékonyságot a vektorkeresések rendszerfüggvény használatával VectorDistance
történő végrehajtásakor. A vektorkeresések kisebb késéssel, nagyobb átviteli sebességgel és kevesebb RU-használattal rendelkeznek vektorindex használatakor. A vektorindex-szabályzatok alábbi típusait adhatja meg:
Típus | Leírás | Maximális méretek |
---|---|---|
flat |
A vektorokat ugyanabban az indexben tárolja, mint a többi indexelt tulajdonságot. | 505 |
quantizedFlat |
Az indexen való tárolás előtt számszerűsíti (tömöríti) a vektorokat. Ez kis pontosság árán javíthatja a késést és az átviteli sebességet. | 4096 |
diskANN |
A DiskANN alapján létrehoz egy indexet a gyors és hatékony hozzávetőleges kereséshez. | 4096 |
Feljegyzés
Az quantizedFlat
és diskANN
az indexek legalább 1000 vektor beszúrását igénylik. Ez a kvantálási folyamat pontosságának biztosítása. Ha 1000-nél kevesebb vektor van, a rendszer ehelyett teljes vizsgálatot hajt végre, és magasabb RU-díjakat eredményez egy vektorkeresési lekérdezés esetében.
Néhány megjegyzés:
Az
flat
ésquantizedFlat
az indextípusok az Azure Cosmos DB indexét használják az egyes vektorok tárolására és olvasására vektorkereséskor. Az indexet tartalmazóflat
vektorkeresések találgatásos keresések, amelyek 100%-os pontosságot vagy visszahívást eredményeznek. Ez azt jelenti, hogy garantáltan megtalálja az adathalmazban a leginkább hasonló vektorokat. A vektorok dimenziói505
azonban korlátozottak egy lapos indexen.Az
quantizedFlat
index számszerűsített (tömörített) vektorokat tárol az indexen. Az indexet tartalmazóquantizedFlat
vektorkeresések is találgatásos keresések, de pontosságuk valamivel kisebb lehet, mint 100%, mivel a vektorok kvantálva vannak az indexhez való hozzáadás előtt. A vektorkeresésnek azonban alacsonyabb késéssel, nagyobb átviteli sebességgel és alacsonyabb RU-költséggelquantized flat
kell rendelkeznie, mint egyflat
index vektorkeresésének. Ez jó választás kisebb forgatókönyvekhez, vagy olyan forgatókönyvekhez, ahol lekérdezési szűrőkkel szűkíti a vektorkeresést egy viszonylag kis vektorkészletre.quantizedFlat
akkor ajánlott, ha az indexelendő vektorok száma fizikai partíciónként körülbelül 50 000 vagy kevesebb. Ez azonban csak egy általános iránymutatás, és a tényleges teljesítményt tesztelni kell, mivel az egyes forgatókönyvek eltérőek lehetnek.Az
diskANN
index egy külön index, amely kifejezetten a DiskANN-t használó vektorokhoz van definiálva, amely a Microsoft Research által kifejlesztett nagy teljesítményű vektorindexelési algoritmusok csomagja. A DiskANN-indexek a legalacsonyabb késést, a legmagasabb átviteli sebességet és a legalacsonyabb ru-költség lekérdezéseket kínálhatják, miközben továbbra is magas pontosságot biztosítanak. Általánosságban elmondható, hogy a DiskANN az összes indextípus közül a leghasznosabb, ha fizikai partíciónként több mint 50 000 vektor található.
Íme néhány példa érvényes vektorindex-szabályzatokra:
{
"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"
}
]
}
Fontos
Az indexelési szabályzat "excludedPaths" szakaszához hozzáadott vektorútvonal a beszúrás optimalizált teljesítményének biztosítása érdekében. Ha nem adja hozzá a vektor elérési útját a "excludedPaths" elemhez, az magasabb RU-díjat és késést eredményez a vektorbeszúrások esetében.
Fontos
A helyettesítő karakterek (*, []) jelenleg nem támogatottak a vektorszabályzatban vagy a vektorindexben.
Vektorkeresés végrehajtása lekérdezésekkel a VectorDistance() használatával
Miután létrehozott egy tárolót a kívánt vektorszabályzattal, és vektoradatokat szúrt be a tárolóba, vektorkeresést végezhet a Vektor távolsága rendszerfüggvény használatával egy lekérdezésben. Példa egy NoSQL-lekérdezésre, amely a hasonlósági pontszámot aliasként SimilarityScore
, a legkevésbé hasonlóhoz leginkább hasonló sorrendbe rendezi:
SELECT TOP 10 c.title, VectorDistance(c.contentVector, [1,2,3]) AS SimilarityScore
FROM c
ORDER BY VectorDistance(c.contentVector, [1,2,3])
Fontos
Mindig használjon záradékot TOP N
egy SELECT
lekérdezés utasításában. Ellenkező esetben a vektorkeresés sokkal több eredményt próbál visszaadni, és a lekérdezés több kérelemegységbe kerül, és a szükségesnél nagyobb késéssel rendelkezik.
Jelenlegi korlátozások
A vektorindexelés és a keresés az Azure Cosmos DB for NoSQL-ben bizonyos korlátozásokkal rendelkezik.
-
quantizedFlat
ésdiskANN
az indexekhez legalább 1000 vektort kell indexelni, hogy a kvantálás pontos legyen. Ha 1000-nél kevesebb vektor van indexelve, akkor a teljes vizsgálat helyett a ru-díjak magasabbak lehetnek. - Az indextípussal
flat
indexelt vektorok legfeljebb 505 dimenzióban lehetnek. Az indextípussalquantizedFlat
DiskANN
indexelt vektorok legfeljebb 4096 dimenzióban lehetnek. - Az
quantizedFlat
index ugyanazt a kvantálási módszert használja, mint a DiskANN. - A vektorbeszúrások sebességének korlátozottnak kell lennie. A nagyon nagy (5 M-t meghaladó) betöltés további indexépítési időt igényelhet.
- A vektorkeresési funkció jelenleg nem támogatott a meglévő tárolókban. A használatához létre kell hozni egy új tárolót, és meg kell adni a tárolószintű vektor beágyazási házirendet.
- A megosztott átviteli sebesség adatbázisai nem támogatottak.
- Jelenleg a vektorindexelés és a keresés nem támogatott az elemzési tárat (és a Synapse Linket) és a megosztott átviteli sebességet tartalmazó fiókok esetében.
- Ha a vektorindexelés és a keresés engedélyezve van egy tárolón, az nem tiltható le.
Kapcsolódó tartalom
- DiskANN + Azure Cosmos DB – Microsoft Mechanics Videó
- .NET – Útmutató indexeléshez és lekérdezési vektoradatokhoz
- Python – Útmutató indexeléshez és vektoradatok lekérdezéséhez
- Java – Útmutató indexeléshez és lekérdezési vektoradatokhoz
- VectorDistance rendszerfüggvény
- Vektorindex áttekintése
- Vektorindex-szabályzatok
- Index kezelése
- Integrációk: