2011. szeptember 17.

Fordítási modell 3: adatok kinyerése a kétnyelvű korpuszból

Az előzőekben már eljutottunk a gépi fordításban használt fordítási modell vázlatos ismertetéséig. Ha van egy adatbázisunk, amely tartalmazza a két nyelv szavainak egymáshoz való viszonyát és a szórend alakulását leíró szabályokat, akkor tudunk generálni “lehetséges fordításokat”. Ilyen adatbázist készen azonban nem lehet kapni sehol, úgyhogy magunknak kell létrehozni. Ebben továbbra is Kevin Knight workbook-jára támaszkodunk.




A két nyelv szabályszerűségeit valódi nyelvi adatokból érdemes kinyerni – hiszen éppen erről szól a statisztikai gépi fordítás. Ehhez szükségünk van egy párhuzamos korpuszra. Ezek olyan korpuszok, amelyekben ugyanaz a szöveg két nyelven szerepel egymás mellet. Ilyet lehet találni például a BME-nél (magyar-angolt) vagy az OPUS projektnél. Sőt, akár magunk is gyárthatunk ilyet, ún. aligner programokkal – ezek egymás mellé rendezik két szöveg megfelelő részeit.

A párhuzamos korpuszok jellemzően mondat szinten vannak összerendezve. Ezért az előző posztban tárgyalt szó-szó megfelelési adatok kinyerését nem lehet közvetlenül megoldani. Egyből látszik, hogy a két mondat szó-szó szinten már nem felel meg egymásnak: például a magyar mondat első szava nem ugyanaz, mint az angolé.

Amazon is more interesting than Google
Az Amazon érdekesebb a Google-nél


De azért az is látszik, hogy valami megfelelés mégis csak van a két mondat között, még szó-szó szinten is – a szavak sorrendje persze már bizonytalan. Már volt szó arról, hogy a fordítási modell nem teljes megfelelésekkel dolgozik, hanem valószínűségekkel: vannak szópárok az angol és a magyar nyelvben, amelyek egész biztosan egymás megfelelői (Amazon – Amazon), és vannak olyanok, amelyek “nem egészen biztosan”, “néha”. Például legyen mondjuk P(érdekes | interesting) = 0.9 , P(érdekesebb | interesting) = 0.05. Hisz látjuk, hogy az utóbbira is van példa, igaz?

A Knight által javasolt módszer az ún. bootstrapping. Ez egy statisztikai eljárás, amely lényege, hogy ha feltételezzük az adatainkról, hogy valamilyen ismert eloszlást követnek, akkor sok véletlenszerű mintavétellel előbb vagy utóbb ki fog rajzolódni az a bizonyos várt eloszlás; ez által pedig leírható lesz az adatsorunk.

(Megjegyzés: az átláthatóság kedvéért ismét csak a szó-szó megfelelésekkel foglalkozunk)

A gép nem tud semmit arról, hogy az angol és a magyar mondat mely szavai felelnek meg egymásnak. Ha csak a fenti mondatpárt nézzük, minden angol szónak hat lehetséges magyar megfelője lehet; és mivel 5 angol szavunk, 6 x 5 lehetséges szópár van. Persze, egy ember számára nyilvánvaló, hogy az Amazon mindkét mondatban ugyanazt jelenti, és a Google és a Google-nél is valószínűleg hasonló dolgokra utal, de gépnek erről fogalma sincs.

Úgy is elképzelhetjük a dolgot, hogy a mondatpár szavait vonalakkal összekötjük egymással, annak megfelelően, hogy melyik szó melyiknek felel meg; vagy úgy is, hogy az eredeti angol mondat alá a magyar mondat összes lehetséges permutációját felírjuk (hogy egyszerűsítsük a dolgot, a rövidebb, 5 szavas magyar mondatba beilleszthetünk még egy NULLA értékű szót, hogy a hosszúságok megegyezzenek).

A fentivel azonban még semmivel sem vagyunk előrébb, hisz az összes lehetséges elrendezés ugyanolyan jó lehet, vagyis az egymásnak megfeleltetett szavak t(hu|en) értéke ugyanannyi. Azonban a kétnyelvű korpuszunkban nem csak egy mondatpárunk van, hanem sok. Lehet, hogy lesz másik olyan mondat is, amelyben megismétlődik egy korábban már megjelent szó, mondjuk az “érdekes”. És az is lehet, hogy még 500 olyan mondat lesz a korpuszunkban, amiben előfordul az érdekes szó. Amikor mindezeknek a mondatokpároknak felírjuk az összes lehetséges elrendezését, aztán megszámoljuk, hogy az “érdekes” szó hányszor fordult elő az “interesting” szóval, és hányszor mondjuk a “monkey” szóval párosítva, azt fogjuk tapasztalni, hogy az előbbi javára fog billenni a mérleg. Úgy is fogalmazhatunk, hogy az “érdekes” szóhoz párosított szavak eloszlása olyan, hogy gyakrabban fordul elő köztük az “interesting”, mint a “monkey” vagy éppen a “vodka”. Éppen ez az a “várt eloszlás”, amire a folyamat elején számítottunk.

A gyakorlatban a dolog úgy fest, hogy több tízezer szóval és több ezer/tízezer/százezer/stb mondatpárral kell számolnunk. Ezért a kezdeti, teljesen semlegesnek feltételezett eloszlások csak nagyon csekély mértékben fognak elbillenni valamelyik irányba. Ezért a műveletet meg kell ismételni, újra és újra, minden alkalommal a már kiszámolt, nem egészen semleges értékekkel újraszámolva. Ennek következtében az eloszlások egyre inkább a nyelv valódi viszonyait fogják tükrözni. Pontosan erre az ötletre utal a bootstrapping kifejezés is: a semmiből kiundulva, a folyamat során nyert adatokat újra és újra felhasználva jutunk el az eredményig – mintha a saját hajunknál fogva húznánk ki magunkat a vízből.

A következő posztban a konkrét, megvalósítható modellről lesz szó.

Nincsenek megjegyzések: