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

1.  Az irány: Természetes nyelvi interfészek felépítése

Napjainkban, a XXI. század rohanó világában egyre nagyobb szerepe van a számítógépeknek. Segítségükkel az információ közlés egy teljesen új dimenzióját valósíthatjuk meg a lehető leggyorsabban, de ennek ára is van. A számítógépek megjelenésével megjelentek a mesterséges nyelvek, mint például a programozási nyelvek - melyeket a felhasználóknak el kell sajátítaniuk ahhoz, hogy a számítógéppel kommunikálni tudjanak, információt szerezhessenek tőle.

Már szinte a kezdetektől él az igény az emberekben, hogy a számítógéppel a hétköznapi életben megszokott nyelvükön és kifejezésmóddal kommunikáljanak, azaz természetes nyelvet (Natural Language) használjanak. Az információs rendszereket tekintve a természetes nyelvi feldolgozás (NLP, natural language processing) egyik legfontosabb alkalmazási területét az emberközeli lekérdező felületek jelentik. A természetes nyelvi interfésszel rendelkező információs rendszerek gyökerei 1970-re nyúlnak vissza. Az úttörő LUNAR projekt a holdkőzetek adatbázisában való lekérdezésekhez dolgozott ki NLI (természetes nyelvű interfész) felületet. A RENDEZVOUS (Codd, 1977) rendszer volt az első általános célú adatbázis NLI modul. Az NLI lekérdező modulok egyik alapfeladata a természetes nyelven beérkező parancsok átfordíása a feldolgozó modul saját parancsnyelvére.

Természetes nyelvek alkalmazási területei:

  • gépi fordítás,
  • információ feltárás,
  • beszédfelismerés,
  • adatbányászat, stb.

Természetes nyelvi felület kialakítása

Az eddigi kutatások a természetes nyelvű interfészek fejlesztése témakörében jó iránymutatásul szolgálnak azon fejlesztőknek, akik NLP keretrendszer megalkotását tűzik ki célul maguk elé. Az eredmények azt mutatják, hogy még elég messze vagyunk attól, hogy egy teljesen általános, hatékony,  “emberhez hasonló” feldolgozót hozzunk létre. A legfőbb megoldandó problémát a jövőre nézve a különböző feldolgozó mechanizmusok hatékony implementációja jelenti és természetesen emellett a hatalmas mennyiségű információmennység gyors és rugalmas elérését, tárolásást is szükségszerűen meg kell oldani.

Sajnos a legtöbb jelenlegi módszer és megközelítés egy-egy speciális témakörre került kidolgozásra és éppen ezért k nem lehetséges azokat hatékonyan kiterjeszteni teljesen általános téma feldolgozására. Például a “Concept Lattice” elmélet igen erős abban, hogy a világ objektumairól fogalmat alkosson és ezáltal teljes általánosításra képes keretrendszerek alkothatóak vele, de hiányzik belőle a modularitás és a fuzzy képesség. A különböző módszerek kombinációjakor a következő irányelveknek kell teljesülnie:

  • Legyen a rendszer egyszerű, amennyire csak lehet: az elvárások nem szabad, hogy felülmúlják a képességeket; az egyik legnagyobb hiba ezen a területen, hogy a kutatók nem valós cél tűznek ki maguk, illetve a rendszerük elé. Annak ellenére, hogy nagyon sok eredmény létezik a különböző, izolált tématerületeken, ezek párosítása és integrációja még jó ideig nagy probléma lesz.
  • A fő szempontok a fejlesztés alatt a következők kell legyenek:
    • rugalmasság
    • hatékonyság
    • modularitás (kiterjeszthetőség)
  • Valós adatokkal vló tesztelhetőség: gyakran elfelejtkeznek a kutatók arról, hogy egy algoritmus használhatósága a valós életből vett adatokon történő végrehajtás költségeitől függ. Éppen ezért az online és a kötegelt végrehajtási módok teljesen különböző követelményekkel rendelkeznek.
  • A módszerek legyenek elméletileg megalapozottak.

A jelen esetben egy kifejlesztendő valósan működtethető keretrendszernek a következő jellemzőkkel kell  rendelkeznie:

  • korlátozott számú funkciókészlet (kevesebb, mint 100) a hozzá tartozó paraméterekkel
  • korlátozott méretű szemantikai szótár (kevesebb, mint 10.000 szó): a szótár parametrizált kifejezéseket és funkció attribútumokhoz hozzárendelt komponenseket tartalmaz
  • a bemenet egy-két nyelv szabad szöveges mondata (magyar, angol)
  • a kimenet egy megfelelő függvényhívás
  • a legmegfelelőbben illeszkedő függvény kiválasztása 1 másodpercen belül meg kell történjen a prototípus rendszerben

Az ideális NLI rendszerhez szükséges modulok

A modul fő feladata a mondathatárok meghatározása. A legfontosabb alkalmazandó szabályok a mondathatárok meghatározásánál:

  • mondatlezáró jelek mehatározása ( . ! ?)
  • mellékmondatok felismerése ( “-“ jel)

Mivel a fő elemzendő egység a mondat, így a mondat végének meghatározása fontos eleme a szövegfeldolgozó alkalmazásnak. A mondathatárokat leggyakrabban a pont, kérdőjel vagy felkiáltójel jelenti, azonban vannak esetek, amikor nem ennyire egyértelmű a helyzet. Például a pont egyik esetben lehet mondatzárás, de máskor állhat egy rövidítés után - vagy dátumoknál-, ahol viszont nem jelent mondatvéget. Sőt, amennyiben egy rövidítés a mondat utolsó eleme, akkor a mondatot záró írásjel és a rövidítés után álló pont meg is egyezik.

Szerencsére minden nyelvben jól körülírt szintaktikai szabályok írják le a mondatelválasztásokat. Ezen szabályok könnyedén és hatékonyan hasznosíthatóak bármilyen programnyelven.

A mondattagoló rendszereket különböző osztályokba sorolhatjuk. Az első nagyobb osztályba azok a rendszerek tartoznak, melyek egyedileg beírt szabályokkal dolgoznak. Ezen szabályok általában reguláris kifejezés formában vannak jelen a rendszerben kiegészítve, egy rövidítésjegyzékkel, a gyakori szavakkal, nevekkel, stb. Például az Alembic workbench olyan mondattagoló alrendszert tartalmaz, melyben több, mint 100 reguláris kifejezés-szabály található Flex-ben írva.

A mondattagaló rendszerek másik osztálya olyan gépi tanulási technikákat foglal magában, mint a döntési fák, maximum entrópia modellek, neurális hálók, stb.

Vannak olyan programozási nyelvek, melyekben igen erős a sztring feldolgozó modul, de természetesen az általános programozási nyelvekhez is találhatunk rengeteg szövegfeldolgozó eszközt.

Mindezek mellett a javasolt megvalósítás ezen almodul kifejlesztésére egy saját mondattagoló alrendszer implemetálása meglévő nyílt eszközök segítségével. A modulban szabványos, nyílt sztring feldolgozó keretrendszereket célszerű használni.

A modul feladata, hogy meghatározza a mondatot alkotó szavakat és kifejezéseket. Jónéhány szóhatároló létezik, úgymint szóköz, pont, pontosvessző, vessző, stb. A szótagoló hasonlóképpen működik, mint a mondattagoló. A fő nehézséget a szóhatárok megkeresésében az elválasztó jelek sokfélesége okozza. Pédául a szóköz általában egy szóhatároló, de néha egy szám leírásában is szerepel.

A kifejezések felismerése általában még nehezebb feladat, ugyanis nagyon sok fogalom van, amit egy szavak sorozatával tudunk csak leírni egyetlen szó helyett.

A kifejezések automatikus felismerése olyan terület, ahol a statisztikai módszerek jól használhatóak. Ezen módszerek alapelve általában az, hogy a gyakori együttes előfordulású szósorozatokat keresik. A sztochasztikus tagolók nagyfokú pontosságot képesek elérni anélkül, hogy bármilyen szintaktikai elemzést is végeznének az inputon. A tanító fázis eredményeképpen egy szótár jön létre, amely tartalmazza az összes felismert kifejezést. A további fázisokban a kifejezések keresése ezen szótár alapján történik. Minthogy nincsenek pontos szabályok a kifejezések létrehozására, így egy tömör szabályrendszer helyett a kifejezések feltárásának legegyszerűbb módja: a szótár használata.

A kifejezés keresés lényege, hogy olyan szóláncokat találjunk, melyeknek a többi elemtől jól elkülöníthető jelentése van. Ezen modul logikája viszonylag egyszerű, a nehézség mindössze a szótár megalkotásában rejlik. A kifejezések összegyűjtésének legegyszerűbb módja egy nyelvi szótár használata. Minthogy a nyelvi szótárak kifejezéseket is tartalmaznak, a kifejezések így kinyerhetőek belőlük.

Ezen előfeldolgozó modul másik célja a szavak szűrése. A bejövő mondat tartalmazhat olyan szavakat, melyek nincsenek benne a szótárban, és ezáltal a domain-ben sem, ugyanis a szótár kizárólag a domain szavait tartalmazza. A tartományon kívüli szavak számunkra lényegtelenek. Ezen modul az összes olyan szót el fogja távolítani, amelynek nincs jelentése az adott szövegösszefüggésben.

A szótövező modul képes meghatározni egy szóalak szótövét és a toldalékokat egy adott nyelv nyelvtana alapján. Az általános szótövek mellett van néhány speciális szótípus, melyek elemzésére speciális algoritmusokat kell használnunk. Ilyen szótípusok a

  • számok,
  • azonosítók,
  • dátumok, stb.

A szótövező modulok általában ember által alkotott szabályrendszer alapján alakítják a szóalakokat morfémákká. A Porter szótövező például kb. 60 - szakértők által létrehozott - konverziós szabályt alkalmaz. A Porter szótövező olyan ragleválasztó algoritmust használ, amihez hasonló megoldás található az arab nyelv szótövező algoritmusában. Ez a módszer egy tömör szabályrendszert alkalmaz, a kivételek kezelése azonban nem illik bele ebbe a keretrendszerbe. Egy másik gyakori megközelítés, hogy  egy brute-force algoritmussal kikeressük a szótöveket egy adatbázisból, táblából.

A  sztochasztikus szótövezők valószínűségi értékeket használnak a szótövek meghatározására, mely értékek a tanító mintákból kerülnek meghatározásra. Már az 1980-as évek óta használnak és készítenek algoritmikus és lexikai szótövezőket különböző nyelvekhez.

A szótövező fejlesztése igen komplex feladat, ezért érdemes néhány lehetséges alternatívát megvizsgálni, mely a szótövező modulba esetlegesen beépíthető - egyszerűsítve ezzel a fejlesztés folyamatát.

Egyik lehetőség egy létező szótövező motor megvásárlása. E piaci megoldás problémája, hogy a legtöbb a fő nyelvekre készült: angolra és spanyolra. A magyar nyelvre csak néhány szótövező létezik, ilyen például a Humor SDK. E szótövezőkkel végzett tesztek alapján elmondható, hogy nagy pontosságra képesek, de nem rendelkeznek nyílt alkalmazás-fejlesztési interfésszel a különböző programozási nyelvekhez. A másik hátránya ennek a megoldásnak, hogy a szótövező termékek árai igen magasak. Alternatív megoldás lehet egy saját szótövező fejlesztése, mely a következő előnyös tulajdonságokkal rendelkezik:

  • jobb illeszthetőség az NLI rendszer többi komponenséhez,
  • az algoritmus speciális követelményekhez igazítható,
  • rugalmasság, új szolgáltatásokkal való kiterjeszthetőség,
  • adaptálás bármely nyelvre,
  • függetlenség más gyártóktól.

A megoldás hátrányos tulajdonságai:

  • pontosság és sebesség nagyobb kockázata,
  • hosszabb fejlesztési idő.

Kutatócsoportunk már vett részt magyar szavakat szótövező program prototípusának fejlesztésében, és használt már piaci szótövező terméket is.  Teszteredmények és összehasonlítások viszont nincsenek a valós, életszerű paraméterekkel. Ezzel a háttérmunkával lehetségessé válik, hogy minkdét alternatívát elemezzük és összehasonlítsuk a következő projektfázisban, mielőtt még az alkalmazási szakaszba lépnénk.

A mondatok és szituációk szemantikájának leírásához egy speciális szemantikai nyelvre van szükség. Manapság az ontológia-alapú nyelvek a “legkedveltebbek” ezen a területen. Az ontológia orientált megoldások fő előnyei a következőek:

  • szabványos reprezentációs forma,
  • ontológia motorok nagyobb fokú támogatása,
  • rugalmas funkcionalitás.

Az ontológia nyelvek közül az OWL nyelv vált a legszélesebbb körben ismertté és használttá. Az OWL nyelvet több ontológia motor is támogatja, mint például a Protégé ontológia szerkesztő. Mivel az ontológia csak egy keretrendszer, mellyel egy tartomány szemantikája leírható, a különböző tartományok eltérő fogalmi struktúrával rendelkezhetnek. Ezért a projektben ki kell fejleszteni egy speciális ontológia sémát a mondat szemantikájanak leírásához. Egy lehetséges alternatíva egy ECG-szerű séma leírás, amely

  • POS elemekre épül (predikátum, tárgy, ...)
  • logikai formulává alakítható,
  • rugalmasan kiterjeszthető,
  • nagyon hasonlít a szófüggőségi nyelvtanra, amely alkalmazható a szabad szórendű nyelvekre.

A domain mondatainak szemantikája a generált ECG-szerű tudásreprezentációs formában leírható OWL nyelven, mely a rendelkezésre álló ontológia szerkesztők (pl. Protégé) használatával validálható és aggregálható. Az ontológia szerkesztők mellett egy magasabb szintű különálló tudáskinyerő motor (pl. Jess) építhető be az ontológia feldolgozó modulba, melynek segítségével a szabály adatbázis mérete csökkenthető a felesleges elemek elhagyásával.

Egy mondat különböző részei különböző szemantikai egységekhez (POS) tartoznak. A szemantikai gráfban szereplő elemeket az egyes mondatrészekhez kell rendelni. A modul feladata a kifejezések elemeinek a mondat szavaihoz való hozzárendelése. Minden POS egység rendelkezik egy leírással, mely meghatározza, hogy mely szavak és milyen formában fordulhatnak elő a kifejezésben. Az illeszkedés vizsgálathoz egy távolságmértéket kell definiálni, mely leírja a séma és a szószekvencia hasonlóságát. A hasonlóság egy vectorral írható le, ekkor a feladat a legjobban illeszkedő vektor megtalálása egy adott pozicióhoz. A távolságmetrika definiálása a gráf és a mondat között a modul első kulcsfontosságú feladata.

Mivel nincs közvetlen eszköz a probléma megoldására, így az illesztő modult ki kell fejleszteni a projekt keretében. Korábbi tapasztalatok azt mutatják, hogy a lentről felfelé megközelítés időben hatékonyabb megoldás lehet. Ez alapján vesszük a két gráf távolságát, majd következő lépésben keressük a legközelebbi gráfot a halmazból. Létezik néhány alapvető módszer távolság-alapú illeszkedés vizsgálatra euklideszi és metrikus térben egyaránt. A metrikus tér esetén pl. a “vantage point” fa jó közelítést adhat a legjobb illeszkedére akár nagy objektumhalmazban is. Ez alapján az adott pontra történő távolság tesztelése után a vizsgálati tér mérete csökkenthető.

A modul feladata a problémakör generált sémáinak kezelése. A tárolás mellett a modul használható még a sémával kapcsolatos egyéb műveletre is, mint pl. séma verzionálás, illetve séma általánosítás.

A séma általánosítás során az alapszintű sémákból magasabb színtű, absztraktabb sémák alkothatók.

Ezen részegység feladatai nagyon speciálisak és különböző területekről (verziókövetés, séma általánosítás) tartalmaz modulokat. Mivel nincs nyílt forráskódú, szabadon használható termék, mely a kívánt funkcionalitást biztosítja, így ezen részegység is lefejlesztésre kerül a projekt keretében.

A célnyelv egy API függvény halmaz. A modul felelős a következő műveletekért:

  • függvényhívások definiciója és módosítása,
  • függvények paraméterezése,
  • a POS elemek hozzárendelése a hívás különböző paramétereihez,
  • függvénycsoportok kezelése.

A modul hozzáféréssel rendelkezik az ECG sémákhoz és a felhasználó hozzá tudja kötni a függvényhívások paramétereit az ECG modell összetevőihez. A modulnak rendelkeznie kell  funkció kötésének leírásához szükséges elemekkel. A hiányzó, illetve kötelező paraméterek kezelésére is fel kell készíteni a kezelőt. Mivel ezen modul igen speciális feladatokat lát el, saját fejlesztésre lesz szükség.

A modul feladata, hogy a nyertes szemantikai gráfot függvényhívások listájává konvertálja. A konverzió az API függvény kezelő modul transzformációs szabályai alapján történik.

Következtetés

A megvalósítandó NLI keretrendszernek nagyon sok apró lépést, átalakítást kell végezni a bemenő mondatokon, míg egy alkalmazás-funkcióhívás lesz belőle. A fő szempontok a fejlesztés alatt összegezve a következők kell legyenek:

  • egyszerűség,
  • rugalmasság,
  • hatékonyság,
  • modularitás (kiterjeszthetőség),
  • elméleti megalapozottság,
  • valós adatokkal történő tesztelés.

Azóta történt