2011. augusztus 27.

Gépi fordítás – Fordítási modell 2

Előző, statisztikai alapú gépi fordítással foglalkozó posztunkban már beszéltünk a fordítási modell szerepéről. Most megmutatjuk, hogyan működik a dolog igazi számokkal és igazi szavakkal.

Továbbra is egy orosz nyelvű mondatot szeretnénk lefordítani magyarra. Az elgondolásunk az volt, hogy felírjuk az orosz mondat sok lehetséges fordítását, majd ezek közül kiválasztjuk a legjobbat. Minden lehetséges fordítás kap egy pontszámot, amely két tényezőből áll össze: a nyelvi modell és a fordítási modell által adott pontszámokból.

A fordítási modellünk három tényezőt tartalmaz: a szavak egyenkénti fordítását, a szavak “termékenységét” és a szórend változását. Nagyon tömören ezt így írhatjuk fel:

Emberi nyelven ez a képlet azt jelenti, hogy éppen szóban forgó magyar fordítás elemeit sorban összehasonlítjuk az orosz mondattal; a megfelelő értékeket kikeressük a táblázatokban; majd  összeszorozzuk őket. Így például egy 4 szavas mondatnál egy 12 tényezős szorzatot kapunk.
(a PI itt azt jelenti, hogy a soron következő elemeket egymás után összeszorozzuk; ugyanaz, mint a Σ jel, csak összeadás helyett szorzunk)

Most egyszerűsítsük le a modellt, és dobjunk ki belőle mindent a szavanként fordításon kívül:


Képzeljünk el egy mondatot, amelyet le szeretnénk fordítani magyarra:

Будапешт красивый город.


(azt jelenti, hogy “Budapest szép város”, pontosan ebben a sorrendben – direkt választottunk olyat, amelyekben a szavak száma megegyezik)

Most képzeljük el, hogy egy olyan nyelvünk van, amelyben csak a fenti három szó létezik, és minden szónak csak egy lehetséges fordítása lesz. Így a

t(Будапешт | Budapest) = 1   (1, vagyis teljesen biztos, hogy egymásnak fordítása)
t(красивый | szép) = 1
t(город | város) = 1

míg bármi más, például

t(Будапешт | város) = 0  (0, vagyis teljesen biztos, hogy egymásnak nem fordítása)

Úgy is elképzelhetjük, mint egy 3x3-as mátrixot, amelyben a sorok jelentik az orosz, az oszlopok pedig a magyar szavakat. A táblázat megfelelő elemei a sor-oszlop kereszteződéseknél tartalmazzák az egyes értékeket, vagyis azt, hogy az orosz-magyar szókombinációk mennyire jó fordításai egymásnak.

            Budapest    szép    város
Будапешт        1        0       0
красивый        0        1       0
город               0        0       1

Jelenleg nagyon kevés szóból álló nyelvünk és rövid mondatunk vannak, úgyhogy a fordítást tulajdonképpen nyers erővel (brute force) is végezhetjük: egyszerűen felírunk minden elképzelhető mondatot, majd mindegyiket kiértékeljük, mennyire jó fordítása az eredeti orosz mondatnak.

Például a fenti változatot kiértékelve

város                Budapest             szép
Будапешт      красивый      город

a

t(Будапешт | város) x t( красивый | Budapest) x t( город | szép) =
0 x 0 x 0 = 0

érték jön ki. Ez a fordítás tehát semennyire sem jó.

Nézzünk meg a többi változatot is:

Budapest város szép 
       1 x 0 x 0  = 0
szép Budapest  város        0 x 0 x 1  = 0
szép város Budapest        0 x 0 x 0  = 0
város Budapest szép        0 x 0 x 0  = 0
város szép Budapest        0 x 1 x 0  = 0
Budapest szép város        1 x 1 x 1  = 1

Bingó! Minden változat nullát eredményez, kivéve az utolsót. Ez tehát az egyetlen jó fordítás.
A fenti egy olyan nyelv volt, ahol minden szónak csak egyetlen fordítása van a célnyelven.
A valóság azonban más.

E következő példában angolról fordítjuk magyarra a következő mondatot:

Peter was stupid.


A szavak egymáshoz való viszonyát tartalmazó mátrixunk így néz ki:
   
        Péter    volt    buta    ostoba
Peter     1       0          0        0
was        0      1          0        0
stupid     0      0        0.6      0.4

Ez egy olyan nyelv, ahol egy angol szónak több magyar fordítása is lehet.
Az előző példával ellentétben, itt több olyan mondat is lesz, amely nem kap nullás pontszámot:

Péter volt buta        1 x 1 x 0.6 = 0.6
Péter volt ostoba    1 x 1 x 0.4 = 0.4

Most az a helyzet, hogy egyik fordítás sem tökéletes (mivel azt a teljes valószínűséget kifejező 1-es érték fejezné ki), de nem is teljesen rosszak. A legjobb, amit tehetünk, hogy megtartjuk az összeset, és a nyelvi modellre bízzuk, melyiket fogja kiválasztani végső győztesnek.

A poszt elején szereplő hoszabb képlet működése gyakorlatilag ugyanígy zajlik: a program a megfelelő táblázatokbol kikeresi a megfelelő értékeket, majd számol.

Ha valódi adatokkal dolgozunk, akkor természetesen mind a forrásnyelv, mind a célnyelv lexikonja is több (tíz)ezer szóból fog állni, ami exponenciális növekedést okoz a felírható mondatok számában; azon is érdemes elgondolkodni, hogy egy alig 12 szavas mondat össze lehetséges sorrendben való felírása is alig-alig fog beférni egy modern számítógép memóriájába. A nyers erővel való próbálkozás helyett a valóságban így mindenképpen olyan keresőalgoritmust is kell használni, ami elválasztja a kiszámításra érdemes jelölteket a teljesen reménytelen esetektől.

Az alapvető kérdésre azonban még mindig hiányzik a válasz. Azt látjuk, hogy ha vannak megfelelő lexikonjaink és táblázataink, akkor már tudunk mondani valamit arról, körülbelül hogyan kellene kinéznie egy lefordítandó mondatnak egy másik nyelven. Arról azonban még mindig nem volt szó, honnan kerülnek az adatok a táblázatokba. Ezeknek az adatoknak a kalandos felkutatásáról lesz szó legközelebb (most már tényleg:)

1 megjegyzés:

Gerő Dávid írta...

A példa, és a példa áttekintése nagyon érthetővé és tisztává tette számomra is az egészet! Várom a folytatás is!