A RAG (Retrieval-Augmented Generation) rendszerekben kulcsszerepe van a dokumentumok relevanciájának pontos megítélésében. A keresési folyamat során gyakran előfordul, hogy számos dokumentumot találunk, de nem mindegyik tartalmaz valódi relevanciát az adott kérdéshez. Ezért a dokumentumok újrasorrendezése kulcsfontosságú ahhoz, hogy a legmegfelelőbb válaszokat találjuk. A Cross-Encoder modellek, mint a ms-marco-MiniLM-L-6-v2, különösen alkalmasak a dokumentumok és a kérdések közötti relevancia pontos mérésére, még akkor is, ha ez lassabb folyamatot jelent a hagyományos vektor alapú hasonlósági megoldásokhoz képest.

A Cross-Encoder modellek működésének alapja, hogy mind a kérdés, mind a dokumentum együttes figyelembevételével végzik el a relevancia mérését. Az alapvető előnyük abban rejlik, hogy képesek figyelembe venni az összes szöveges kapcsolatot egy dokumentum és a lekérdezés között, miközben a vektor alapú módszerek csak a statikus hasonlóságokat vizsgálják. Ezt a módszert az alábbi lépésekkel valósíthatjuk meg egy RAG rendszerben:

Első lépésként inicializáljuk a Cross-Encoder modellt. A ms-marco-MiniLM-L-6-v2 modell egy olyan előre betanított modellt jelent, amelyet kifejezetten a dokumentumok és kérdések közötti relevancia mérésére optimalizáltak. Ehhez a sentence_transformers könyvtárat használjuk:

python
from sentence_transformers import CrossEncoder model = CrossEncoder('cross-encoder/ms-marco-MiniLM-L-6-v2', max_length=512)

Miután inicializáltuk a modellt, az egyes dokumentumokat párba állítjuk a lekérdezéssel, és a modell segítségével relevancia pontszámokat rendelünk hozzájuk. A magasabb pontszámok azt jelzik, hogy a dokumentum szorosabb kapcsolatban áll a lekérdezéssel. Ezután az alábbi kód segít a legmagasabb pontszámú dokumentum kiválasztásában:

python
scores = model.predict([(q, doc) for doc in res["documents"][0]]) print(res["documents"][0][np.argmax(scores)])

Ezáltal elérhetjük, hogy a keresett információk közül a legmegfelelőbb dokumentum kerül előtérbe. Az alábbi eredmény például három dokumentum relevanciáját mutatja a lekérdezéshez viszonyítva: array([-8.52623 , -6.328738, -8.750055], dtype=float32). A legmagasabb pontszámú dokumentum a legrelevánsabb a kérdés szempontjából.

A RAG rendszerekben a műveletek sorrendje a következőképpen alakul: először a dokumentumok bevitele, majd előfeldolgozása és darabolása, például PDF-ek vagy HTML fájlok esetén. Ezután a vektorizálás következik, és a dokumentumok vektorformában kerülnek tárolásra egy vektor adatbázisban. Ezt követi a szeminálszerű hasonlóság számítása, amely gyors, de esetlegesen pontatlan, majd a legjobb K eredmény újrasorrendezése a pontosabb, de lassabb Cross-Encoder modell segítségével. Ez a megközelítés egyensúlyba hozza a gyorsaságot és a pontosságot, mivel csak a legrelevánsabb dokumentumokat kell újrasorrendezni.

Miután az újrasorrendezett dokumentumok kiválasztásra kerültek, következhet a LLM (Large Language Model) integrációja, amelyhez az in-context learning módszert használhatjuk. Az LLM-ek az így előállított kontextus alapján képesek pontos válaszokat generálni a felhasználói kérdésekre. Az alábbiakban egy egyszerű példa látható, amely bemutatja, hogyan lehet az LLM-t egy RAG rendszerrel kombinálni:

python
rag_system_prompt_template = f"""
You are a helpful assistant that answers questions based on the provided CONTEXT. CONTEXT: {context} """ user_prompt_template = f""" QUESTION: {input} """

Ezt követően a rendszer generálja a választ az alábbi kód segítségével:

python
def RAG_qa(client, model, context, input): rag_system_prompt_template = f""" You are a helpful assistant that answers questions based on the provided CONTEXT. CONTEXT: {context} """ response = client.chat.completions.create( model=model, messages=[{"role": "system", "content": rag_system_prompt_template},
{"role": "user", "content": f"QUESTION: {input}"}]
)
return response.choices[0].message.content

Ez a válasz segít a rendszer számára, hogy a legrelevánsabb információk alapján generálja a kérdésre adott választ. Az RAG alkalmazások tehát különösen jól használhatók komplex, de pontos válaszokat igénylő kérdéseknél.

A RAG rendszerek alkalmazásakor fontos tisztában lenni azok kihívásaival és korlátaival. Az adatok minősége és pontossága kulcsfontosságú tényező, mivel a rendszerek megbízhatósága közvetlenül függ az alkalmazott tudásforrások hitelességétől. Ha a források elavultak, pontatlanok vagy torzítottak, a válaszok is hasonlóan megbízhatatlanok lesznek. A RAG rendszerek gyorsan tudják kezelni a változó adatokat, ha azok naprakészek és megbízhatóak.

A számítási költségek és a késleltetés szintén problémát jelenthetnek, különösen akkor, amikor nagy tudásbázisokon kell végrehajtani a keresést és a hasonlóság számítást. Azonban különféle optimalizációs lehetőségek léteznek, amelyek csökkenthetik ezeket a költségeket.

A magyarázhatóság és értékelés kérdései szintén kihívást jelentenek, mivel a RAG rendszerek komplexitása miatt nehéz nyomon követni, hogy miért és hogyan hoz meg egy-egy választ a modell. Ezt különösen fontos figyelembe venni, ha a rendszert valódi alkalmazásokban szeretnénk használni.

Bár a RAG rendszerek segítenek csökkenteni a „hallucination” jelenségét, amikor a modell a valóságotól eltérő információkat generál, nem garantálják, hogy a válaszok mindig pontosak lesznek. A megfelelő források kiválasztása és azok megfelelő kezelése elengedhetetlen a megbízhatóság érdekében.

Hogyan javíthatjuk a RAG rendszerek teljesítményét és alkalmazhatjuk őket valós esetekben?

A RAG (Retrieval-Augmented Generation) rendszerek olyan technológiák, amelyek képesek információt keresni és generálni, hogy a felhasználóknak pontos, kontextushoz illeszkedő válaszokat adjanak. Azonban nem minden esetben teljesítenek megfelelően, különösen a legújabb kutatások szerint, amelyek rávilágítottak a RAG rendszerekben használt új technikák kritikusan fontos korlátaira, különösen a dokumentumok újrarendezése (reranking) kapcsán.

Az egyik fontos megfigyelés, hogy a RAG rendszerek gyakran rossz információkat mutatnak be, miközben egyértelmű forrást is társítanak hozzá. A kutatások azt mutatták, hogy a következő főbb problémák jelentkezhetnek, amikor a RAG rendszerekhez alkalmazott technikákat vizsgálják:

A teljesítmény romlása: Ahogy a dokumentumok száma (K) növekszik, a rendszer teljesítménye csökkenhet, és néha még a legegyszerűbb keresési rendszerek is jobban teljesítenek a nagy adathalmazok esetében.

Gyenge dokumentum-differenciálás: A rendszerek tévesen adhatnak magas pontszámot olyan dokumentumoknak, amelyek csak minimálisan kapcsolódnak a kérdéshez, és így nehézséget okoznak a relevancia megítélésében.

Konzisztenciával kapcsolatos problémák: Az újrarendezők teljesítménye és az egyes újrarendezők közötti rangsorolás jelentős eltéréseket mutathat, attól függően, hogy hány dokumentumot dolgoznak fel.

Ezek a problémák nem meglepőek, hiszen a RAG rendszerek egy új és folyamatosan fejlődő alkalmazási paradigmát képviselnek. Ugyanakkor fontos hangsúlyozni, hogy ezek a rendszerek jelenleg a legkiemelkedőbb megvalósításai az LLMBAs (Large Language Model-Based Applications), ami nemcsak hogy felerősíti ezeket a kihívásokat, hanem lehetőséget ad számunkra, hogy értéket adjunk hozzá a problémák megértésével és megoldásával.

A fent említett problémák mellett kulcsfontosságú, hogy a rendszer képes legyen a szövegeket olyan módon feldolgozni, hogy azok hosszú távú koherenciát és minőséget megőrizzék, miközben a modellek kimeneti tokenek számának korlátaihoz igazodnak. Ez a kihívás különösen a hosszú formátumú tartalmak generálásakor válik egyre fontosabbá. Egyre inkább szükség van olyan technikákra, amelyek a szövegeket kisebb egységekre bontják (chunking), miközben fenntartják a kontextust, hogy a rendszer folyamatosan és koherensen képes legyen választ adni.

A tartalom feldarabolása és kontextus alapú összekapcsolása, mint a Chunking with Contextual Linking technika, egy olyan módszer, amely képes a bemeneti adatokat úgy szétválasztani, hogy azok ne veszítsenek el fontos kontextust. Ez különösen fontos, ha hosszú szövegeket kell feldolgozni, miközben meg akarjuk tartani a rendszer által generált válaszok koherenciáját.

A technika implementálásához az alábbi lépések szükségesek:

  1. Tartalom darabolása: Az input szöveget kisebb darabokra bontjuk. Ez lehetővé teszi a rendszer számára, hogy minden egyes részt külön-külön dolgozzon fel, így biztosítva, hogy minden szakaszra részletes és teljes választ adjon.

  2. A kontextus megőrzése alapértelmezett prompttal: Minden egyes darabhoz kapcsolódóan kontextuális információkat adunk hozzá, így biztosítva a szöveg folytonosságát és koherenciáját a különböző szakaszok között.

  3. Dinamikus prompt paraméterek létrehozása: Minden darabhoz olyan promptot generálunk, amely tartalmazza a szakasz tartalmát és annak kontextusát. Ez a prompt segíti a rendszer működését, így a válaszok még jobbak lehetnek.

  4. A válaszok összevonása: Az összes darab válaszát egyesítjük, hogy egy hosszú formátumú tartalom jöjjön létre, így kezelve a modell kimeneti tokenek korlátozásait, miközben megőrizzük a szöveg koherenciáját.

Ez a megközelítés rendkívül hasznos lehet például a 10-K riportok elemzésére, ahol hosszú és összetett információkat kell feldolgozni és azokból koherens jelentést generálni. A Chunking with Contextual Linking technika segítségével a rendszer képes a teljes dokumentumot részleteiben feldolgozni, és egyértelmű, összefüggő választ adni anélkül, hogy a modellek tokenkorlátai problémát jelentenének.

A szöveg darabolására és kontextus megőrzésére számos különféle technika létezik. Például, a Langchain könyvtár számos szövegfeldarabolási módszert kínál, mint a karakter-alapú szétválasztás, amely a Tiktoken tokenizálót használva képes biztosítani, hogy ne lépjük túl a modell maximális token limitjét. Az egyes darabokat így külön-külön, de összekapcsolva dolgozhatjuk fel, biztosítva a magas minőségű kimenetet.

Ezen módszerek alkalmazása nem csupán a hosszú szövegek feldolgozásában segít, hanem az olyan kihívások leküzdésében is, mint a dokumentumok közötti relevancia különbségeinek kezelése és a konzisztens, minőségi válaszok generálása.