Megosztás a következőn keresztül:


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:

  1. Lépjen az Azure Cosmos DB for NoSQL erőforráslapjára.

  2. Válassza a "Szolgáltatások" panelt a "Beállítások" menüelem alatt.

  3. Válassza a "Vektorkeresés az Azure Cosmos DB for NoSQL-ben" funkciót.

  4. Olvassa el a funkció leírását, és győződjön meg arról, hogy engedélyezni szeretné.

  5. 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 és quantizedFlat 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ói 505 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éggel quantized flat kell rendelkeznie, mint egy flat 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 és diskANN 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ípussal quantizedFlatDiskANN 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.

Következő lépés