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. Ebben a leckében bemutatjuk, hogyan tanul meg egy RNN karakterről karakterre szöveget generálni.

Vissza a tananyaghoz


Kezdő tokenKövetkező szóKövetkező szó...
A generatív RNN szóról szóra, a korábbi kimenetre építve alkot új szöveget.

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.


Egy a egyhez klasszikus háló Egy a sokhoz képaláírás Sok az egyhez osztályozás Sok a sokhoz gépi fordítás telt doboz bemenet, üres doboz kimenet
A négy alaparchitektúra aszerint, 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.


Prompt kezdő szöveg RNN cella állapot + bemenet Új karakter mintavétellel a generált karakter visszamegy bemenetnek A generálási ciklus addig ismétlődik, amíg elég hosszú a szöveg
A generálás ciklus. Minden új karakter a következő lépés bemenete lesz.

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.


Alacsony hőmérséklet

  • Meredek eloszlás, szinte mindig a legvalószínűbb karakter nyer
  • Biztonságos, kiszámítható szöveg
  • Gyakran unalmas, ismétlődő ciklusokba futhat

Magas hőmérséklet

  • Lapos eloszlás, a ritkább karakterek is eséllyel indulnak
  • Kreatívabb, meglepőbb folytatások
  • Néha kevésbé koherens eredmény

Greedy keresésmindig a legvalószínűbb szót választjaBeam searchtöbb jelölt utat is végigkövetMintavételezésa valószínűségek szerint sorsol
Három elterjedt stratégia a következő szó kiválasztására.

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.


  1. Forrásmondat beolvasásaA kódoló RNN tokenenként végigmegy a bemeneti mondaton.
  2. ÁllapotvektorA teljes mondat jelentése egyetlen kódolt vektorba sűrűsödik.
  3. DekódolásEgy másik RNN ebből a vektorból indulva szóról szóra kibontja a fordítást.
  4. Csere a kiindulópontonHa a kezdő vektor egy CNN-ből érkezik, ugyanez a lánc képaláírást generál.

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.


← 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 →