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

Beviteli eszközök: HID eszközök csatolása az NLI keretrendszerhez

Az előző cikkünkben meghatároztuk az NLI keretrendszer követelményeit, funkcióit és architektúráját. A természetes nyelvi interfésszel ellátott alkalmazásoknál fontos szereppel bír az az eszköz, amelytől az ember által kiadott szöveg, parancs származik. Ezen eszközök fő feladata, hogy valamilyen természetes nyelvű „generált” jelből a számítógép számára értelmezhető jelsorozatot, jelen esetben karaktersorozatot állítsanak elő. Legtöbb esetben valamilyen analóg-digitális konverzióról beszélhetünk, ahol az eszközök fajtájától, a bemeneti jel minőségétől, milyenségétől függően konverziós hibák jelentkezhetnek az átalakító kimeneti oldalán. Nagyon fontos a feldolgozás szempontjából, hogy a további modulok a lehető legpontosabb szövegbemenettel dolgozzanak, ezért szükség van a HID modulban egy ún. szövegtisztító almodul kifejlesztésére is.

A szövegtisztítás legjobban egy helyesíráselemzőhöz hasonlítható. A HID eszköz típusától függően azonban az alkalmazandó algoritmusokban lehetnek különbségek, ugyanis a hiba jellegére igazított algoritmusok hatékonyabban és pontosabban működnek. Másféle hibák jelentkeznek egy billentyűzetről való bevitel esetén (gépelési hibák) és más hibák jelentkeznek egy OCR rendszer kimenetén (képfelismerési hibák).

A legegyszerűbb, legpontosabb, ámde legkényelmetlenebb beviteli eszköztípus a számítógép billentyűzete. Mivel a modul kimeneteként természetes nyelvű szöveget kell előállítani, ezt a legkönnyebben egy billentyűzettel tehetjük meg. Ettől valamelyest bonyolultabbak az OCR rendszerek, melyek általában valmilyen nyomtatott szöveget, mint képet ismernek fel és állítanak elő belőle szövegkimenetet. Ebbe a témakörbe tartozik, de valamelyest bonyolultabb az emberi kézírás felismerése. Ez utóbbi Jóval több hibalehetőséget hordoz magában és jóval bonyolultabb algoritmusokat kíván meg, ugyanis a felismerendő minták száma is jóval nagyobb lehet, mint a normál nyomtatott szöveg felismerése esetén.

Az egyik - mondhatni legbonyolultabb - ember által létrehozott bemeneti jel maga az emberi beszéd. A beszédfelismerés egy igen népszerű kutatási terület, ahol a különböző nyelvek esetén egészen eltérő eredmények születtek. Angol nyelv esetén például igen sok jól működő felismerő rendszer van, ugyanis az angol nyelv feldolgozása, szintaxisa viszonylag könnyű. A magyar – köztudottan bonyolultan ragozó nyelv - esetén azonban a lehetséges szavainak száma igen nagy, ezért nem olyen egyszerű a helyzet, mint az angollal.  A képzők, jelek, ragok rendszere a szóalakokat igen sokféle módon képes változtatni, így ha ugyan felismerjük a szó tövét, de nem tudjuk, hogy a szó milyen toldalékot kapott, akkor a pontos jelentéséről is hiányos csak ismereteink lehetnek. Jó lehet egy olyan rendszer, ahol csak meghatározott kulcsszavakat kell keresnünk, ha azonban a szavak toldalékos alakja is számít, akkor igencsak bajban lehetünk.

A prototípus alkalmazásban egy beszédfelismerő rendszerrel ellátott hardvereszközt használunk. A cikk következő részeiben a HID modul fő feladatai, megvalósítási lehetőségei olvashatók.

 

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 modul a HID eszköz kimenetét fogadja bemenetként. A bemenet tetszőleges formában szerepelhet, azonban a tartalma jól meghatározható: a természetes nyelvi szöveget kell tartalmaznia. A bemenet így láthatóan igen egyszerű, annak definálására semmilyen egyéb leíróra nincs szükség.

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 tartalma a HID modul kimenetének struktúráját írja 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>

A modul fő funkciója, hogy fogadja a HID eszköz által generált természetes nyelvű tartalmat és feldolgozza, szükség esetén átalakításokat végez rajta. A feldolgozás során a következő feladatokra kell kitérni:

  • a beérkező szöveg felbontása szavakra
  • a mondat típusának meghatározása (kijelentő, kérdő, felszólító)
  • a szavak ellenőrzése, tisztítása, kijavítása.

A beérkező szöveg felbontásához a rendszernek ismernie kell a szavakat határoló írásjeleket, melyek mentén el tudja végezni a szeletelést. Ezek a karakterek nyelvenként akár eltérőek is lehetnek, így szükségessé válik ezeket a jeleket egy adatbázisban vagy egy leíró XML fájlban eltárolni. Ezen adatforrások kezelése a modul alábbi funkcióival válik lehetővé:

  • szóhatárolók felvitele
  • szóhatárolók törlése
  • szóhatárolók listázása.

A bemeneti szöveg tartalmazhat több mondatot is egyszerre, így szükség lehet a szöveg mondatokra bontására,  amihez az előbb említettekhez hasonló funkciók használatosak, immár mondatok elválasztására.

Az így kapott eredmény a beérkező mondatokat, illetve annak szavait fogja tartalmazni sorban. A prototípus alkalmazás kizárólag egy mondatos bementeket fog kezelni.

A mondat típusának meghatározása a későbbiekben kap fontos szerepet, ugyanis a mondat típusa utalhat arra, hogy milyen fajta műveletet kell elvégeznie a rendszernek a feldolgozás végén. Például kérdő mondat esetén valamilyen információ kérést intézünk az alkalmazáshoz, míg felszólító mondat esetén valamilyen parancsot adunk ki. A következő mondattípusok kerülnek feldolgozásra a későbbiekben:

  • kijelentő
  • kérdő
  • felszólító.

Az óhajtó és felkiáltó mondatok renszerünkben nem kerülnek elemzésre és feldolgozásra.

A szavak ellenőrzése a modul egyik központi feladata. Fontos megemlíteni, hogy az alkalmazás egy adott domain-en belül képes működni. Így az is kiköthető, hogy az alkalmazásban csak az adott domain-ben értelmezhető szavak szerepelhetnek. Az ellenőrző legegyszerűbb megvalósítása egy adatbázis, amely tartalmazza az összes lehetséges szót a domain-ből. Ha a szó nem szerepel benne, akkor valószínűleg hibás. Ezen tény megállapítása igen egyszerű feladat. Ettől jóval bonyolultabb lehet a szó javítása. Feltételezzük, hogy a szó a domain-ből való, így meg kell vizsgálnunk, hogy melyik adatbázisban lévőhöz áll a legközelebb. Itt használhatunk valamilyen szótávolság elemző algoritmust. A nyertes szó lehet az elírt javított változata. Gondot okozhat, ha több lehetséges jelölt is akadhat a javítás során. Ekkor a döntésben a szövegkörnyezet segíthet, amennyiben rendelkezünk erről tárolt információval.

A modul feladatai közé tartozik a HID eszköz megtervezése és a rajta futó alkalmazás-komponens megvalósítása. Az eszköz egy mini számítógép, amely hosszas elemzési folyamat során került kiválasztásra.  A választásban alkalmazott szempontok a következőek:

  • kicsi, kompakt méret
  • megbízhatóság
  • Intel CPU
  • Windows és Linux OS futtatás
  • rendelkezzen hangkártyával, mikrofon bemenettel, fülhallgató kimenettel
  • legyen háttértárolója (HDD v. CF)
  • alacsony áramfelvétel
  • vezetékes hálózati interfész
  • ára 500 euró alatt legyen.

Ezeket figyelembe véve az elemzett eszközök közül a következő kettő került ki győztesen:

  • Lanner’s LEC-7000 és
  • Portwell’s WEBS-1320.

A modulban a legnagyobb fejtörést a megfelelő beszédfelismerő okozta. A magyar nyelvű beszédfelismerésre sajnos igen korlátozott lehetőségek vannak, igen kevés jól működő megoldás van. A kutatás során több beszédfelismerő rendszert vizsgáltunk meg. Az egyik egy magyarországi egyetem kutatói által kifejlesztett motor, amely igen jól működik pl. magyar utcanevekre, azonban a hibatűrő képessége nem a legjobb: a ragozott alakokat már nem ismeri fel.

A másik megoldás a Nuance cég által fejlesztett beszédfelismerő motor, amely sokkal pozitívabb eredményeket szolgáltatott mind a taníthatóság, pontosság, mind pedig a válaszidő tekintetében. Így összességében a Nuance által fejlesztett felismerőre került a választás.

Az eszközön egy, a vezérlendő alkalmazástól elkülönített program fog futni, amely a vezérlendő alkalmazás felé TCP socket kommunkáció során fog adatokat szolgáltatni. A HID eszköz fogadja az emberi beszédet, azt átadja a felismerőnek, amely átalakítja és a szöveges változatát elküldi az NLI alkalmazásnak - a már felépített TCP csatornán. Az NLI alkalmazás fogadja a kimenetet és elkezdi annak feldolgozását az NLI feldolgozási láncon végighaladva.

Konklúzió

A cikksorozat ezen részében meghatározásra került a prototípus mintaalkalmazásban használatos HID eszköz és a rajta futó beszédfelismerő megoldás. HID eszközként két számítógép került kiválasztásra: a Lanner’s LEC-7000 és Portwell’s WEBS-1320.

A természeres nyelvi interfésszel kiterjesztett alkalmazás használatának kényelmesebbé tételéhez a Nuance beszédfelismerő motorja: a Nuance Recognizer került kiválasztásra.

A következő cikkünkben megvizsgáljuk a morfológia szerepét a bemeneti szövegek elemzésében.

 

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