Univerzitet u Niˇ su ˇki Fakultet Prirodno matematic ˇunarske nauke Departman za rac Uˇ cenje vektorske reprezentacije reˇ ci govornog jezika primenom dubokih neuronskih mreˇ za Master rad Mentor: Prof. dr Branimir Todorovi c Niˇs, Oktobar 2015. Student: ˇ c Nenad Zivi
Predgovor Ovaj rad nastao je kao plod višegodišnjeg izučavanja mašinskog učenja, procesiranja govornog jezika i tehnologija paralelnog programiranja na grafičkim procesorima. Tema ovog rada veoma lepo spaja moja navedena interesovanja, te sam uživao pišući ga. Zahvaljujem se svom mentoru, prof. dr Branimiru Todoroviću, koji me je uveo u sferu mašinskog učenja, tamo me zadržao i usmerio u daljem individualnom napredovanju. Veliko mu hvala ne samo kao profesoru, već i kao istinskom mentoru koji me je naučio mnogo više od samog mašinskog učenja i procesiranja govornog jezika. Takod e se zahvaljujem i prof. dr Marku Petkoviću, dugogodišnjem nastavniku, profesoru i saradniku, na svemu što me je naučio o naučnom radu, kao i na tome što je kvalitenim i zanimljivim časovima u srednjoj školi direktno uticao na moju odluku da upišem Informatiku na Prirodno-matematičkom fakultetu. Dugujem veliku zahvalnost i svim ostalim profesorima na Departmanu za Računarske nauke Prirodno-matematičkog fakulteta u Nišu, zato što su uvek nesebično i prijateljski delili svoje znanje sa mnom, kao i svojoj porodici, prijateljima, i devojci Jeleni, koji su mi uvek pružali neizmernu podršku. 1
Sadržaj 1 Uvod 4 2 Osnovni koncepti dubokih neuronskih mreža 6 2.1 Višeslojni perceptron............................... 6 2.2 Konvolucione duboke neuronske mreže..................... 9 2.2.1 Konvolucija................................ 9 2.2.2 Mape osobina............................... 9 2.2.3 Udruživanje................................ 10 2.2.4 Arhitektura i treniranje duboke konvolucione mreže.......... 11 2.3 Dodatne ideje dubokog učenja.......................... 12 2.3.1 Sloj izbacivanja.............................. 12 2.3.2 Sloj ugrad ivanja u latentni vektorski prostor.............. 13 3 Procesiranje govornog jezika 15 3.1 Zadaci procesiranja govornog jezika....................... 15 3.2 Reprezentacija reči................................ 16 3.2.1 1-hot vektor reprezentacija........................ 16 3.2.2 Reprezentacija pomoću klasterovanja.................. 17 3.2.3 Reprezentacija u latentnom prostoru.................. 17 3.3 Metode redukcije dimenzionalnosti reprezentacije reči............. 18 3.3.1 Latentna semantička analiza....................... 18 3.3.2 Slučajno indeksiranje........................... 20 3.3.3 Reprezentacija reči pomoću dubokih neuronskih mreža........ 21 4 Implementacija i rezultati 22 4.1 Arhitektura mreže................................ 22 4.2 Korpusi...................................... 23 4.3 Pregled alata dubokog učenja.......................... 23 4.3.1 Python biblioteka Keras......................... 24 4.4 Rezultati...................................... 24 4.4.1 Brzina konvergencije........................... 25 4.4.2 Optimalna veličina mreže........................ 25 4.4.3 Uticaj sloja izbacivanja.......................... 26 4.4.4 Ugrad ivanje reči za različite dimenzionalnosti............. 27 5 Zaključak 30 Literatura 31 2
SADRŽAJ 3 Biografija 33
Glava 1 Uvod Procesiranje govornog jezika (eng. natural language processing) je jedna od najvažnijih i trenutno najaktivnijih oblasti veštačke inteligencije ali i informatike uopšte. Ova grana nauke bavi se interakcijom računara i čoveka, a kao krajnji cilj ima da omogući računarima da u potpunosti razumeju značenje govornog jezika. Ovo, naravno, nije nimalo jednostavan zadatak, te se na putu do gore navedenog konačnog cilja rodio veliki broj podzadataka koji su toliko kompleksni da se već sada mogu smatrati naukama za sebe. Neki od najpoznatijih primera su automatska sumarizacija teksta (eng. text summarization), mašinski prevod, prepoznavanje entiteta (eng. named entity recognition - NER), automatsko generisanje teksta, odred ivanje vrste reči u rečenici (eng. part of speech - POS tagging), i mnogi drugi. Nešto detaljnija diskusija o ovim zadacima nalazi se u trećem poglavlju ovog rada. Jedan od problema procesiranja govornog jezika je odred ivanje semantički sličnih reči. Istorijski, jedna od većih prepreka u razvoju softvera koji je u stanju da razume govorni jezik je bila činjenica da računar može da razume samo da su dve reči u tekstu u potpunosti iste, ili u potpunosti različite. Tako se javila potreba za algoritmima koji bi na neki način merili semantičku sličnost reči, a te podatke kasnije koristili kao akumulirano znanje za dalju obradu teksta i time značajno popravili kvalitet rešenja finalnog zadatka. Naučnici iz oblasti procesiranja govornog jezika su za ovakve zadatke koristili statističke metode kao sto su Slučajno indeksiranje [13], Braunovo klasterovanje [9], [8] ili standardne metode redukcije dimenzionalnosti predstave reči kao sto je SVD (Singular Value Decomposition). Ovi metodi su nažalost ili previše jednostavni (Slučajno indeksiranje), grubi (Braunovo klasterovanje) ili računski zahtevni (SVD). Za to vreme, naučnici su se bavili neuronskim mrežama koje su se činile kao jako dobra ideja, ali u svoje vreme su se suočile sa nedovoljno jakim računarima da bi bile naučene dovoljno dobro za razumno vreme. Kraj prve decenije dvadeset prvog veka obeležavaju tzv. duboke neuronske mreže, koje su u stanju da nauče različite nivoe apstrakcije. Neke od primena su klasifikacija teksta, slika i videa. Treniranje dubokih neuronskih mreža postalo je izvodljivo u realnom vremenu zahvaljujući tehnologiji njihovog treniranja na grafičkim procesorima, veoma pogodnim za matrična izračunavanja, koja čine najveći deo posla u treniranju neuronskih mreža. To je otvorilo mogućnost za primenu dubokih neuronskih mreža čak i u problemima procesiranja govornog jezika, koji su naročito problematični zbog skupova velike kardinalnosti. Cilj ovog rada je paralelna implementacija duboke neuronske mreže na grafičkom procesoru i njena primena na odred ivanje semantičkih sličnosti reči, i to predstavljanjem reči u visokodimenzionom vektorskom prostoru. U anglosaksonskoj literaturi, ovaj problem se 4
Uvod 5 može naći pod imenom word embedding. Ovo predstavljanje se, na veliku sreću, postiže kao usputni proizvod treniranja problema klasifikacije na neanotiranom korpusu teksta, te nije potreban dodatni napor (vremenski a samim tim i finansijski) za ljudsku anotaciju teksta. Drugim rečima, predstavljanje reči u vektorskom prostoru je reprezentacija koju neuronska mreža sama nauči kako bi sebi olakšala problem odred ivanja da li odred eni kontekst ima smisla u govornom jeziku ili ne. Rad je struktuiran na sledeći način. U drugom poglavlju su najpre predstavljeni osnovni koncepti dubokih neuronskih mreža. Najpre se uvodi definicija modela neurona, sloja neurona, pa napokon i cele neuronske mreže. Nakon toga navedeni su neki od osnovnih koncepata dubokih neuronskih mreža, kao sto su konvolucija, mape osobina i udruživanje, sve kroz primer duboke konvolucione mreže. Na kraju, navedene su još neke od ideja dubokog učenja koje su od naročitog značaja za problem ugrad ivanja reči u latentni vektorski prostor. To su sloj izbacivanja i sloj ugrad ivanja u latentni vektorski prostor. Treće poglavlje daje kratak pregled aktuelnih problema procesiranja govornog jezika. U ovom poglavlju se najpre ukratko upoznajemo sa tim zadacima. Zatim pokazujemo različite načine reprezentacije reči u algoritmima mašinskog učenja. Nakon toga, dat je uvid u neke od metoda redukcije dimenzionalnosti reprezentacija reči, od kojih je jedan ugrad ivanje u latentni vektorski prostor pomoću duboke neuronske mreže, a koji je glavna tema ovog rada. Četvrto poglavlje govori detaljnije o konkretnoj arhitekturi mreže korišćene u ovom radu za reprezentaciju reči. Pored arhitekture, tu je i kratak pregled korišćenih korpusa teksta, kao i opis alata u kojima je neuronska mreža isprogramirana. Na kraju ovog poglavlja predstavljeni su rezultati ovakve arhitekture mreže kroz nekoliko eksperimenata i primera ugrad ivanja reči. Zaključak sumira dobijene rezultate i predlaže moguće pravce za dalje unapred enje reprezentacija reči korišćenjem dubokih neuronskih mreža.
Glava 2 Osnovni koncepti dubokih neuronskih mreža Postoji veliki broj različitih arhitektura dubokih neuronskih mreža. U daljem tekstu biće navedene neke od njih, i kroz njih objašnjeni neki od osnovnih koncepata dubokog učenja, kao što su različiti nivoi apstrakcije, slučajna eliminacija čvorova (eng. dropout), udruživanje (eng. pooling) itd. 2.1 Višeslojni perceptron Posmatrajmo problem nadgledanog (eng. supervised) učenja u kome imamo označeni (eng. labeled) korpus D = {(x i, y i )} N i=1. Neuronska mreža je sposobna da nauči kompleksnu, nelinearnu, hipotezu h W,b (x) koja u dobroj meri odgovara podacima iz korpusa D. Kako bismo opisali način funkcionisanja neuronske mreže, krenućemo od najjednostavnije moguće neuronske mreže - jednog jedinog neurona (slika 2.1). Slika 2.1: Prikaz jednog neurona sa svojim ulaznim i izlaznim sinapsama. Neuron na slici je ništa drugo do jedinica za izračunavanje (eng. computational unit) koja uzima ulazne vrednosti x 1, x 2 i x 3, kao i konstantni član, a na izlazu daje h W,b (x) = f(w T x) = f( 3 W i x i + b), (2.1) gde je f tzv. aktivaciona funkcija koja se može definisati na nekoliko načina. U daljem tekstu biće navedena tri često korišćena primera aktivacionih funkcija. 6 i=1
Osnovni koncepti dubokih neuronskih mreža 7 Prvi je tzv. sigmoidalna aktivaciona funkcija, ili skraćeno sigmoid, koja ima sledeći oblik: f(z) = 1. (2.2) 1 + e z Druga korišćena opcija za aktivacionu funkciju je hiperbolički tangens, sledećeg oblika: f(z) = ez e z. (2.3) e z + e z Istraživanja su pokazala da u neuronskim mrežama veoma dobro radi treća opcija, zglobna aktivacija: f(z) = max(0, z). (2.4) Na grafiku 2.2 prikazano je pored enje ove tri najzastupljenije aktivacione funkcije. Slika 2.2: Poredbeni prikaz tri najčešće korišćene aktivacione funkcije neurona. U daljem radu biće korisno znati koji su izvodi ovih funkcija. Zapravo, njihovi izvodi su i uzrok njihove popularnosti. Izvod sigmoidalne aktivacione funkcije je f (z) = f(z)(1 f(z)), (2.5) a izvod zglobne aktivacione funkcije je takod e veoma jednostavan i ima sledeći oblik { f 1 z > 0 (z) = 0 z < 0. (2.6) U nuli je ovaj gradijent nedefinisan, ali to ne predstavlja problem u praktičnoj primeni, pošto se gradijent usrednjava po više primera tokom učenja. Postoje i aktivacione funkcije
Osnovni koncepti dubokih neuronskih mreža 8 koje imaju takav oblik da vrlo malo odstupaju od zglobne aktivacione funkcije, ali su diferencijabilne u svim tačkama. Neke od njih mogu se naći u radovima [26] i [27]. Sloj neuronske mreže dobija se kada se paralelno postavi odred eni broj neurona. Vrlo su česte mreže sa arhitekturom u kojima postoje veze samo izmed u susednih slojeva, a signal se propagira samo unapred, i u ovom radu ćemo uglavnom takve mreže i razmatrati. Ovakve mreže zovu se neuronske mreže sa direktnim propagiranjem signala (eng. feedforward neural network). Na slici 2.3 je prikazana takva mreža sa jednim ulaznim, jednim skrivenim i na kraju, izlaznim slojem. Slika 2.3: Neuronska mreža sa direktnim propagiranjem signala i jednim skrivenim slojem. U sledećim odeljcima uvodimo notaciju neophodnu za razumevanje izvod enja i formula vezanih za neuronske mreže. Neka L predstavlja broj slojeva u mreži. W (i) predstavljaće matricu težina sinapsi izmed u slojeva l i l + 1, a indeksira se tako da W (l) ij predstavlja težinu sinapse izmed u neurona i u sloju l i neurona j u sloju l + 1. Sa a (l) i obeležavaćemo aktivaciju neurona i u sloju l. U specijalnom slučaju sloja 1, tj. ulaznog sloja, označavaćemo a (1) i = x i. Signal se propagira na sledeći način: aktivacija neurona i u sloju l + 1 računa se kao: s l i = f( W (l) ji al j). (2.7) a (l+1) j=1 Kao što se može primetiti, radi se o množenju matrice i vektora. Ove operacije su veoma pogodne za masovnu paralelizaciju, te zaključujemo da je propagiranje signala kroz mrežu veoma pogodna operacija za računanje na grafičkom procesoru. Više o tome u narednom poglavlju. Ova operacija propagiranja signala se, dakle, može predstaviti na sledeći način: a (l+1) = f(w (l) a (l) ). (2.8) Na ovaj način možemo naslagati proizvoljan broj slojeva i graditi proizvoljne arhitekture. Arhitekture u kojima nema ciklusa ili petlji (mreže sa direktnim propagiranjem signala) su naročito korišćene i pogodne za brza izračunavanja na grafičkom procesoru te će oni biti
Osnovni koncepti dubokih neuronskih mreža 9 glavna tema istraživanja. Primer dublje arhitekture mreže dat je na slici 2.4. Ovakva mreža se popularno zove višeslojni perceptron (eng. multi-layered perceptron). Slika 2.4: Arhitektura visešlojnog perceptrona. 2.2 Konvolucione duboke neuronske mreže Gore opisana arhitektura neuronskih mreža podrazumeva veze izmed u svakog neurona sloja l sa svakim neuronom sloja l + 1. Ova osobina nosi sa sobom dva problema. Prvi je taj što realne, biološke, neuronske mreže ne funkcionišu na takav način, već su lokalno povezane. Ovo je med u prvima primećeno i objavljeno u [22]. Drugi, daleko praktičniji razlog, je taj što ovo ume biti veoma računarski zahtevno jer broj konekcija raste kvadratno sa brojem neurona u slojevima. Ova opservacija vodi nas do podele neuronskih mreža na potpuno povezane (eng. fully connected) i lokalno povezane (eng. locally connected). 2.2.1 Konvolucija Ideja lokalno povezanih mreža potiče iz zadataka klasifikacije slika. U ovom domenu, takozvana konvolucija je prirodan izbor. Konvolucija je tehnika povezivanja slojeva u kojoj na čvor i u sloju l + 1 utiču (povezani su) samo čvorovi i k, i k + 1,..., i + k 1, i + k iz sloja l, gde je k parametar koji predstavlja veličinu polja konvolucije i veoma zavisi od domena. Veoma popularan primer je MNIST set podataka, koji sadrži rukom pisane cifre prevedene u oblik bit mape. U ovom setu podataka nalaze se slike rezolucije 28 28, pa se najčešće uzima širina konvolucije k = 2. Za slike veće rezolucije uzimalo bi se veće k. Skica konvolucije u dve dimenzije prikazana je na slici 2.5. Kernel je filter koji množi odgovarajuće veze odgovarajućim težinama. 2.2.2 Mape osobina U prethodnom potpoglavlju opisali smo kako se iz jednog sloja duboke konvolucione mreže dobijaju aktivacije u narednom sloju upotrebom kernela konvolucije. Ovaj kernel se uči postupkom optimizacionog algoritma koristeći propagiranje greške unazad. Ovako
Osnovni koncepti dubokih neuronskih mreža 10 Slika 2.5: Konvolucija u 2D. Vrednosti u matrici kernela množe odgovarajuće vrednosti u sloju l i ta vrednost se dodaje odgovarajućem neuronu u sloju l + 1. naučen kernel predstavlja znanje o nekom nivou apstrakcije. Kako ovakvih osobina može biti mnogo (u konkretnom primeru slike to mogu biti različiti oblici, ivice, teksture itd), moramo imati veći broj različitih kernela u svakom konvolucionom sloju. To znači da se npr. iz ulaznog sloja, pomoću k kernela, podaci slikaju u k različitih slojeva mreže istog nivoa apstrakcije. Svaki od tih k slojeva zove se mapa osobina (eng. feature map). Svaka od ovih mapa čuva informaciju o nekoj osobini dela slike definisanog širinom konvolucije. Slikanje ulaznog sloja u više mapa osobina prikazano je na slici 2.6. Slika 2.6: Kompletna konvoluciona neuronska mreža koja pokazuje najpre proces konvolucije, zatim slikanja u više mapa osobina, potom udruživanje, i na kraju spajanje sa potpuno povezanim višeslojnim perceptronom. 2.2.3 Udruživanje Nakon što smo dobili nove vrednosti u sledećem sloju (eng. features), treba ih nekako propagirati i upotrebiti za klasifikaciju. U teoriji, možemo iskoristiti sve osobine iz svih mapa osobina koje smo dobili konvolucijom. Med utim, ovaj broj ume da naraste do redova veličine miliona, iz jednostavnog razloga što u praktičnim primenama, broj mapa osobina je reda veličine stotina. Iz tog razloga se koristi tehnika udruživanja (eng. pooling). Ova
Osnovni koncepti dubokih neuronskih mreža 11 tehnika podrazumeva da se p susednih neurona udruže na neki način i time formiraju ulaz sa sledeći sloj. Ovo je prikazano na slici 2.6. Vrednost p opet jako zavisi od primene. U gore navedenom primeru MNIST slika pisanih cifara, ima smisla birati p = 2 i p = 3 jer su slike male rezolucije. Najčešći vid udruživanja su srednja vrednost aktivacija svih neurona u oblasti koja se udružuje (eng. mean-pooling) i maksimalna vrednost tih aktivacija (eng. max-pooling). 2.2.4 Arhitektura i treniranje duboke konvolucione mreže Konvoluciona neuronska mreža (eng. Convolutional Neural Network - CNN) je sastavljena od jednog ili više konvolucionih slojeva, na koje se nestavlja jedan ili više potpuno povezanih slojeva na isti način kao u standardnom višeslojnom perceptronu. Arhitektura konvolucione mreže je dizajnirana tako da iskoristi 2D strukturu slike, med utim ideja konvolucije se koristi i sa 1D podacima u vidu teksta, a u skorije vreme i sa 3D podacima u vidu videa [15]. Prednosti CNN arhitekture su u iskorišćenju različitih nivoa apstrakcije, kao i u brzini treniranja, pošto CNN mreža ima za red veličine manje sinapsi od MLP mreže sa istim brojem neurona. Sada ćemo malo detaljnije opisati arhitekturu konvolucione mreže na primeru. Ukoliko je ulaz konvolucionoj mreži slika dimenzije m m, sa r kanala, najpre se vrši q konvolucija reda k (matricom kernela 2k + 1 2k + 1), gde je q broj mapa osobina a k broj susednih neurona iz ulaznog sloja koji utiče na vrednost neurona u prvom skrivenom sloju. Tako smo dobili q paralelnih slojeva, svaki dimenzije m 2k + 1 m 2k + 1. Ovi slojevi se potom udružuju koristeći udruživanje reda p, tako da naredni sloj ima dimenzije (m 2k+1)/p (m 2k+1)/p. Onda se proces konvolucije ponavlja sve dok ukupan broj neurona ne postane pogodan za povezivanje za potpuno povezanim ostatkom mreže. Ovakva mreža trenira se gradijentnim spustom, ili bilo kojim naprednijim algoritmom optimizacije kriterijumske funkcije (npr. Nesterovljev metod momenta [24]) i propagiranjem signala greške unazad. Formalno, algoritam treniranja neuronske mreže na korpusu D = {(X i, y i ) N i=1} je zapravo optimizacioni problem: (W, b) = argmin W,b J(W, b; (X i, y i ) N i=1), (2.9) gde je J kriterijumska funkcija, odnosno funkcija koja odred uje meru kažnjavanja greške u klasifikaciji. Sada ćemo ukratko pokazati formule za propagiranje greške unazad. Neka je δ (l+1) vektor greške u sloju l + 1 u mreži u kojoj je kriterijumska funkcija J(W, b; x, y), gde su (W, b) parametri a (x, y) trening podaci. Ako je sloj l gusto (potpuno) povezan sa slojem l + 1, onda je greška u l-tom sloju: a gradijenti su: δ (l) = ((W (l) ) T δ (l+1) ) f (z (l) ), (2.10) W (l)j(w, b; x, y) = δ (l+1) (a (l) ) T, (2.11) b (l)j(w, b; x, y) = δ (l+1). (2.12) U slučaju propagiranja greške ka slojevima udruživanja i konvolucije, treba voditi dodatnog računa. Kod propagiranja ka sloju udruživanja, greška u l + 1-om sloju se uniformno
Osnovni koncepti dubokih neuronskih mreža 12 rasporedi po svim udruženim činiocima u l-tom sloju. Kod konvolucije, radi se slična stvar, samo što se greška težinski raspored uje na osnovu vrednosti u matrici kernela. Primetimo da je i propagiranje greške unazad matrična operacija te je i nju moguće izuzetno brzo izvesti na grafičkom procesoru. Zaključujemo da je ceo trening neuronske mreže veoma pogodan za masovno paralelno izračunavanje, pa će to i biti način na koji će se trening vršiti. Za kraj ovog poglavlja valja napomenuti sledeće. Iako ideja konvolucije ima najprirodniju primenu u obradi slika, ona je našla primenu i u obradi teksta. Par uspešnih pokušaja mogu se naći u [1] i [14]. Najveći problem u primeni konvolucionih mreža u obradi teksta je taj što nije najjasnije kako iskoristiti lokalni uticaj reči i što je broj kanala umesto 3 (RGB) reda veličine nekoliko desetina hiljada (kardinalnost rečnika). Odgovor na ove probleme još uvek nije definitivno nad en, te konvolucione mreže jos uvek nisu napravile pravi proboj u inteligentnoj obradi teksta. 2.3 Dodatne ideje dubokog učenja U ovom kratkom poglavlju opisaćemo dve ideje dubokog učenja koje će biti od suštinskog značaja kada budemo kreirali duboku neuronsku mrežu koja će rešavajući problem klasifikacije modela jezika vršiti reprezentaciju reči u latentnom vektorskom prostoru. Ove dve ideje zapravo su dve vrste slojeva koje su otkrivene veoma skoro, u 21. veku. To su: Sloj izbacivanja (eng. dropout layer) Sloj ugrad ivanja (eng. embedding layer) 2.3.1 Sloj izbacivanja Duboke neuronske mreže sa velikim brojem parametara su veoma moćan alat mašinskog učenja. Med utim, zbog ogromnog broja parametara, pretreniravanje (eng. overfitting) je ozbiljan problem u ovakvim mrežama. Pošto su duboke mreže relativno spore, kako za treniranje, tako i u testiranju, nisu pogodne ni za statističko usrednjavanje naučenih modela (eng. ensemble averaging), koje je poznata tehnika za adresiranje pretreniravanja. Izbacivanje (eng. dropout) je tehnika koja na adekvatan i prirodan način adresira ovaj problem. Naime, ideja je da se neuroni nasumično izbacuju iz neuronske mreže u toku treniranja. Ovo sprečava koadaptaciju neurona i poboljšava generalizaciju. U toku treniranja se zapravo dešava uzorkovanje (eng. sampling) podmreža iz eksponencijalnog (po broju neurona) broja podmreža. U toku testiranja, vrši se usrednjavanje svih ovih mreža na jednostavan način - jednostavno se kao izlaz računa izlaz cele, neuzorkovane mreže. Ovakva tehnika značajno smanjuje pretreniravanje i daje bolje rezultate od većine drugih metoda regularizacije. U [16] su prikazana poboljšanja u nekoliko najčešćih primena dubokih mreža, med u kojima su zadaci računarskog vida (eng. computer vision), prepoznavanja govora (eng. speech recognition), klasifikacije dokumenata itd. Rezultati predstavljeni u [16] su u velikom broju zadataka state-of-the-art. Na slici 2.7 grafički je prikazano izbacivanje. Najčešće se vrednost parametra izbacivanja (verovatnoća da svaki neuron ostane u mreži) uzima iz intervala [0.2, 0.8].
Osnovni koncepti dubokih neuronskih mreža 13 Slika 2.7: Model izbacivanja u neuronskoj mreži. Levo je standardna neuronska mreža sa dva skrivena sloja. Desno je primer uzorkovane mreže dobijene nakon primene izbacivanja neurona na levu mrežu. Razlika u propagiranju signala unapred u mreži sa izbacivanjem neurona u odnosu sa standardnu neuronsku mrežu se postiže uzorkovanjem vektora iz Bernulijeve raspodele r (l) j = B(1, p), (2.13) gde p predstavlja verovatnoću da svaki neuron ostane u mreži za naredni trening podatak (u slučaju stohastičkog gradijentnog spusta) ili grupu trening podataka (u slučaju gradijentnog spusta sa malim grupama (eng. mini-batch gradient descent)). Dalje se signal propagira unapred na sledeći način, slično kao u mreži bez izbacivanja neurona: ˆ y (l) = y (l) r (l), (2.14) z (l+1) i = W (l+1) i y ˆ (l) + b (l+1) i, (2.15) y (l+1) i gde predstavlja operaciju poelementnog množenja vektora. = f(z (l+1) i ), (2.16) 2.3.2 Sloj ugrad ivanja u latentni vektorski prostor Slojevi neuronske mreže mogu se interpretirati na sledeći nacin - svaki sloj nakon ulaznog, a pre izlaznog, zapravo predstavlja preslikavanje u novi prostor karakteristika koje neuronska mreža sama nauči u procesu optimizacije, kako bi što efikasnije rešila problem klasifikacije logističkom regresijom u zadnjem, tzv. softmax sloju. U zavisnosti od ulaza, tj. domena, ova osobina može se iskoristiti kako bi se upored ivale reprezentacije ulaznih podataka koje neuronska mreža generiše. Što je reprezentacija u skrivenom sloju sličnija, pretpostavka je da je sličniji i ulaz, jer ih mreža kodira na sličan način. Ovu ideju koristi tzv. sloj ugrad ivanja (eng. embedding) neuronske mreže. Sloj ugrad ivanja može se shvatiti na više načina. Razmotrimo primer reči govornog jezika. Recimo da svaka reč ima svoj vektor dužine d kao svoju reprezentaciju. Ukoliko te vektore stavimo na ulaz
Osnovni koncepti dubokih neuronskih mreža 14 neuronske mreže i rešavamo npr. problem modela jezika standardnim treniranjem neuronske mreže, rešićemo dati problem samo ako su početne reprezentacije dobre i na dobar način oslikavaju odnose med u rečima. Pošto to ne možemo da garantujemo (ili čak želimo da saznamo), možemo da propagiranje greške unazad produžimo do ulaznog sloja i time dopustimo mreži da sama koriguje ulazne reprezentacije. Drugačije gledano, možemo za ulazni sloj proglasiti 1-hot reprezentaciju reči, pa bi ugrad ivanje reči u latentni prostor bilo kodirano u težinama drugog (prvog skrivenog) sloja. U praksi se sloj ugrad ivanja implementira matricom dimenzija V d, gde je V broj različitih reči u vokabularu, a d dimenzija latentnog prostora u koji se reči ugrad uju. Ta matrica se koristi kao enkoder na taj način što vrednosti na ulaznom sloju indeksiraju odgovarajući red matrice ugrad ivanja. Ovaj proces je opisan u [1]. Sloj ugrad ivanja ima veoma zanimljivu primenu jer možemo saznati med usobne odnose izmed u odred enih entiteta implicitno, rešavajući drugi problem, ili čak skup više problema (u multitask učenju). Ovaj sloj biće okosnica odred ivanja reprezentacija reči u latentnom prostoru u nastavku ovog rada.
Glava 3 Procesiranje govornog jezika 3.1 Zadaci procesiranja govornog jezika Kako je procesiranje govornog jezika veoma široka oblast istraživanja, teško je dati precizniji opis od onog koji je dat u uvodu - to su svi algoritmi koji za svoj cilj imaju neki stepen razumevanja govornog jezika, bilo u pisanoj ili zvučnoj formi. Ovako definisana, ova klasa problema obuhvata probleme od najjednostavnijih poput korigovanja grešaka u kucanju pa sve do najzahtevnijih kao što je označavanje semantičkih uloga u rečenici (eng. semantic role labelling ili shallow text parsing). U ovom odeljku pokušaćemo da navedemo najreprezentativnije primere NLP-a. Problemi koje ćemo navesti se takod e nalaze i u radu [1], gde se naveden veoma zanimljiv rezultat neuronske arhitekture koja je u stanju da nauči da rešava više zadataka procesiranja govornog jezika odjednom (eng. multitask learning). Odred ivanje sintaksne uloge reči (eng. Part-Of-Speech (POS) Tagging) ima za zadatak da svakoj reči u rečenici dodeli njenu sintaksnu ulogu, odnosno klasu. Primera radi, u rečenici Mačka sedi na otiraču, zadatak algoritma je da vrati sledeće: Mačka - imenica, sedi - glagol, na - predlog, otiraču - imenica. POS Tagging se smatra jednim od jednostavnijih problema procesiranja govornog jezika, posto većina reči ima samo jednu moguću ulogu u rečenici, te algoritmi koji rade na principu najverovatnije sintaksne uloge mogu da dostignu preciznost od 90% na realnim korpusima [2]. Druge, nešto naprednije metode, kao što su skriveni Markovljevi modeli (eng. Hidden Markov Models - HMM) i algoritmi dinamičkog programiranja mogu da dostignu pristojnih 95% preciznosti ([3], [4]). U primeni su takod e i pristupi koji podrazumevaju mašinsko učenje, kao što su princip k najbližih suseda (eng. k Nearest Neighbors - knn), klasifikator sa maksimalnom marginom (eng. support vector machine - SVM), klasifikatori koji maksimizuju entropiju itd. Svi ovi algoritmi uspevaju da premaše granicu od 95%. Prepoznavanje entiteta (eng. Named Entity Recognition - NER) predstavlja problem prepoznavanja početka i kraja, kao i klasifikaciju atomičnih elemenata u rečenici, kao što su OSOBA, KOMPANIJA, LOKACIJA, STRUČNA SPREMA i sl. Ovo je, u suštini, problem klasifikacije i spada u relativno dobro rešene probleme procesiranja govornog jezika, ali se nikako ne može smatrati definitivno rešenim. Generalno, postoje dva pristupa: ekspertski, na principu gramatičkih pravila, koji je često zametan i podrazumeva veliki broj ručno kodiranih pravilnosti i pristup mašinskim učenjem koji je daleko elegantniji. Tipično, prvi pristup vodi do bolje preciznosti (eng. precision) ali lošijeg odaziva (eng. recall). 15
Procesiranje govornog jezika 16 Trenutno najnapredniji algoritmi (eng. state-of-the-art) su na većini često korišćenih korpusa nekoliko procenata lošiji od ljudskog anotatora (97.60% naspram 93.39%, što se može videti u [5]). Odred ivanje semantičke uloge (eng. Semantic Role Labeling - SRL) za cilj ima da svakoj reči u tekstu dodeli semantičko značenje, odnosno ulogu reči u rečenici. Postoje različiti formalizmi kada je u pitanju SRL. Jedan od njih se može naći u tzv. PropBank [6], gde se rečima dodeljuju sledeće uloge: ARG0-5 su reči koje predstavljaju argumente predikatima u rečenici (subjekti i objekti), REL predstavljaju predikate, odnosno reči koje odred uju relacije izmed u argumenata, kao i ARGM koje predstavljaju modifikatore argumenata, kao što su lokacija, vreme i sl. Odred ivanje semantičke uloge smatra se jednim od najkompleksnijih zadataka procesiranja govornog jezika, što ne čudi, s obzirom da ukoliko se uradi savršeno, vodi do gotovo potpunog razumevanja smisla rečenice. Iz tog razloga se SRL koristi kao glavni test (eng. benchmark) u mnogim radovima koji se bave primenom dubokih neuronskih mreza na NLP [1]. Modeli jezika (eng. Language Models) imaju nekoliko definicija. Istorijski se najčešće koristila ona koja podrazumeva odred ivanje koja reč je sledeća, uzimajući u obzir prozor od nekoliko reči (tzv. n-gram). U ovom radu ćemo modelom jezika podrazumevati klasifikacioni problem kome je zadatak da uzimajući kontekst širine k odredi da li taj kontekst ima smisla u govornom jeziku ili ne. Ovakva formulacija problema je veoma pogodna za treniranje neuronske mreže na korpusu skinutom sa globalne mreže (www) bez dodatne anotacije, jer je lako slučajno generisati kontekste koji nemaju smisla u govornom jeziku. Ova ideja se može naći u [7], radu koji za model jezika koristi plitki klasifikator. Valja napomenuti da se ovde ipak radi o nadgledanom učenju, iako nije potrebna dodatna anotacija, pošto je anotaciju zapravo indirektno izvršio autor teksta iz korpusa pišući ga smisleno. Odred ivanje semantički povezanih reči (sinonima) je jedan od ciljeva ovog rada. Generalnije, ovaj zadatak može da podrazumeva algoritam mašinskog učenja koji odred uje sličnosti izmed u svake dve reči, ili da podrazumeva klasterovanje reči. Klasterovanje reči može da bude planarno [8] ili hijerarhijsko [9]. Ovako odred ene sličnosti med u rečima mogu da u velikoj meri poprave performanse drugih algoritama procesiranja govornog jezika, te se vrlo često koriste kao deo preprocesiranja u procesu rešavanja nekog drugog problema. 3.2 Reprezentacija reči Kao što je već u nekoliko navrata pomenuto, jedan od problema u procesiranju govornog jezika su veliki rečnici. Primera radi, korpusi koji sadrže govor ljudi preko telefona imaju rečnike od oko 20000 reči, što je prihvatljiv broj. Med utim, u primenama na korpuse sa globalne mreže srećemo se sa čak i za dva reda veličine većim korpusima. Razlog ovome je veliki broj datuma, mejl adresa, skraćenica, izraza specifičnih domena, grešaka u kucanju, itd. Ovakvi korpusi mogu da dostignu i kardinalnost rečnika od oko 1000000 reči. 3.2.1 1-hot vektor reprezentacija Najjednostavniji način predstavljanja reči u metodama mašinskog učenja (eng. feature vector) je vektor sa jednom jedinicom, tzv. 1-hot vektor. 1-hot vektor se gradi na sledeći
Procesiranje govornog jezika 17 način: ukoliko je reč mačka na i-tom mestu u vokabularu koji ima V elemenata, 1-hot vektor je vektor dužine V koji na i-toj poziciji ima vrednost 1 a na svim ostalim mestima ima vrednost 0. Jasno je da ukoliko ulaznom sloju neuronske mreže dajemo kontekst širine k, koristeći 1-hot vektorsku reprezentaciju reči u kontekstu, taj ulazni sloj mora imati kv neurona. Ukoliko prvi skriveni sloj neuronske mreže ima h 1 neurona, dobijamo da samo izmed u ulaznog i prvog skrivenog sloja ima kv h 1 konekcija. Razmotrimo tipične vrednosti za k, V i h 1 i analizirajmo kompleksnost dela mreže izmed u ula znog i prvog skrivenog sloja. Jedna od najčešćih širina konteksta u NLP-u je dve reči pre i posle posmatrane reči, te imamo da k = 5. Ukoliko se bavimo realnim korpusom skinutim sa weba, čak i nakon blagog preprocesiranja koje podrazumeva detekciju mejl adresa, datuma i sl, dolazimo do realnih V = 100000. Na kraju, u realnim problemima se vrlo često koriste skriveni slojevi od h 1 = 1000 neurona. Dakle, izmed u ulaznog i prvog skrivenog sloja imamo c i 1 = kv h 1 = 500000000 konekcija. Ovo je ogroman broj, čak i za današnji hardver. Još jedan problem sa 1-hot predstavljanjem reči je taj što u tom slučaju algoritam nema nikakvo znanje o eventualnoj sličnosti izmedju reči. Ovo za posledicu ima to da je ulazni tekst veoma redak (eng. sparse). Drugim rečima, u korpusu se veoma retko ponavljaju odred eni n-grami baš iz razloga što odbacujemo znanje o sinonimiji. Ukoliko bismo uključili to znanje, u velikoj meri bismo poboljšali generalizaciju, jer bi se algoritam češće susretao sa poznatim kontekstima. 3.2.2 Reprezentacija pomoću klasterovanja Jedan od načina kako se mogu rešiti problemi koje nosi 1-hot reprezentacija reči je jednostavno da V bude mnogo manje. Ovo se može postići time što se slične reči stavljaju u isti klaster, pa se dalje tretiraju kao potpuno ista reč. Tada indeks reči i zapravo postaje indeks klastera i c i gubi se bilo kakva različitost reči unutar klastera. Gubitak individualnosti se može rešiti hijerarhijskim klasterovanjem [9], gledanjem pripadnosti klasteru na različitim dubinama hijerarhije. Problem sa hijerarhijskim klasterovanjem u praksi je taj što su algoritmi formiranja klastera jako kompleksni i vrlo često umeju da zaglave u besmislenom lokalnom minimumu [25]. Algoritmi hijerarhijskog klasterovanja se mogu podeliti u dve klase: odozgo-nadole (eng. top-down) i odozdo-nagore (eng. bottomup). Planarni algoritmi [8] su, pak, jako brzi i generišu klastere veoma izbalansiranih veličina, i u praksi, iz iskustva autora, su se pokazali kao pravi pristup redukcije dimenzionalnosti reprezentacije reči klasterovanjem. Nedostatak hijerarhije mogu nadomestiti sa više instanci planarnog klasterovanja sa eksponencijalno različitim brojem klastera, i čak i tako su brži od svojih hijerarhijskih konkurenata. 3.2.3 Reprezentacija u latentnom prostoru Treći pristup predstavljanja reči u algoritmima mašinskog učenja je takozvana reprezentacija u latentnom prostoru (eng. word embedding). Ona podrazumeva redukciju dimenzionalnosti 1-hot predstave u vektorski prostor čije koordinate nemaju direktno jasnog smisla čoveku (stoga i naziv latentni vektorski prostor). Dimenzionalnost tog vektorskog prostora zavisi od dalje primene, ali kreće se od nekoliko desetina do nekoliko hiljada. Ključna razlika ove reprezentacije u odnosu na prethodne dve je što je ona gusta (eng. dense), a prethodne dve su retke (eng. sparse). Retke reprezentacije imaju svojih prednosti
Procesiranje govornog jezika 18 kada je u pitanju vremenska kompleksnost nekih algoritama, prvenstveno onih u kojima ima operacija sa retkim vektorima i matricama. S obzirom na prirodu i arhitekturu neuronskih mreža, a samim tim i dubokih neuronskih mreža koje su glavni predmet istraživanja ovog rada, ova prednost ne postoji - neuronskim mrežama pogodna je gusta predstava, odnosno gusti vektori osobina reči. Gusti vektori osobina reči u ovom slučaju znače i da skalarni proizvod (mera sličnosti) izmed u dve reči ne uzima binarne vrednosti iz skupa {0, 1}, već uzima vrednosti iz intervala [0, 1], što, kao što je već ranije pomenuto, u velikoj meri eliminiše problem retkog korpusa i koristi pojavu sinonimije ili pak semantički sličnog značenja reči. Postoje različite statističke i metode mašinskog učenja za predstavljanje reči u latentnom prostoru. U narednom poglavlju ćemo se baviti sa tri suštinski različite metode: Latentna semantička analiza (eng. Latent Semantic Analysis - LSA) Slučajno indeksiranje (eng. Random Indexing - RI) Reprezentacija reči pomoću duboke neuronske mreže 3.3 Metode redukcije dimenzionalnosti reprezentacije reči 3.3.1 Latentna semantička analiza Matrica reč-dokument (eng. Term-Document Matrix) je jedan od načina predstavljanja rečnika jednog korpusa teksta. Naime, to je matrica u kojoj svaka kolona predstavlja jedan dokument, a svaki red predstavlja jednu reč. Svaka ćelija predstavlja neku meru pojavljivanja reči u dokumentu. Postoji nekoliko takvih mera: Slika 3.1: Prikaz matrice reč-dokument. Kolona predstavlja bag-of-words predstavu dokumenta, a red predstavlja vektor osobina reči.
Procesiranje govornog jezika 19 Binarno predstavljanje gde vrednost 1 označava da se reč nalazi makar jednom u dokumentu a vrednost 0 znači da se reč ne pojavljuje u dokumentu. Broj pojavljivanja, gde matrica reč-dokument u svakoj ćeliji čuva broj pojavljivanja odgovarajuće reči u odgovarajućem dokumentu. Tf-idf, ili bilo koja druga težinska mera koja na inteligentniji način broji pojavljivanja reči u dokumentu. Ovakvi pristupi smanjuju dominantnost čestih reči (eng. stopwords), kao što su i, ili, da itd. Treba napomenuti da pojam dokumenta koji je korišćen u prethodnim pasusima ne mora da predstavlja dokument u bukvalnom smislu. Dokument može biti rečenica, kontekst, pasus, ili kako god je to pogodno za konkretnu primenu. Gorepomenuta matrica je najčešće jako velika, naročito ukoliko se radi sa velikim rečnicima i velikim korpusima. Ovu matricu je moguće dekomponovati na proizvod tri matrice. Time se bavi latentna semantička analiza. Naime, latentna semantička analiza (LSA) je tehnika u procesiranju govornog jezika, konkretno u odred ivanju semantičke sličnosti, koja analizira odnose izmed u reči i dokumenata u kojima se one nalaze. Glavna pretpostavka ove tehnike je da se slične reči nalaze u sličnim dokumentima. Latentna semantička analiza generiše set koncepata (svaki koncept je jedna dimenzija u latentnom prostoru u kome se reprezentuju reči) koji je izveden iz pomenutih relacija. LSA koristi matematičku tehniku matrične dekompozicije, konkretno dekompoziciju singularne vrednosti (eng. Singular Value Decomposition - SVD) kako bi ogromnu matricu reč-dokument dekomponovala na tri matrice i time generisala latentni prostor za reprezentaciju reči. Pomenute tri matrice su daleko manje od inicijalne - dve su jako uske i dugačke, a jedna je veoma mala kvadratna matrica. Neka je X matrica reč-dokument. Tada je možemo predstaviti kao: X = UΣV T. (3.1) Slika 3.2: Prikaz dekompozicije matrice reč-dokument. matrica Σ je kvadratna malih dimenzija. Matrice U i V su duge i uske a Ukoliko je broj reči V a broj dokumenata D, tada su dimenzije matrica sledeće: U V d, Σ d d i V d D. Vrednosti σ 1,..., σ d na dijagonali matrice Σ zovemo singularne vrednosti a vektore u 1,..., u d i v 1,..., v d zovemo levi i desni singularni vektori. Možemo primetiti da, ako je t i i-ti red u matrici X i predstavlja vektor reči i, jedini deo matrice U koji doprinosti tom vektoru je zapravo takod e i-ti red matrice U. Nazovimo ovaj red ˆt i. Analogno, jedina kolona u matrici V koja doprinosi vektoru dokumenta d j je zapravo j-ta kolona te matrice. Nazovimo ovu kolonu ˆd j.
Procesiranje govornog jezika 20 Kod dekompozicije jediničnih vrednosti važi jedno veoma zanimljivo pravilo - ukoliko izaberemo k najvećih jediničnih vrednosti (bez gubitka opštosti neka su to σ 1,..., σ k ), dobijamo aproksimaciju matrice X k-tog reda sa najmanjom greškom po Frobeniusovoj normi. Ono što je još zanimljivije je da vektor ˆt i mapira reč i u vektorski prostor koncepata dimenzionalnosti k. Isto to važi i za kolonu ˆd j i dokument j. Možemo da dobijemo i aproksimaciju k-tog reda cele matrice X, na sledeći način X k = U k Σ k V T k (3.2) Nakon ove dekompozicije, sličnost med u rečima se dobija kao njihov skalarni proizvod u novom prostoru koncepata: similarity(x i, x j ) = x i, x j = ˆt i ˆt j. (3.3) Ovako dobijene sličnosti veoma dobro odred uju semantički povezane reči. Med utim, ova metoda ima dva velika nedostatka. Prvo, sama dekompozicija je jako računarski zahtevna, pošto je njena kompleksnost kubna po dimenzijama ulazne matrice. Drugo, podjednako važno, je to što je ovo algoritam koji radi isključivo sa celim korpusom (eng. batch) i nije u mogućnosti da inkrementalno popravlja naučene semantičke sličnosti med u rečima. Zbog toga se ovaj, inače jako dobar algoritam sa stanovišta konačnog rezultata, najčešće ne primenjuje u praksi. Naredne dve klase algoritama su daleko praktičnije i često se koriste u realnim primenama. 3.3.2 Slučajno indeksiranje Slučajno indeksiranje (eng. Random Indexing - RI) nastalo je kao alternativa metodama latentne semantičke analize. Ova tehnika adresira najveći problem latentne semantičke analize - batch procesiranje. RI je inkrementalna tehnika predstavljena u radovima [10] i [13]. Osnovna ideja je kreiranje i održavanje vektora konteksta baziranih na pojavljivanju reči u kontekstima. Ova tehnika može se koristiti sa bilo kojom vrstom konteksta (okolina reči, rečenica, pasus ili dokument) i po svojoj prirodi je inkrementalna, što je u dobu dramatičnog rasta količine podataka velika prednost u odnosu na druge metode. Algoritam slučajnog indeksiranja može se podeliti u dve faze: Korak 1: Svakoj reči se dodeljuje jedinstvena, slučajno generisana (iz uniformne raspodele) vektorska reprezentacija koju zovemo indeksni vektor (eng. index vector). Ovi vektori su visokodimenzioni (dimenzije u stotinama ili hiljadama), u kojima je većina elemenata jednaka nuli, a jako mali broj elemenata uzima vrednosti +1 i 1. Korak 2: Kreiraju se kontekstni vektori idući kroz tekst, tako što svaki put kada se reč pojavi u kontekstu, kontekstnom vektoru date reči dodaju se indeksni vektori reči iz konteksta. Valja napomenuti da je tehnika slučajnog indeksiranja bazirana na pretpostavci da je reč odred ena kontekstima u kojima se pojavljuje. To povećava značajnost odluke o širini konteksta. Takod e, time što su indeksni vektori veoma retki, postiže se skoro-ortogonalnost med u indeksnim vektorima. Motivacija za ovu odluku leži u primedbi iz [11], gde je pokazano da u visokodimenzionim prostorima ima mnogo više skoro-ortogonalnih nego ortogonalnih pravaca. To znači da možemo aproksimirati ortogonalnost biranjem slučajnih pravaca u
Procesiranje govornog jezika 21 visokodimenzionom prostoru. Slična ideja koristi se u tehnikama Slučajnog Projektovanja (eng. Random Projection) i Slučajnog Mapiranja (eng. Random Mapping). Ove metode su potkrepljene istom idejom - Džonson-Lindenštrausovom lemom [12], koja tvrdi da ako projektujemo tačke vektorskog prostora na slučajno odabran potprostor dovoljno velike dimenzionalnosti, rastojanja izmed u tačaka se skoro očuvavaju. Glavne prednosti slučajnog indeksiranja su njegova inkrementalnost kao i mogućnost korišćenja bilo kakvog konteksta - bila to okolina reči, rečenica, pasus ili ceo dokument. 3.3.3 Reprezentacija reči pomoću dubokih neuronskih mreža Ugrad ivanje reči u latentni vektorski prostor (u daljem tekstu ugrad ivanje) pomoću dubokih neuronskih mreža je trenutno jedan od najaktuelnijih problema u procesiranju govornog jezika. Ova ideja je stara oko deceniju, i predstavljena je u [17]. Ugrad ivanje W : Ω R n je funkcija koja preslikava skup reči nekog govornog jezika u visokodimenzioni vektorski prostor. Visokodimenzioni u praktičnim primenama može značiti bilo šta od nekoliko desetina do nekoliko hiljada, u zavisnosti od kompleksnosti jezika i veličine ulaznog vokabulara, kao i dalje primene ugrad enih reči. Najčešće je ova funkcija realizovana matricom u kojoj je svaki red zapravo vektor reprezentacije reči: W Θ (w n ) = Θ n. Jako je važno inicijalizovati W na slučajne vrednosti (najbolje iz uniformne raspodele). Mreža se trenira tako da rešava sledeći problem klasifikacije: da li je data sekvenca (kontekst, n-gram) širine 2k + 1 validna u datom jeziku ili ne. Vrlo lako može se dobiti ogroman, naizgled neanotiran korpus sa web-a (recimo sa wikipedia-e). Zatim se sve sekvence iz tog korpusa proglase validnim. Pogrešni konteksti mogu se dobiti na veoma jednostavan način, menjajuci reč u sredini konteksta nasumično biranom rečju iz vokabulara jezika. Ovako se najverovatnije dobija besmislena sekvenca koja se može koristiti kao negativan primer modela jezika. Navešćemo jedan primer: R(W ( pas ), W ( sedi ), W ( na ), W ( limenom ), W ( krovu )) = 1, (3.4) R(W ( pas ), W ( sedi ), W ( ugrad ivanje ), W ( limenom ), W ( krovu )) = 0. (3.5) Prva sekvenca se koristi kao pozitivan primer modela jezika, a druga kao negativan. Funkcija R : R 2k+1 {0, 1} modeluje izlaz neuronske mreže utrenirane za pomenuti model jezika. Kako bi ovaj zadatak dobro rešavala, neuronska mreža mora da usput nauči i dobre reprezentacije reči korigujući W. Zapravo, najveći deo znacajnosti ovakve mreže je u usputnom zadatku učenja reprezentacija reči, pošto primarni zadatak nije naročito interesantan (može eventualno da posluži kao korekcija gramatike ili detekcija prevare/robota).
Glava 4 Implementacija i rezultati 4.1 Arhitektura mreže U ovom poglavlju ćemo opisati arhitekturu duboke neuronske mreže koja je korišćena u ovom radu za rešavanje problema modela jezika i ugrad ivanje reči. Postoje različiti pristupi rešavanju ovog problema. Mogu se koristiti višeslojni perceptroni, konvolucione mreže, rekurentne mreže itd. U ovom radu biće obrad ena arhitektura višeslojnog perceptrona (MLP) sa slojem ugrad ivanja izmed u ulaznog sloja i prvog skrivenog sloja, kao i slojevima izbacivanja nakon svakog skrivenog sloja. Konkretno, koristićemo arhitekturu sa dva skrivena sloja. Dakle, idući redom, mreža ce sadržati: 1. Ulazni sloj. Ovaj sloj ima 2k + 1 neurona, a vrednost svakog je zapravo indeks reči u rečniku. k je širina konteksta pre i posle centralne reči. U eksperimentima u sledećem potpoglavlju uzimaćemo k = 2. 2. Sloj ugrad ivanja, koji predstavlja ništa drugo do matricu ugradnje koju indeksiraju vrednosti iz ulaznog sloja. Pri svakom trening primeru, čitaju se odgovarajući redovi iz ove matrice, propagira signal unapred, izračuna i propagira greška unazad i koriguju se vrednosti u odgovarajućem redu matrice. Red matrice je transponovani vektor kojim je predstavljena reč u vektorskom prostoru. 3. Prvi skriveni sloj, sa nekoliko stotina skrivenih neurona. O uticaju broja neurona na uspešnost klasifikacije biće reči kasnije u ovom poglavlju. 4. Prvi sloj izbacivanja, koji zapravo predstavlja vektor slučajnih promenljivih uzorkovanih iz Bernulijeve raspodele sa verovatnoćom p, koja je parametar mreže. U eksperimentima ćemo koristiti p = 0.5 5. Drugi skriveni sloj. Isti po arhitekturi kao prvi skriveni sloj, ali u opštem slučaju sa različitim brojem neurona. 6. Drugi sloj izbacivanja. Potpuno isti kao prvi sloj izbacivanja. 7. Izlazni softmax sloj. Ovaj sloj ima dva neurona čije vrednosti u sumi daju 1, a predstavljaju verovatnoću da je ulazna sekvenca deo modela jezika ili nije deo modela jezika. 22
Implementacija i rezultati 23 Slika 4.1: Arhitektura neuronske mreže korišćene u ovom radu, gde su slojevi 3-6 predstavljeni jednim skrivenim slojem. 4.2 Korpusi Testiranje gorepomenute arhitekture biće vršeno na dvama korpusima. Korpus 1: Korpus na engleskom jeziku, netehničke prirode. Sadrži oko 11 miliona reči teksta, od toga oko 140 hiljada jedinstvenih. Korpus je očišćen od znakova interpunkcije i dekapitalizovan. Izbačene su reči koje se pojavljuju manje od 100 puta. Nakon ove obrade, ostaje vokabular sa oko 9 hiljada reči. Korpus 2: Korpus na holandskom jeziku, tehničke prirode, sačinjen od ponuda za posao i biografija. Sadrži oko 33 miliona reči teksta, od toga oko 700 hiljada jedinstvenih. Korpus je očišćen na isti način kao i Korpus 1, i izbačene su reči koje se pojavljuju manje od 100 puta. Nakon ovoga, ostao je vokabular od oko 33 hiljada reči. 4.3 Pregled alata dubokog učenja CUDA je u trenutku pisanja ovog rada srž svakog softvera dubokog učenja. CUDA je paralelna platforma za izračunavanja i API razvijena od strane najvećeg svetskog proizvod ača grafičkih kartica, NVIDIA-e. Ova platforma omogućava inženjerima softvera i istrazivačima da koriste grafičke procesore koji podržavaju CUDA-u (u suštini svi grafički procesori proizvedeni od strane NVIDIA-e nakon 2006. godine) za procesiranja opšte namene. CUDA je sloj softvera koji daje direktan pristup virtuelnim instrukcijama grafičkog procesora. CUDA platforma je dizajnirana tako da radi sa programskim jezicima C, C++ i Fortran, što je vrlo zgodno, s obzirom da je za korišćenje prethodnih API rešenja kao što su Direct3D i OpenGL bilo potrebno napredno znanje grafičkog programiranja. CUDA podržava programske okvire (eng. framework) kao što su OpenACC i OpenCL. CUDA je zapravo podrška svim najčešće korišćenim softverskim rešenjima kao što su Caffe, Torch i Theano, koji će biti opisani u nastavku ovog potpoglavlja.
Implementacija i rezultati 24 Caffe [19] je razvijen u Centru za kompjuterski vid i mašinsko učenje na Berkliju. Predstavlja brzu i lako čitljivu implementaciju konvolucionih mreža u C++ programskom jeziku. Ovo softversko rešenje može da procesira preko 60 miliona slika dnevno na jednom jedinom NVIDIA K40 procesoru. Može se koristiti samo za procesiranje slika, i tu je jako dobar, ali je neprimenljiv za ostale zadatke kao što su procesiranje teksta ili govora. Torch je alat koji je napisan u programskom jeziku Lua, a koristi se na Njujorškom univerzitetu, u Fejsbukovoj laboratoriji za veštačku inteligenciju i u Guglovoj kompaniji DeepMind. Torch pruža okruženje slično MATLAB-ovom. Theano [20] [21] je razvijen na Univerzitetu u Montrealu. Predstavlja Python biblioteku, a može se posmatrati i kao kompajler matematičkih izraza. Veoma je dobar za razvoj algoritama mašinskog učenja ispočetka, za razliku od alata Caffe i Torch. Zbog svoje univerzalnosti i zbog toga što je ovo softver nižeg nivoa (eng. lower level), pomoću Theano-a kreirano je više Python biblioteka koje su bazirane na njemu, ali pružaju specifičnije namene i čitljiviji kod, kao i lakše prototipovanje specifičnih algoritama mašinskog učenja. Dva jako dobra primera ovakvih alata su Lasagne i Keras [18], oba specijalizovana za rad sa dubokim neuronskim mrežama. Za sve eksperimente u ovom radu, korišcena je biblioteka Keras. 4.3.1 Python biblioteka Keras Keras je minimalistička, visoko modularna Python biblioteka za neuronske mreže. Keras ispod haube koristi Theano za visoko optimizovane operacije sa tenzorima na grafičkom i centralnom procesoru. Razvijen je sa fokusom na brzom prototipovanju i eksperimentisanju. Keras ima četiri osnovna principa: Modularnost: primera radi, slojevi neuronske mreže, optimizacione kriterijumske funkcije, algoritmi optimizacije, šeme inicijalizacije, aktivacione funkcije, šeme regularizacije, itd. su sve primeri modula u Kerasu i mogu se kombinovati uz minimalna ograničenja. Minimalizam: Svaki modul je kratak i lako čitljiv. Laka proširivost: Novi moduli se dodaju veoma lako. Primera radi, sloj ugrad ivanja korišćen u ovom radu je dodat svega mesec dana pre početka pisanja rada i već je veoma korišćen. Sve je u Python kodu: Nema konfiguracionih fajlova u deklarativnom formatu, kao u Caffe-u ili PyLearn-u. Modeli su opisani u Python kodu koji je kompaktan, lak za debagiranje i proširivanje. 4.4 Rezultati U ovom poglavlju analiziraćemo uspešnost rešavanja problema modela jezika, brzinu treniranja i rešavanje problema pretreniravanja, kao i, najbitnije, kvalitet ugrad ivanja reči engleskog (Korpus 1) i holandskog (Korpus 2) jezika u latentni vektorski prostor. Primarni problem je sličan predikciji sledeće reci na osnovu n-grama. Radi se o problemu klasifikacije i tu ćemo analizirati parametre kao što su preciznost na trening skupu i u validaciji. Pokazaćemo kako različite veličine mreže i dimenzionalnosti ugrad ivanja utiču na kvalitet klasifikacije.
Implementacija i rezultati 25 Usputni, ali značajniji, problem ugrad ivanja reči u latentni vektorski prostor je primer problema izdvajanja karakteristika (eng. feature extraction). Uspešnost ovog zadatka ćemo proveriti na dva načina - prikazujući najsličnije reči za nekoliko primera reči, kao u [1], kao i crtajući reči u 2D ravni koristeći t-sne algoritam [23]. Ovo je algoritam redukcije dimenzionalnosti koji će nam pomoći da vizuelno ocenimo kvalitet grupisanja semantički sličnih reči. 4.4.1 Brzina konvergencije U ovom delu analize rezultata daćemo kratak pregled brzine konvergencije i konačne uspešnosti klasifikacije zadatka modela jezika na korpusima 1 i 2. Rezultati su prikazani na graficima 4.2 i 4.3. Na x osi nalaze se redni brojevi epoha treniranja, dok vrednost na y osi predstavlja tačnost klasifikacije. Tačnost klasifikacije je udeo korektno klasifikovanih konteksta u delu podataka korišćenom za testiranje modela. Slika 4.2: Brzina konvergencije neuronske mreže sa dva skrivena i dva sloja izbacivanja na Korpusu 1. Vidimo da se konvergencija postiže nakon vrlo malog broja epoha, a i vremenski veoma brzo, s obzirom da se izračunavanja vrše na grafičkom procesoru. U narednim potpoglavljima analiziraćemo uticaj veličine mreže i slojeva izbacivanja na brzinu i kvalitet konvergencije. 4.4.2 Optimalna veličina mreže Jedno od pitanja koje nema definitivan odgovor kada god se radi sa neuronskim mrežama je veličina mreže. Drugim rečima, pitanje je koliko skrivenih neurona staviti kako bi se izbalansiralo izmed u dobrih performansi na trening delu podataka i dovoljno dobre generalizacije. Suština ove dileme leži u balansiranju izmed u pretreniravanja (eng. overfit) i podtreniravanja (eng. underfit). Ova dilema je poznata kao bias-variance dilema. Naime, ukoliko skrivenim slojevima dodelimo previše neurona (u opštem slučaju ako imamo previše kompleksan model), tada će model veoma dobro naučiti podatke koje je video u skupu za treniranje, ali će varijansa biti prevelika. Drugim rečima, model će šum
Implementacija i rezultati 26 Slika 4.3: Brzina konvergencije neuronske mreže sa dva skrivena i dva sloja izbacivanja na Korpusu 2. smatrati signalom. S druge strane, previše jednostavan model (u našem slučaju premalo neurona u skrivenim slojevima) nije u stanju da nauči sve zakonitosti koje vladaju u skupu koji mu je dodeljen. Kako bismo rešili taj problem za Korpuse 1 i 2, probaćemo nekoliko različitih veličina mreža i naći onu optimalnu. Verujemo da je optimalna veličina mreže u odred enoj meri invarijantna za korpuse istih ili sličnih jezika, slične tematike i veličine rečnika, tako da verujemo da će zaključci ovog potpoglavlja pomoći čitaocu u narednim eksperimentima. Tabela 4.1 daje rezultate za nekoliko veličina skrivenih slojeva na korpusima 1 i 2. Arhitektura mreže Tačnost [Korpus 1] Tačnost [Korpus 2] 100 50 10 2 89.63% 95.33% 100 100 20 2 90.51% 95.57% 100 200 50 2 91.13% 95.80% 100 500 200 2 91.83% 95.97% 100 1000 1000 2 92.19% 96.05% Tabela 4.1: Uspešnost klasifikacije sa mrežama različitih veličina. Ova tabela nam pokazuje zasićenje kod mreže sa 1000 neurona u skrivenim slojevima. Svako povećavanje veličine skrivenih slojeva iznad tih okvira značajno povećava vreme treniranja mreže, a ne dovodi do boljeg kvaliteta klasifikacije, te ovaj broj možemo smatrati preporučenim. 4.4.3 Uticaj sloja izbacivanja Osnovna svrha sloja izbacivanja je sprečavanje pojave pretreniravanja. Kako bismo proverili ovu tvrdnju, uporedićemo rezultate iz epohe u epohu u mrežama sa i bez slojeva izbacivanja. Rezultati su prikazani na grafiku 4.4.
Implementacija i rezultati 27 Slika 4.4: Uticaj sloja izbacivanja na brzinu i kvalitet konvergencije i neutralisanje pretreniravanja. Sa ovog grafika se jasno vidi uticaj sloja izbacivanja. On utiče upravo onako kako se i pretpostavlja. Naime, konvergencija je sporija i kvalitetnija, a generalizacija je bolja zahvaljujući tome što se u treniranju izbegava to da jedan neuron bude sam odgovoran za neke primere, s obzirom na to da pristustvo neurona nije garantovano. U našem konkretnom slučaju, maksimalna tačnost klasifikacije je u velikoj meri ista sa i bez sloja izbacivanja, ali se u slučaju bez sloja izbacivanja mora koristiti neka druga tehnika odred ivanja kada da se treniranje zaustavi. U suprotnom, vrlo lako može doći do pretreniravanja i do gubitka tačnosti u testu. Treba napomenuti da postoje i mnoge situacije u kojima mreža sa slojevima izbacivanja postiže značajno bolje rezultate u testu. Intellectual France Dissapeared Emphasize John Ideological Italy Traveled Assure Paul Artistic Europe Arose Interpret James Cultural Japan Emerged Illustrate Robert Constitutional Spain Originated Appreciate David Spiritual India Existed Pursue George Criminal Germany Survived Dismiss Richard Emotional Rome Positioned Reject Michael Monetary Canada Depicted Deny Peter Journalistic Britain Acted Acknowledge William Diplomatic Cuba Devised Solve Charles Tabela 4.2: Nekoliko primera, na osnovu sloja ugrad ivanja odred enih, semantički najsličnijih reči. 4.4.4 Ugrad ivanje reči za različite dimenzionalnosti Najvažniji problem ovog master rada je ugrad ivanje reči u latentni visokodimenzioni vektorski prostor. U ovom potpoglavlju prikazaćemo nekoliko primera semantički sličnih reči,
Implementacija i rezultati 28 kao u [1], kao i 2D predstavu reči nakon primene t-sne algoritma redukcije dimenzionalnosti koja moze biti veoma dobar način vizuelne ocene kvaliteta predstave. Prikazaćemo samo reči iz engleskog korpusa - Korpusa 1. U tabeli 4.2 nalaze se primeri reči sa rečima koje je neuronska mreža označila kao semantički najsličnije. Vidimo da je kvalitet ugrad ivanja veoma dobar i da su navedene reči zaista veoma semantički slične. Korišćenjem t-sne algoritma redukcije dimenzionalnosti [23], možemo dobiti veoma lepu 2D predstavu celog engleskog jezika izgrad enu na osnovu korpusa korišćenog za treniranje neuronske mreže. Ovakva predstava predstavlja veoma dobar način kvalitativne evaluacije semantičkih sličnosti med u rečima - slične reči moraju biti veoma blizu jedne drugima u pomenutom 2D prikazu. Na grafiku 4.7 možemo videti najčešće reči u engleskom jeziku, i gde se one nalaze. Na graficima 4.5 i 4.6 ispod, uvećani su, u svrhe demonstracije kvaliteta ugrad ivanja, odred eni delovi 2D prostora u kojem su reči predstavljene. Slika 4.5: Uvećani delovi 2D prostora popunjenog rečima. Levo možemo videti priloge grupisane jedne blizu drugih, dok su desno uglavnom glagoli u prošlom vremenu. Slika 4.6: Uvećani delovi 2D prostora popunjenog rečima. Levo su biološki elementi, a desno članovi rodbine i neka zanimanja.