Kielimallien hallusinoimisen ominaisuutta voidaan huomattavasti säätää ja tarkentaa kohti todellisempaa, jopa faktuaalista tietoa. Tämä onnistuu RAG-ohjelman (Retrieval Augmented Generation) avulla. Valjastettaessa RAG-ohjelma LMM-kielimallin rinnalle avuksi tapahtuu tiedonhaun tuloksissa iso askel kohti luotettavampaa tiedonlouhintaa. Prosessissa kielimalli hakee ensin RAG tiedonhakujärjestelmän kautta vastausta esitettyyn kysymykseen ja vasta näiden tulosten pohjalta tekoäly alkaa tuottamaan kielellistä vastausta. RAG ikään kuin seuloo tiedot kielimallille. Samalla tekoälypalvelu voi tuottaa näkyville lähteet, joihin sen antamat vastaukset perustuvat.
Oleellista tässä
toimintamallissa on se, että tällöin tekoäly ei hallusinoi eli olemme tällöin
vapaan verkon ja avointen tietolähteiden ja kielimallin lisäksi hakukoneen
kykyjen risteyksessä, emme pelkästään kielimallin varassa. Ja asia vain
tarkentuu, jos olemme rajallisemman, esimerkiksi jonkun yrityksen oman
datavaraston äärellä. RAG ohjelman ja hallusinoimisen ulottuvuudet on kuitenkin
hyvin kompleksinen ilmiö. Aaron Tay avaa RAG ohjelmien tuotosten ja faktuaalisuuden suhdetta omassa blogissaan, mistä käy hyvin ilmi, että asia vaatii paljon lisätutkimusta (Tay 2024).
Akateemisessa maailmassa tämänkaltaisen sovelluksen käyttöönotto suljettujen lisensoitujen e-aineistojen ja kirjastomaailman oman metadatan äärellä voisi olla hyvinkin käyttäjäystävällistä ja toimivaa. Olisihan se hienoa saada tarkkoja vastauksia ja kielellisesti laadukasta kommunikointia koneen kanssa. (Mutta, aina se mutta (!)). Tämäkään ei poista sitä, että tekoälylle asetetun kehotteen (prompt) tulee olla mahdollisimman pätevä. Eli samat tiedonhaun semanttiset lainalaisuudet vaikuttavat yhä taustalla. Myöskään RAG ei toistaiseksi takaa faktuaalisuutta (Tay 2024).
Perinteinen kirjastotietokantojen hakuprosessi etenee semanttisen vastaavuuden perusteella eli haluttua tietoa louhitaan samanlaisten nollia ja ykkösiä sisältävän merkkijonon vastaavuuden vertaamiseen perustuen. Tätä voidaan laajentaa tai supistaa tiettyjen erityismerkkien avulla (jokerimerkki, läheisyysindikaattorit jne.) ja sitten myös yhdistellä Boolen operaattoreiden avulla näitä haettavia merkkijonoja.
Mitä on RAG – miten se toimii?
Retrieval-augmented generation (RAG) on Koneoppimisen alle dokumenttien hakemiseen luokiteltu systeemi. LMM malleissa on yleisenä ongelmana niiden omien sisäisten tietokantojen koko ja niiden sisältämien erilaisen informaation laajuus. Mikäli kuitenkin halutaan keskittyä tarkemmin suppeampaan osaamisalueeseen tarvitaan jonkinlainen apusysteemi.
Meta esitteli vuonna 2020 ratkaisuksi RAG-metodin (Meta RAG blog 3). Metan mallissa vektorimallinen tietokanta valjastetaan esitellyn systeemin avuksi, ja RAG hakee kyselyä (kehote, prompt) vastaavia dokumentteja ja tarjoilee ne RAG systeemille/mallille, joka suodattaa ja asettaa ne LMM mallille saataville. Näin LMM kielimalli voi vertailla näitä tuloksia RAG:n tarjoilemiin dokumentteihin ja korjata vastauksia. (Meta, 2020.)
Metan esittelemän uuden mallin ero muihin malleihin on RAG:n kyky käyttää syötettyä kyselyä relevanttien dokumenttien hakemiseen. Malli on perusolemukseltaan sequence2sequence tyyppinen eli se ottaa yhden sekvenssin sisäänsä ja tulostaa ulos toisen vastaavan. (Pulli, 2024.)
Esimerkiksi kysymys: ”Mikä on maailman suurin lentokone”, jolloin vektorihaun prosessin samankaltaisuushaku nostaa (mahdollisesti) ylös/esiin dokumentteja aiheesta ”lentokonetekniikka” ja vaikka ”lentokoneenrakentaminen” ja ”ilmailunhistoria”. Nämä esiin nostetut syötetään RAG:iin, jonka käytössä on oma (parametrinen muisti, siis mallien parametrien tietoihin tallennettu tieto) ja vain sen omassa tietomuistissa oleva tieto (parametriton muisti). Nämä täydentävät toisiaan vuorovaikutteisesti. RAG on siis jonkinlainen fuusiomoottori, joka mahdollistaa dokumenttien tiedon integraation, prosessissa RAG:lla on eräänlainen metodi tuottaa eräänlaisia ennustuspisteitä informaation vahvuudelle ja virheilmoitukset syötetään takaisin hakumekanismiin. Lopputuloksena on koko prosessin huima nopeutuminen.(Meta, 2020; Pulli, 2024.)
RAG:n ja LMM taustalla oleva vektorihaku perustuu merkkijonojen semanttiseen merkitysten vertaavuuksien pohjalta tapahtuvaan vertailevaan etsimiseen. Prosessi on laajennettu matemaattisella mallintamisella vektorihaku malliseksi. Vektorihaussa koneoppimisen opetetut algoritmit kykenevät tunnistamaan semanttista vastaavuutta laajemmin merkkijonojen, tekstien ja merkkien korrelaatioita, jolloin objektit saavat vektoriesityksen. Syntyneitä vektoreista käytetään käsitettä upottamismalli (text embedding). Tässä mallin prosessissa yhtälaiset tai merkitykseltään lähellä toisiaan olevat semanttiset merkkijonot ovat matematiikan euklidisessa vektoriavaruudessa vektoriena toisiaan lähempänä.
Reinikaisen (2023) mukaan prosessi toimii karkeasti yksinkertaistettuna näin:
Ensin ohjelma muodostaa saatavilla olevasta informaatiosta vektoreita (pidempiä merkkijonoja), jonka 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.
Näiden 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 (Reinikainen 2023).
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 (Reinikainen 2023).
Heuristisena mallina, muistin virkistämiseksi: muistele koulun matematiikan tunteja ja X-Y akselista vektoria. Piirrä mielessäsi kaksi origosta lähtevää janaa, ja pohdi näiden etäisyyttä toisiinsa. Sitä tässä vertaillaan.
Reinikainen (2023) esittää, että prosessi etenee siten, että halutun informaation sisältävät tekstit muunnetaan vektoreiksi ja tallennetaan vektorivarastoon. Käyttäjän esittäessä kielimallille kysymyksen (kehote, prompt), eli kysymys muutetaan vektoriksi ja vektorihaun tulokset sisällytetään tai siirretää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. Jos etäisyys kasvaa liian mittavaksi, alkaa laatu heiketä, jolloin toimivaan ratkaisuun tarvitaan hiukan lisää toimenpiteitä. Tässäkin on yhä tietoa etsivän semanttisella kyvykkyydellä merkitystä.
Huomioitavia seikkoja: vektorihaku heikkenee laajoissa tietomassoissa, joten pilko aineistoja pienemmiksi. Tämän saattaa huomata esim. DeepL tai MOT kielenkääntäjää käytettäessä. Jolloin pitkä teksti heikkenee laadullisesti verrattuna lyhyempien lauseiden ja tekstin osien kääntämiseen.
Hakukysymysten tarkka muotoilu ja mahdolliset lisäaineistot parantavat lopputulosta.
Kehotteita kannattaa yrittää itse etukäteen optimoida.
Hakutulosten järjestelyn kautta voidaan edetä kohti parempaa eli jos relevantteja hakutuloksia on runsaasti, joskus kaikista paras hakuosuma voi jäädä pois hakutuloksista.
Ongelmaa voidaan
korjata käyttämällä erillistä reranker-kielimallia (uudelleen
järjestelymalli) hakutulosten järjestämiseen ja priorisointiin sekä myös erilaisia
tekstin upottamisen. Kilpailevia RAG-ohjelmia on useita ja tekoälyn
kehitystyö on tällä sektorilla melko kiihkeää. Toisinsanoen vektorihaun ja
kielimallin yhteistoiminnallista suhteiden käsittelyä ja järjestelyä on mahdollista
tehostaa ja lopputuloksena on parempi käyttäjäkokemus sekä hakutulosten
optimoituminen. (Desetty 2023; Reinikainen 2023; Toivanen 2024.)
Asiasta ja asian sudenkuopista lisää seuraavassa kirjoituksessa.
Tätä kirjoittaessa kuuntelin Masharik nimistä slovenialaista yhteyettä. @masharik
https://www.youtube.com/watch?v=nhuXmF3grTE
Lähteet:
Desetty, Ravi Theja. (2023). Boosting RAG: Picking the Best Embedding & Reranker models. https://www.llamaindex.ai/blog/boosting-rag-picking-the-best-embedding-reranker-models-42d079022e83
Meta AI blog. (2020). Retrieval Augmented Generation: Streamlining the creation of intelligent natural language processing models. https://ai.meta.com/blog/retrieval-augmented-generation-streamlining-the-creation-of-intelligent-natural-language-processing-models/
Pulli, Samu (2024). Suuret kielimallit pelinkehityksessä. https://www.theseus.fi/bitstream/handle/10024/860403/Pulli_Samu.pdf;jsessionid=D30496A5F15D21877A78F970CBAD0648?sequence=3
Reinikainen, Samuli. (2023). Kurkistus hypetetyn tekoälytermin konepellin alle – Miten RAG toimii ja mitä sen hyödyntäminen vaatii? https://www.itewiki.fi/p/kurkistus-hypetetyn-tekoalytermin-konepellin-alle-miten-rag-toimii-ja-mita-sen-hyodyntaminen-vaatii
Tay, Aaron. (2024). When is a Hallucination Not a Hallucination? The Role of Implicit Knowledge in RAG. http://musingsaboutlibrarianship.blogspot.com/
Toivanen, Rasmus. (2024). Evaluating Embedding & Reranker Models For Finnish. https://www.recordlydata.com/blog/evaluating-embedding-and-reranker-models-for-finnish
Lisälukemista euklidisten avaruuksien metriseen rakenteeseen liittyen:
Harso, M: Klemetti,J; Luosto, K. & Railo, J. (2013, 2017) Kerkko Luoston Geometria aiheisen luennon muistiinpanot. https://homepages.tuni.fi/kerkko.luosto/kurssit/geometria/situs.pdf