HTML

Precognox

 precognox-logo-cmyk-620.jpg

A blog készítői a Precognox Kft. keretein belül fejlesztenek intelligens, nyelvészeti alapokra épülő keresési, szövegbányászati, big data és gépi tanulás megoldásokat.

Ha a blogon olvasható tartalmak kapcsán, vagy témáink alapján úgy gondolod megoldhatjuk problémáidat, lépj velünk kapcsolatba a keresovilag@precognox.com címen.

Star Wars text mining

visualizing_star_wars_movie_scripts_precognox.jpgA long time ago, in a galaxy far, far away data analysts were talking about the upcoming new Star Wars movie. One of them has never seen any eposide of the two trilogies before, so they decided to make the movie more accessible to this poor fellow. See more...

Facebook oldaldoboz

Blog figyelése (RSS)

 Add hozzá az RSS olvasódhoz

Ha levélben szeretnél értesülni az új cikkekről:

opendata.hu

opendatahu45.jpg

Az opendata.hu egy ingyenes és nyilvános magyar adatkatalógus. Az oldalt önkéntesek és civil szervezetek hozták létre azzal a céllal, hogy megteremtsék az első magyar nyílt adatokat, adatbázisokat gyűjtő weblapot. Az oldalra szabadon feltölthetőek, rendszerezhetőek szerzői jogvédelem alatt nem álló, nyilvános, illetve közérdekű adatok.

Főbb témák

adatbányászat (6) adatok (12) adatújságírás (16) adatvizualizáció (17) AI (14) alternatív (6) alternatív keresőfelület (24) beszédtechnológia (13) big data (48) bing (14) CEU (6) clustering (6) conTEXT (8) dashboard (6) data science (8) deep learning (15) egészség (7) egészség kereső (7) előadás (7) emócióelemzés (35) facebook (8) Facebook (9) gépi tanulás (15) Google (23) google (57) gyűlöletbeszéd (7) hackathon (10) hálózatelemzés (14) internetes keresés (26) internet hungary (6) képfeldolgozás (8) képkereső (8) keresés (57) kereséselmélet (7) keresés jövője (54) keresés problémái (38) keresők összehasonlítása (9) keresőoptimalizálás (6) kereső szándéka (11) kereső tanfolyam (9) kereső teszt (15) kognitív nyelvészet (12) konferencia (46) könyvajánló (24) korpusznyelvészet (14) közösségi keresés (8) közösségi média (6) különleges keresők (7) kutatás (6) LDA (10) lda (10) live (13) magyar kereső (9) marketing (8) meetup (41) mesterséges intelligencia (12) metafora (7) mobil (37) mobil keresés (17) Neticle (8) NLP meetup (17) Nuance (9) nyelv (6) nyelvészet (28) nyelvtechnológia (73) open data (11) open knowledge (7) orosz (6) Pennebaker (6) politikai blogok (22) Precognox (46) Precognox Labs (14) Python (13) R (19) spam (6) statisztika (11) számítógépes nyelvészet (8) szemantikus keresés (18) szemantikus kereső (9) szentimentelemzés (34) szövegbányászat (15) társadalomtudomány (7) tartalomelemzés (54) tartalomjegyzék (6) tematikus kereső (19) topik modellek (6) Twitter (18) twitter (15) vertikális kereső (9) vizualizáció (12) yahoo (26) Címkefelhő

A blog tartalmai CC licenc alá tartoznak

Creative Commons License
Kereső Világ by Precognox Kft. is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
Based on a work at http://kereses.blog.hu/.
Permissions beyond the scope of this license may be available at http://precognox.com/.

A Kereső Világ blogon közölt tartalmak a Precognox Kft. tulajdonát képezik. A tartalom újraközléséhez, amennyiben nem kereskedelmi céllal történik, külön engedély nem szükséges, ha linkeled az eredeti tartalmat és feltünteted a tulajdonos nevét is (valahogy így: Ez az írás a Precognox Kft. Kereső Világ blogján jelent meg). Minden más esetben fordulj hozzánk, a zoltan.varju(kukac)precognox.com címre írt levéllel.

Creative Commons License

Nevezd meg! - Ne add el! - Ne változtasd!

 

A természetes nyelv leföldelése programnyelvekkel

2014.10.15. 07:45 Szerző: kadar.akos Címkék: keresés szemantikus keresés nyelvtechnológia grounded learning

A Tilburgi Egyetemre írt tézisem angol címe Grounded Learning for Source Code Component Retrieval és erről fogok mesélni röviden ebben a posztban. Az alapötlet a konzulensem Grzegorz Chrupala és előző tanítványa Jing Deng közös munkájából származik, ahol különböző szokatlan modelleket  alkalmaznak forráskód keresésre. Több poén is van a munkájukban. Az egyik az, hogy source code component-ek vagyis forráskód komponensek között keresnek, ami újdonságnak számít, a másik pedig, hogy a keresést, mint fordítási problémát fogják föl programnyelvről természetes nyelvre. Alapvetően két oldala van a történetnek: egyrészt a cél az, hogy létrehozzunk egy kereső motort, ami forráskód komponensek között keres, másrészt, hogy fogjuk meg a természetes-nyelvi kifejezések jelentését valamilyen formális nyelvvel, jelen esetben forráskód komponensekkel.  Az első ponttal még egyet is lehet érteni, a kereső motorok jók, mert keresnek, de minek “belegroundolni” a természetes-nyelvi kifejezéseket forráskódba? A rövid válasz az, hogy fölösleges, de ha valakit érdekel a hosszabb magyarázat olvassa tovább a posztot.

 

A nyelvészet különböző szinteken elemzi a nyelveket: a fonológia foglalkozik a hangokkal, a morfológia nagyobb, hangokból álló és jelentéssel rendelkező egységeket kutat, a szintaxis több jelentéssel bíró egységből - mondjuk szavakból - álló szerkezetekkel foglalkozik, a szemantika pedig a különböző nyelvi egységek jelentését kíséri meg leírni. A tézisem a szemantika témakörébe tartozik, hiszen a kifejezések jelentésével kapcsolatban barkácsolok. Eszméletlenül sok szemantikai elmélet írja le a jelentés különböző aspektusait, de alapvetően két fontos témát boncolgatunk már több ezer éve:

1.) Hogy kötődnek a nyelvi kifejezések a külvilághoz?

2.) Milyen kapcsolatban állnak egymással?

 

lionkingsemantics.jpg

 

A disztribúciós szemantika a második kérdéssel foglalkozik. Már számtalan cikk jelent meg a disztribúciós technikákkal kapcsolatban a blogon, de az alap ötlet az, hogy a szavak jelentése a kontextus függvénye. Firth (1957): "You shall know a word by the company it keeps". A disztribúciós technikák nagy előnyei, hogy nem igényelnek annotációt, átlátható és elég általános matematikai modelleken nyugszanak, nem bonyolult az implementációjuk, rahedli könyvtár létezik hozzájuk, sokrétűen és hatékonyan használhatóak. A tézisem egyik fő problémája tulajdonképp az, hogy ezeket a modelleket, hogy lehet úgy csűrni-csavarni, hogy valamilyen módon az 1-es kérdésre adjanak választ.

 

A nyelvi kifejezéseket a szemantika hagyományosan a következőképp képezi le a nyelven kívüli valóságra: A kifejezéseket valamilyen logikai formulákkal reprezentálja és ezeket a formulákat matematikai modellekre értelmezi pl.: halmaz elmélet, kategória elmélet. Az ötlet Grzegorz Chrupala és Jing Deng munkájában az, hogy a logikai formulákat cseréljük le programnyelvi kifejezésekre, amik alatt amúgy is van modell és így tulajdonképp egy fordítási problémára redukáltuk a természetes-nyelvi kifejezések megalapozását. A fordítási problémákat pedig egy elég egyszerű ötlettel szokás megoldani: paralell-corpussal. A lényeg az, hogy keresünk egy corpust, ahol az X nyelven megfogalmazott gondolatok és azok Y nyelvi megfelelői össze vannak párosítva. Egy ilyen paralell-corpuson megint csak a disztribuciós alapvetésünket vetjük be csak ez esetben nem nyelv-internálisan, hanem nyelvek között tételezzük fel azt, hogy hasonló kontextusban szereplő szavak jelentése hasonló. Esetünkben olyan paralell-corpust kell találnunk, ami a természetes-nyelvi megnyilatkozások és azok programnyelvi megfelelőjét tartalmazza.

Úgy gondoltuk, hogy erre a célra kifejezetten jó parallel-corpust nyújtana egy programnyelv különböző könyvtárainak dokumentációja. A Java Standard Library-t használtuk és az úgy nevezett method-signature-k szolgáltatták a programnyelvi kifejezéseket míg azok leírásai az angol nyelvi megfelelőjüket. A szokásos előfeldolgozási lépesek után - pl.: stemming, funkciószavak kiszűrése - meg is volt a data set, amire lehet illeszteni egy modellt, amely képes Java method-signature-ket angolra fordítani. Grzegorz Chrupala és Jing Deng az IBM model 1-t és a PLDA modelleket alkalmazza fordító modellként, ami nem meglepő, hisz az előbbi egy gépi-fordításra, míg az utóbbi nyelvek közti dokumentum keresésre alkotott modell.

 

Chrupla és Deng munkájában tetszett, hogy ilyen un-orthodox módon fordítással keresnek ráadásul ilyen fura dolgok között, de egy igaz magyar un-orthodox fordító modelleket is használ! Az én olvasatomban ez a "bag-of-words fordítás" a regresszió probléma körébe tartozik, hiszen ha az angol leírásokat és azok method-signature megfelelőit tf*idf mátrixokban ábrázoljuk egyszerűen regressziós modellt illeszthetünk a két vektor-térre, ahol a bemenet a deskripció-vektor és a cél pedig a hozzá tartozó method-signature vektor. Több modellt is kipróbáltam, de a Ridge-regresszió teljesített a legjobban megverve a PLDA-t és azért viszonylag alul múlva az IBM modell 1-t. Szerintem az alábbi táblázatban az Acc@10 a legfontosabb mutató, azt mondja meg, hogy az esetek mekkora részében adja vissza a rendszer a megfelelő találatot az első kereső oldalon.

 

 

MRR Acc@1 Acc@10
Ridge 0.39 0.23 0.71
PLDA 0.35 0.24 0.56
IBM model 1 0.49 0.34 0.79

 

 

De mint említettem nem kizárólag az volt a cél, hogy írjak egy fura keresőmotort, hanem hogy hozzájáruljak a ma még gyerekcipőben járó Grounded Learning módszertanához. Arra voltam kíváncsi, hogy a Java terminusok mennyire tudják megragadni az angol kifejezések jelentését egy ilyen regressziós fordítás során és hogy mindezt, hogy lehetne letesztelni. Végül úgy döntöttem, hogy neurális hálót használok a kísérletezgetéshez méghozzá több szintes neurális hálót azaz Multilayer Perceptront, ami a projektem szempontjából azért érdekes, mert a köztes (rejtett) szinteken érdekes absztrakt reprezentációt tanulhat a nyelvi adatokból.

 

 NN.png

 

Ahogy a fentiekben már ecseteltem a képen illusztrált neurális háló is tf*idf deskripció-vektorokból tanul meg jósolni tf*idf method-signature-vektorokat. Hogy szemléletes legyek a háló baloldalán van az Angol-tér, a jobb oldalán a Java-tér és ott középen vagyunk a nyelvek között. Az volt az ötletem, hogy csinálok a deskripció összes szavához one-hot-encodinggal szó-vektort (jó sok 0 és egyetlen 1-es a szó indexének helyén) és ezekből kapott mátrixokat "beágyazom a háló közepébe". A poén az, hogy one-hot-encodinggal a szavak közti kapcsolatok nincsenek reprezentálva, de ha a tanulás során az angol kifejezések jelentését valamennyire megfogtuk Java terminusokkal, akkor a beágyazott szó-vektorok esetében azt várjuk, hogy a hasonló szavak vektora hasonló helyen helyezkedjen el (hasonló irányba mutasson) a beágyazott vektortérben. Szerencsére teljesült a kívánságom, alább mutatok pár példát az így kapott szólistáimból.

 

zip currency cos true yyyy
compressed symbol argument whether sep
compression represent trigonometric boolean oct
checksum territories cosine equality nov
uncompressed countries angle false mm

 

Ahogy láthatjátok tényleg "összeklasztereződtek" a hasonló szavak, ami azt jelenti, hogy valamit elcsíptünk az angol szavak jelentéséből Java terminusokkal. Kicsit másképp megfogalmazva: a poén az, hogy a neurális hálóba ágyazott szó-vektorok egész reálisan reprezentálják az angol szavak egymás közti viszonyait, de ezt nem úgy értük el, hogy megfigyeltünk angol szövegeket, hanem azok viszonyát figyeltük meg rajtuk kívül eső dologhoz.

 

Ez mind tök király és cum laude is lett a vége, de nem árultam a poszt elején zsákbamacskát és így a vége felé is nehéz lenne megmondanom, hogy valójában mi értelme volt az egész vállalkozásnak. Amikor elkezdtem írni a szakdogát teljesen nyilvánvaló volt, hogy itt nagy dolgok vannak készülőben, kis idő távlatából azonban inkább egy ilyen "Rube Goldberg search engine avagy a keresőmotor a modern lélek tükre" című installációnak látom az Ernst múzeum egyik ingyenesen látogatható kiállításán. Mindenki döntse el maga mit gondol. Az egész rendszer az adatokkal együtt elérhető egy publikus repóban, mert azért a reproducable research az igazi party.

A Kereső Világ a Precognox Precognox szakmai blogja A Precognox intelligens, nyelvészeti alapokra építő keresési, szövegbányászati és big data megoldások fejlesztője.

Szólj hozzá! • Kövess Facebookon • Iratkozz fel értesítőre

A bejegyzés trackback címe:

https://kereses.blog.hu/api/trackback/id/tr116598185

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.