Skip to content
22.04.24Data ja älykäs liiketoimintaÄlykäs automaatio

Kurkistus hypetetyn tekoälytermin konepellin alle – Miten RAG toimii ja mitä sen hyödyntäminen vaatii?

Samuli Reinikainen
22.04.2024 | RAG (Retrieval Augmented Generation) on tekoälytekniikka, jonka avulla generatiivisen tekoälyn tuotoksia voidaan rikastaa hakemalla ja hyödyntämällä tietoa eri lähteistä – esimerkiksi yrityksen omista tietokannoista. Tämä mahdollistaa tarkemman ja ajantasaisemman tekstin generoimisen sekä monia automaatiomahdollisuuksia liiketoimintaprosesseissa. Efiman Senior Machine Learning Engineer Samuli Reinikainen avaa blogissaan, minkälaisia teknisiä yksityiskohtia RAG-toteutuksen rakentamisessa täytyy ottaa huomioon.

RAG rikastaa generatiivisen tekoälyn vastauksia tiedonhaulla

Tekstin generoiminen suurella kielimallilla perustuu neuroverkkoon, joka on koulutettu valtavilla määrillä tekstiä – kuten Wikipedia-artikkeleita, kirjoja, uutisia ja sosiaalisen median viestejä. Tämän esikoulutuksen aikana neuroverkon painoihin (eli kielimallin ns. parametriseen muistiin) tallentuu hyödyllistä tietoa kielestä, sen rakenteesta sekä tekstien taustalla olevasta todellisuudesta. Muodostunutta yleistä ymmärrystä ja päättelykykyä voidaan hyödyntää uuden tekstin generoimiseen, esimerkiksi vastauksena käyttäjän esittämään kysymykseen. Kielimallin parametriseen muistiin tallentuneet tiedot ovat kuitenkin luonteeltaan todennäköisyyksiin pohjautuvia ja siksi epävarmoja. Tämä johtaa hallusinaatioiksi kutsuttuihin tilanteisiin, joissa kielimalli generoi uskottavan kuuloista sisältöä, joka ei ole kuitenkaan faktuaalista. 

RAG (Retrieval Augmented Generation) on menetelmä, jossa kielimalliin yhdistetään tiedonhakujärjestelmä. Kun RAG-järjestelmän kielimallille esitetään kysymys, se hakee ensin tiedonhakujärjestelmän avulla tietoa määritellystä lähteestä ja generoi sitten vastauksensa löydettyjen tietojen pohjalta. Näin kielimallin ei tarvitse luottaa ainoastaan parametriseen muistiinsa, vaan se voi hyödyntää suoraan tiedonhakujärjestelmästä saatavilla olevaa tietoa.

RAG:n hyötyjä voidaan havainnollistaa vertailemalla kahden tekoälypalvelun, ChatGPT:n ja Microsoft Copilotin, tuottamia vastauksia:
 Untitled design (9)-2
ChatGPT:n ja Microsoft Copilotin vastaukset samaan kysymykseen

Kuvan esimerkissä ChatGPT myöntää, ettei sillä ei siis ole pääsyä ajantasaiseen informaatioon Hervannan väkiluvusta vuonna 2023. Tässä käytetyn ChatGPT-version vastaus pohjautuu ainoastaan kielimallin parametriseen muistiin tallentuneeseen tietoon. Microsoft Copilot sen sijaan antaa tarkemman vastauksen. Microsoft Copilot on esimerkki RAG-teknologiasta, jossa generatiivinen tekoäly hyödyntää ulkopuolista tietolähdettä vastaustensa tuottamiseen. Tässä tapauksessa Copilotin tietolähteenä toimii Bing-hakukone, jolle generatiivinen tekoäly muotoilee kyselyn käyttäjän kysymyksen pohjalta. Bing palauttaa kyselyn perusteella enemmän tai vähemmän relevantteja hakutuloksia, joiden pohjalta generatiivinen tekoäly muotoilee vastauksen käyttäjälle – lähteineen kaikkineen. 

RAG-teknologian eli tiedonhaun hyöty vastauksen generoinnissa on tässä esimerkissä ilmeinen: se mahdollistaa ajantasaisen tiedon hyödyntämisen vastauksissa, parantaen vastausten tarkkuutta ja luotettavuutta.

Vektorihaku mahdollistaa oikean tiedon tunnistamisen ja palauttamisen generatiiviselle tekoälylle

Kirjoitin aiemmassa blogissani siitä, miten RAG:n hyödyntäminen ei rajoitu vain internetin hakukoneiden hyödyntämiseen. Tietolähteenä voidaan hyödyntää myös yrityksen omaa dataa, kuten organisaation omia nettisivuja, pdf-dokumentteja, rakenteellisia ja ei-rakenteellisia tietokantoja, sähköposteja, Teams-keskusteluja ja jatkossa yhä enenevissä määrin myös kuvia, ääntä ja videoita. Näin RAG-sovellus voidaan valjastaa tuottamaan räätälöityjä ja relevantteja vastauksia liiketoiminnan hyötykäyttöön.

Mutta miten tiedonhaku toteutetaan käytännössä, jos generatiivinen tekoäly ei voi hyödyntää valmista hakukonetta? Monissa tapauksissa, joissa halutaan hyödyntää ei-rakenteellista dataa, eli vapaata tekstiä esimerkiksi pdf-dokumenteista tai verkkosivuilta, suoraviivainen semanttinen haku ajaa asian. Semanttinen haku viittaa informaation hakemiseen tekstin merkityksen pohjalta avainsanojen tai muunlaisen kovakoodatun indeksoinnin sijaan. Semanttisen haun avulla RAG-järjestelmä voi hakea kysymykseen kannalta semanttisesti relevanttia tietoa vapaamuotoisen tekstin joukosta, vaikkei kysymys ja haettu tieto sisältäisi yhtään jaettua termiä tai avainsanaa. Tekstidataan pohjautuva semanttinen haku voidaan toteuttaa niin kutsutulla vektorihaulla:

Vektorihaku

Vektorihaku on tapa löytää semanttisesti samankaltaisia objekteja hyödyntäen koneoppimista ja lähimmän naapurin algoritmeja. Koneoppimismalli koulutetaan muuttamaan objektit vektoreiksi siten, että samankaltaiset objektit saavat samankaltaiset vektoriesitykset. Vektorit ovat monipuolisia matemaattisia olioita, mutta tässä tilanteessa on helpointa mieltää vektori listaksi numeroita, aivan kuin sarake Excelissä. Tekstin tapauksessa vektorisoinnin suorittava koneoppimismalli on tietynlainen kielimalli, joka on koulutettu juuri kyseiseen samankaltaisuuden tunnistamistehtävään. Syntyneistä vektoreista käytetään yleisesti termiä ”text embedding”.
 
Havainnollistetaan tätä esimerkin kautta. Tarkastellaan lauseita ”Hervanta sijaitsee Tampereella”, ”Pasila on Helsingin kaupunginosa” ja ”RAG on kätevä työkalu”. Koneoppimismalli voisi antaa lauseille vektoriesitykset [1.0, 2.0], [1.0, 3.0] ja [4.0, 1.0], jolloin kaksi kaupunginosiin liittyvää lausetta saa samankaltaisemmat vektorit kuin kumpikaan kaupunginosalauseista ja RAG-lause. Vektorien samankaltaisuutta voidaan mitata useilla eri mittareilla, joista yleisin on nimeltään kosinietäisyys. Siinä vektorit hahmotetaan moniulotteisen avaruuden janoina, joiden välinen kulma voidaan laskea. Kulman kosinin suuruus kuvaa vektorien samankaltaisuutta. 

Blogien kuvituskuvat (5)

Näin syntyy siis embedding-vektorit, joiden pohjalta semanttinen haku voidaan toteuttaa. Todellisessa tilanteessa vektoroitavat tekstinpätkät voivat olla paljon pidempiä ja niistä saatavat vektorit ovat pituudeltaan satoja tai jopa tuhansia.
 
Vektoreiden muodostamisen jälkeen vektorihaku etenee suoraviivaisesti: 

1.    Tekstinpätkä, jolla semanttinen haku halutaan toteuttaa, muutetaan vektoriksi. 
2.    Saatua vektoria vertaillaan aiemmin muodostettuihin vektoreihin kosinietäisyyden avulla. 
3.    Samankaltaisimmat vektorit etsitään ja niitä vastaavat tekstit palautetaan hakutuloksina. 

Jos vertailtavia vektoreita on paljon, hakua voidaan nopeuttaa käyttämällä lähimmän naapurin algoritmeja, jotka löytävät samankaltaisia vektoreita ilman, että joka ikistä kosinietäisyyttä tarvitsee laskea erikseen. Useissa vektorihakuun suunnitteluissa valmiissa vektoritietokannoissa on tällainen toiminnallisuus sisäänrakennettuna.

Vektorihaun optimoinnin tärkeimmät osa-alueet

Vektorihaun hyödyntäminen RAG-järjestelmässä on mahdollista toteuttaa suhteellisen suoraviivaisesti, mutta parhaan mahdollisen tuloksen saamiseksi on huomioitava monia yksityiskohtia. Kyseessä on yksi niistä teknologioista, jotka on helppo saada toimimaan kohtalaisen hyvin, mutta erinomaiseen suorituskykyyn tarvitaan asiantuntemusta ja asioiden hienosäätöä.

Blogien kuvituskuvat (4)

Yksinkertaisimmillaan prosessi etenee niin, että halutun informaation sisältävät tekstit muunnetaan vektoreiksi ja tallennetaan vektorivarastoon. Käyttäjän esittäessä kielimallille kysymyksen, kysymys muutetaan vektoriksi ja vektorihaun tulokset sisällytetään kielimallin kehotteeseen. Tässä lähestymistavassa on oletuksena se, että kysymys ja siihen vastaamisen kannalta relevantti materiaali ovat keskenään semanttisesti samankaltaisia ja että vektorisoinnin hoitava tekoäly kykenee tunnistamaan tämän samankaltaisuuden. Tämä oletus ei kuitenkaan kaikissa tapauksissa pidä paikkaansa, jolloin toimivaan ratkaisuun tarvitaan hiukan lisää toimenpiteitä. 

Vektorihakuun pohjautuvan RAG-sovelluksen eri komponenttien optimoinnista voisi varmaan kirjoittaa kirjan, mutta tässä olennaisimpia asioita, jotka tulisi ottaa huomioon:

  1. Dokumenttien jaottelu ja esikäsittely:
    • Lähdetekstien tulee muodostaa semanttisesti järkeviä kokonaisuuksia: jos yhteen vektoriin sisällytetään vaikkapa 10 sivun pdf-tiedosto, vektorin on hankala edustaa kaikkia dokumentin aiheita tavalla, joka mahdollistaisi onnistuneen vektorihaun. Sen vuoksi pitkien dokumenttien jakaminen pienempiin osiin on tärkeää vektorihaun onnistumisen kannalta.
    • Esikäsittely voi parantaa vektoreiden laatua muun muassa tiivistämällä tai uudelleenjärjestelemällä lähdetekstiä.

  2. Kysymyksen esikäsittely:
    • Hakukyselyn tarkka muotoilu voi parantaa vektorihaun tuloksia.
    • Kysymyksiä voidaan täydentää erilaisilla sisällöillä parempien tulosten saavuttamiseksi.

  3. Kehotteiden optimointi:
    • Kehotteiden, eli kielimallin ohjeiden, kehittäminen parantaa RAG-järjestelmän toimivuutta ja luotettavuutta.
    • RAG-järjestelmässä kehotteita voi olla ainakin kysymysten ja dokumenttien esikäsittelyssä sekä vastauksen luomisen yhteydessä.

  4. Hakutulosten uudelleenjärjestely:
    • Jos relevantteja hakutuloksia on runsaasti, joskus kaikista paras hakuosuma voi jäädä pois hakutuloksista.
    • Ongelmaa voidaan korjata käyttämällä erillistä reranker-kielimallia hakutulosten järjestämiseen ja priorisointiin.

RAG:n hyödyntäminen ohjaa laadukkaampaan datanhallintaan

Mainittujen kehitysaihioiden lisäksi RAG-järjestelmän ylläpitoon kuuluu olennaisena osana datan ylläpitäminen. Tekoälyn vastausten pohjautuessa suoraan esimerkiksi organisaation omiin dokumentteihin, on niiden ylläpito ja jatkuva päivittäminen äärimmäisen tärkeää RAG-järjestelmän hyödyllisyyden kannalta. Tiedon saattaminen tekoälylle helposti pureksittavaan muotoon on muutenkin projekti, joka ei varmasti mene hukkaan teknologian kehittyessä yhä lisää. Hyvästä tietoarkkitehtuurista ja laadukkaasta datasta tulee yhä suurempi kilpailuetu, kun tekoälyn kyky hyödyntää sitä kehittyy.

Lyhyellä tähtäimellä RAG tarjoaa erinomaisen lähestymistavan oman datan sisällyttämiseen generatiivisen tekoälyn vastauksiin ja sillä voidaan saada konkreettisia hyötyjä monilla liiketoiminnan osa-alueilla, kuten asiakaspalvelussa, tuotetiedonhallinnassa ja tukitoiminnoissa, mitä kuvasin tarkemmin aiemmassa blogissani. RAG voidaankin nähdä ensimmäisenä iteraationa autonomisista tekoälyratkaisuista, jotka suorittavat itsenäistä suunnittelua ja tiedonhakua, hyödyntävät työkaluja ja ratkaisevat monipuolisia digitaalisia tehtäviä organisaation sisällä.

Pitkällä tähtäimellä RAG:n soveltamisen arvo syntyy lisäksi siitä, että järjestelmän kehittäminen ja käyttöönotto ohjaavat organisaation ajattelutapaa ja datanhallintaa suuntaan, jossa tieto on optimoitu ihmisten lisäksi myös tekoälyn käytettäväksi. Tämä ajattelutavan muutos on edessä jokaisella toimijalla, joka haluaa saada maksimaaliset hyödyt irti tekoälyn kehityksestä tulevina vuosina.