Kuidas on seotud andmebaasid ja tehisaru (AI)?

Postitas Erki Eessaar 17.10.2024 09:32 (muudeti 08.11.2024 10:09)
Andmebaasisüteemid on seotud tehisaruga erinevates aspektides.
  • Treeningandmed võivad tulla andmebaasist.
  • Mingisugune osa tehisaru süsteemidest saab olla realiseeritud andmebaasisüsteemi vahendeid kasutades – mitte andmed ei tule realisatsiooni juurde, vaid realisatsioon tuleb andmete juurde.
    • Süsteem tuleb ise realiseerida, kasutades pakutavaid andmetüüpe, luues rutiine.
    • Süsteemi loomiseks saab kasutada valmis komponente.
  • Andmebaasisüsteem kasutab oma sisemise toimimise korraldamiseks tehisaru. See on võimalik isejuhtivate andmebaasisüsteemide puhul.
  • Andmebaasiga seotud ülesannete lahendamiseks kasutatakse tehisaru.
 
Miks andmebaasis?
 
Miks realiseerida tehisaru süsteeme kasutades andmebaasisüsteemide pakutavaid võimalusi? Momijan (2024) põhjendab seda sellega, et tehisaru süsteemid nõuavad palju andmeid ning efektiivsem on tuua algoritmid andmete juurde, selle asemel, et viia andmeid algoritmide juurde. Eeliseks on, et andmetele juurdepääs on lihtne ja kiire ning arvesse saab võtta kõige värskemaid andmeid. Jääb ära ajakulu andmete ülekandmisele andmebaasist rakenduse juurde. Kuna andmeid ei pea liigutama üle võrgu, siis on andmete turvalisus ja andmesubjektide privaatsus paremini tagatud. Kuna väheneb kasutatavate serverite hulk, siis on ka süsteemi tehniline arhitektuur lihtsam.
 
Tehisaru‑põhistel süsteemidel võib olla abi erinevatest andmebaasisüsteemides realiseeriseeritud võimalustest nagu näiteks tehingute haldus, andmete samaaegse kasutamise võimalus erinevate kasutajate poolt, varundamine ning taastamine, keerukad andmetüübid, täistekstotsing ning erinevat tüüpi indeksid. 
 
Andmebaasist andmete lugemisel saab kasutada kõiki andmekäitluskeele võimalusi. Samuti on abiks andmete maskimise (PostgreSQL, Oracle) ja anonümiseerimise võimalused. 
 
 
Retrieval Augmented Generation
 
Lugemisega täiendatud genereerimine (Retrieval-Augmented Generation, RAG) on suurte keelemudelite kasutatav tehnika, mille korral enne kasutaja küsimusele inimkeelse vastuse genereerimist otsitakse andmeid välistest allikatest nagu dokumendid, veebilehed ja andmebaasid. Nii parandatakse vastuse täpsust ja olulisust ning vähendatakse hallutsioneerimist (e jama ajamist). Süsteem otsib kasutaja päringule vastamiseks välistest allikatest vastuse jaoks olulist sisendit. Leitud sisend ühendatakse kasutaja promptiga (küsimusega), et anda keelemudelile vastuse genereerimiseks täpsemat konteksti. Niimoodi moodustatud uus prompt antakse sisendiks teksti genereerimisele. Selline lähenemine võimaldab  võtta arvesse värskeimat infot, ilma, et peaks keelemudeleid uuesti treenima. 
 
RAG süsteemi osaks võiks olla andmebaas, kus on dokumendid (tekst, pildid, videod) ning iga dokumendiga on seotud n‑mõõtmeline vektor (embedding), mis seda dokumenti iseloomustab. Sõltuvalt kasutatavast mudelist võib n olla mitusada või isegi mitu tuhat. Üldiselt, mida suurem n, seda täpsem tulemus. Vektorite moodustamiseks kasutatakse transformerit, mis teisendab muutuva pikkusega sisendi fikseeritud pikkusega vektoriks. Loodud vektor on hulk ujukomaarve, mis ei ütle inimkasutajale midagi.  Oracle OCI nimetab sellist andmebaasi vektorandmebaasiks. Etteantud andmete alusel vektori arvutamise teenust pakuvad erinevad tehisaru arendavad ettevõtted. Nende vektorite omavaheline võrdlemine leiab väärtuste semantilist sarnasuse – mida sarnasemad väärtused, seda sarnasemad vektorid. Seda saab kasutada otsinguks, klasterdamiseks, soovitamiseks, anomaaliate tuvastamiseks, mitmekesisuse mõõtmiseks ja klassifitseerimiseks. 
 
RAG süsteem võtab kasutaja päringu, laseb selle põhjal (mõnel välisel teenusel) arvutada vektori, leiab selle vektori alusel oma andmebaasist päringule kõige sarnasemad (päringu jaoks kõige olulisemad) dokumendid, lisab need kasutaja päringule ning algatab selle alusel vastuse genereerimise. Kuna andmebaasisüsteemi poolt vektori ükshaaval kõigi ülejäänud vektoritega võrdlemine kõige lähedasemate vastete leidmiseks võib võtta liiga palju aega, siis kasutatakse ka optimeeritud algoritme, mis leiavad "piisavalt lühikese ajaga“ "piisavalt hea vastuse". Nende algoritmide kasutamise eelduseks on, et andmebaasis on vektoritele loodud spetsiaalne indeks.

RAGi kasutava süsteemi näiteks on teadusartiklite kokkuvõtete andmebaas Scopus, mille tehisaru‑põhine funktsionaalsus (Scopus AI) võimaldab kasutajal esitada inimkeeles küsimusi, millele genereeritakse teadusartiklite põhjal neid kokkuvõttev vastus. Selles kokkuvõttes on viited allikatele, mille põhjal vastus koostati.

Graph Retrieval Augmented Generation
 
Valdkonna teadmiste graafis (knowledge graph) esitatakse valdkonna mõisted ja nende vahelised seosed – mõisted on graafi tipud ja mõistete seosed on graafi kaared. Rathle (2024) argumenteerib selle poolt, et vektorid ei pruugi olla päringule vastava konteksti otsimisel piisavad ning lisaks vektoritele võiks otsida sobivaid seotud dokumente ka teadmiste graafi (knowledge graph) kasutades. Sellist lähenemist võiks nimetada GraphRAG - graafi lugemisega täiendatud genereerimine. Rathle (2024) märgib, et stringide e sõnede (strings) töötlemise asemel on parema tulemuse jaoks vaja töödelda asju (things) ning graaf on viis kuidas "asju" kirjeldada.
 
Autori hinnangul oleks graafipõhised andmebaasid sellise süsteemi loomiseks justkui loodud. Programm moodustaks valdkonna kohta konteksti pakkuvate dokumentide alusel teadmiste graafi, mis salvestatakse graafipõhisesse andmebaasi. Sinna salvestatakse ka dokumente iseloomustavad vektorid. GraphRAG süsteem kasutaks seda andmebaasi, et anda suurele keelemudelile ette kasutaja päringule vastamiseks vajalikku kontekstteavet. Teadmiste graaf on kombinatsioon leksikaalsest graafist ja valdkonna graafist. Leksikaalne graaf esitab dokumendi struktuuri elemente ja nende seoseid ning selle koostamine on lihtne. Valdkonna graaf esitab dokumendi käsitletavas sisus esinevaid mõisteid ja nende seoseid. Neo4j (graafipõhine andmebaasisüsteem) pakub selleks tööriista Neo4j Knowledge Graph Builder. SQL‑andmebaasis olevate struktureeritud andmete importimiseks saab kasutada Neo4j Data Importer töövahendit.
 
Rathle (2024) toob välja GraphRAG erinevaid eelised ainult vektoreid kasutava RAGi ees.
  • Teadmiste graafide sellisel viisil kasutamine võimaldab anda kasutajate päringutele täpsemaid, täielikumaid ja seega ka kasulikumaid vastuseid. Rathle viitab erinevatele uuringutele, mis seda väidet kinnitavad. 
  • Graaf on arusaadav nii inimesele kui masinale. Süsteemi kasutaja saab uurida dokumentide alusel moodustatud graafi ning saab selle kaudu ette parema pildi andmetest ja oskab seega ka süsteemi antavaid vastuseid teistele paremini selgitada.  Dokumentide vektorite uurimine (iga vektor on suur hulk ujukomaarve) sellist pilti kindlasti ei anna. 
  • Graafis olevate viitade kaudu saab liikuda tagasi vigade algpõhjusteni. 
  • Graafi andmebaasis jagatavate õiguste kaudu (milliste tippude ja kaarte andmeid on konkreetsel kasutajal lubatud lugeda) saab reguleerida seda, milline info antakse suurele keelemudelile sisendiks. Juurdepääs andmetele sõltub kasutaja rollist. Näiteks, kui päringu teeb arsti rollis kasutaja, siis  keelemudeli sisendiks lähevad ka patsiendi diagnoosi andmed, kuid kui päringu teeb klienditeenindaja, siis ei lähe.
 
Kokkuvõttes saab öelda, et Neo4j pakub graafiliste kasutajaliideste kaudu võimaluse dokumentide või SQL‑andmebaasides olevate andmete importimiseks, nende põhjal graafi genereerimiseks ning siis graafi vaatamiseks. See on kasulik funktsionaalsus isegi siis, kui ei hakata GraphRAG süsteemi realiseerima.
 
Andmebaasisüsteemide võimalusi
 
Andmebaasisüsteemid pakuvad vahendeid tehisaru kasutavate süsteemide, sh RAG süsteemide, hõlpsamaks realiseerimiseks. 

Leidub spetsiifiliselt vektorite haldamiseks mõeldud andmebaasisüsteeme, kuid ka  olemasolevaid üldotstarbelisi andmebaasisüsteeme saab selleks otstarbeks kohandada. Näiteks võivad SQL‑andmebaasisüsteemid pakkuda vektori andmetüüpi, mida saab kasutada tabeli veeru tüübina. PostgreSQLis tuleb selle kasutuselevõtuks installeerida laiendus pgvector (Jelinek, 2024). Seda tüüpi veergudele saab otsingute kiirendamiseks luua spetsiaalsed indeksid.  Oracles on oodata sellise tüübi lisandumist versiooni 23.4ai (Curtis, 2024). Näiteks OpenAI pakub rakendusliidest, et arvutada tekstilise väärtuse põhjal välja seda iseloomustav n‑mõõtmeline vektor. Jelinek (2024) esitab koodinäite, kuidas neid vektoreid PostgreSQL andmebaasi laadida.

Sewrathan et al. (2024) kirjutab veel kahest PostgreSQL laiendusest – pgai ja pgvectorscale. pgvectorscale parandab võrreldes laiendusega pgvector vektorite kasutamise jõudlust ning skaleeritavust. pgvector on kirjutatud C ja pgvectorscale on kirjutatud Rust keeles. pgvectorscale lisab StreamingDiskANN tüüpi indeksi. pgai muudab vektorite kasutamisel põhinevate süsteemide loomise lihtsamaks. Esimeses versioonis saab OpenAI poolt arvutatavaid vektoreid laadida otse andmebaasis, ilma, et peaks selle jaoks kirjutama eraldi andmebaasivälise programmi. Samuti saab otse andmebaasist kasutada OpenAI Chat Completion rakendusliidest, mis on mõeldud vestlusrobotite ning virtuaalsete assistentide loomiseks.

Momijan (2024) demonstreerib PostgreSQLi põhjal masinõppe algoritmi realiseerimist. Treeningandmete ja kaalude registreerimiseks luuakse tabelid. Masinõppe algoritmi realiseerimiseks luuakse funktsioone (plperl protseduurses keeles), mida kasutatakse päringutes.
 
Näiteks selle kohta, kuidas andmebaasisüsteemi on sisseehitatud tehisaru süsteemide loomiseks vajalikud võimalused, on Oracle viimastesse põlvkondadesse lisandunud masinõppe tugi (In-database machine learning)
 
Veel üheks näiteks on Oracle 23ai lisandunud Select AI funktsionaalsus (Gubar, 2023 ja 2024), mis võimaldab esitada Oracle Autonomous Database pilvepõhise andmebaasi suhtes päringuid kasutades loomulikku keelt (inimkeelt), kusjuures võib ka kasutada teisi keeli kui inglise keel. Süsteem kasutab suurt keelemudelit, mis moodustab kasutaja inimkeelse päringu põhjal SQL lause. Süsteemiga saab pidada vestlust (esitada jätkuküsimusi), mis tähendab, et süsteem oskab arvestada eelnevalt küsitud küsimustega. Muutmaks vestlussüsteemide loomine arendajatele võimalikult lihtsaks on täiendatud SQL keelt. Päringu vastus on SQL tabel. Oracle SQL toetab nüüd lauset kujul.
 
SELECT AI [täpsustus, mida tagastada]
Inimkeelne küsimus;
 
Näide:
 
SELECT AI 
Millised on 5 kõige suurema ostude arvuga kaupa, mis tulid turule peale 2020. aastat;
 
[täpsustus, mida tagastada]
  • chat – ära küsi andmeid andmebaasist, vaid lase suurel keelemudelil vastus genereerida.
  • narrate – genereeri andmete põhjal sõnaline vastus.
  • showsql – näita genereeritud SQL lauset.
  • runsql – käivita genereeritud SQL lause (vaikimisi).
 
Sellist SQL lauset võib näiteks käivitada SQL Developeris või luua selle põhjal  Oracle APEX veebirakendus.
 
Süsteem on loodud sellisena, et toetada erinevaid suuri keelemudeleid ning kasutaja saab valida, millist nendest kasutada.
 
Funktsionaalsuse kasutamiseks tuleb paketis DBMS_CLOUD_AI oleva protseduuri create_profile abil kirjeldada profiil, kus määratakse ära AI pakkuja, suur keelemudel ning see, kas peetakse vestlust. Profiili rakendamiseks sessiooni käigus tuleb käivitada paketis DBMS_CLOUD_AI olev protseduur set_profile.
 
PostgreSQLi maailmas on näiteks avatud lähtekoodiga pgml laiendus, mille andmebaasi lisamisel tekivad sinna erinevaid tehisaru aspekte realiseerivad funktsioonid. See on osa tasulisest pilvepõhisest PostgresML platvormist, mis põhineb PostgreSQL andmebaasisüsteemil. PostgresML realiseerib andmebaasisisese masinõppe (In-database machine learning).
 
pgml lisatavad funktsioonid võimaldavad teha masinõpet ja kasutada suuri keelemudeleid. Suurte keelemudelitega seotud funktsioonid:
  • chunk – dokumendi tükeldamine osadeks.
  • embed – vektori genereerimine etteantud teksti alusel.
  • transform – teksti genereerimine suure keelemudeli poolt. Integratsioon HuggingFace keskkonnaga, et sealt mudeleid alla laadida. See keskkond pakub suure hulga eeltreenitud mudeleid.
  • transform_stream – teksti genereerimine suure keelemudeli poolt ning tulemuse väljastamine voogedastusena, portsude kaupa.
  • tune – peenhäälestamine.
 
Masinõppega seotud funktsioonid:
  • train – mudeli treenimine (mudeli saab luua erinevate regressiooni, klassifitseerimise ja klasterdamise algoritmide abil).
  • predict – ennustamine (kasutamine).
  • deploy – rakendamine.
  • load_dataset – andmete laadimine.
 
Teiste sõnadega ei pea masinõppeks või teksti genereerimiseks andmeid kuhugi liigutama ning selle algatamiseks piisab SELECT lausete käivitamisest.
 
Tehisaru andmebaasisüsteemi teenistuses
 
Tehisaru kasutamine andmebaasisüsteemi enese ülesannete täitmiseks on kasutusel ise hakkamasaavate andmebaasisüsteemide korral nagu Oracle Autonomous Database. Selline süsteem võiks õppida (kasutada masinõpet) süsteemi toimimise põhjal. Scopus AI genereeritud kokkuvõtte kohaselt võivad sellised süsteemid kasutada masinõpet erinevate ülesannete jaoks.
  • Töökoormuse prognoosimine: masinõppe mudelid ennustavad tulevast töökoormust, võimaldades andmebaasisüsteemil ressursside kasutust ettevalmistada ja optimeerida.
  • Käitumise modelleerimine: masinõpet kasutatakse, et ennustada süsteemi käitumist eri konfiguratsioonide ja töökoormuste korral. See aitab hinnata võimalike muudatuste mõju ilma neid otseselt läbi tegemata (läbitegemine võib olla kallis).
  • Meetmete planeerimine: masinõppe algoritmid otsustavad mineviku tulemuslikkuse andmete ja prognoositud tulemuste põhjal, millised on parimad tegevused näiteks indeksite valiku ja päringute optimeerimise juures.
  • Konfiguratsiooni häälestamine: masinõpet kasutatakse süsteemi juhtparameetrite väärtuste iseseisvaks muutmiseks.
  • Enesekontroll ja diagnoosimine: masinõpet kasutatakse süsteemi jõudluse jälgimiseks, kõrvalekallete tuvastamiseks ja probleemide automaatseks diagnoosimiseks, tagamaks süsteemi tõhususe ning stabiilsuse.
 
Geneetiline algoritm on Darwini evolutsiooniteoorial ja loomulikul valikul põhinev optimeerimismeetod. Seda kasutatakse selliste probleemide lahendamiseks, kus optimaalset lahendust ei ole tavapäraste meetoditega lihtne leida. Geneetilisi algoritme peetakse tehisaru algoritmideks. PostgreSQL kasutab geneetilist algoritmi kõige sobivama tabelite ühendamise järjekorra leidmiseks, selleks, et suure hulga tabelite ühendamisel ei peaks kõikvõimalikke erinevaid ühendamise järjekordi läbi kaaluma. Kandidaatide (ühendamise järjekordade) sobivuse hindamiseks arvutatakse ühendamise maksumus. "Geneetiline algoritm heidab kõrvale kõige vähem sobivad kandidaadid. Seejärel luuakse uued kandidaadid, kombineerides sobivamate kandidaatide geene – st  kasutades juhuslikult valitud osi teadaolevatest madala kuluga ühendamisjärjestustest, et luua uusi järjestusi, mida saab kaaluda. Seda protsessi korratakse, kuni on kaalutud etteantud arv ühendamisjärjestusi; seejärel kasutatakse otsingu käigus leitud parimat järjestust lõpliku plaani koostamiseks." (PostgreSQL)

Andmebaasiga seotud ülesannete lahendamine

Näiteid

Retrieval Augmented Generation, RAG

Retrieval

Scopus AI

Scopus

Hinda postitust:

Keskmine hinne : Pole veel hinnanguid!