nyest.hu
Kövessen, kérem!

Nem lát minket a Facebookon?

Kenyérpirítón szeretné?

Legutolsó hozzászólások
A nyelvész majd megmondja
A legnépszerűbb anyagok
Írjon! Nekünk!
nyest.hu
nyest.hu
 
A web jövője 2.
Információkinyerés vad krikszkrakszokkal

Mire jó az, ha szedett-vedett adathalmazokból automatikusan tudunk hasznos információkat kinyerni? Lehet vele például a terrorizmus ellen harcolni. Az amerikai hadiipar már a nyolcvanas-kilencvenes években lelkesedett a téma iránt..., és nem véletlenül!

Takács Boglárka | 2013. január 24.
|  

A világháló jövőjével foglalkozó sorozatunk első részében kiderült, hogy a számítógépek nem tudnak automatikusan szöveget értelmezni, és ez komoly probléma. Megtudhattuk, hogy egyesek azt javasolják, adjunk meg szövegeinkhez már a létrehozásukkor automatikusan feldolgozható adatokat. Most pedig a helyzet fordítottjáról lesz szó: hogyan lehet a már meglévő szövegeinkből információkat kinyerni?

Szimulált terrorcselekmény amerikai hadgyakorlaton. Katonai célra kellett
Szimulált terrorcselekmény amerikai hadgyakorlaton. Katonai célra kellett
(Forrás: Wikimedia Commons)

Ki nyer ma?

Információkinyerésnek (angolul information extractionnek) azt a folyamatot nevezik, amikor egy szövegből számítógép által felhasználható adatokat nyerünk. Az információkinyerés rendszerint legalább részben automatikus, nem szokás idesorolni azt, amikor egy ember elolvassa a szöveget és kitölt róla egy számítógépes űrlapot.

Talán nem meglepő, hogy eleinte leginkább az amerikai hadsereg foglalkozott a kérdéskörrel. Már a nyolcvanas-kilencvenes években próbálkoztak azzal, hogy újságcikkek vagy hírügynökségi jelentések hírszerzési szempontból fontos tartalmát előre megadott szempontok szerint kinyerjék. Többek között arra voltak kíváncsiak, hogy hol követtek el terrorcselekményt és kicsodák, milyen fegyvereket használtak, és így tovább. Korábban az elemzők elolvasták az összes cikket és maguk vitték fel ezeket az adatokat az adatbázisba, így volt mihez viszonyítani a számítógép teljesítményét.

Azt már sorozatunk előző részéből sejthetjük, hogy az általános célú információkinyerő rendszerek egyelőre kevésbé sikeresek, mint amelyek konkrét részterületekkel kapcsolatosak. Ez utóbbiak például politikai hírekből, cégjelentésekből vagy tudományos szakcikkekből szűrnek le hasznos adatokat. De pontosan hogyan?

Helyi újság szerkesztősége Lengyelországban. Itt készülnek a hírek
Helyi újság szerkesztősége Lengyelországban. Itt készülnek a hírek
(Forrás: Wikimedia Commons / Paweł Janczaruk / CC BY-SA 3.0)

Részletkérdések

Az információkinyerésnek számos különböző részfeladata van, ezek a konkrét területtől függően lényegesen el is térhetnek egymástól. Első lépésben általában arra van szükség, hogy a programunk a szöveget elkülönítse az egyéb lényegtelen információktól. Ha könyvekből szeretnénk kinyerni adatokat, akkor szinte minden az elemzés tárgya lehet, legfeljebb a művészi illusztrációkat kell eltávolítani. De például egy weblapon el kell különíteni egymástól a weblap forráskódját és a felhasználója által látott szöveget – feltételezhetőleg csak az utóbbi lesz érdekes számunkra. Ezután a látott szövegből ki kell venni a fejléceket, menüket és hasonlókat.

Ha szeretnénk kipróbálni, ez mennyire nem egyszerű, akkor keressünk egy nekünk tetsző cikket itt a Nyesten, és nézzük meg jó alaposan! Legfelül látható a lap neve, alatta egy sereg menüpont: Főoldal, Blog, Fórum... Utána két hasáb következik, ebből csak az egyikben van a cikk, a másikban hozzászólások, reklámok, egyéb kiegészítő információk olvashatóak. Ezeket mind el kell különíteni a cikk tényleges tartalmától, amiben ráadásul még illusztrációk is vannak.

Videófelvételeknél még nagyobb a probléma, mint a szövegek esetében. Hogyan lesz egy tévéhíradóból gépileg elemezhető szöveg? Legfeljebb hangfelismeréssel, sőt – igen rafinált módon – szövegfelismeréssel, hiszen ma már a legtöbb híradóban vannak feliratok, futó szövegcsíkok.

Tévéhíradót szemléltető kép. A csíkok is hasznunkra válnak
Tévéhíradót szemléltető kép. A csíkok is hasznunkra válnak
(Forrás: Wikimedia Commons / Sylvain Pedneault, Mike Liao / CC BY-SA 3.0)

A hang- vagy szövegfelismerés önmagában is komoly feladat: elég csak arra gondolni, hogy a YouTube automata hangfelismerésre épülő feliratozása (a CC gomb) egyelőre még az angol nyelvvel is nehezen boldogul. Pedig ha végül nagy nehezen leszűkítettük az információk körét a ténylegesen elemzendő adatokra, és megvan a nyers szöveghalmazunk, még csak akkor jöhet az információkinyerés!

Álljunk meg egy szóra

Első lépésben gyakran kidobálják az úgynevezett stopszavakat (stop words), ezek olyan rövid és gyakori szavak, amelyek annyira nem fontosak a szöveg mondanivalója szempontjából. Például ilyenek az a, az, sőt maga az ilyen is.

A stopszavak kiszűrését eredetileg azért találták ki, hogy gyorsítsák a programok futását, hiszen ezek a szavak igen sokszor előfordulnak, de általában nem kell őket elemezni. Épp ezért kezdenek a stopszavak mostanában kimenni a divatból, hiszen a számítástechnika fejlődésével egyre több és több erőforrás áll rendelkezésre az elemzéshez. Ráadásul a gyakori nyelvtani elemek is sokat adhatnak a jelentéshez – nem mindegy, hogy valaki a lépcsőn le vagy fel megy.

Fess lépcsők Sanghajban
Fess lépcsők Sanghajban
(Forrás: Wikimedia Commons / Carsten Ullrich / CC BY-SA 2.0)

Ha már minden lényegtelent kiszűrtünk mind a szöveg környezetéből, mind magából a szövegből, elkezdhetünk a lényegre vadászni! Az információkinyerés legegyszerűbb fajtája, amikor konkrét kifejezésekre keresünk egy előre megadott listából. Ha például azt szeretnénk megállapítani, egy kupac cikkből melyik szól amerikai elnökökről, akkor foghatjuk az amerikai elnökök listáját és betűről betűre összehasonlíthatjuk a rendelkezésünkre álló összes szöveggel. De még így is megjárhatjuk (hasonló példa előző cikkünkben is szerepelt):

A Ronald Reagan nevet nem csak egy amerikai elnök, hanem egy repülőgép-anyahajó is viseli
A Ronald Reagan nevet nem csak egy amerikai elnök, hanem egy repülőgép-anyahajó is viseli
(Forrás: Wikimedia Commons)

Ronda, de finom

Ennél kicsivel bonyolultabb, amikor úgynevezett reguláris kifejezéseket (regular expressions, röviden regexp vagy regex) használunk. Ezek egyfajta mintákként képzelhetőek el, amelyekhez illeszkedő jeleket keres a számítógép. Például megadhatjuk, hogy nem szeretnénk olyan találatokat, amelyekben a Ronald Reagan jelsorozat után a repülő vagy hajó jelsorozatok szerepelnek. Mivel a regexek többé-kevésbé szabványosítottak, ezért elég egyszer megtanulni a használatukat, és utána számos különböző rendszerben tudjuk alkalmazni őket.

A reguláris kifejezések nagyon rugalmasak, sok mindent csinálhatunk a segítségükkel. Kereshetünk olyasmikre, hogy „minden szám, ami sor elején van és nem 0”, vagy „minden nagy Ő és Ű betű, de csak ha nem szóköz van utána”. Hátrányuk, hogy rendkívül tömények és nehezen olvashatóak. Például ez a regex megtalálja egy szövegben az e-mail címeket – jól jöhet, ha kusza feljegyzéseinkből címlistát szeretnénk gyártani:

\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b.

Első látásra leginkább csak a kukacot ismerhetjük fel belőle..., de ha
kicsit jobban megnézzük, feltűnhet, hogy például a kukac előtt betűk vagy számok lehetnek (A-Z, 0-9), a végső pont után 2-4 betű lehet, és így tovább. Az ijesztő példa ellenére se essünk kétségbe: regexet írni
egyszerűbb, mint olvasni!

A krikszkrakszoknak könnyen érthető jelentésük van, például szögletes zárójelbe kell rakni azokat az értékeket, amelyek egy tartományt jelölnek: [0-9] annyit tesz, hogy ott egy számjegy állhat. A tartomány után álló + jel az ismétlődést jelenti, tehát a [0-9]+ egy egy vagy több jegyből álló számsor. És így tovább – a többi jelet egy részletesebb
leírásban
találhatjuk meg.

Itt még csak egyszerű mintaillesztésről van szó, egy regex nem „gondolkodik” a szó semmilyen értelmében. A számítógépes programunk egyszerűen végigellenőrzi az összes lehetőséget, a regex csak abban segít, hogy bonyolult mintákat tudjunk megadni.

Másodpercek helyett napok

A regexre keresés sokkal erőforrásigényesebb, mint az egyszerű karaktersorozatra keresés, ezért egyelőre ne várjuk, hogy az általános célú webes keresőkben megjelenjen. Egyedül a blekko nevű kereső tud regexre vagy más, a Google és társai által nem támogatott jelsorozatokra keresni, de akár napokat vagy heteket is kell várni az eredményre. (A fejlesztők szerint egy-két napba telik, mire egy konkrét keresés lefut, de általában összevárnak többet és egyszerre teszik fel az eredményeket.) Ráadásul ha megnézzük a blekko archívumát, jelenleg a legtöbben inkább forráskódrészletek keresésére és nem regexes keresésre használják ezt a szolgáltatást. Például olyan kérdésekre találhatunk itt választ, mint hogy a Google vagy a Twitter megosztó gombját használják-e többen. (Az utóbbit.)

Ha a Google-ban egyelőre nem is lesz regex, a speciális célú keresések vagy a nyelvfeldolgozás területén azonban évtizedek óta megkerülhetetlenek a regexek. Így ha az információkinyerés érdekel minket, mindenképpen érdemes tudnunk róluk. Mint az e-mailes példából is látszik, egyszerűbb feladatokat pusztán regexek használatával is meg lehet oldani.

Mi a következő lépés? Nem csak regexekkel vagy más hasonló szabályalapú megközelítéssel lehet adatokat kinyerni egy szövegből, hanem gépi tanulással is. A bonyolult feladatoknál rendszerint szükség is van ilyesmire, de erről már csak sorozatunk harmadik részében lesz szó...

További érdekességek, felhasznált irodalom

Reguláris kifejezések részletesebben és szakszerűbben (magyarul)

Információkinyerés fóliák (angolul)

Szoknya regex-puskával (kép)

Bővebben a fentebbi emailes regexről (angolul)

Követem a cikkhozzászólásokat (RSS)
Hozzászóláshoz lépjen be vagy regisztráljon.
Még nincs hozzászólás, legyen Ön az első!
Információ
X