AI kezdőknek · Természetes nyelvfeldolgozás · Lecke 17

Generatív rekurrens hálók

A rekurrens neurális hálók nem csupán osztályozni tudnak szöveget, hanem létre is tudnak hozni. Ez a lecke a Microsoft "AI kezdőknek" (AI For Beginners) tananyagának magyar adaptációja, és bemutatja, hogyan tanul meg egy RNN karakterről karakterre szöveget generálni.

Vissza a tananyaghoz


Egy háló, sokféle feladat

A korábbi leckében megismert rekurrens neurális hálók (RNN) és kapuzott változataik, mint az LSTM vagy a GRU, arra épülnek, hogy minden lépésben egy rejtett állapotot adnak tovább a következő lépésnek. Eddig ezt az állapotot arra használtuk, hogy a sorozat végén egyetlen kimenetet készítsünk belőle, például egy osztályozási döntést. De ha minden lépésben kimenetet is generálunk, nem csak rejtett állapotot, akkor a háló egész sorozatokat tud előállítani, méghozzá tetszőleges hosszban.

Ez négyféle architektúrát tesz lehetővé attól függően, hogy hány bemenet áll szemben hány kimenettel.


Karakter szintű szöveggenerálás

Az egyszerűség kedvéért ebben a leckében karakter szintű tokenizálást használunk, vagyis a hálót nem szavakra, hanem egyes betűkre tanítjuk. A tanítás lépése a következő. A háló kap egy adott hosszúságú karaktersorozatot, mondjuk nchars karaktert, és minden egyes bemeneti karakterhez meg kell tanulnia megjósolni a rá következő karaktert. Gyakorlatilag tehát a háló mindig egy karakterrel eltolva próbálja kitalálni a szöveg folytatását.

A generálás, vagyis a következtetés fázisában ez fordítva zajlik. Egy kezdő szöveggel, úgynevezett prompttal indítunk, amit végigfuttatunk az RNN cellákon, hogy megkapjuk a köztes állapotot. Innentől a háló egyszerre egy karaktert generál, majd az újonnan kapott állapotot és a generált karaktert visszaadja a következő lépésnek bemenetként. Ez a ciklus addig ismétlődik, amíg elég hosszú szöveg nem keletkezik. Ugyanez az elv szó szintű generálásra is alkalmazható, csak akkor a háló egész szavakat, nem karaktereket jósol lépésenként.


Lágy generálás és a hőmérséklet szerepe

Minden lépésben az RNN kimenete valójában egy valószínűségi eloszlás a lehetséges következő karakterek felett. A legegyszerűbb megoldás az volna, hogy mindig a legvalószínűbb karaktert választjuk. Ez azonban gyakran hibás eredményhez vezet, mert a szöveg könnyen ismétlődő ciklusba kerül, és ugyanazokat a szórészleteket pörgeti körbe.

A probléma gyökere, hogy a legmagasabb valószínűségű karakter és a második, harmadik legvalószínűbb között gyakran alig van különbség. Ha például a háló a "play" szó után dolgozik, majdnem egyforma eséllyel következhet szóköz vagy egy "e" betű, hiszen mindkettő értelmes folytatáshoz vezet (gondoljunk a "player" szóra). Emiatt nem érdemes mindig a legvalószínűbb választást erőltetni, hanem célszerűbb a teljes eloszlásból mintát venni, vagyis véletlenszerűen, de a valószínűségekkel arányosan választani a következő karaktert.

Ezt a mintavételi folyamatot finomhangolhatjuk egy úgynevezett hőmérséklet paraméterrel.

A megfelelő hőmérséklet beállítása gyakorlati kérdés, jellemzően kísérletezéssel találjuk meg az adott feladathoz legjobban illő értéket.


Mire jó mindez a gyakorlatban

Bár az önmagában generált szöveg is látványos, a rekurrens generatív hálók igazi értéke abban rejlik, hogy tetszőleges kezdeti jellemzővektorból tudnak szöveget építeni. Ez a mechanizmus áll a gépi fordítás mögött is, ahol a forrásmondat kódolt állapotvektorát egy másik RNN dekódolja lefordított szöveggé. Ugyanez a logika működik a képaláírás generálásnál is, csak ott a kezdeti vektor nem egy másik RNN-ből, hanem egy konvolúciós hálóból (CNN) érkezik.

Érdemes észben tartani, hogy a ma használt nagy nyelvi modellek, mint a GPT család tagjai, nem RNN architektúrára épülnek, hanem transzformerekre. A rekurrens generatív hálók mégis fontos alapot adnak a megértéshez, hiszen ugyanaz az alapgondolat, a szekvenciális, lépésenkénti generálás és a mintavételezés hőmérséklettel, a mai modellekben is központi szerepet játszik.


Aki szeretné saját kezűleg is kipróbálni a karakter szintű szöveggenerálást, a Microsoft eredeti jegyzetfüzetében talál gyakorlati kódot PyTorch használatával. Megnyitás a GitHubon.


Forrás

Ez a lecke a Microsoft nyílt forráskódú, MIT licenc alatt elérhető "AI For Beginners" tananyagának magyar adaptációja. Eredeti angol lecke. GitHub. Felhasznált magyar gépi fordítás. GitHub.


← Előző lecke Következő lecke →

Workshop

AI Transformation Day

Egésznapos, vezetőknek szóló program. Feltérképezzük, hol tart a szervezet, mi az első reális lépés, és milyen belső feltételek szükségesek a sikerhez. A nap végén konkrét, prioritizált cselekvési lista.

Érdekel a program →