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

Szemantikus szóbeágyazások. Word2Vec és GloVe

Ez a lecke a Microsoft "AI kezdőknek" (AI For Beginners) tananyagának magyar adaptációja. A szavak zsákja és a TF-IDF után egy jóval kifinomultabb módszert nézünk meg arra, hogyan alakíthatunk szavakat olyan vektorokká, amelyek valóban tükrözik a jelentésüket.

Vissza a tananyaghoz


Miért nem elég az egyforró kódolás

Amikor a szavak zsákja vagy a TF-IDF alapú osztályozókat tanítottuk, magas dimenziójú vektorokkal dolgoztunk, amelyek hossza megegyezett a teljes szókészlet méretével. Minden szót egy pozícióhoz rendeltünk, és ezt a pozíciót alakítottuk át úgynevezett egyforró (one-hot) vektorrá, amelyben csak egyetlen elem egy, a többi nulla. Ez a megoldás azonban két komoly problémát vet fel. Egyrészt rendkívül pazarló, hiszen egy több tízezer szavas szókészlet esetén minden egyes szót egy több tízezer elemű, szinte teljesen nullákból álló vektorral kell reprezentálni. Másrészt minden szót egymástól teljesen függetlenül kezel, vagyis az egyforró vektorok semmilyen szemantikai hasonlóságot nem fejeznek ki a szavak között. A "macska" és a "kutya" ugyanolyan távol van egymástól a vektortérben, mint a "macska" és a "villamos", pedig nyilvánvalóan más a viszonyuk.


A beágyazás gondolata

A beágyazás lényege, hogy a szavakat alacsonyabb dimenziójú, sűrű vektorokkal reprezentáljuk, amelyek valamilyen módon már tükrözik a szó jelentését. Ahelyett, hogy egy szót egy tízezer elemű, majdnem üres vektorral írnánk le, mindössze néhány száz számjegyből álló vektort rendelünk hozzá, amelynek minden eleme hordoz valamennyi információt. Gyakorlati szempontból a beágyazási réteg egy szót vesz bemenetként, és egy meghatározott méretű kimeneti vektort állít elő. Ez sok tekintetben hasonlít egy egyszerű lineáris rétegre, csak éppen nem egy hosszú, egyforró kódolt vektort kell bemenetként fogadnia, hanem elég egyetlen szám, a szó azonosítója. Így elkerülhető a hatalmas, üres vektorok létrehozása és tárolása.

Ha ezt a beágyazási réteget egy osztályozó hálózat első rétegeként használjuk, a szavak zsákja megközelítésből átléphetünk az úgynevezett beágyazási zsák (embedding bag) modellre. Ilyenkor a szöveg minden szavát a megfelelő beágyazására cseréljük, majd valamilyen összegző műveletet, például összegzést, átlagolást vagy maximumkiválasztást hajtunk végre az összes beágyazáson. Fontos azonban, hogy önmagában egy ilyen, a klasszifikációs feladat mellékhatásaként betanított beágyazás nem feltétlenül hordoz sok valódi szemantikai tartalmat, csak azt tanulja meg, ami az adott feladathoz éppen hasznos.


Word2Vec, a szemantikus beágyazás

Ahhoz, hogy valóban jelentéssel bíró vektorokat kapjunk, ahol a hasonló szavak vagy szinonimák egymáshoz közel helyezkednek el a térben, a beágyazási modellt előre kell tanítani egy nagy szöveggyűjteményen, méghozzá egy erre a célra kitalált módszerrel. Az egyik legismertebb ilyen eljárás a Word2Vec, amely két fő architektúrára épül.

A két megközelítés más-más tulajdonságokkal rendelkezik. A CBoW gyorsabban tanítható, a skip-gram viszont lassabb, cserébe jobban reprezentálja a ritkán előforduló szavakat, mert minden egyes előfordulásukból több tanulási szignált nyer ki.

A Word2Vec és a hozzá hasonló, előre betanított modellek, mint például a GloVe, a klasszikus beágyazási réteg helyett is használhatók egy neurális hálóban. Ilyenkor viszont oda kell figyelni a szókészletek egyeztetésére, hiszen az az adathalmaz, amelyen a Word2Vec vagy a GloVe eredetileg tanult, szinte biztosan eltér attól a szövegkorpusztól, amellyel mi éppen dolgozunk. Ezért a saját szövegünkben szereplő szavakat hozzá kell illeszteni az előre betanított modell szókészletéhez, a hiányzó szavakra pedig valamilyen tartalék megoldást kell kitalálni.


Amit a jó beágyazás tud

A jól betanított szemantikus beágyazások egyik legizgalmasabb tulajdonsága, hogy a vektortérben megjelennek benne olyan szabályosságok, amelyek a szavak közti nyelvtani vagy jelentésbeli kapcsolatokat tükrözik. A klasszikus példa erre, hogy ha vesszük a "király" szó vektorát, kivonjuk belőle a "férfi" vektorát, és hozzáadjuk a "nő" vektorát, az eredmény vektor a vektortérben nagyon közel esik a "királynő" szó vektorához. Ez azt mutatja, hogy a modell nem csupán egymás mellé helyezte a hasonló szavakat, hanem valódi, algebrailag kezelhető struktúrát tanult meg a nyelv mögött rejlő kapcsolatokból. Hasonló analógiák jelennek meg országok és fővárosok, vagy igék jelen és múlt idejű alakjai között is.


A kontextusfüggetlenség korlátja

A Word2Vechez hasonló, hagyományos előre betanított beágyazások egyik komoly korlátja a szójelentés egyértelműsítésének problémája. Bár ezek a modellek bizonyos mértékig megragadják a szavak jelentését, egy adott szó minden lehetséges jelentését ugyanabba az egyetlen vektorba sűrítik. Ez gondot okozhat a rájuk épülő modellekben, mert sok szónak több, egymástól teljesen eltérő jelentése van attól függően, milyen szövegkörnyezetben szerepel. Vegyük például a magyar "játszik" szót. Egészen mást jelent abban a mondatban, hogy "a színész remekül játszik a darabban", mint abban, hogy "a gyerekek a kertben játszanak". A hagyományos beágyazás mindkét jelentést ugyanabba a vektorba kódolja, hiszen nem tud különbséget tenni a két szövegkörnyezet között.

Ennek a korlátnak a leküzdéséhez olyan beágyazásokra van szükség, amelyek egy teljes nyelvi modellre épülnek, amelyet nagy szövegkorpuszon tanítottak, és amely ténylegesen érzékeli, hogyan illeszkednek egymáshoz a szavak a különböző kontextusokban. Ezeket kontextuális beágyazásoknak nevezzük, és a részletes tárgyalásuk túlmutat ennek a leckének a keretein, de a kurzus későbbi, nyelvi modellekről szóló részében visszatérünk rájuk.


Gyakorlati kód

Ha szeretnéd saját kezűleg is kipróbálni, hogyan épül fel és hogyan használható egy beágyazási réteg PyTorchban, a Microsoft eredeti jegyzetfüzete lépésről lépésre bemutatja a folyamatot. Gyakorlati kód 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 →