A következő címkéjű bejegyzések mutatása: nltk. Összes bejegyzés megjelenítése
A következő címkéjű bejegyzések mutatása: nltk. Összes bejegyzés megjelenítése

2012. június 29.

Számítógépes nyelvészet 101: Programozás

Sorozatunk korábbi részeiben áttekintettük hogy milyen matematikai és információtechnológiai alapismeretekkel illene magunkat felvértezni. Most érkeztünk el oda, amit mindenki triviálisnak tart; egy számítógépes nyelvész programozni szokott. Ellenben itt sem olyan egyszerű a helyzet, mint látni fogjuk.

2011. december 4.

Számítógépes nyelvfelismerés

A számítógépes nyelvfelismerés problémája abból adódik, hogy rendelkezésünkre áll egy bizonyos számú karaktersorozat, amelyről el kell tudnunk dönteni, hogy vajon, milyen nyelvű szöveget takarhat. - Ez a feladat egy olyan környezetben, ahol több nyelvű szöveget is fel kell tudnunk dolgozni, nagyon lényeges. Hiszen ez az első lépés meghatározhatja azt, hogy megfelelő nyelvű elemzőket kezdjük-e használni vagy sem. Ez pedig meghatározhatja a végeredményt, az eredményes szövegfeldolgozást.

2011. április 27.

A szöveg-osztályozás néhány kérdése

A szöveg-kategorizálás olyan terület, melynek rengeteg igen hasznos gyakorlati felhasználása lehet: internetes keresés, ügyfélszolgálati munka gyorsítása, könyvtári munka hatékonyabbá tétele, nyelvoktatás, egyetemi szféra, orvosi és jogi szövegekből új adatok kinyerése... Az ilyen programok megalkotása során a fő kérdés, hogyan lehet lehetőleg minél egyszerűbb, gép által hatékonyan feldolgozható szövegértelmezési elveket alkotni. Ebben az írásban egyszerűbb példák megoldása során alkalmazható módszerekről lesz szó.

2011. április 26.

On NLTK and Python - an interview with Jacob Perkins

Getting into natural language processing has never been easier these days thanks to the popular natural language toolkit (nltk). Python, nltk and even the book that teaches you nlp are free! Although nltk was designed by its creators with pedagogical considerations, Jacob Perkins (@japerk) showed with his nltk demos that it can serve as a serious API. His blog http://streamhacker.com has become a standard source of tips and hacks for nltk users, and his "Python Text Procesing with NLTK 2.0 Cookbook" is the natural choice for everyone who wants to be a pro nlp guy.


2011. április 17.

Szófaj-elemzés 2 – néhány újabb tapasztalat


Előző posztomban, melyben saját szófaj-egyértelműsítő programom írását kezdtem bemutatni, kiderült, hogy egy egyszerű tanuló-adatbázis és a Bayes-osztályozó algoritmus segítségével egészen tűrhető eredményeket lehet elérni. Intuitív módon belátható azonban, hogy csak ilyen módszerrel nem lehet elérni tökéletes eredményt az ige-felismerés terén, hiszen csak végződések alapján képtelenség megmondani, miért főnév az “embert”, mikor a “megvert” ige. Programom kizárólag morfológiai adatok alapján akar dönteni, azonban, sajnos, itt a kulcsfontosságú ismerni a szavak tövét is – ez már lexikai adat, amely kinyeréséhez ismerni kell (intuitív módon) a szó szemantikáját, vagy legalábbis valamilyen módon meg kell határozni, milyen szerepet tölt be a mondatban: tárgy-e vagy predikátum (szintaktikai szint). Ebből a kicsi példából is látható, hogy a természetes nyelv egy több szintű rendszer, amely szintek közt úgymond “kötelező” az átjárás az értelem megragadásához.

2011. április 5.

Hogyan kezdtem szófajelemzőt írni?

Tempfli Péter vendégposztja

A probléma

Ahhoz, hogy lehessen valamit mondani egy mondatról, jó tudni, miféle cselekvést vagy történést ír le; egy vagy több alany csinálja-e, megtörtént, történni fog, esetleg csak vágyunk arra, hogy megtörténjen. Egyszóval, az ige és a kapcsolódó elemek számos hasznos információt hordoznak. Ha géppel akarom megkeresni ezeket az adatokat, egy olyan eszközre van szükség, ami felismeri az igéket egy adott szövegben és kinyeri a fenti információkat. Erre való a szófajelemző(felismerő), angolul part-of-speech tagger (POS-tagger). Az NLTK-ról szóló könyv ötödik fejezete ismertet néhány, az NLTK-be beépített eszközt, de ezeket sajnos csak angol nyelvű szövegeken lehet használni. Magyar nyelvű morfológiai elemző is létezik (a HUNMORPH ill. a HUNSPELL), azonban ezek azon túl, hogy nagyon nehezen konfigurálhatók, azt az örömet is elveszik, hogy magam gondolkozzam el a problémán;) (természetesen ezek nagyon jó eszközök, de professzionális felhasználásra készültek, ezért nem nagyon veszik figyelembe a "barkács-programozók" igényeit)


2011. február 1.

Könyvismertető - Mining the Social Web [frissítve]

A közösségi média rengeteg adatot generál és szerencsére a különféle API-okon keresztül ezekhez bárki hozzáférhet. Azonban nem olyan egyszerű belevágni ezek elemzésébe. Matthew A. Russel könyve ehhez nyújt praktikus segítséget, rengeteg példával és jó minőségű kóddal támogatva mely saját elemzéseink kiindulópontjául is szolgálhat. Mindent összevetve a kötet remek, azonban bármennyire is próbál egyszerű lenni, nem árt ha az olvasó jártas a programozás terén (python), ismeri a legalapvetőbb számítógépes nyelvészeti alapfogalmakat (még jobb ha az nltk-t is), valamennyire ismeri a szemantikus webet és egy kicsit az átlagosnál többet tud a közösségi oldalakról.








    2011. január 9.

    Adat, üzlet, tudomány (frissítve)

    Ahogyan arról már korábbi posztunkban beszámoltunk, kialakulóban van egy új alkalmazott tudomány mely megpróbálja komplex módon kezelni és elemezni a megnövekedett adatmennyiséget. A hangsúly az alkalmazott jelzőn van, hiszen már napjainkban is vannak olyan cégek melyek adattudományi módszereken alapuló megoldásokat kínálnak, ezek közül próbálunk meg párat bemutatni.


    2010. július 29.

    R, de miért is használjam? - I.

    Sok olvasó kérdezte miért is használjon R-t, hiszen a Python nyelv ideális nyelvészek számára, nem beszélve az nltk-ról. Senkit sem szeretnék lebeszélni megszokott eszközeinek használatáról, de vannak esetek amikor az R használata egyszerűbb, természetesebb és hatékonyabb. Most azt szeretném bemutatni miért érdemes elgondolkodni más eszközök használatáról is.

    Az nltk dizájn hátrányai
    Eddig a legjobb cikk amivel találkoztam az nltk mögötti dizájn filozófiáról Edward Loper NLTK: Building a Pedagogical Toolkit in Python című írása. Érdekes milyen követelményeket vettek figyelembe a rendszer tervezése során:
    • könnyű használhatóság
    • konzisztencia
    • bővíthetőség
    • dokumentáció
    • egyszerűség
    • modularitás
    Nyilván ezeket minden rendszernél szeretjük látni. De ne feledjük hogy gyakran kell kompromisszumokat kötnünk hogy az elkészült rendszer pl gyors legyen, vagy "állja a sarat" nagy igénybevétel esetén is. Azonban az nltk egy pedagógiai céllal készült eszköz. Loper éppen ezért emeli ki írásában hogy milyen követelményeknek nem kell megfelelnie az nltk-nak. Nézzük mik is ezek:
    • nem kell mindenre kiterjedő, átfogó rendszert alkotni
    • a teljesítményt épp annyira kell optimalizálni hogy diák projekteket lehessen kivitelezni vele
    • okoskodás, a fenti ponthoz kapcsolódva nem trükkös hack-kek sorával kell tuningolni a programokat, hanem tiszta átlátható implementációt kell készíteni (hogy a diákok láthassák a forráskódban miképp valósítottak meg egy-egy elképzelést)
    Szerencsére az nltk annyira jól sikerült hogy nem igazán vesszük észre "hiányosságait", sőt egyes moduljait az iparban is felhasználják (habár itt figyelembe kell venni hogy a nyílt forráskódot módosítják néha a jobb teljesítmény elérése érdekében).

    Milyen követelményeknek kell megfelelnie egy számítógépes nyelvészetben használt programozási nyelvnek?

    Erre a kérdésre mindenki máshogy válaszolna nyilván, sőt úgy tűnik az ipar letette a voksát a Java mellett (követve az IT egész világát). Természetesen akadnak kivételek és sok számítógépes nyelvészeti feladatot egyszerűen túl bonyolult Java-ban elvégezni. Ha a mesterséges intelligencia felől közelítjük meg a kérdést (hiszen tekinthetjük kedvenc tudományunkat az AI egy részterületének is), akkor sokaknak rögtön eszébe jutnak az olyan egzotikus nyelvek mint a LISP, Scheme, Prolog. Nem véletlenül, a mesterséges intelligencia programozás klasszikusa, Norvig PAIP-ja kora ellenére még ma is kötelező olvasmány ezen a területen, még ma is hatással van a kezdőkre és profikra egyaránt. Ebben nagy érdekes követelményeket fogalmaz meg a szerző egy AI programozásban hasznos nyelvvel szemben:
    1. built-in support for lists
    2. automatic storage management
    3. dynamic typing
    4. first-class functions
    5. uniform syntax
    6. interactive environment
    7. extensibility
    8. history
    A listára ma is rábólintunk, talán két dolgot tennénk hozzá. Egyrészt nem szégyenkezzünk, számít a gyorsaság. Másrészt már a könyv publikálásakor is feljövőben volt a sztochasztikus megközelítés amely mára az uralkodó paradigmává vált, így joggal kérhetjük ideális nyelvünktől hogy tegye könnyűvé életünk és támogassa a különböző statisztikai függvényeket (ne kelljen már annyit gépelnünk) és adatstruktúrákat.

    A Python nyelv az eredeti nyolc pontból hét és félnek megfelel (lehet hogy egy csak az én személyes véleményem, de a 4. pontnak csak részben felel meg a pythonos lambdázás). A további két kritériumnak is megfeleltethetjük a kígyós nyelvet, de ehhez ki kell használnunk bővíthetőségét. A statisztikai elemzéshez és bonyolultabb adatstruktúrák létrehozásához szükségünk lehet a numpy/scipy csomagra, ezek használata kezdő kezekben bizony nagy teljesítmény csökkenéshez vezethet, nem beszélve hogy a nyelv "magján kívül" egy új csomagot kell elsajátítanunk.

    Összegzés
    Mind a Python, mind az nltk hasznos és sokoldalú eszközök, de dizájnjukból fakadóan nem felelnek meg az általunk felállított kritériumoknak. A következő részben végre rátérünk arra hogy az R miért is ideális nyelvészeti elemzésekre, de persze semmi sem tökéletes, az R-nek is vannak hátrányai!

    2010. július 11.

    NooJ, az Integrált Nyelvelemző Környezet I.

    VENDÉGPOSZT!

    Előzetesnek szánom ezt a cikket. Bemutatni, hogy mennyi és milyen minőségű nyelvelemző programok állnak már jelenleg is a rendelkezésünkre. De előzetes abban az értelemben is, hogy az eszközökről szeretnék majd több hosszabb-rövidebb leírást is adni. És nem utolsó sorban előzetes abból a szempontból is, hogy a későbbre tervezett Natural Language Toolkit használatát fogjuk a most bemutatott NooJ eszközzel megalapozni.

    A NooJ, és elődje az INTEX egy integrált nyelvelemző környezet. Egy francia nyelvész készítette, aki ráébredt arra, hogy rengeteg szakterület tudná alkalmazni, használni a saját céljaira egy nyelvelemző rendszert. A többi nyelvelemző ellen mindig az első ellenérv a kezelhetőség volt. Még a jelenleg a PTE-n fejlesztett (prolog nyelven fejlesztett) szövegelemzőről is (bár csak néhány bemutatót sikerült erről a fejlesztésről megszereznem...) első hátrányként említik, hogy nehezen kezelhető, olvasható az eredmény. Ez azért könnyedén orvosolható lenne. Mindenesetre megértem azokat, akik csak egy-egy ötletért nem hajlandóak ennyire belemerülni a témában. Pont a számukra lehet a legideálisabb eszköz a NooJ.

    Szerencsére a témának van magyar honlapja. http://corpus.nytud.hu/nooj/ címen tudjátok elérni. Itt található meg hozzá továbbá a magyar modul is, amivel el tudjuk végezni az elemzéseinket. Illetve a kipróbáláshoz ajánlom mindenki figyelmébe Vajda Péter bemutatását: http://corpus.nytud.hu/manye/vp_nooj.ppt

    Hogy van magyar honlapja, ez sajnos nem egyenlő azzal, hogy fejlesztik is. 2006-ban indult, és azóta csak a magyar modul került fel. De a még akkoriban tervezett grammatika nem jelent meg azóta sem.

    A NooJ a morphdb.hu-t használja. Akik használták már külön, azoknak nem lesz meglepetés a szavak elemzésének eredménye vagy a típushibái, de ezeket könnyedén javíthatjuk az aktuális szövegnél. Viszont a NooJ nem csak erre képes. Lehetséges vele szógyakoriságot vizsgálni, ahogyan lehet csak simán szegmentálni. Saját nyelvtannal kiegészítve pedig határ a csillagos ég. És akkor még nem is beszültünk arról, hogy képes az elemzett szöveget xml-formátumban visszaadni, tehát az eredményen tovább dolgozhatunk például az NLTK-val... de erről majd csak később.

    Egy-két javaslatot azért tennék a program használatához. A Huntoken mondatszegmentálót használja. Ezért a legjobb eredmény érdekében minden sorban csak egyetlen mondat szerepeljen! Továbbá mivel a szavak elemzéséhez a Hunmorph-ot használja, így nem számítsunk eredményre a tulajdonnevek és a szóösszetételek esetén. Ezeket nem tudja kezelni.

    Továbbá álljon itt egy minta is. Példaként és a várható eredmények előrejelzése végett. Ezt a cikket elemeztettem le vele, egészen eddig a bekezdésig:

    • Összesen 26 mondat

    • 242 különböző szóalak

    • 30 olyan szó, aminek nem tudta meghatározni a szófajtát, felépítését (tulajdonnevek, formátumtípusok, webcímek és szóösszetételek)

    • 426 különböző felismert és elemzett szóalak (a kettő szám azért nem egyezik, az összes szóalak és az elemzett szóalakok száma, mert sok olyan szóalak van, ahol elképzelhető több elemzési eredmény a szövegkörnyezetnek megfelelően, de a program jelzi számunkra a lehetséges elemzéseket. Például a „szánom” két elemzési módja a következő: szánom,szán (szótő): N+nom+1+sg+pssg+ps vagy V+1+def+sg. Itt az emberi értelem meg tudja határozni, hogy az igei a helyes, de ezt csak jelentéstanilag tehetjük meg. Egy másik szövegkörnyezetben már főnévként szerepelhet.)


    Szerző:

    Gerő Dávid: Magyar és nyelvtechnológus hallgató, kezdő programozó és webfejlesztő, aki érdeklődik a nyelvészet és az informatika iránt. A határterületekért különösen rajongok, de sajnos mindkettőben csak kezdő, érdeklődő laikus vagyok.