Jaa


Vektoritietokannat

Vektoritietokanta tallentaa ja hallitsee tietoja vektoreina, jotka ovat arvopisteiden numeerisia matriiseja.

Vektoreiden käyttö mahdollistaa monimutkaiset kyselyt ja analyysit, koska vektoreita voidaan vertailla ja analysoida käyttämällä kehittyneitä tekniikoita, kuten vektorien samankaltaisuushakua, kvantifiointia ja klusterointia. Perinteiset tietokannat eivät sovellu hyvin suuriulotteisten tietojen käsittelyyn, jotka ovat yleistymässä tietoanalytiikassa. Vektoritietokannat on kuitenkin suunniteltu käsittelemään suuriulotteisia tietoja, kuten tekstiä, kuvia ja ääntä, edustamalla niitä vektoreina. Vektoritietokannat ovat hyödyllisiä tehtävissä, kuten koneoppimisessa, luonnollisen kielen käsittelyssä ja kuvantunnistuksessa, joissa pyritään tunnistamaan toistuvuuksia tai samankaltaisuuksia suurissa tietojoukoissa.

Tässä artikkelissa annetaan hieman taustaa vektoritietokannoista ja kerrotaan käsitteellisesti, miten Eventhousea voidaan käyttää vektoritietokantana Microsoft Fabricin reaaliaikaisessa tiedustelupalvelussa. Katso käytännön esimerkki kohdasta Opetusohjelma: Eventhousen käyttäminen vektoritietokantana.

Keskeiset käsitteet

Vektoritietokannoissa käytetään seuraavia avainkäsitteitä:

Vektorien samankaltaisuus

Vektorien samankaltaisuus on mittari siitä, kuinka erilaisia (tai samankaltaisia) kaksi tai useampia vektoreita ovat. Vektorien samankaltaisuushaku on tekniikka, jota käytetään samankaltaisten vektorien löytämiseen tietojoukosta. Vektoreita verrataan käyttämällä etäisyyden mittausarvoa, kuten euclidean-etäisyyttä tai kosinin samankaltaisuutta. Mitä lähempänä kaksi vektoria ovat, sitä samankaltaisia ne ovat.

Upotus

Upotus on yleinen tapa edustaa tietoja vektorimuodossa, jota käytetään vektoritietokannoissa. Upottaminen on tietopalan, kuten sanan, tekstiasiakirjan tai kuvan, matemaattinen esitys, joka on suunniteltu sieppaamaan sen semanttinen merkitys. Upotuksia luodaan käyttämällä algoritmeja, jotka analysoivat tietoja ja luovat joukon numeerisia arvoja, jotka edustavat sen tärkeimpiä ominaisuuksia. Esimerkiksi sanan upottaminen voi edustaa sen merkitystä, kontekstia ja yhteyttä muihin sanoihin. Upotusten luontiprosessi on yksinkertainen. Vaikka niitä voidaan luoda käyttämällä vakiomuotoisia Python-paketteja (esimerkiksi spaCy, sent2vec, Gensim), suuri kielimallit (LLM) tuottavat laadukkaita upotuksia semanttista tekstihakua varten. Voit esimerkiksi lähettää tekstiä Azure OpenAI:n upotusmalliin, ja se luo vektoriesityksen, joka voidaan tallentaa analyysia varten. Lisätietoja on artikkelissa Azure OpenAI -palvelun upotus.

Yleinen työnkulku

Kaavio vektoreiksi tallennetun tekstin upottamisesta, tallentamisesta ja kyselystä.

Vektoritietokannan käyttämisen yleinen työnkulku on seuraava:

  1. Upota tiedot: Muunna tiedot vektorimuotoon upotusmallin avulla. Voit esimerkiksi upottaa tekstitietoja OpenAI-mallin avulla.
  2. Tallenna vektorit: Tallenna upotetut vektorit vektoritietokantaan. Voit lähettää upotetut tiedot Eventhouseen, jossa voit tallentaa ja hallita vektoreita.
  3. Upota kysely: muunna kyselytiedot vektorimuotoon käyttämällä samaa upotusmallia, jota käytetään tallennettujen tietojen upottamiseen.
  4. Kyselyvektorit: käytä vektorien samankaltaisuushakua etsiäksesi tietokannasta merkintöjä, jotka muistuttavat kyselyä.

Eventhouse vektoritietokantana

Vector Similarity Search -haun ytimessä on kyky tallentaa, indeksoida ja kyselyvektoritietoja. Tapahtumatalot tarjoavat ratkaisun suurten tietomäärien käsittelyyn ja analysointiin erityisesti tilanteissa, joissa tarvitaan reaaliaikaista analysointia ja tutkimista. Se on erinomainen valinta vektoreiden tallentamiseen ja etsimiseen.

Seuraavat osat, jotka mahdollistavat Eventhouse-vektoritietokannan käytön:

  • Dynaaminen tietotyyppi, johon voidaan tallentaa jäsentämättömiä tietoja, kuten matriiseja ja ominaisuussäilöjä. Siksi tietotyyppiä suositellaan vektoriarvojen tallentamiseen. Voit laajentaa vektoriarvoa tallentamalla alkuperäiseen objektiin liittyviä metatietoja taulukon erillisinä sarakkeina.
  • KoodaustyyppiVector16, joka on suunniteltu liukulukujen vektoreiden tallentamiseen 16-bittisen tarkkuudella ja joka käyttää Bfloat16 oletusarvoisten 64-bittisten sijaan . Tätä koodausta suositellaan koneoppimisvektorien upotusten tallentamiseen, sillä se vähentää tallennusvaatimuksia nelin vektorikäsittelyllä ja nopeuttaa vektorikäsittelyfunktioita, kuten series_dot_product() ja series_cosine_similarity(), suuruudeltaan.
  • series_cosine_similarity-funktio, joka voi suorittaa vektorien samankaltaisuushakuja Eventhouseen tallennettujen vektorien lisäksi.

Optimoi skaalausta varten

Lisätietoja vektorien samankaltaisuushaun optimoimisesta on blogissa.

Voit maksimoida suorituskyvyn ja tulokseksi saadut hakuajat toimimalla seuraavasti:

  1. Määritä Upottamissarakkeen koodaus -arvoksi Vector16. Se on vektoreiden 16-bittinen koodaus (oletusarvoisen 64-bittisen sijaan).
  2. Tallenna upotusvektoritaulukko kaikkiin klusterisolmuihin vähintään yhdellä sirpaleella suoritinta kohden. Tämä tehdään seuraavissa vaiheissa:
    1. Rajoita sirpaleille upotettavien vektoreiden määrää muuttamalla sirpalekäytännön ShardEngineMaxRowCount-arvoa. Sirpalekäytäntö tasapainottaa kaikkien solmujen tiedot useita laajennuksia solmua kohden, jotta haku voi käyttää kaikkia käytettävissä olevia suorittimia.
    2. Muuta yhdistämiskäytännön RowCountUpperBoundForMerge-arvoa. Yhdistämiskäytäntöä tarvitaan, jotta kokoon yhdistämisen jälkeiset laajennukset voidaan estää.

Esimerkkejä optimointivaiheista

Seuraavassa esimerkissä on määritetty staattinen vektoritaulukko1M-vektorien tallentamista varten. Upotuskäytännöksi määritetään Vector16 ja sirpale- ja yhdistämiskäytännöt määritetään niin, että taulukko optimoidaan samanlaisuushakua varten. Tässä oletetaan, että klusterissa on 20 solmua, joista kussakin on 16 suoritinta. Taulukon sirpaleiden tulee sisältää enintään 1000000/(20*16)=3125 riviä.

  1. Seuraavat KQL-komennot suoritetaan yksi kerrallaan tyhjän taulukon luomiseksi ja vaadittujen käytäntöjen ja koodauksen määrittämiseksi:

    .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. Käytä edellisessä vaiheessa luodun ja määritetyn taulukon tietoja.

Seuraava vaihe