2011. augusztus 2.

Nyelvi modell és fordítási modell a gépi fordításban

Folytatjuk az utazást a statisztikai alapú gépi fordítás világába, útikönyvként továbbra is Kevin Knight bevezetője szolgál. Ebben a posztban a fordítási modell szerepéről lesz szó.



Előző posztunkban a fordítást a feltételes valószínűség fogalmain keresztül magyaráztuk: fordítani annyi, mint sok lehetséges változat közül kiválasztani a legjobbat. Az inverz feltételes valószínűségre vonatkozó képlet segítségével ezt így fejeztük ki (ha például oroszról magyarra fordítunk):

P(HU | RU) = P(HU) x P (RU | HU)

Ez a képlet a problémát két részre bontja, amelyeket külön-külön remélhetőleg egyszerűbb megoldani. Először a fordítási modellnek nevezett algoritmus segítségével fel kell írni az orosz mondat összes lehetséges magyar fordítását (ezt egyszerű szótárazással, majd a szavak átrendezésével [permutálásával] értük el), majd a nyelvi modell segítségével el kell dönteni, a változatok közül melyik hangzik a legjobban az adott nyelven. Ezt egy nagyon egyszerű statisztikai számítással értük el. Az a mondat fog “győzni”, amelyiknek a nyelvi modellünk a legmagasabb pontszámot adja.

A fenti példának azonban az a nagy hibája, hogy az orosz mondat minden lehetséges magyar fordítása egyforma pontszámot kap – ezért a végső pontszámról kizárólag a nyelvi modell dönt. A másik nagy hiba, természetesen, hogy szóról-szóra fordítani általában nem jó taktika.

A képlet akkor fog igazán jól működni, hogy a különböző lehetséges fordítások különböző pontszámokat kapnak. Így a végső pontszámban egyszerre fog szerepet játszani a fordítási modell és a nyelvi modell által adott pontszám. A fordítási modell által legjobbnak ítélt mondatok közül fogja a nyelvi modell kiválasztani a nyelvileg legvalószínűbbet. Ez egyfajta korrigáció, hiszen nem biztos, hogy a számítógép által a legjobbnak ítélt fordítás nyelvileg is a legjobb. Sőt, az is lehet, hogy a számítógép által viszonylag rossznak ítélt fordítás nyelvileg annyira “jó” – vagyis valószínű – hogy mégis ő lesz a végső befutó. Minden a konkrét pontszámokon múlik.

Hogyan pontozhat tehát a fordítási modell egy adott fordítást? Knight modelljét egy kicsit leegyszerűsítve, alapvetően három faktor játszik szerepet egy adott mondat kiértékelésében.

Először is, egyáltalán nem biztos, hogy egy szónak csak egy fordítása létezik. Minden szópárhoz tartozik egy érték, amely megmondja, mennyire valószínű, hogy azok egymásnak a megfelelői. Például a

t=P(дом | ház)

érték valahol 1 környékén kellene hogy legyen, de mivel a “ház” szónak elképzelhetők más orosz fordításai is, lehet, hogy csak 0.8 lesz. Ha két szó egymásnak semmiféle körülmények között nem lehet fordítása, akkor ez az érték 0 lesz. Egy adott fordítás értékét úgy kapjuk meg, ha minden orosz-magyar szópárjának az adott t értékeit összeszorozzuk.

Itt felmerül azonban egy másik probléma is: egyáltalán nem  biztos, hogy egy darab magyar szó fordítása egy darab orosz szó lesz. Lehet, hogy kettő, de lehet, hogy egy sem. Ezért, mielőtt még elkezdjük szavanként összepárosítani a kiinduló orosz mondatot és a lehetséges magyar változatokat, gondoskodni kell arról, hogy azok egyforma hosszúak legyenek (máskülönben nem is tudnánk ezt megtenni). Erre két mód van: egyrészt feltöltjük a rövidebb mondatot “nulla” értékű szavakkal, másrészt pedig bevezetünk minden egyes magyar szóhoz egy értéket, amely azt fejezi ki, hogy az adott magyar szó hány orosz szót eredményez a fordításban. (Gondoljunk például a feltételes mód segédszavára: az oroszban ilyen van, a magyarban viszont a feltételes mód jele az igén jelenik meg. Így egy magyar feltételes módú igen két orosz szót fog “szülni” ) Ez az értéket hívja Knight “fertility”-nek.
 
Egy példa:

Szeretem a sört.

Tegyük fel, hogy tudjuk, hogy a “szeretem” fertility értéke 2, míg az “a” szóé 0.
Ezért a mondatot átmenetileg így írjuk át:

szeretem szeretem sört

Ez az elrendezést fogja hasonlítani az algoritmusunk a következő fordítással:

я люблю пиво.   
[я=én, люблю=szeretem, пиво=sör (tárgyrag nincs az oroszban, bár ez éppen egy akuzatív forma)].
Amennyiben a t-értékeket tartalmazó táblázatunk elég jó, az algoritmus mind a t(я|szeretem), mind a t(люблю|szeretem) értéket viszonylag magasnak fogja ítélni. A t(пиво|sört) érték valószínűleg szintén elég magas  lesz. Vegyük észre, hogy a szavak egyenkénti fordítása nem tökéletes, azonban van esély arra, hogy a végeredmény végül mégis jó legyen.



Végül, van egy harmadik változónk is, amely azt mutatja, hogy az adott mondatpárban a szórend hogyan változik (ez a “distortion” mutató). Például, tudhatjuk, hogy az orosz mondatok második szava általában a magyar mondatok első szava lesz. Fontos, hogy ezek az értékek a konkrét szavaktól teljesen függetlenek, csak a szórend általános törvényeit próbálják leírni.

Tehát, egy adott fordítás pontszámát a következőképpen tudjuk kiszámolni:

– Minden egyes hu-ru szópárról kiszámoljuk, mennyire valószínű megfelelői egymásnak. Ez a t(ru|hu) érték. Ezeket az értékeket összeszorozzuk.
– Minden egyes hu szóról eldöntjük, hány darab ru szót fog generálni a fordításban. Ezeket a valószínűségi mutatókat is összeszorozzuk.
– Minden egyes hu-ru szópárt megvizsgálunk, hogy az általuk elfoglalt pozíciók a két mondatban mennyire valószínűek az általános szórendi törvények tükrében. Ezeket az értékeket szintén összeszorozzuk.
– Végül a fenti három értéket is összeszorozzuk.

A fenti modellben tehát szerepet játszik a konkrét szavak fordítása, a szórend és adott esetben az eltűnő és/vagy a semmiből megjelenő szavak (például a  névelők vagy a segédigék).

Ha ezt a műveletet az orosz mondat összes lehetséges magyar fordításán elvégezzük, akkor mindegyik más értéket fog kapni. A végső, helyes fordítás az lesz, amelyre ennek az értéknek és a nyelvi modell által megítélt értéknek a szorzata a legmagasabb.

Amennyiben tehát rendelkezünk a fenti értékeket tartalmazó három táblázattal, a fordítás elméletileg megoldható. Egy probléma azonban ismét felmerül: honnan vegyük ezeket az értékeket, amikor semmi mással nem rendelkezünk, csak egy jó nagy kétnyelvű korpusszal? Hogyan tudjuk ezeket az értékeket meghatározni a mintaszövegekből kiindulva? A válasz Kevin Knight írásában, illetve a következő posztban.

(folyt.köv.)


Nincsenek megjegyzések: