Domain-adaptív természetes nyelvi interfész megvalósítása magyar nyelven IV.

Morfológia: magyar szavak morfológiai elemzése

Előző cikkünkben a HID eszközökkel és azok kimenetének feldolgozásával foglalkoztunk. A következő feladat az input szöveg morfológiai elemzése. A természetes nyelvű szövegek feldolgozásában fontos cél a szöveg jelentésének feltárása, gépi feldolgozása. Ehhez elengedhetetlen először a szöveg szintaktikai elemzése, a szavak nyelvtani elemzése. A morfológiai elemzés után történik ugyanis a mondattani elemzés, mely során a mondatokat felépítő mondatrészek meghatározására kerül sor. Ehhez a folyamathoz morfológiai információkra van szükség a mondattani elemzés pontosságának maximálása érdekében.

Bizonyos mondatrészek egyértelműen következnek a morfológiai elemzésből. Például, ha egy szó elemzése NOUN + CAS<ACC>, ez azt jelenti, hogy egy tárgyraggal ellátott főnév az elemzendő szó. A tárgyraggal ellátott szavak mondatrészileg is az esetek többségében a tárgy szerepét töltik be a mondatban. Vannak persze olyan mondatrészek is, amelyek felismerése már közel sem ilyen egyszerű. Ekkor a felismerés pontosságának növelése céljából különböző statisztikai módszereket, tanító mintákat lehet alkalmazni a szabály alapú hozzárendelés mellé.

A morfológiai modul teljes egészében nyelvfüggő, ugyanis minden nyelvnek saját szintaktikája, karakterkészlete, szabályrendszere van, melyet a feldolgozásnál figyelembe kell venni. Éppen ezért nem lehet, illetve nem is lenne célszerű olyan morfológiai alkalmazást készíteni, amely teljesen általánosan használható minden lehetséges nyelvre. Az ilyen alkalmazás tervezésénél igen sok szempontot, szabályt, lehetőséget kellene figyelembe venni, nem is beszélve arról, hogy nagyon sok nyelv ismeretét tenné szükségessé, amely nyelvi szakértők bevonását kívánná meg. Az ilyenfajta alkalmazás fejlesztési költségei túl magasak lennének és még mindig ott van az a veszély, hogy egy teljesen általános nyelvű motor kevésbé lenne hatékony, mint egy adott nyelvre optimalizált speciális nyelvi feldolgozó.

A modul fejlesztésénél ezek alapján amellett döntöttünk, hogy a keretrendszer kialakításánál meg kell határozni azokat a funkciókat, melyeket egy-egy nyelvre specifikusan implementálni kell, ha az NLI alkalmazást az adott nyelvű szövegre akarjuk használni. Mivel általában két alapvető funkcióval rendelkezik egy morfológiai feldolgozó – elemzés és ragozás -  így ezen két funkció interfészének pontos kidolgozása az NLI keretrendszer morfológiai moduljának egyik fő feladata.

Az NLI keretrendszer és prototípus alkalmazás magyar nyelvű szövegeket lesz képes feldolgozni, amiez a magyar nyelv szabályait, alapszavait, kivételeit kell az interfész magyar nyelvi implementációjában alkalmazni. A magyar nyelv egy elég nehezen feldolgozható nyelv, főként a ragozás rendszere miatt, így az interfész ezen implementációja jóval bonyolultabb, összetettebb, mint egy egyszerűbb nyelv esetén, mint például az angol vagy akár az eszperantó.

Az összefoglaló dokumentáció következő részei a morfológiai modul fő feladatait, kihívásait, ezek megvalósítási lehetőségeit ismerteti.

A tervezés első feladatai közé tartozik a modul interfészeinek meghatározása. A részletes tervezési dokumentációban olvasható, hogy a morfológiai modul a szövegtisztító modul kimenetét fogadja bemenetként, tehát evidens, hogy ezen két találkozási pont sémája egyforma. A morfológiai modul kimenete a bemenet kibővített leírása, a szavak morfológiai elemzése kerül bele az eredménybe többlet információként.

A modulok közötti kommunkáció nyelve az XML, melynek leírására az XML sémadefiníciós (XSD) fájlokat használhatjuk. A következő XSD tartalmak a morfológiai modul bemenetének és kimenetének struktúráját írják le:

<?xml version="1.0" encoding="UTF-8"?>

<xs:schemaxmlns:xs="http://www.w3.org/2001/XMLSchema"

targetNamespace="http://minervasoft.com/nli/textCleaner"

xmlns="http://minervasoft.com/nli/textCleaner"

elementFormDefault="qualified">

 

<xs:complexType name="Sentence">

<xs:sequence>

<xs:element name="Content" type="xs:string"/>

<xs:element name="Words">

<xs:complexType>

<xs:sequence>

<xs:element name="Word" type="xs:string"maxOccurs="unbounded"/>

</xs:sequence>

</xs:complexType>

</xs:element>

</xs:sequence>

<xs:attribute name="type" use="required">

<xs:simpleType>

<xs:restriction base="xs:string">

<xs:enumeration value="declarative"/>

<xs:enumeration value="interrogative"/>

<xs:enumeration value="imperative"/>

</xs:restriction>

</xs:simpleType>

</xs:attribute>

</xs:complexType>

<xs:element name="TextCleanerOutput">

<xs:complexType>

<xs:sequence>

<xs:element name="Sentence" type="Sentence"maxOccurs="unbounded"/>

</xs:sequence>

</xs:complexType>

</xs:element>

</xs:schema>

<?xml version="1.0" encoding="UTF-8"?>

<xs:schemaxmlns:xs="http://www.w3.org/2001/XMLSchema"

targetNamespace="http://minervasoft.com/nli/morpho/output"

xmlns="http://minervasoft.com/nli/morpho/output"

elementFormDefault="qualified">

 

<xs:complexType name="Suffixes">

<xs:sequence>

<xs:element name="Suffix"minOccurs="0"maxOccurs="unbounded">

<xs:complexType>

<xs:simpleContent>

<xs:extension base="xs:string">

<xs:attribute name="code" type="xs:string" use="required"/>

</xs:extension>

</xs:simpleContent>

</xs:complexType>

</xs:element>

</xs:sequence>

</xs:complexType>

<xs:complexType name="Case">

<xs:sequence>

<xs:element name="Stem">

<xs:complexType>

<xs:simpleContent>

<xs:extension base="xs:string">

<xs:attribute name="class" use="required"/>

</xs:extension>

</xs:simpleContent>

</xs:complexType>

</xs:element>

<xs:element name="Suffixes" type="Suffixes"/>

</xs:sequence>

<xs:attribute name="id" type="xs:positiveInteger" use="required"/>

</xs:complexType>

<xs:complexType name="AnalysedWord">

<xs:sequence>

<xs:element name="Case" type="Case"maxOccurs="unbounded"/>

</xs:sequence>

<xs:attribute name="id" type="xs:string" use="required"/>

</xs:complexType>

<xs:complexType name="Sentence">

<xs:sequence>

<xs:element name="Content" type="xs:string"/>

<xs:element name="Words">

<xs:complexType>

<xs:sequence>

<xs:element name="Word" type="AnalysedWord"maxOccurs="unbounded"/>

</xs:sequence>

</xs:complexType>

</xs:element>

</xs:sequence>

<xs:attribute name="type" use="required">

<xs:simpleType>

<xs:restriction base="xs:string">

<xs:enumeration value="declarative"/>

<xs:enumeration value="interrogative"/>

<xs:enumeration value="imperative"/>

</xs:restriction>

</xs:simpleType>

</xs:attribute>

</xs:complexType>

<xs:element name="MorphoOutput">

<xs:complexType>

<xs:sequence>

<xs:element name="Sentence" type="Sentence"maxOccurs="unbounded"/>

</xs:sequence>

</xs:complexType>

</xs:element>

</xs:schema>

A tervezés követező fontos feladata, lépése az adatok tárolási módszerének, szerkezetének meghatározása. A tervezés során meghatározásra kerülnek a kezelendő adatok típusai, amelyek a következők lehetnek:

  • szótövek
  • nyelvtani szabályok
  • morféma leíró kódok
  • kivételesen ragozandó szavak
  • hasonértelmű szavak.

Mivel egy nyelvben az előbb említett adattípusokból tetszőlegesen nagy számú előfordulást kell kezelnünk, így indokolt a hatékonyság, adatelérés gyorsítása érdekében valamilyen relációs adatbáziskezelő rendszer használata. A legtöbb adatbáziskezelő igen nagyfokú optimalizációra képes a lekérdezések, adatkezelő utasítások válaszidejének lehető legnagyobb fokú csökkentése céljából.

Mivel a morfológiai modul egy bonyolult NLI rendszernek csak az egyik építőeleme, így nem megengedető, hogy a morfológiai elemzés során értékes másodperceket veszítsünk és a feldolgozás ideje jelentősen megnövekedjen. Ezért a legoptimálisabb megoldást kell választanunk az adattárolásra, amivel a keresett adatokat a lehető leggyorsabban tudjuk elérni. A tervezési dokumentációban olvashatunk különböző tárolási módszerek (XML, adatbázis, memória) elemzéséről, összehasonlításáról. Ezekből a követelmények figyelembe vételével egyértelműen az adatbázisban való tárolás került ki győztesen.

Ezek után elemezhetjük még a különböző adatbáziskezelők paramétereit, sebesség tesztjeit, viszont mivel a jelenlegi technológiákkal az alkalmazandó adatbáziskezelő teljes mértékben paraméterezhető, illetve paraméteresen állítható, így teljesen mindegy, hogy milyen adatbáziskezelőt használunk. Az adatbáziskezelő kiválasztása az NLI alkalmazás fejlesztőjének feladata.

A morfológiai adatbázis tervezése a morfológai modul tervezésének, ill. az adattárolási tervezésnek a központi feladata. A következő ábrán látható a magyar nyelvű adatbázis modellje, amelyet a választott adatbáziskezelőben a fejlesztőnek kell megvalósítania:

 

Minden nyelvnek saját szabályrendszere van, amit a szavak elemzésénél figyelembe kell venni. A magyar nyelv ebből a szempontból igen bonyolult. A nyelv sajátossága a ragozás, azaz a toldalékokat a szavak végére ragasztjuk, létrehozva ezáltal új szavakat, szóalakokat. A szótövek és a toldalékok viszonylag nagy száma miatt a lehetséges kombinációk száma igen nagy.

Az elemzést nehezíti, hogy a toldalékok sokszor nem egyszerűen „ragadnak” a szavakra, hanem bizonyos módosulásokat szenvednek. Ezek többsége szabályszerű, azonban vannak kivételesen ragozandó szavak, melyek különböző toldalékok esetén más-más alakváltozáson mennek keresztül. A toldalékok mellett a szótövek is alakot változhatnak, ami szintén lehet szabályszerű, illetve kivételes. Így beszélhetünk szabad, illetve kötött tövekről.

A magyar nyelvben a következő alakváltozások fedezhetők fel:

  • utolsó szótag magánhangzójának nyúlása
  • szóvégi magánhangzó rövidülése
  • utolsó szótagbeli magánhangzó kiesése
  • szóvégi magánhangzó váltása
  • teljes hasonulás.

A nyelvtani átalakulási szabályok mellett fontos a morfémák sorrendjének kezelése is. Nem lehet ugyanis bármelyik morféma után bármelyiket illeszteni. Ezt a szabályrendszert egy gráffal íratjuk le, melyek élei irányítottak, a sorrendet mutatják. A gráf tartalmazhat kört is, amennyiben ugyanaz a morfématípus többször is állhat egymás után. Fontos azonban megjegyezni, hogy maximálnunk kell az ismétlések számát, ugyanis enélkül könnyen végtelen ciklusba keveredhetünk. A következő gráf például a toldalékok sorrendjét jelöli:

 

A bevezetőben már említésre került, hogy az NLI keretrendszer a morfológiai interfész magyar nyelvre történő alkalmazását tartalmazza. Ahhoz azonban, hogy ezt megtehessük, definiálni kell ezen interfészt.

A morfológiai motornak két fontos feladata van:

  • ragozott szó elemzése
  • szavak szabályok alapján történő ragozása.

Az elemzés funkciónál egyértelműen kijelenthető, hogy a bemenet egy sztring, mégpedig az elemzendő szó. A kimeneten viszont el kell egy kicsit gondolkozni.

Egy szó elemzésének bizonyos esetben több eredménye is lehet, ugyanis vannak azonos alakú szavak, illetve vannak olyan szavak is, melyek alapalakjukban különböznek ugyan, de ragozott alakjuk megegyezik. Ezekben az esetekben nem elegendő egyetlen egy eredményt visszaadni, az összes lehetséges megoldást meg kell kapjuk, ugyanis a szövegkörnyezet, illetve jelentés döntheti el, hogy a lehetséges eredmények közül melyiket is válasszuk.

Az elemzés eredménye tehát egy lista, amely gyakrabban egyelemű ugyan, néha azonban több elemet is tartalmazhat. Az eredmény egyes elemeinek pedig a következő információkat kell tartalmaznia:

  • szótő
  • szótő szófaja
  • toldalékok listája kódjukkal sorrendben.

A ragozás funkciója általában kevesebbszer használatos egy NLI rendszerben, azonban ha teljes párbeszédeket akarunk kezelni, akkor a válaszgenerálásnál nagy szerepet kaphat ez a funkció. A ragozás esetén a bemenetünk 2 részből áll:

  • a ragozandó szó (ez lehet egy szótő, vagy már ragozott szó) + szófaja
  • a ragozási szabálylista sorrendben.

A ragozás eredménye az elemzéssel ellentétben nem kíván hosszas átgondolást, ugyanis minden esetben egyetlen ragozott szót kapunk eredményül, vagy kivételt, ha a ragozás nem kivitelezhető.

Konklúzió

A cikksorozat jelen részében ismertetésre kerültek a morfológia alapelemei, funkciói. A magyar nyelvű szavak elemzése igen bonyolult, nagyon sok lehetőség van értelmes karakterláncolatok felépítésére. Mivel a morfológiai modul szolgáltatásai a mondatok elemzése esetén többször is meghívásra kerülnek, nagyon fontos a hatékonyság. Éppen ezért született meg a döntés, hogy a morfológiai szabályok, a nyelvek alapszavai adatbázisban egyenek tárolva, ugyanis ebben az esetben jól bevált elérési algoritmusok használhatóak. Ezen kívül meghatározásra került a morfológiai adatbázis struktúrája is, amelynek a legfontosabb elemei: az alapszavak (szótövek), ragozási szabályok és a kivételesen ragozandó szavak. Fontos az is, hogy egységes jelölésrendszert alklamazzunk az elemzés és ragozás során.

A cikksorozat következő részében a szemantikával, a mondatok jelentésének ábrázolásával foglalkozunk.

Jelen publikáció eredményei a GOP-1.1.1-09/1-2009-0028 számú, “Domain- és nyelvadaptív természetes nyelvű parancsfelület prototípusának kidolgozása” című projekt keretében születtek.

Azóta történt

Előzmények

Hirdetés