Naučite TensorFlow, Word2Vec model i TSNE algoritam koristeći rock bendove

Učenje "TensorFlow načina" za izgradnju neuronske mreže može se činiti velikom preprekom za početak strojnog učenja. U ovom ćemo tutorialu poduzeti korak po korak i objasniti sve kritične komponente koje su uključene dok gradimo model Bands2Vec koristeći Pitchfork podatke iz Kagglea.

Potpuni kod potražite na stranici GitHub.

Model Word2Vec

Neuronske mreže troše brojeve i proizvode brojeve. Oni su vrlo dobri u tome. Ali dajte im malo teksta, i oni će baciti gnjev i neće učiniti ništa zanimljivo.

Ako je posao neuronske mreže krcanje brojeva i stvaranje značajnih rezultata, onda je naš posao osigurati da i ono što hranimo ima smisla. Ova potraga za smislenim prikazom informacija rodila je model Word2Vec.

Jedan od načina rada s riječima je oblikovanje vedrog kodiranja. Stvorite dugački (broj različitih riječi u našem rječniku) popis nula i neka svaka riječ upućuje na jedinstveni indeks ovog popisa. Ako vidimo ovu riječ, učinite taj indeks na popisu brojem jedan.

Iako ovaj pristup djeluje, zahtijeva puno prostora i potpuno je lišen smisla. "Dobar" i "Izvrsan" slični su poput "Patke" i "Crne rupe". Kad bi barem postojao način da se riječi vektoriziraju tako da sačuvamo ovu kontekstualnu sličnost ...

Srećom, postoji način!

Korištenjem neuronske mreže možemo proizvesti 'ugrađivanje' naših riječi. To su vektori koji predstavljaju svaku jedinstvenu riječ izvučenu iz težine veza unutar naše mreže.

Ali ostaje pitanje: kako osigurati da imaju smisla? Odgovor: hranite u parovima riječi kao ciljanu riječ i kontekstnu riječ. Učinite to dovoljno puta, ubacujući i neke loše primjere, a neuronska mreža počinje učiti koje se riječi pojavljuju zajedno i kako to čini gotovo grafikon. Poput društvene mreže riječi međusobno povezane kontekstima. "Dobro" ide na "korisno", a na "brigu" i tako dalje. Naš je zadatak hraniti te podatke u neuronskoj mreži.

Jedan od najčešćih pristupa je model Skipgram koji generira ta uparivanja cilj-kontekst na temelju pomicanja prozora kroz skup podataka s tekstom. Ali što ako naši podaci nisu rečenice, ali svejedno imamo kontekstualno značenje?

U ovom su vodiču naše riječi imena umjetnika, a kontekst žanrovi i znače ocjene recenzija. Želimo da umjetnik A bude blizu umjetnika B ako dijele žanr i imaju srednju ocjenu recenzija koja je slična. Pa krenimo.

Izgradnja našeg skupa podataka

Pitchfork je internetski američki glazbeni časopis koji pokriva uglavnom rock, neovisnu i novu glazbu. Podaci objavljeni Kaggleu izbrisani su s njihove web stranice i sadrže informacije poput recenzija, žanrova i datuma povezanih sa svakim izvođačem.

Stvorimo klasu umjetnika i rječnik za pohranu svih korisnih informacija koje želimo.

Sjajno! Sada želimo izraditi naše uparivanje cilja i konteksta na temelju žanra i prosječne ocjene recenzije. Da bismo to učinili, stvorit ćemo dva rječnika: jedan za različite jedinstvene žanrove i jedan za rezultate (diskretizirane na cijele brojeve).

U ove ćemo rječnike dodati sve svoje umjetnike odgovarajućem žanru i srednju ocjenu da bi se kasnije koristili pri generiranju parova umjetnika.

Posljednji korak prije nego što zaronimo u TensorFlow kod: generiranje serije! Skup je poput uzorka podataka koje će naša neuronska mreža koristiti za svaku epohu. Epoha je jedan zamah preko neuronske mreže u fazi treninga. Želimo generirati dva numpy polja. Jedan će sadržavati sljedeći kod:

TensorFlow

Postoji bezbroj tutorijala za TensorFlow i izvora znanja. Bilo koji od ovih izvrsnih članaka pomoći će vam kao i dokumentacija. Sljedeći kôd temelji se na tutorialu word2vec od samih ljudi TensorFlowa. Nadam se da mogu nešto demistificirati i svesti na najvažnije.

Prvi korak je razumijevanje prikaza 'grafa'. Ovo je nevjerojatno korisno za vizualizacije TensorBoarda i za stvaranje mentalne slike protoka podataka unutar neuronske mreže.

Odvojite malo vremena za čitanje koda i komentara u nastavku. Prije nego što podatke dostavimo u neuronsku mrežu, moramo inicijalizirati sve dijelove koje ćemo koristiti. Rezervisači su ulazni podaci koji uzimaju sve što damo 'feed_dict'. Varijable su promjenjivi dijelovi grafa koje ćemo na kraju doraditi. Najvažniji dio našeg modela je funkcija gubitka. To je rezultat koliko smo dobro prošli i karta blaga kako možemo poboljšati.

Procjena kontrasta buke (NCE) funkcija je gubitka. Obično bismo koristili unakrsnu entropiju i softmax, ali u svijetu obrade prirodnog jezika svi naši satovi iznose svaku jedinstvenu riječ.

Računarski, ovo je loše. NCE mijenja oblikovanje problema iz vjerojatnosti klasa u to da li je uparivanje cilj-kontekst ispravno (binarna klasifikacija). Potrebno je istinsko uparivanje, a zatim uzorci da bi se dobili loši upari, a konstanta to num_sampledkontrolira. Naša neuronska mreža uči razlikovati ove dobre i loše parove. U konačnici, uči kontekst! Ovdje možete pročitati više o NCE i kako to djeluje.

Pokrenite Neural Network

Sad kad je sve lijepo postavljeno, samo moramo pritisnuti veliki zeleni gumb 'kreni' i malo zavrtjeti palčevima.

Vizualizacija pomoću TSNE

Dobro, nismo baš završili. Sada imamo kontekstualno bogate, 64-dimenzionalne vektore za naše umjetnike, ali to je možda previše dimenzija da bismo doista mogli prikazati njegovu korisnost.

Srećom po nas što ove podatke možemo podijeliti u dvije dimenzije, a zadržati onoliko svojstava koliko su imale 64 dimenzije! Ovo je T-distribuirano stohastičko susjedsko ugrađivanje ili skraćeno TSNE. Ovaj video sjajno objašnjava glavnu ideju koja stoji iza TSNE, ali pokušat ću dati širok pregled.

TSNE je pristup smanjenju dimenzionalnosti koji zadržava sličnosti (poput euklidske udaljenosti) viših dimenzija. Da bi to postigao, prvo gradi matricu sličnosti točka-točka izračunatu pomoću normalne raspodjele. Središte raspodjele je prva točka, a sličnost druge točke je vrijednost raspodjele na udaljenosti između točaka udaljenih od središta raspodjele.

Zatim nasumično projiciramo na donju dimenziju i izvedemo potpuno isti postupak pomoću t-raspodjele. Sada imamo dvije matrice sličnosti točka-točka. Zatim algoritam polako pomiče točke u nižoj dimenziji da bi izgledao poput matrice za višu dimenziju u kojoj su sličnosti sačuvane. I ponovite. Srećom, Sci-kit Learn ima funkciju koja nam može stvoriti broj.

Rezultati

Nevjerojatan aspekt ovih ugrađivanja je da, baš kao i vektori, podržavaju matematičke operacije. Klasični primjer je:, King — Man + Woman = Queenili mu je barem vrlo blizu. Isprobajmo primjer.

Uzmite ugradbe niske dimenzije Coil, benda sa sljedećim žanrovima [‘electronic’, ‘experimental', ‘rock’], i srednju ocjenu 7.9. Sada oduzmite ugradbe niskih dimenzija Starješine, žanrovskog benda ['electronic'], i srednje rezultate 7.8. Uz ovu razliku u ugrađivanju pronađite mu najbliže bendove i ispišite njihova imena i žanrove.

Artist: black lips, Mean Score: 7.48, Genres: ['rock', 'rock', 'rock', 'rock', 'rock']
Artist: crookers, Mean Score: 5.5, Genres: ['electronic']
Artist: guided by voices, Mean Score: 7.23043478261, Genres: ['rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock']

Upalilo je! Dobivamo rock i elektroničke bendove s nejasno sličnim ocjenama. Ispod je prvih tristo bendova zacrtanih s etiketama. Nadam se da ste ovaj projekt smatrali edukativnim i inspirativnim. Idite dalje i gradite, istražujte i igrajte se!