Gépi tanulás a szövegbányászatban

Szövegbányászat (Natural Language Processing, NLP)

Óriási mennyiségű adat érhető el strukúrálatlan, például szöveges formában. Ezen adatok automatikus feldolgozását nevezzük szövegbányászatnak (Text Mining) vagy nyelvtechnológiának (Natural Language Processing, NLP) vagy számítógépes nyelvészetnek (Computational Linguistics). Az emberi nyelvek gyönyörűek. Ugyanazt száz féle képpen ki tudjuk fejezni és egy szó vagy kifejezés sok mindent tud jelenteni más mondatkörnyezetben. A nyelvtechnológia tehát a mesterséges intelligencia egyik területe, az emberi nyelv írott szöveg számítógépes megértésével, ember és számítógép közti szöveges kommunikációval foglalkozik. Az emberek által, emberi olvasásra írt szövegek gépi értelmezése máig megoldatlan probléma. Azonban a szövegek feldolgozásában és generálásában rengeteget fejlődött a technológia az elmúlt 20 évben.

Nyelvtechnológiai alkalmazások

Számtalan célalkalmazás van, ahol emberek által írt szövegeket kell számítógéppel megértenünk és/vagy ember számára érthető szöveget kell algoritmikusan generálnunk. A teljesség igénye nélkül, néhány ilyen célalkalmazás:

  • Chatbot, intelligens asszisztens: a felhasználó szöveges (gépelt vagy beszédből szövegátirat) kérését fel kell dolgozni, megérteni, hogy mire vonatkozik a kérés, majd emberi nyelven megfogalmazni a választ.
    Egy elképzelt példa beszélgetés az intelligens banki asszisztenssel.
  • Gépi fordítás (machine translation): egyik egész szöveget kell egy forrásnyelvről (pl. koreai) lefordítanunk a célnyelvre (pl. magyar) úgy, hogy a fordítás a lehető legjobban visszaadja a forrásszöveg tartalmát. A személyes felhasználás területén piacvezető a Google Translate.
  • Dokumentumokat osztályozhatunk számos szempont szerint. Osztályozási szempont lehet a dokumentum fő témája, vagy akár a szerző által kifejezett érzelmek/vélemények is.
    Nézd meg a megjegyzésekkel ellátott PPTt a Black Swan Szegeden folyó szövegbányászati munkájáról.
  • Az információ kinyerés (information extraction) célja, hogy a dokumentumokat mélyebben elemezze. Segítségével pl. üzleti hírek szövegeiből kinyerhetünk olyan strukturált adatbázist ami tartalmazza, hogy melyik cég, melyik másik cég, hány százalékos tulajdonrészét vásárolta meg, mikor és mennyiért. Például: A NagyHal ZRt. tegnap előtt bejelentette, hogy a jövő keddi hatállyal birtokába kerül a KisHal Kft. 55%-os tulajdonrésze.
    Vagy biológiai tudományos publikációk elemzésével építehetünk adatbázist, hogy milyen fehérjék közt mutattik ki kapcsolatot kutatók korábban. Az információ kinyerés struktúrálatan (nyers folyószöveg) adatból struktúrált adatot (adatbázisrekordok mezőkkel) állít elő.
Még a legegyszerűbb feladatot sem lehet szabályokkal (pl. dokumentumosztályozáshoz felsoroljuk a témákra jellemző szavakat) megoldani, mert az emberi nyelv túl gazdag ehhez, rengeteg a kivétel és a jelentésmódosító nyelvi jelenség a szövegkörnyezetből. Minden alkalmazáshoz gépi tanulási megoldásokra van szükség. A különböző célalkalmazások különböző gépi tanulási feladatokra vezethetőek vissza, a dokumentum egyedek osztályozásától a szavak címkézésén át a szöveg különböző szövegrészei közt fenálló kapcsolatok felismeréséig. Ebben a leckében a legegyszerűbb feladattal, a dokumentumok osztályozásával fogunk megismerkedni.

Szöveges tartalmak előfeldolgozása

A nyelvtechnológai alkalmazások tipikusan két fázisból épülnek fel. Az első lépésben a nyers folyószövegek előfeldolgozáson esnek át. Ez tipikusan nem függ (vagy csak kis mértékben) a célfeladattól, viszont minden nyelvre más megoldásra van szükség. A szöveg feldolgozása a gépi tanulás előtt elengedhetetlen, hiszen a szöveg strukturáltalan adat, a gépi tanuló algoritmusok pedig jellemzővektorok kezelésére képesek. A leggyakrabban alkalmazott előfeldolgozási lépések:

  1. Mivel a legtöbb nyelvben a szöveg alapvető alkotóelemei a szavak, így általában a szöveges adat feldolgozása során elsőként a dokumentumokat szavak sorozatára bontjuk fel (tokenizálás).
  2. Legtöbbször az egyes szavak többszöri, csupán kis- és nagybetűs írásmódjukban eltérő szavakat azonosnak szeretnénk tekinteni (pl.: Magyar, magyar, MAGYAR), ekkor a szöveg karaktereit kisbetűssé alakítjuk, hogy a különböző alakok elveszítsék különbözőségüket.
  3. Időnként a szavak különbözőképpen ragozott írásmódjait sem szeretnénk megkülönböztetni, ekkor valamilyen szótövesítő eljárást alkalmazunk, ennek folyamata erősen függ a feldolgozni kívánt nyelvtől. Azokon a nyelveken, melyeken ehhez rendelkezésünkre áll megfelelő minőségű lemmatizáló szoftver, minden toldalékolt szót helyettesíthetünk a szótári alakjával. Sokszor azonban csak levágjuk az utolsó karaktereket (stemming), ekkor a kapott alak nem feltétlenül a szó nyelvtanilag helyes töve lesz.
  4. Legtöbbször a szövegből eltávolítjuk az írásjelek egy meghatározott halmazát, amik a szavak szintjén nem bírnak jelentéssel.
  5. Szintén bevett eljárás az adott nyelvre jellemző gyakori és önmagukban jelentést nem hordozó szavak eltávolítása, ebbe a kategóriába tartoznak a névmások, névelők, kötőszavak stb. Ezt az eljárást stopszó szűrésnek nevezzük.
  6. Gyakran szükségünk van még a szavak szófajának meghatározására (POS tagging) is. Például ha ki akarjuk szűrni a mellékneveket.
A véleménydetekciós feladat során több lépést kell megoldanunk. Az első, előfeldolgozási lépések a mondat tokenizálása, majd az egyes szavakhoz azok szófajának (és egyéb morfológiai jegyeinek rendelése), majd az egyes szavak közt fenálló nyelvtani (szintaktikai) kapcsolatok azonosítása. A tokenizálás szabály-alapú rendszer, míg a morfológiai egyértelműsítő és a szintaktikai elemző gépi tanult megoldások.
Magyar nyelvű szövegek előfeldolgozására a piacvezető megoldás az SzTE Nyelvtechnológiai csoportjában fejlesztett magyarlanc nevű szoftvercsomag.

Jellemzőkinyerés szövegekből

A dokumentum osztályozási feladatnál az egyedek a dokumentumok (folyó szöveges) és egy előre adott osztályhalmazba kel azokat besorolnunk. Ahhoz, hogy az osztályozót gépi tanulhassuk, az egyedeket jellemzőkkel kell leírnunk. Ehhez először, a fenti előfeldolgozási lépéseket végre kell hajtanunk, aminek kimenete a szavak tisztított és kiegészítő információval ellátott listája. Dokumentumok jellemzőkkel leírására a bevett módszer az ún. szózsák (bag-of-words) modell, melynek során egy szótárt alkotunk, melybe belekerül a dokumentumhalmazunk összes szava. Ez a szótár lesz az adatbázisunk jellemzőkészlete. Ezt követően pedig az egyes dokumentumokra leszámoljuk, hogy abban a szótár egyes szavai hányszor szerepelnek (term frequency), ez adja meg az egyed jellemzővektorát. Így minden dokumentumhoz rendelt jellemzővektor hossza azonos lesz megegyező a szótár hosszával (egy szótárelem nem szerepel a dokumentumban 0 a jellemző értéke), ami azért fontos, hiszen a modellezés során azonos hosszú jellemzővektorokat szeretnénk kezelni.

A szózsák (bag of words) modell.Forrás: programmersought.com
A szózsák modell a szavak egy zsákját adja, ugyanis elveszik ebben az esetben a szavak sorrendisége, csak annyit jegyzünk fel, hogy w szó hányszor szerepelt, de hogy milyen szavak környezetében, azt nem tudjuk. A szavakat beleöntjük egy zsákba... Ezen tudunk segíteni ha a szózsák modellben nem csak az egyes szavak (unigramok) előfordulását figyeljük meg, hanem akár egymást követő szópárok (bigram), szóhármasokét (trigram) is, ezeket n-gramnak nevezzük. Az n-gramok hozzáadásával a szótárhoz együtt kezelhetjük azokat a kifejezéseket, amelyek többletjelentést hordoznak a kifejezést alkotó szavakhoz képest. Például ahelyett, hogy a „new” és „york” szavak előfordulását külön tartanánk csupán számon, a bigramok alkalmazásakor a „New York” kifejezés egyben írt formájában is megjelenik jellemzőként.
Végül ha azt szeretnénk, hogy az egyes jellemzők/szavak súlya ne pusztán az előfordulásuk számát reprezentálja az adott dokumentumban, hanem az adott szó prediktív erejét is, akkor az ún. Tf-idf (term frequency inverse document frequency) súlyozást szoktuk jellemzőértéknek használni. Itt ún. idf (inverse document frequency) érték azon dokumentumok számának inverze, amelyben az adott szó megtalálható az adatbázisunkban. Ha egy szó majdnem minden dokumentumban előfordul, akkor nem sokat segít majd a dokumentumokat osztályozó modell megalkotásában, ezért kisebb súlyt érdemes hozzárendelni. \[ tfifd(w,d) = tf(w,d) log(\frac{1}{df(w,D}) \] Egy szó Tf-idf értéke arányosan nő a szó előfordulási gyakoriságával a dokumentumon belül, illetve csökken, minél gyakoribb az adott szó a teljes adatbázisban.

Ellenörző kérdések

  1. Dokumentum {pozitív, semleges, negatív} véleményosztályozó algoritmust kell fejlesztened. Próbálj meg szabályokat írni erre, majd keress ellenpéldákat, miért nem működnek a szabályok!
  2. Miért fontos, az előfeldolgozásnál a szótövesítés?
  3. Hogyan lehet orvosolni, hogy a szózsákban elveszik a szavak sorrendisége?

További ajánlott anyagok