Retrieval augmented generation
Mi az a RAG?
Az LLM-ek világában alapvető kérdés/probléma, hogy mit „tud“ a modell. Nyilvánvalóan egy alapmodell önmagától legfeljebb annyit tudhat, ami a tanító adathalmazában található, és ismert, hogy sokszor ezt sem képes megfelelően visszaadni (pl. hallucinációk). Ugyanakkor bármilyen probléma LLM-mel való megoldása során alapvető elvárás, hogy minden releváns információt ismerjen a rendszer, és ez alapján döntsön. Ez egyfelől a modell további tanításával kezelhető, ugyanakkor ez rengeteg adatot kíván, költséges, nem túl dinamikus, és nem is garantált a teljesítményjavulás. A RAG erre mutat alternatívát.
A Retrieval Augmented Generation („visszakereséssel megtámogatott generálás“, továbbiakban RAG) egy olyan technika, amelynek segítségével egy LLM meglévő adathalmaz alapján képes pontos eredményeket generálni, anélkül, hogy az alapmodellen módosítani kellene. Tegyük fel tehát, hogy olyan kérdésre szeretnénk választ kapni a generatív modellünktől, aminek a megválaszolásához szükséges információn ő nem tanult (pl. saját dokumentum, Gránit Bankos friss információk, vagy bármilyen tartalom, ami az ő feltanítása utáni időszakban keletkezett). Ahelyett, hogy újra kellene tanítanunk egy válaszgenerálásra tökéletesen alkalmas, de tudásában hiányos modellt, odaadhatjuk neki a szükséges információkat, mint „tények“, ami alapján már tud válaszolni.
A RAG folyamata két fő komponensből áll: az információ-visszakereső és a generatív modell.
-
Bemenet megadása: Egy kérdés vagy kérést adunk meg a rendszer számára, amit a RAG modell fog kezelni.
-
Információ visszakeresés: Az első lépésben az információ-visszakereső modell keresést hajt végre a rendelkezésre álló tudásbázisokban, például adatbázisokban, weboldalakon vagy speciális dokumentációkon, annak érdekében, hogy releváns dokumentumokat, információkat találjon a megadott kérdéssel kapcsolatban.
-
Generáló modell: A generatív modell, amely gyakran egy nagy nyelvi modell (LLM), a visszakeresett információkat mint kontextus használja fel, hogy koherens és kontextusfüggő választ generáljon a bemeneti kérdésre.
-
Kimenet megfogalmazása: Az eredmény egy olyan válasz, amely nemcsak a nyers adatokat foglalja össze, hanem ezeket egyedi, jól összeállított, emberi nyelvhez hasonló mondatokban fogalmazza meg.
Ezzel a RAG lehetővé teszi, hogy az AI rendszer a legfrissebb és legrelevánsabb adatokat használja fel az aktuális válaszok előállításához, anélkül, hogy az alapmodellen módosítana. Ez a megközelítés különösen hasznos, amikor az LLM-ek statikus, előre betanított tudásával ellentétben friss, valós időben gyűjtött információkra van szükség. Lehetővé teszi, hogy a rendszerek gyorsan adaptálódjanak új információkhoz, és releváns, pontos válaszokat adjanak
Dokumentumfeldolgozás
Mint ahogy korábban említettük, a RAG egyik komponense az információ-visszakeresés. Mivel külső információforrásként elsődlegesen dokumentumokkal foglalkozunk, ennek kulcsfontosságú eleme a dokumentumfeldolgozás.
Szöveges információ
A jelenlegi működés elsődlegesen szöveges információkra épít, így az információról mindig feltesszük, hogy szöveges. Ugyanakkor mivel a jelenlegi modellek egészen jó multimodális képességekkel rendelkeznek, ez idővel változhat.
A dokumentumfeldolgozás alapvetően a következő feladatot értjük:
Dokumentumfeldolgozás
Adott: Dokumentumok egy halmaza és egy információkeresési módszer
Feladat: Tároljuk el a dokumentumhalmazt olyan formában, hogy azt a információkeresési módszer értelmezni tudja, és képes hatékonyan megtalálni benne az adott kérdéshez releváns dokumentumrészeket.
Ez a feladat igen általános, az esetek nagy részében viszont a következő speciális esetben gondolkozunk:
Dokumentumfeldolgozás szöveges visszakereséshez — Chunk-olás
Adott: Egy (elsődlegesen) szöveges dokumentum és egy visszakeresési módszer
Feladat: Bontsuk a dokumentumot jól kezelhető szöveges egységekre úgy, hogy a visszakeresési módszer képes hatékonyan megtalálni az adott kérdéshez releváns egységeket.
Az így létrehozott egységeket szokás „chunk“-oknak nevezni, a folyamat neve pedig „chunk-olás“.
A chunk-olási feladatot a legegyszerűbben a következő pipeline-nal lehet kezelni:
- Egy dokumentumot alakítsuk át egy előre meghatározott szöveges \(f\) formátumba (pl. \(\LaTeX\), markdown)
- Egy \(f\) formátumú dokumentumot vágjunk fel chunk-okra
Ilyen formában ez a feladat modularizáltan kezelhelhető. A mi megoldásunk is ilyen filozófia köré épült, ennek részletei megtalálhatók ITT.
Visszakeresési feladat
Maga a keresés témakörét az Információgyűjtés szekció tárgyalja. Abban picit eltérő nevezéktannal dolgozunk, amit itt visszakeresésnek hívunk, arra ott szövegkeresésként hivatkozunk.
Most rátérünk magának a visszakeresési feladatnak a definiálására, és néhány megoldási irányzatra. Először definiáljunk egy nagyon általános problémát.
Információkeresés
Adott: Egy feldolgozott információhalmaz és egy \(S\) keresési entitás.
Feladat: Keressük meg az \(S\) alapján releváns információt.
Ez a definíció nagyon ködös, így nem is teljesen világos, hogy miért van erre szükség. Ugyanakkor ha bármiféle keresésre ebben a formátumban gondolunk, akkor könnyebben tudjuk a rendszereket a keresési módszereket a helyükön kezelni. Vegyük például észre, hogy ez a definíció még azt sem köti meg, hogy a kimenetét milyen formában lehet értelmesen használni. Egy fokkal szűkebb, de RAG szempontjából igen hasznos definíció a következő.
Szöveges visszakeresés
Adott: Szöveges chunk-ok egy halmaza \(\mathcal{D}\), egy \(q\) kérdés, és \(C\) kérdést támogató segédinformációk („kontextus“).
Feladat: Keressük meg \(q\) és \(C\) segítségével azon \(\mathcal{D}\)-beli chunk-okat, melyek tartalmazzák a pontos válaszadáshoz szükséges információt.
Ez egy jóval körülírtabb feladat: megmondjuk a keresett információ jellegét („chunk“) és hogy az milyen formában lesz használva („válaszadás“).
Általános visszakeresési feladat
Ennek mintájára definiálható lenne az általános visszakeresési feladat. Ugyanakkor mivel jelenleg kizárólag szöveges dokumentumokkal dolgozunk, ettől eltekintünk.
Információkeresés vs. visszakeresés
A keresési módszerek kidolgozásánál és értelmezésénél érdemes figyelni arra, hogy az adott módszer a visszakeresési feladatot oldja-e meg, vagy egy másféle információkeresésre biztosít megoldást.
Az alábbiakban mutatunk néhány példát információkeresési (és specifikusan szöveges visszakeresési) módszerekre.
Szemantikus keresés
A szemantikus keresés algoritmikusan a legegyszerűbb szöveges visszakeresési módszer. Menete a következő:
-
Veszünk egy tetszőleges beágyazó algoritmust (ez általában egy LLM), és elkészítjük \(\mathcal{D}\) összes chunk-jának beágyazását (ezek valamilyen fix hosszú vektorok)
-
\(q\) kérdés esetén elkészítjük \(q\) beágyazását is, majd megkeressük a \(q\)-hoz legközelebbi beágyazásokhoz tartozó chunk-okat.
A szemantikus név arra utal, hogy a beágyazó algoritmusokat általában olyan módon alkotják meg, hogy két beágyazás akkor legyen közel, ha a nekik megfelelő szövegek is értelmileg, jelentésben is közel álltak egymáshoz.
Fontos megjegyezni, hogy a beágyazások közelsége az függ a beágyazó algoritmustól. Ugyanakkor jelenleg az elterjedtebb módszerek koszinusz hasonlóságot alkalmaznak, ez a különböző vektoradatbázisok esetén is implementálva van általában.
Általános visszakeresés
A szemantikus visszakeresés a multimodális beágyazási modellek terjedésével alkalmazható az általános visszakeresési feladatban is, a szöveges módszerhez hasonlóan.
Kulcsszavas keresés
A kulcsszavas keresés szintén egy szöveges visszakeresési módszer, ugyanakkor a szemantikus kereséssel ellentétben nem értelmez, nem jelentést keres. Nagy vonalakban a működés könnyen kikövetkeztethető az elnevezésből:
-
Megkeressük a kulcsszavakat \(\mathcal{D}\) összes chunk-jában
-
\(q\) kérdés esetén megkeressük \(q\)-ban is a kulcsszavakat, majd összehasonlítjuk ezeket a \(\mathcal{D}\)-ben szereplőkkel, és a legnagyobb átfedéssel rendelkezőket adjuk vissza
Ez az algoritmus egy jelentős lebutítása és ferdítése, mélyebb megértés érdekében ajánlott ellátogatni a TF-IDF és a Keyword Search szócikkekre.
Gráfkeresés
A gráfkeresés alapvetően nem egy módszer, hanem egy információkeresési gyűjtőfogalom. A legjobban talán úgy jellemezhető, hogy „bármilyen információkeresési módszer, mely egy gráfalapú adatbázisban keres“. Egy ilyen gráfadatbázist szokás „tudásgráfnak“ („knowledge graph“) nevezni.
Ennek fényében felírunk két tudásgráf szerkezetet, mely fogalmilag hasznos.
Az adatgráf (vagy példánygráf) olyan tudásgráf, mely egzakt adatpontokat és ezek összeköttetéseit tartalmazza. Az adatpontok és kapcsolatok jellege feladat függő, de a következő példa segíthet megvilágítani a lényeget:
Példa adatgráfra
Egy fiktív bank esetén tekintsük a következő két terméket: az egyik „Olcsó bankszámla“, míg a másik „Jutányos bankkártya“. Amennyiben az Olcsó bankkártyához igényelhető Jutányos bankkártya, azt egy adatgráfban reprezentálhatjuk, mint a ("Olcsó bankszámla", "IGÉNYELHETŐ MELLÉ", "Jutányos bankkártya") hármas.
Ezzel szemben a sémagráf (vagy ontológia(gráf), metagráf) adatot nem tartalmaz, hanem az adattárolás mikéntjét definiálja. Erre is mutatunk példát:
Példa sémagráfra
Tegyük fel, hogy városokat és országokat vizsgálunk egy térképen. Ekkor például a sémagráf két csúcsa lehet, hogy „Város“ és „Ország“, egy él pedig a ("Ország", "FŐVÁROSA", "Város") vagy ("Város", "SZOMSZÉDOS", "Város").
Ez korántsem teljes
Fontos ráiterálni, hogy a gráfkeresés és a tudásgráf fogalma nagyon tág, így ez a két eset egyáltalán nem írja le az összes lehetséges „gráfkeresésnek“ címkézhető módszert.