Vektorové databázy

Vektorová databáza ukladá a spravuje údaje vo forme vektorov, čo je číselné pole údajových bodov.

Použitie vektorov umožňuje zložité dotazy a analýzy, pretože vektory môžete porovnávať a analyzovať pomocou pokročilých techník na vyhľadávanie podobných položiek a organizovanie dát do skupín vrátane zhlukovania, kvantizácie a vyhľadávania podobnosti vektorov.

Tradičné databázy nie sú vhodné na spracovanie vysokorozmerných dát, ktoré sa v dátovej analytike stávajú čoraz bežnejšími. Vektorové databázy sú však navrhnuté tak, aby ich reprezentovali ako vektory, aby ich reprezentovali ako vektory. Vektorové databázy sú užitočné na úlohy, ako je strojové učenie, spracovanie prirodzeného jazyka a rozpoznávanie obrázkov, ktorých cieľom je identifikovať vzory alebo podobnosti vo veľkých množinách údajov.

Tento článok poskytuje základné informácie o vektorových databázach a konceptuálne vysvetľuje, ako môžete použiť Eventhouse ako vektorovú databázu v Real-Time Intelligence in Microsoft Fabric. Praktický príklad nájdete v téme Kurz: Použitie služby Eventhouse ako vektorovej databázy.

Kľúčové pojmy

Vo vektorových databázach sa používajú tieto kľúčové koncepty:

Podobnosť vektora

Vektorová podobnosť je miera toho, ako odlišné (alebo podobné) dva alebo viac vektory sú. Vyhľadávanie podobnosti vektorov je technika, ktorá sa používa na nájdenie podobných vektorov v množine údajov. Porovnávate vektory pomocou metriky vzdialenosti, napríklad euklidovskej vzdialenosti alebo kosínusovej podobnosti. Čím bližšie sú dva vektory, tým podobnejšie sú.

Vkladanie

Vkladanie je bežný spôsob reprezentovania údajov vo vektorovom formáte na použitie vo vektorových databázach. Vkladanie je matematické znázornenie časti údajov, ako je napríklad slovo, textový dokument alebo obrázok, ktoré je navrhnuté tak, aby zachytili jeho sémantický význam. Vytvárate embeddingy pomocou algoritmov, ktoré analyzujú dáta a generujú súbor číselných hodnôt, ktoré reprezentujú ich kľúčové vlastnosti. Napríklad vkladanie slova môže predstavovať jeho význam, kontext a vzťah k iným slovám. Proces vytvárania vkladania je jednoduchý. Aj keď ich môžete vytvoriť pomocou štandardných Python balíkov (napríklad spaCy, sent2vec, Gensim), veľké jazykové modely (LLM) generujú najkvalitnejšie embeddingy pre sémantické vyhľadávanie textu. Napríklad môžete poslať text do embedding modelu v Azure OpenAI a ten vygeneruje vektorovú reprezentáciu, ktorú môžete uložiť na analýzu. Pre viac informácií pozri Pochopte embeddings in Azure OpenAI Service.

Všeobecný pracovný postup

Schematický spôsob vkladania, ukladania a dotazovania textu uloženého ako vektory.

Všeobecný pracovný postup na použitie vektorovej databázy je nasledujúci:

  1. Vloženie údajov: Skonvertujte údaje do vektorového formátu pomocou vloženého modelu. Môžete napríklad vkladať textové údaje pomocou modelu OpenAI.
  2. Ukladajte vektory: Ukladajte vložené vektory do vektorovej databázy. Vložené údaje môžete odoslať do služby Eventhouse, kde ich môžete ukladať a spravovať.
  3. Vloženie dotazu: Skonvertujte údaje dotazu do vektorového formátu pomocou rovnakého modelu vkladania, ktorý sa používa na vloženie uložených údajov.
  4. Vektory dotazov: Pomocou vyhľadávania vektorovej podobnosti môžete vyhľadať položky v databáze, ktoré sú podobné dotazu.

Eventhouse ako vektorová databáza

Jadrom vyhľadávania podobnosti vektorov je schopnosť ukladať, indexovať a vyhľadávať vektorové dáta. Eventhouses poskytujú riešenie na spracovanie a analýzu veľkých objemov údajov, najmä v prípadoch, ktoré si vyžadujú analýzu a prieskum v reálnom čase. Táto schopnosť robí z Eventhouse vynikajúcu voľbu na ukladanie a vyhľadávanie vektorov.

Nasledujúce komponenty Eventhouse vám umožňujú používať ho ako vektorovú databázu:

  • Dynamický typ údajov, ktorý dokáže ukladať neštruktúrované údaje, ako sú napríklad polia a tašky vlastností. Použite tento typ údajov na ukladanie vektorových hodnôt. Vektorovú hodnotu môžete ďalej rozšíriť ukladaním metaúdajov súvisiacich s pôvodným objektom ako samostatných stĺpcov v tabuľke.
  • Kódovací typ Vector16 navrhnutý na ukladanie vektorov čísel s pohyblivou desatinnou čiarkou s 16-bitovou presnosťou. Toto kódovanie používa namiesto Bfloat16 predvolených 64 bitov. Použite toto kódovanie na ukladanie ML vektorových embeddingov, pretože znižuje nároky na ukladanie o faktor štvornásobne a zrýchľuje vektorové spracovateľské funkcie ako series_dot_product() a series_cosine_similarity() o niekoľko rádov.
  • Funkcia series_cosine_similarity , ktorú môžete použiť na vyhľadávanie podobnosti vektorov nad vektormi uloženými vo Eventhouse.

Optimalizácia mierky

Viac informácií o optimalizácii vyhľadávania podobnosti vektorov nájdete na blogu.

Ak chcete maximalizovať výkon a výsledné časy vyhľadávania, postupujte podľa týchto krokov:

  1. Nastavte kódovanie stĺpca vloženia na možnosť Vector16 a 16-bitové kódovanie koeficientov vektorov (namiesto predvoleného 64-bitového).
  2. Ukladajte tabuľku vektorov vkladania na všetky uzly klastra s aspoň jedným úlomkom na procesor. Na dosiahnutie tohto cieľa postupujte podľa týchto krokov:
    1. Obmedzte počet vkladajúcich vektorov podľa črepov tým, že zmeníte ShardEngineMaxRowCountpolitiky črepov. Toto nastavenie rozdeľuje vaše dáta medzi všetky dostupné výpočtové zdroje pre rýchlejšie vyhľadávanie.
    2. Zmeňte politiku zlúčenia RowCountUpperBoundForMerge. Na potlačenie rozsahu zlúčenia po požití je potrebná politika zlúčenia.

Príklad krokov optimalizácie

V nasledujúcom príklade definujete statickú vektorovú tabuľku na ukladanie 1M vektorov. Definujete politiku vkladania ako Vector16 a nastavíte politiky rozdelenia a zlučovania tak, aby ste optimalizovali tabuľku pre vyhľadávanie podobností vektorov. Pre tento príklad predpokladajme, že klaster má 20 uzlov a každý uzol má 16 procesorov. Úlomky tabuľky by mali obsahovať najviac 1 000 000/(20*16)=3 125 riadkov.

  1. Spustite nasledujúce príkazy KQL jeden po druhom na vytvorenie prázdnej tabuľky a nastavenie požadovaných politík a kódovania:

    .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. Ingest údajov do tabuľky vytvorenej a definovanej v predchádzajúcom kroku.

Ďalší krok