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


Vektoradatbázisok

A vektoradatbázis vektorok formájában tárolja és kezeli az adatokat, amelyek adatpontok numerikus tömbjei.

A vektorok használata összetett lekérdezéseket és elemzéseket tesz lehetővé, mivel a vektorok olyan fejlett technikákkal hasonlíthatók össze és elemezhetők, mint a vektor-hasonlóság keresése, a kvantálás és a fürtözés. A hagyományos adatbázisok nem alkalmasak a nagy méretű adatok kezelésére, amelyek egyre gyakoribbak az adatelemzésben. A vektoradatbázisok azonban úgy vannak kialakítva, hogy nagy méretű adatokat, például szöveget, képeket és hangokat kezeljenek vektorként. A vektoradatbázisok olyan feladatokhoz hasznosak, mint a gépi tanulás, a természetes nyelvfeldolgozás és a képfelismerés, ahol a cél a nagy adathalmazok mintáinak vagy hasonlóságainak azonosítása.

Ez a cikk a vektoradatbázisokról nyújt némi hátteret, és elméletileg elmagyarázza, hogyan használhatja az Eventhouse-t vektoradatbázisként a Microsoft Fabric valós idejű intelligenciájában. Gyakorlati példa : Oktatóanyag: Eventhouse használata vektoradatbázisként.

Fő fogalmak

A vektoradatbázisokban a következő fő fogalmak használatosak:

Vektorok hasonlósága

A vektorok hasonlósága annak mértéke, hogy két vagy több vektor mennyire különbözik (vagy hasonló). A vektorok hasonlóságának keresése egy olyan technika, amellyel hasonló vektorok találhatók egy adathalmazban. A vektorokat távolságmetrika, például euklideszi távolság vagy koszinusz hasonlóság alapján hasonlítjuk össze. Minél közelebb van két vektor, annál hasonlóbbak.

Beágyazások

A beágyazások az adatok vektoros formátumban történő ábrázolásának gyakori módja vektoros adatbázisokban való használatra. A beágyazás egy adatrész, például szó, szöveges dokumentum vagy kép matematikai ábrázolása, amely a szemantikai jelentés rögzítésére szolgál. A beágyazások olyan algoritmusok használatával jönnek létre, amelyek elemzik az adatokat, és numerikus értékeket hoznak létre, amelyek a fő funkcióit képviselik. Egy szó beágyazása például jelentheti a jelentését, a kontextusát és a más szavakhoz való viszonyát. A beágyazások létrehozásának folyamata egyszerű. Bár szabványos Python-csomagokkal (például spaCy, sent2vec, Gensim) hozhatók létre, a nagyméretű nyelvi modellek (LLM) kiváló minőségű beágyazásokat hoznak létre a szemantikus szövegkereséshez. Küldhet például szöveget egy beágyazási modellnek az Azure OpenAI-ban, és létrehoz egy vektorábrázolást, amely elemzésre tárolható. További információ: Az Azure OpenAI szolgáltatásba történő beágyazások ismertetése.

Általános munkafolyamat

A vektorként tárolt szövegek beágyazásának, tárolásának és lekérdezésének sémája.

A vektoradatbázisok általános munkafolyamata a következő:

  1. Adatok beágyazása: Adatok átalakítása vektorformátumba beágyazási modell használatával. Például egy OpenAI-modellel ágyazhat be szöveges adatokat.
  2. Vektorok tárolása: Tárolja a beágyazott vektorokat egy vektoradatbázisban. A beágyazott adatokat elküldheti egy Eventhouse-nak a vektorok tárolásához és kezeléséhez.
  3. Lekérdezés beágyazása: Konvertálja a lekérdezési adatokat vektorformátumba ugyanazzal a beágyazási modellel, amelyet a tárolt adatok beágyazásához használnak.
  4. Lekérdezésvektorok: Vektoros hasonlósági kereséssel megkeresheti a lekérdezéshez hasonló bejegyzéseket az adatbázisban.

Eventhouse mint vektoradatbázis

A vektoros hasonlóság keresésének középpontjában a vektoradatok tárolása, indexelése és lekérdezése áll. Az eventhouse-ok megoldást nyújtanak nagy mennyiségű adat kezelésére és elemzésére, különösen olyan helyzetekben, amelyek valós idejű elemzést és feltárást igényelnek, így kiváló választás vektorok tárolására és keresésére.

Az Eventhouse vektoradatbázis használatának engedélyezésének alábbi összetevői:

  • A dinamikus adattípus, amely strukturálatlan adatokat, például tömböket és tulajdonságcsomagokat tárolhat. Ezért a vektorértékek tárolásához adattípus használata javasolt. A vektor értékét tovább bővítheti úgy, hogy az eredeti objektumhoz kapcsolódó metaadatokat külön oszlopként tárolja a táblában.
  • A lebegőpontos számok vektorainak 16 bites pontosságú tárolására tervezett kódolási típus Vector16 , amely az Bfloat16 alapértelmezett 64 bit helyett azokat használja. Ez a kódolás ml-vektoros beágyazások tárolására ajánlott, mivel négy tényezővel csökkenti a tárolási követelményeket, és nagyságrendekkel felgyorsítja a vektorfeldolgozási függvényeket, például a series_dot_product() és a series_cosine_similarity() függvényt.
  • A series_cosine_similarity függvény, amely az Eventhouse-ban tárolt vektorok tetején végezhet vektor-hasonlósági keresést.

Skálázás optimalizálása

A vektoros hasonlóság keresésének optimalizálásával kapcsolatos további információkért olvassa el a blogot.

A teljesítmény és az eredményként kapott keresési idő maximalizálásához kövesse az alábbi lépéseket:

  1. Állítsa a beágyazások oszlop kódolását Vector16-ra, a vektorok együtthatóinak 16 bites kódolására (az alapértelmezett 64 bites helyett).
  2. A beágyazási vektorok tábláját minden fürtcsomóponton tárolja, processzoronként legalább egy szegmenssel, amelyet az alábbi lépések követnek:
    1. A szegmensenkénti beágyazási vektorok számát a szegmensenkénti ShardEngineMaxRowCount módosításával korlátozhatja. A horizontális skálázási szabályzat csomópontonként több kiterjedéssel egyensúlyozza az adatokat az összes csomóponton, így a keresés az összes elérhető processzort használhatja.
    2. Módosítsa az egyesítési szabályzat RowCountUpperBoundForMerge értékét. Az egyesítési szabályzatra a betöltés utáni egyesítési mértékek letiltásához van szükség.

Példa optimalizálási lépések

Az alábbi példában egy statikus vektortáblát határozunk meg 1M-vektorok tárolására. A beágyazási szabályzat vektor16-ként van definiálva, a horizontális skálázási és egyesítési szabályzatok pedig úgy vannak beállítva, hogy optimalizálják a táblázatot a vektoros hasonlóság kereséséhez. Ehhez tegyük fel, hogy a fürt 20 csomópontból áll, és mindegyik 16 processzorral rendelkezik. A tábla szegmenseinek legfeljebb 1000000/(20*16)=3125 sort kell tartalmazniuk.

  1. A következő KQL-parancsok egyenként futnak az üres tábla létrehozásához és a szükséges szabályzatok és kódolás beállításához:

    .create table embedding_vectors(vector_id:long, vector:dynamic)                                  //  This is a sample selection of columns, you can add more columns
    
    .alter column embedding_vectors.vector policy encoding type = 'Vector16'                         // Store the coefficients in 16 bits instead of 64 bits accelerating calculation of dot product, suppress redundant indexing
    
    .alter-merge table embedding_vectors policy sharding '{ "ShardEngineMaxRowCount" : 3125 }'       // Balanced data on all nodes and, multiple extents per node so the search can use all processors 
    
    .alter-merge table embedding_vectors policy merge '{ "RowCountUpperBoundForMerge" : 3125 }'      // Suppress merging extents after ingestion
    
  2. Az adatok betöltése az előző lépésben létrehozott és definiált táblába.

Következő lépés