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

2013. március 29.

Probabilisztikus programozás

Az utóbbi napokban a Twitter a DARPA Probabilistic Programming for Advanced Machine Learning (PPAML) Proposers' Day-től hangos. De miért? Rob Zinkov Why Probabilistic Programming Matters posztjában így válaszolja meg a kérdést

Probabilistic programming is a newer way of posing machine learning problems. As the models we want to create become more complex it will be necessary to embrace more generic tools for capturing dependencies. I wish to argue that probabilistic programming languages should be the dominant way we perform this modeling, and will demonstrate it by showing the variety of problems that can be trivially modeled with such a language.
Probabilistic programming also has the potential to give machine learning to the masses by making it very easy to specify realistic models for frequently heterogenous data. Too often, simple models are used because they are popular and implementations are freely available. By shifting focus to a language we remove these artificial constraints.


2012. december 7.

Try R - ingyenes statisztikai programozás kurzus

Sokak számára nehéz időt találni a Coursera kurzusainak követésére, vagy nem rendelkeznek kellő alapokkal ahhoz hogy belevágjanak egybe. Habár a Udacity remek munkát végzett és rövid részekre oszt egy-egy leckét és saját tempójában haladhat a tanuló ezeken végig, még így is sok időt kell invesztálni egy kurzus elvégzésébe. A Try R nem kínál királyi utat a statisztikai programozás iránt érdeklődőknek, de elvégzésével biztos alapokra tehet szert bárki, ami a további kurzusoknál nagyon jól jöhet. A tananyag hét "fejezetre" van tagolva, az első három az R nyelv alapjaiba nyújt bevezetést, a harmadik a klasszikus leíró statisztikával foglalkozik, majd az alapvető adatstruktúrákkal ismerkedhet meg az olvasó, az utolsó fejezetben pedig haladóbb témákba is belekóstolhat a tanuló. A gamification divatnak megfelelően "badges" gyűjtést folytat az aki végigmegy az egyes leckéken, amiről én nem tudom eldönteni hogy nettó poén, vagy tényleg inspiráló dolog. A c<>de school és az O'Reilly nagyon jó mukát végzett, most már nincs mentség és ha valaki meg akarja tanulni a statisztikai programozás alapjait, csak az elhatározás hiánya állhat útjába.

2012. október 2.

Októberi konferenciák

Október 4-én az Open Source BI Fórum 2012 konferencián adok elő, Adatbányászat az R nyelv alkalmazásával címen.

 

Október 20-án a Magyarországi Web Konferencia 2012 következik, ahol Sok a szöveg - avagy miben segíthet a nyelvtechnológia mint szolgáltatás címen adok elő. A konferencia ingyenes, de a részvétel regisztrációhoz kötött. (Le a kalappal a szervezők és a szponzorok előtt!)

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.

2012. június 2.

R tutorial előtt

Két hónap múlva egy egész napot szentelünk az R nyelvnek és a tm csomagnak. Már csak 18 szabad hely maradt, ha nem szeretnél lemaradni, regisztrálj mihamarabb! A rendezvény ingyenes (köszönet a Weblibnek!), csupán te, a laptopod és némi előkészület szükséges hozzá - ez a poszt ebben szeretne segíteni.

2012. május 25.

Adatbányászat és R tutorial meetup

Az első sikeres meetup után egyből két új eseményt köszönthetünk! - A témák bár szűkebbek, de annál mélyebbnek ígérkeznek. Az egyik az adatbányászattal foglalkozik, mint válasz a felhalmozódott, minden eddigi mennyiséget meghaladó dokumentumáradatra, míg a másik, az R programozási nyelv és annak tm csomagját bemutató tutorial lesz. - Várunk minden érdeklődőt!

2012. április 26.

R idősebbeknek és halandóknak

Sokan írtak nekünk mostanában hogy elveszve érzik magukat az R nyelv elsajátítása során. Sajnos hiány van a kezdők számára íródott és a könyvek/tutorialok és a "magasabb" szintű irodalom között. Ezen a legtöbben úgy lépnek túl hogy mire túljutnak a bevezető műveken már szert tesznek pár ismerősre, bekapcsolódnak a nyelv köré szerveződött közösség életébe és másoktól sajátítja el a szükséges ismereteket. Hazánkban sajnos ez nem megy olyan könnyen, ezért most pár tippet adunk arra miként induljon el a kedves olvasó.

2011. október 5.

Könyvismertető: Data Mining with Rattle and R

Egyre többen érdeklődnek a az adattudományi (data science) és gépi tanulási módszerek iránt. Az adatbányászat napjainkban nem annyira felkapott téma, ahogy sokan igyekeznek elkerülni a statisztika és számítógépes statisztika (computatuional statistics) kifejezéseket, de megnyugtatunk mindenkit, a sok buzzword tkp. ugyanazt a dolgot fedi. A megnövekedett érdeklődés és a tény hogy életünket egyre jobban átszövik az említett területek eredményei együtt járnak az igénnyel egy egyszerű, gyakorlatorientált bevezetőre. Williams könyve remekül használható akár a programozásban kevésbé jártas, a statisztika alapjait ismerő érdeklődőknek.

2011. június 7.

Könyvismertető: Data Analysis with Open Source Tools

Az adatelemzés lassan de biztosan a (számítógépes) nyelvészeti munka részévé válik, azonban sajnos még nincs külön kialakult szakirodalma a területnek. Janert könyve azonban nagyon hasznos technikákkal és ami még fontosabb szemléletmóddal gazdagítja az olvasót és egy kis kreativitással ami területünkre is alkalmazhatóak a bemutatott módszerek. Azonban alapos előismeretek szükségesek ahhoz hogy haszonnal tudjuk forgatni a kötetet.







2011. május 3.

Legyél te is számítógépes nyelvész - tíz év alatt

Úgy néz ki hogy májusban megszaporodnak a levelek melyekben arról érdeklődnek a kedves olvasók hogy miképp is válhat valaki számítógépes nyelvésszé. Ahhoz hogy valaki szakértő legyen egy területen, kb tíz év gyakorlás és gyakorlat szükséges (l. Norvig Teach Yourself Programming esszéjét vagy Mérő László Mindenki másképp egyforma könyvét), rossz hír hogy az interdiszciplináris területeken talán több is. Jó hír viszont hogy ezt egyáltalán nem kell úgy érteni hogy ennyi időt kell az iskolapadban eltölteni (habár ha egy PhD-t bevállal valaki, akkor nyolc kellemes évet tölthet el a felsőoktatásban - talán nem véletlenül). Tovább bonyolítja a helyzetet hogy a számítógépes nyelvészet területére különböző hátterű emberek érkeznek ezért nincs egységes recept. Blogunkon megpróbálunk olyan forrásokat is bemutatni amik segíthetnek az érdeklődőknek, most ezeket szedegettem össze és megpróbáltam egy egységes keretbe foglalni hogy ki-ki megtalálja a maga forrásait útja elkezdéséhez.


2011. március 2.

Könyvismertető: Statistical Analysis with R

Nehéz jó kezdő könyvet találni azoknak akik egyszerre szeretnének megismerkedni mind az R nyelvvel, mind a statisztikával. Sokan (köztük én is) nem tartják jó ötletnek egyszerre beleugrani a két dologba (sőt, háromba, ha programozni se tud az illető), azonban a most bemutatásra kerülő kötet nagyon közel van az ideálishoz: azok akik már programoztak valaha (tudják mi az hogy változó, miért van egy függvénynek argumentuma, mik azok a kontroll struktúrák stb) és tisztában vannak a matematikai alapjaival (kb. nyolc általános és minimális érdeklődés) haszonnal forgathatják a könyvet.


  • John M. Quick: Statistical Analysis with R
  • Packt Publishing, 2010
  • 300 oldal

2011. február 8.

Könyvismertető - The Foundations of Statistics: A Simulation-based Approach

Sokakat tántorít el a tény hogy manapság a (számítógépes) nyelvészet bizony nagyon matematizált. Ezen a tényen nem tudunk változtatni, már Eukleidész is megmondta I. Ptolemaiosznak hogy a matematikához nem vezet királyi út. Azonban nem kell félni, az alapos ismeretek a mi területünkön inkább gyakorlatiak (persze el lehet menni egészen "durva" területekre is) és gyakran köthetők alkalmazott problémákhoz. A most ismertetett kötet ebben segít, az alkalmazásra teszi a hangsúlyt és ebben segítségül hívja az R statisztikai programozási nyelvet.








2010. szeptember 10.

A New York Times és a Guardian API-k használata

Ahogy az előző posztokban említettem sokan reménykednek abban hogy a neten összegyűlt hatalmas adat mennyiség betekintést nyújthat abba hogyan is működik a nyelv. Habár sokat segíthet ha rengeteg adattal rendelkezünk, ennek vannak határai - ahogy erre pl Kilgariff is rámutatott. Nem is beszélve a technikai és jogi korlátokról.

2010. szeptember 4.

Az adatok tudománya és a nyelvtudomány - olvasnivaló

Sokan kérdezték az előző poszt kapcsán hogy hogyan is indulhatnak el "data science" ügyben. Itt egy kis összefoglaló következik, mit érdemes olvasni, merre érdemes keresgetni, és egy kicsit ajánlani fogom korábbi posztjaimat is. Tehát most sorra vesszük hogy egy nyelvész mit tehet hogy 1) betekintést nyerhessen az adatok tudományába 2) eszköztárába illeszthesse a nyelvi adatok elemzésére alkalmas módszereket.

2010. július 29.

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

Az előző részben megvizsgáltuk milyen is elvileg egy ideális nyelv egy számítógépes nyelvész számára. Most sorra vesszük hogy ennek mennyiben felel meg az R statisztikai programozási nyelv.

Vegyük végig a pontokat
1. A listák beépített támogatása
Igen, sőt!
2. Automatikus tárhelyvezérlés
Ezen sem lepődünk meg, hiszen manapság már egy cool nyelvnek ezt alapból tudnia kell
3. dinamikus típuskezelés (de mondhatnám hogy dinamikus gépelés)
Ezzel sem kell sokat törődnöd, nincs String name = "Zoli", nem fogsz egy Integert byte-ba tenni és elvérezni.
4. első-osztályú függvények
Elég itt idézni az R Language Definition idevágó részét: "In R functions are objects and can be manipulated in much the same way as any other object. Functions (or more precisely, function closures) " azaz első osztályú függvények a nyelv alapjai.
5. egységes szintaxis
Nagyon kevés nyelv van amelyiknek nem egységes a szintaxisa és az R nem tartozik közéjük.
6. interaktív környezet
A CommonLISP, Scheme és Python által megkezdett hagyományhoz hűen az R is rendelkezik egy szép interaktív környezettel. Itt talán még intenzívebben használják ezt.
7. Bővíthetőség
A Comprehensive R Archive Network szinte minden feladathoz kínál csomagot. Könnyen lehet egy új csomagot installálni és szabadon módosíthatod ha kell cuccot igényeid szerint. (A nyílt forráskód előnye :D)
8. Történeti háttér és kultúra
Erről külön is szólni fogunk!
9. Statisztikai függvények támogatása
Egy statisztikai programozási nyelv alapból támogatja ezeket, ugye ez nem lepett meg. Ajánlom figyelmedbe a Language Definition dokumentumot.
10. Speciális adatstruktúrák natív támogatása
Ha probabilisztikus megközelítésre adjuk fejünket szükségünk lesz a listákon kívül vektorokra, mátrixokra és egyéb félelmetes nevű dolgokra. Ha érdekel mi mindent támogat az R itt egy jó oldal.

Egy kis történeti háttér
Az R nyelv az S nyelven alapul amit John Chambers 1975-ben a Bell Labs keretein belül fejlesztette ki. Az informatika területén 35 évesnek lenni matuzsálemi kornak számít, viszont egy stabil és igen hozzáértő kör alakult ki a felhasználókból ez idő alatt. Az R 1993-ban tűnt fel, és létezik még egy S-Plus nevű testvére, amely kereskedelmi szoftver.

Aucklandi atyákat az eredeti S nyelv mellett a Scheme egyszerűsége inspirálta, aminek én mint Scheme rajongó nagyon örülök. A nyelv hamarosan nagyon népszerű lett a statisztikusok körében, így a nyelv egymást követő verziói általában nagyon stabilak.

A kilencvenes évek végén elkezdődött az adatok forradalma. Egyrészt az informatika világa egyre több adatot produkál, (talán ennek hatására) másrészt a humán és társadalom tudományok is egyre jobban a kísérleti és begyűjthető adatok felé fordultak. Egyre többen kezdték el használni különböző statisztikai programcsomagokat ismerték fel azok korlátait is. Az R felhasználói tábora valamikor az ezredforduló körül hirtelen megugrott és azóta is folyamatosan bővül.

Ez a történet csak tovább erősíti a nyelvet. A kemény mag továbbra is szinte változatlan és egyre jobb rendszert fejleszt. A speciális területek művelői egyre több csomagot írnak és publikálna. Az így létrejött nyilvánosság az esetleges hibák felfedezését meggyorsította, a fejlesztők közötti együttműködést elősegítette és még jobb csomagokat eredményezett. Az online fellelhető dokumentáció igen magas színvonalú, habár nagyon technikai jellegű. Úgy tűnik hogy még várnunk kell hogy a "kocka" fejlesztői mag észrevegye ezt és lépjen az érthetőség irányába.

A hosszú történet azzal is jár hogy sok jó könyvet találhatsz (habár ezek általában drágák) és rengeteg publikációt olvashatsz. Könnyű kommunikálni eredményeidet és nem kell sokat magyarázkodnod közben.

Hátrányok
  1. Az R nem egy egyszerű nyelv
  2. aki nem ismeri a lisp dialektusokat annak az R szintaxisa nagyon idegen lehet
  3. nehéz egyszerre statisztikát és R programozást tanulni
Hogyan tovább?
Ha szeretnél még többet megtudni a nyelvről, esetleg kipróbálnád és tanulnád érdemes elolvasnod Valószínűség, statisztika és nyelv című korábbi posztomat, ami segít eligazodni hogy hol érdemes kezdeni.

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 14.

Szógyakoriság ismét (de most saját fájlból, R használatával elemezve)

Az előző technikai jellegű posztomban a Magyar Webkorpusz alapján vetettünk egy pillantást a szógyakoriságra. Most egy saját szöveges fájlból készítünk szógyakorisági témát.

Eszközök
Egy szövegfájl Keressünk egy szövegfájlt az OSZK MEK honlapján. Válaszd a html formátumot.
HTML "kitisztító" html2text, ha Ubuntu, vagy Linux alapú oprendszered van akkor a szokásos módon telepítheted. Vagy választhatod a python alatt bármikor bárhol futtatható verziót is. Házi feladat, készíts a html fájlból egy "plain text" fájlt. A program man page-e talán segít.
Egy kész szövegfájl letölthető itt, ha lusta vagy (vagy valamiért nem tudod magad megcsinálni).
R Ha még nincs fent a gépeden, akkor telepítsd fel az R statisztikai programozási nyelvet.

A feladat
Arra vagyunk kíváncsiak hogy egy adott szó hányszor fordul elő a fájlban. Gondolkozz egy kicsit milyen problémákat vet ez fel. Mi az hogy szó? Mi neked egy szó és mi a számítógépnek? Mi nagyon egyszerű definíciót adunk itt, szónak egy olyan karaktersort tekintünk amit két nem-karakter között összefüggően fordul elő. Jó mi? (Kicsit gondolkozz el azon hogy ez mennyire jó meghatározás, hogyan kellene finomítani hogy megfeleljen a szó intuitív fogalmának) Elgondolkodtál? Akkor egy kicsit még maradjunk a témánál. Nyilván így egy halandzsa, vagy félreütött karaktersor is szó (pl asAnza), felmerül a kérdés hogy a "tó" "tavak" egy vagy két szó-e (nálunk kettő, mivel technikailag nagyon nehéz lenne morfológiailag elemezni). Mi van a mondat elején nagybetűvel kezdett "Asztal" és a csupa kisbetűs "asztal" esetében? Ezt könnyű megoldani, nem okoz gondot átalakítani a karaktereket. Nyilván figyelembe kell venni ezeket a kérdéseket. De ha eltekintünk ezektől, attól még egy becslést tehetünk.

Vágjunk bele!
Indítsd el az R-t abban a könyvtárban ahol a szövegfájlod található. Először olvassuk be a fájlt hogy tudjunk vele dolgozni.

> textfile<-scan(file.choose(), what="char", sep="\n", quote="", comment.char="")
Figyelem! Mac és Windows használók a file.choose() függvényt cseréljék ki choose,files() -ra.

Alakítsuk át a fájlt csupa kisbetűs karakterek sorává. (Ugye mondtam hogy egyszerű lesz, "Asztal"-ból, "asztal" lesz így)
> textfile<-tolower(textfile)

Abban maradtunk hogy "szónak egy olyan karaktersort tekintünk amit két nem-karakter között összefüggően fordul elő" . Ez R-ben:
> words.list<-strsplit(textfile, "\\W+")

Fent semmi mást nem tettünk mint a fájl tartalmát "feldaraboltuk" a "nem szó-karakterek" mentén. Ezt a \W+ reguláris kifejezéssel értük el (szabályos kifejezéseknek is hívják őket, ha angolul keresed regular expressions).

Egy kicsit bonyolítsuk a dolgot. Tudjuk az előző posztból hogy bizonyos szavak nagyon gyakoriak. Ezeket gyakran töltelékszavaknak hívjuk, vagy angolos szakzsargonnal stop words. Ha kiszűrjük ezeket a szavakat, akkor egy kicsit jobb képet kaphatunk hogy a normális szavak milyen gyakoriak (kontentívumok maradnak, mivel a legtöbb töltelékszó funktor). Tegyük ezt akkor! Először is egy listát készítünk ezekről a faramuci szavakról:

> stop.list<-c("a", "egy", "be", "ki", "le", "fel", "meg", "el", "át", "rá", "ide", "oda", "szét", "össze", "vissza", "de", "hát", "és", "vagy", "hogy", "van", "lesz", "volt", "csak", "nem", "igen", "mint", "én", "te", "ő", "mi", "ti", "ők", "ön", "ez", "az", "ha")

Alakítsuk egy kicsit át a beolvasott szövegfájlt:
> words.vector.h<-unlist(words.list)

Most már egy adat típusba tartozik a beolvasott szöveg és a töltelékszavak listája is, ki is szűrhetjük őket.
> words.vector<-words.vector.h[!(words.vector.h %in% stop.list)]

A következő lépésekben pedig elmentjük a gyakorisági táblázatot egy kimeneti fájlba.
> freq.list<-table(words.vector)
> sorted.freq.list<-sort(freq.list, decreasing=T)
> sorted.freq.list<-sorted.freq.list[sorted.freq.list>1]
> sorted.table<-paste(names(sorted.freq.list), sorted.freq.list, sep="\t")
> cat("WORD\tFREQ", sorted.table, file=file.choose(), sep="\n")

Bónusz gnuplot bütykölés
A gyakorisági adatokat csökkenő sorrendbe tettük és a csak egyszer előforduló elemeket is kiszűrtük (hogy nagyon okos legyél olvasd el mi az a hapax legomenon, na azé' szűrjük ki!). Most hogy elmentettük, gnuplot-tal az előző posztomban leírtak szerint készíthetsz egy szép ábrát hogy lásd arányaiban hányszor fordul elő egy-egy elem. Az enyém így néz ki.




Ha összeveted az előző ábrával láthatod hogy nincsenek kiugró vonalak (hapax legomena!). Nem is kezd olyan magas értéknél, de hát kisebb is a mintánk. A lényeg hogy szebb (lehet hogy csak nekem).

Ha érdekel akkor ezt olvasd

A poszt megírásához Stefan Th. Gries Quantitative Corpus Linguistics with R könyve adott inspirációt, a kódrészleteket pedig minimális változtatással vettem át.

2010. május 17.

Valószínűség, statisztika és nyelv

Ha már túl vagy a statisztika alapjain, vagy élénken él benned a középiskolai matek, esetleg igazi matek zseni vagy, akkor itt az ideje egy kicsit a nyelv statisztikai tulajdonságaival is foglalkoznod. Ha nem, talán egy régebbi posztom segít neked felturbózni tudásodat.

A statisztikai/valószínűségi megközelítést sokan a nyelvtől idegennek tartják, maximum hallottak Zipf törvényéről, de alapvetően idegenkednek ezen módszerek alkalmazásától. Hagyományosan a nyelvészet szabályokat keres, ha-akkor formában megfogalmazott szabályokat. Ahol kivételek vannak, ott is szabályokat keresünk. Persze a nyelv nem éppen olyan mint amilyennek látni szeretnénk, de hát erre is van egy szép elméletünk, a kompetencia - performancia megkülönböztetés Chomskytól. Nagyon röviden, egy kicsit félreértelmezve, ez annyit tesz hogy vannak a szabályok (kompetencia), de hát mi véges lények vagyunk akik ezen szabályokat felépítésük folytán nem képesek 100%-ra hozni, azaz hibázunk.

Habár én hiszek ebben a megközelítésben, a helyzet az hogy egyre többen kérdőjelezik ezt meg. Ők már nem a szobában ülve találnak ki példamondatokat, hanem "kimennek az emberek közé", adatot gyűjtenek a nyelvhasználatról és azt elemzik ami van. Magyarán nem egy elmélethez gyártanak példákat, hanem az adatokból akarják kihámozni a mögöttük rejlő rendezőelvet (ezt ők mondják a szabálygyárosokról, nem én!). Egy nagyon jó, olvasmányos és átfogó kötet Probabilistic Linguistics mutatja be hogyan alkalmazzák a kutatók ezt a megközelítést a nyelvészet különböző területein. Ha nem is borítótól hátlapig, de a téged érdeklő részeket legalább érdemes elolvasni.

Személyes véleményem hogy a statisztikai megközelítés sokat segíthet nekünk, de önmagában nem képes megmagyarázni mindent. Viszont egyre népszerűbb, hiszen sok konkrét eredményt ért el és gyakorlati alkalmazásai sem elhanyagolhatóak. Gyakorlati alkalmazásai miatt a számítógépes nyelvészet ma legfelkapottabb megközelítése épp a statisztikai módszer, s ezért szivárog át a nyelvészetbe is. Ha nem kerülhetjük meg, akkor olvassunk olyan könyveket amik megszerettetik velünk!

Előzetes megjegyzések
Ha valaki meg akar tanulni valamit, akkor nem csak az elméletet kell bebifláznia, hanem valahogy kontextusba kell hoznia azt. Mire jó X elmélet és miben más mint Y, Z? Mire használjuk? De ezek mellett nem árt tudni hogy hogyan használjuk! Gondolj arra hogy ma Magyarországon mindenki ért a focihoz és a gazdasághoz elméletben, de mi van a gyakorlattal!

A nyelvészet terén olyan szerencsénk van hogy nyugodtan kibicelhetünk és végig követhetjük mások munkáját. Megismételhetjük és magunk is kísérletezhetünk, mégpedig otthon a fotelból. Ehhez viszont szükségünk van egy-két dologra.

A legfontosabb dolgunk az R statisztikai programozási nyelv. Itt nem részletezem hogyan töltsd le és telepítsd, ezt az R oldalán megtalálod. Kövesd az operációs rendszerednek megfelelő utasításokat és nem lesz gond. Szükséged lesz még egy programozó szövegszerkesztőre, ha linuxon vagy OSX-en nyomulsz én a Vim-et és az Emacs-et ajánlom, de a Google a barátod és a "programmers editor" kifejezésre keresve rátalálhatsz a saját kedvencedre, amely oprendszereden futni is tud.

Az itt következő könyvek az R használata során tanítanak neked hasznos módszereket és nem mellékesen programozni is megtanulhatsz (nem leszel egy guru, de jó alapod lesz velük). Mindegyik könyv tartalmaz technikai útmutatást az R letöltéséhez valamit a könyvben használt csomagok telepítéséhez. Kezd azzal hogy a csomagokat telepíted!!!

Ingyenesen hozzáférhető könyvek
Baayen: Analyzing Linguistic Data
Kicsit nehéz követni ha még nem  programoztál és nincs semmi fogalmad a statisztikáról, de nagyon jó könyv és egy igen kidolgozott vázlata ingyenesen letölthető. Majdnem megegyezik a hivatalos kiadással és nagyon hasznos útmutató.

Shravan Vasishth - Michael Broe : The foundations of statistics: A simulation-based approach
Baayen könyvénél nehezebb és egy kicsit nehézkesebb a nyelvezete is, de ingyenes és alapos könyv. Személyes élményem hogy elsőre untam és abba is hagytam az olvasását, de másodszorra nem tudtam letenni. (Pont a fenti könyv után jött ez)

Pénzes, de kiváló könyvek

Stefan Th. Gries: Quantitative Corpus Linguistics with R
Ha meg akarsz veni egy könyvet, ez az amire érdemes költened. Nagyon alaposan és érthetően magyarázza el a korpusz nyelvészet alapjait, a statisztika használatát ezen a területen és az R alapjait. Ez az amire azt mondom hogy a KÖNYV. Kontextus, gyakorlat és elmélet egy helyen.

Baayen: Analyzing Linguistics Data
Nos ezt fent már említettem az ingyenesen elérhető anyagok között, de itt is helyen van. A CUP által kiadott változat néhol eltér a vázlattól és azt kell mondjam jobb is. A különbségek nem eget verőek, de ebből a verzióból szerintem jobban lehet tanulni.

Keit Johnson: Quantitative Methods in Linguistics
Ez a könyv pár éve még szabadon elérhető volt a szerző honlapján, sajnos amióta megjelent nyomtatott formában is már nem tölthetjük le. Ez előbbi könyveknél sokkal nehezebb és a nyelvezete is nehezebben követhető (legalábbis nekem). Én mégis nagyon ajánlom, különösen nyelvészeknek, mivel igazi "nyelvészeti problémákat" vizsgál.

Összegezve
A fenti könyvek nagyon sokat segíthetnek annak aki a nyelvészet felől közelít a számítógépes nyelvészet felé. Biztos alapokat nyújtanak és az R nyelv ismerete hasznos, mivel egyre több álláshirdetésben találkozhatunk vele. Úgy érzem azonban, hogy nem lehet eléggé hangsúlyozni hogy a tárgyalt könyveket nem lehet egyszerűen olvasni. Aktív hozzáállást követelnek meg. Nem elég a példákon végig dolgozni, saját projekteket is kell készítened (gyakorlásnak és örömforrásnak is remek dolog ám ez).