Kihagyás

Kérdésgenerálás

Az automatikus tesztelés első alapvető kérdése, hogy mit tesztelünk. Nem szeretnénk folyamatosan manuális adathalmazokat írni, annotálni. Erre hivatott megoldást adni az automatikus kérdésgenerálás modul.

A „kérdésgenerálás“ alatt alapvetően a következő feladatot értjük:

Kérdésgenerálás

Adott: Egy \(T\) szöveg (dokumentum, chunk, stb…)

Feladat: Generáljunk egy értelmes, emberszerű \(q\) kérdést és \(a\) választ úgy, hogy a kérdés teljes mértékben megválaszolható \(T\) alapján, ugyanakkor hiánytalanul értelmezhető annak ismerete nélkül is.

A feladat egyszerű hangzása ellenére igen bonyolulttá tud fajulni. Az alábbi problémák merülhetnek fel például:

  • A megírt kérdésben használt fogalmak nem „abszolút“ fogalmak, azaz a szöveg ismerete nélkül félreérthető, hogy mire referálnak. (Pl. a „Mennyi a bankszámla éves díja?“ kérdés értelmetlen, hiszen csak \(T\) tartalmazná, hogy melyik számláról van egyáltalán szó).

  • A megírt kérdéshez nem csak \(T\)-ből szükséges információ. (Pl. kis kiegészítések bankszámlacsomagoknál, melyeket nem ismerünk, ha csak nem konkrétan azt a dokumentumot nézzük.)

  • A megírt válasz feltételezéseket használ, melyek a szövegben nem szerepeltek.

  • \(T\) nem tartalmaz érdemi információt, amiből kérdést lehetne feltenni.

A többlépéses kérdésgenerálási folyamat során ezeket próbáljuk meg kezelni úgy, hogy a végén egy kielégítő adathalmazt kapjunk. A folyamat lépései a következők:

  1. Generálunk egy \(q_0\) kérdést \(T\)-ből.

  2. Átírjuk a kérdést, akár többször (\(q_1\), \(q_2, \dots\)) egyes hibák javítására koncentrálva. Az átírások végén megapjuk a végső \(q\) kérdést.

  3. Leellenőrizzük, hogy \(q\)-ra adható-e teljeskörű válasz a szöveg alapján. Ha nem, megszakítjuk a folyamatot.

  4. Megválaszoljuk a kérdést, ezzel megkapva \(a\)-t, majd visszaadjuk a \((q, a)\) párt.

Mik azok az átírások?

Az átírások tetszőlegesek lehetnek, vagy akár nem is kell megadni egyet se. Olyan korrekciókat érdemes megadni, melyekről tudjuk, hogy a \(q_0\) generálási folyamat gyengeségei. Például ha tudjuk, hogy a generált kérdés sokszor nem megfelelő nyelvtanilag, vagy valamilyen adott stílusba akarjuk kényszeríteni a választ, akkor azt meg lehet ilyen formában fogalmazni.

A lépések szabályozása

A (2) és (3) lépések kikapcsolhatók a megfelelő konfigurációs beállításokkal. A (2) lépéshez az LLM promptok a qa_properties.yml fájlban szabályozhatók a correction-steps segítségével.

Megjelenés a kódban

Alapvetően minden lépést LLM-mel végeztetünk. Emellett a kódban ez a folyamat lépésenként megjelenik a QAGenerator osztályban, azon belül is a _generate_qa_ methodon belül. Az (1) lépést az _extract_simple_questions, a (2)-t a _reformulate_question, a (3)-at az _is_quesiton_answerable, a (4)-et pedig az _answer_quesiton végzi.

A használt prompt-ok a qa_properties.yml fájlban találhatók.