word2vec dla Polskiego Internetu
Transkrypt
word2vec dla Polskiego Internetu
word2vec dla Polskiego Internetu 27 listopada 2015 Wojciech Stokowiec [email protected] http://opi-lil.github.io/ Ośrodek Przetwarzania Informacji - Państwowy Instytut Badawczy Agenda 1 word2vec CBOW Skip-Gram Optymalizacje Hierarchical Softmax Negative Sampling Internety Common Crawl Akka Przykłady Common Crawl Wiki Wojciech Stokowiec [email protected] http://opi- lil.github.io/ | word2vec dla Polskiego Internetu Przykład motywujący 2 Wojciech Stokowiec [email protected] http://opi- lil.github.io/ | word2vec dla Polskiego Internetu Przykład motywujący 2 Wojciech Stokowiec [email protected] http://opi- lil.github.io/ | word2vec dla Polskiego Internetu Przykład motywujący 2 Wojciech Stokowiec [email protected] http://opi- lil.github.io/ | word2vec dla Polskiego Internetu Przykład motywujący 2 Wojciech Stokowiec [email protected] http://opi- lil.github.io/ | word2vec dla Polskiego Internetu Przykład motywujący 2 Wojciech Stokowiec [email protected] http://opi- lil.github.io/ | word2vec dla Polskiego Internetu word2vec + Google News 3 Korzystając z gotowego modelu ze strony https://code.google.com/p/word2vec/: from gensim.models.word2vec import word2vec model = word2vec.load_word2vec_format( ’GoogleNews-vectors-negative300.bin’, binary=True) model.most_similar(positive=[’woman’, ’king’], negative=[’man’], topn=5) [(u’queen’, 0.711819589138031), (u’monarch’, 0.618967592716217), (u’princess’, 0.5902432799339294), (u’crown_prince’, 0.5499461889266968), (u’prince’, 0.5377323031425476)] Wojciech Stokowiec [email protected] http://opi- lil.github.io/ | word2vec dla Polskiego Internetu word2vec + Google News 4 Co ciekawe, poza semantycznymi relacjami, word2vec jest w stanie "wyłapać"podstawy gramatyki, takie jak stopniowanie przymiotników: model.most_similar(positive=[’biggest’,’small’], negative=[’big’], topn=5) [(u’smallest’, 0.6086569428443909), (u’largest’, 0.6007465720176697), (u’tiny’, 0.5387299656867981), (u’large’, 0.456944078207016), (u’minuscule’, 0.43401968479156494)] Wojciech Stokowiec [email protected] http://opi- lil.github.io/ | word2vec dla Polskiego Internetu word2vec 5 Należy pamiętać, że: I word2vec to nie jeden model! I word2vec to nie deep learning! Rysunek: CBOW oraz Skip-gram Wojciech Stokowiec [email protected] http://opi- lil.github.io/ | word2vec dla Polskiego Internetu Continuous Bag of Words 6 Rysunek: CBOW z jednym słowem w kontekście Wojciech Stokowiec [email protected] http://opi- lil.github.io/ | word2vec dla Polskiego Internetu CBOW 7 Dla danego kontekstu x, zakładając kodowanie 1 z N , tj xk = 1 oraz xk0 = 0 dla xk 6= xk0 możemy obliczyć wartości warstwy ukrytej: h = xT W = W(k,·) := vwI (1) Następnie wyliczamy wartość funkcji oceny uj dla każdego słowa wj w słowniku: T uj = v0wj · h. (2) Aby wyznaczyć prawdopodobieństwo wyemitowania słowa wj pod warunkiem zaobserwowania danego kontekstu korzystamy z funkcji softmax: 0 T exp v · v w w I O exp(uO ) . =P (3) p(wO | wI ) = PV V 0 T ·v exp(u ) i exp v i=1 w wi I i=1 Wojciech Stokowiec [email protected] http://opi- lil.github.io/ | word2vec dla Polskiego Internetu CBOW 8 Rysunek: CBOW z dłuższym kontekstem Wojciech Stokowiec [email protected] http://opi- lil.github.io/ | word2vec dla Polskiego Internetu CBOW 9 Analogicznie, tylko że warstwa ukryta wygląda w sposób następujący: 1 W · (x1 + x2 + . . . + xC ) C 1 = · (vw1 + vw2 + . . . + vwC ). C h= (4) Wojciech Stokowiec [email protected] http://opi- lil.github.io/ | word2vec dla Polskiego Internetu Skip-Gram 10 Rysunek: Skig-gram Wojciech Stokowiec [email protected] http://opi- lil.github.io/ | word2vec dla Polskiego Internetu Skip-Gram 11 Skip-gram jest lustrzanym odbiciem architektury CBOW, tj. na podstawie słowa staramy się przewidzieć jego kontekst. Niech dany będzie ciąg słów: w1 , w2 , . . . , wT oraz długość kontekstu c, wtedy staramy się maksymalizować następującą funkcję: T 1X T t=1 X log p(wt+j|wt ), (5) −c≤j≤c, j6=0 a prawdopodobieństwa p(wt+j|wt ) zdefiniowane są w sposób następujący: 0 T vwI exp vw O p(wO |wI ) = PW 0 T w=1 exp vw vwI , (6) 0 gdzie vw oraz vw oznaczają "wejściowe"i "wyjścioweżeprezentacje wektorowe słowa "w", a W jest liczbą słów w słowniku. Wojciech Stokowiec [email protected] http://opi- lil.github.io/ | word2vec dla Polskiego Internetu Optymalizacje 12 Przypomnijmy, że w wzorze 7 w mianowniku znajduje się czynnik normalizujący: 0 T exp vw vwI O (7) p(wO |wI ) = PW 0 T w=1 exp vw vwI , I I Przy dużym słowniku (a takie występują w przyrodzie) metody optymalizacyjne oparte na prostym gradiencie są co najmniej nieefektywne. Można sobie z tym radzić na parę sposobów! Wojciech Stokowiec [email protected] http://opi- lil.github.io/ | word2vec dla Polskiego Internetu Hierarchical Softmax I Jest to efektywny sposób na znalezienie szukanego prawdopodobieństwa I Model używa drzewa binarnego do reprezentacji słów ze słownika Wojciech Stokowiec [email protected] http://opi- lil.github.io/ | word2vec dla Polskiego Internetu 13 Hierarchical Softmax Rysunek: Przykład drzewa binarnego dla hierarchicznego sofmax’u Prawdopodobieństwo, że dane słowo w jest słowem wyjściowym zadane jest następującym wzorem: L(w)−1 p(w = wO ) = Y j=1 T σ Jn(w, j + 1) = ch(n(w, j))K · v0n(w,j) h (8) Wojciech Stokowiec [email protected] http://opi- lil.github.io/ | word2vec dla Polskiego Internetu 14 Hierarchical Softmax Skąd wziąć to drzewo? I Użyć losowo wygenerowanego I Rozwiązanie w najlepszym przypadku nieoptymalne Wojciech Stokowiec [email protected] http://opi- lil.github.io/ | word2vec dla Polskiego Internetu 15 Hierarchical Softmax Skąd wziąć to drzewo? I Użyć losowo wygenerowanego I I Rozwiązanie w najlepszym przypadku nieoptymalne Można użyć zewnętrznych źródeł, np. WordNet Wojciech Stokowiec [email protected] http://opi- lil.github.io/ | word2vec dla Polskiego Internetu 15 Hierarchical Softmax Skąd wziąć to drzewo? I Użyć losowo wygenerowanego I Rozwiązanie w najlepszym przypadku nieoptymalne I Można użyć zewnętrznych źródeł, np. WordNet I Można użyć metod klastrowania hierarchicznego: Wojciech Stokowiec [email protected] http://opi- lil.github.io/ | word2vec dla Polskiego Internetu 15 Hierarchical Softmax Skąd wziąć to drzewo? I Użyć losowo wygenerowanego I Rozwiązanie w najlepszym przypadku nieoptymalne I Można użyć zewnętrznych źródeł, np. WordNet I Można użyć metod klastrowania hierarchicznego: Wojciech Stokowiec [email protected] http://opi- lil.github.io/ | word2vec dla Polskiego Internetu 15 Hierarchical Softmax Skąd wziąć to drzewo? I Użyć losowo wygenerowanego I Rozwiązanie w najlepszym przypadku nieoptymalne I Można użyć zewnętrznych źródeł, np. WordNet I Można użyć metod klastrowania hierarchicznego: Wojciech Stokowiec [email protected] http://opi- lil.github.io/ | word2vec dla Polskiego Internetu 15 Hierarchical Softmax Skąd wziąć to drzewo? I Użyć losowo wygenerowanego I Rozwiązanie w najlepszym przypadku nieoptymalne I Można użyć zewnętrznych źródeł, np. WordNet I Można użyć metod klastrowania hierarchicznego: Wojciech Stokowiec [email protected] http://opi- lil.github.io/ | word2vec dla Polskiego Internetu 15 Hierarchical Softmax Skąd wziąć to drzewo? I Użyć losowo wygenerowanego I Rozwiązanie w najlepszym przypadku nieoptymalne I Można użyć zewnętrznych źródeł, np. WordNet I Można użyć metod klastrowania hierarchicznego: Wojciech Stokowiec [email protected] http://opi- lil.github.io/ | word2vec dla Polskiego Internetu 15 Hierarchical Softmax Skąd wziąć to drzewo? I Użyć losowo wygenerowanego I Rozwiązanie w najlepszym przypadku nieoptymalne I Można użyć zewnętrznych źródeł, np. WordNet I Można użyć metod klastrowania hierarchicznego: I Mikolov w swojej implementacji word2vec’a używa drzew Huffmana Wojciech Stokowiec [email protected] http://opi- lil.github.io/ | word2vec dla Polskiego Internetu 15 Negative Sampling 16 W swojej pracy z 2013 roku Mikolov używają następującej funkcji celu: k X 0 T 0 T log σ vw v + Ewi ∼Pn (W ) log σ − vw vwI , wI i O (9) i=1 Gdzie k, to liczba próbek z rozkładu śzumu"Pn (W ). Równanie 9 można zapisać w trochę czytelniejszy sposób: Prawidłowy rozkład Rozkład szumu }| { z X z 0 T log σ vw v wI + O }| { 0 T log σ − vw v wI i (10) i∼Pn (W ) Wojciech Stokowiec [email protected] http://opi- lil.github.io/ | word2vec dla Polskiego Internetu Negative Sampling 16 W swojej pracy z 2013 roku Mikolov używają następującej funkcji celu: k X 0 T 0 T log σ vw v + Ewi ∼Pn (W ) log σ − vw vwI , wI i O (9) i=1 Gdzie k, to liczba próbek z rozkładu śzumu"Pn (W ). Równanie 9 można zapisać w trochę czytelniejszy sposób: Prawidłowy rozkład Rozkład szumu }| { z X z 0 T log σ vw v wI + O }| { 0 T log σ − vw v wI i (10) i∼Pn (W ) I maksymalizujemy prawdopodobieństwo wystąpienia rzeczywistego kontekstu Wojciech Stokowiec [email protected] http://opi- lil.github.io/ | word2vec dla Polskiego Internetu Negative Sampling 16 W swojej pracy z 2013 roku Mikolov używają następującej funkcji celu: k X 0 T 0 T log σ vw v + Ewi ∼Pn (W ) log σ − vw vwI , wI i O (9) i=1 Gdzie k, to liczba próbek z rozkładu śzumu"Pn (W ). Równanie 9 można zapisać w trochę czytelniejszy sposób: Prawidłowy rozkład Rozkład szumu }| { z X z 0 T log σ vw v wI + O }| { 0 T log σ − vw v wI i (10) i∼Pn (W ) I I maksymalizujemy prawdopodobieństwo wystąpienia rzeczywistego kontekstu minimalizujemy prawdopodobieństwo wystąpienia losowych słów w kontekście Wojciech Stokowiec [email protected] http://opi- lil.github.io/ | word2vec dla Polskiego Internetu Negative Sampling 16 W swojej pracy z 2013 roku Mikolov używają następującej funkcji celu: k X 0 T 0 T log σ vw v + Ewi ∼Pn (W ) log σ − vw vwI , wI i O (9) i=1 Gdzie k, to liczba próbek z rozkładu śzumu"Pn (W ). Równanie 9 można zapisać w trochę czytelniejszy sposób: Prawidłowy rozkład Rozkład szumu }| { z X z 0 T log σ vw v wI + O }| { 0 T log σ − vw v wI i (10) i∼Pn (W ) I I I maksymalizujemy prawdopodobieństwo wystąpienia rzeczywistego kontekstu minimalizujemy prawdopodobieństwo wystąpienia losowych słów w kontekście Pn (w) ∼ U (w)3/4 /Z Wojciech Stokowiec [email protected] http://opi- lil.github.io/ | word2vec dla Polskiego Internetu Common Crawl 17 “Fundacja Common Crawl to organizacja non-profit której celem jest demokratyzacja dostępu do informacji zawartej w internecie poprzez stworzenie i utrzymanie otwartego repozytorium tekstowych danych internetowych, które są powszechnie dostępne i łatwe do analizy.” — strona fundacji Common Crawl Wojciech Stokowiec [email protected] http://opi- lil.github.io/ | word2vec dla Polskiego Internetu Common Crawl I Mnóstwo danych! I Jeden dump "ważyókoło 140TB danych i zawiera 1.80 mld stron internetowych I Około 17 dumpów, zrobionych na przestrzeni lat 2013-2015 Każdy dump składa się z plików: I I I I WARC - zawierających nieobrobione dane WAT - zawierających meta-dane opisujące dany rekord WET - zawierających wyłuskany ze strony tekst I Jeden dump zawiera około 10TB danych w formacie WET I Do tej pory przetworzyliśmy 9 dumpów, co daje około 90TB danych tekstowych, ale ... Wojciech Stokowiec [email protected] http://opi- lil.github.io/ | word2vec dla Polskiego Internetu 18 Common Crawl I Mnóstwo danych! I Jeden dump "ważyókoło 140TB danych i zawiera 1.80 mld stron internetowych I Około 17 dumpów, zrobionych na przestrzeni lat 2013-2015 Każdy dump składa się z plików: I I I I WARC - zawierających nieobrobione dane WAT - zawierających meta-dane opisujące dany rekord WET - zawierających wyłuskany ze strony tekst I Jeden dump zawiera około 10TB danych w formacie WET I Do tej pory przetworzyliśmy 9 dumpów, co daje około 90TB danych tekstowych, ale ... I ... około 0.3% jest w języku polskim. Wojciech Stokowiec [email protected] http://opi- lil.github.io/ | word2vec dla Polskiego Internetu 18 WET 19 Format WET zawiera minimalną ilość meta-danych, główną jego zawartością jest czysty tekst ze strony. Rysunek: Przykład pliku w formacie WET Wojciech Stokowiec [email protected] http://opi- lil.github.io/ | word2vec dla Polskiego Internetu Narzędzia 20 I I I Wojciech Stokowiec [email protected] http://opi- lil.github.io/ | word2vec dla Polskiego Internetu Akka Obowiązkowe Hello World (cz. 1): // definiujemy protokol rozmowy case class Hello(who: String) // minimalny aktor class Greeter extends Actor { def receive = { case Hello(who) => println(s"It’s a you, a $who!") case _ => println("Name, please!") } } Wojciech Stokowiec [email protected] http://opi- lil.github.io/ | word2vec dla Polskiego Internetu 21 Akka Obowiązkowe Hello World (cz. 2): object Main extends App { // inicjalizacja systemu aktorow val system = ActorSystem("HelloWorldSystem") // stworzenie aktora val greeter = system.actorOf(Props[Greeter], name = "helloactor") // przeslanie wiadomosci greeter ! "Mario!" } Wojciech Stokowiec [email protected] http://opi- lil.github.io/ | word2vec dla Polskiego Internetu 22 Nasi aktorzy 23 I System aktorów do zarządzania aplikacją I 1 File Master tworzący File Workerów oraz rozdzielający im prace I 1 Terminator monitorujący cykl życia aktorów, oraz zamykający system I 24 File Workerów do przetwarzania strumienia danych oraz wysyłania kawałków tekstu reprezentujących stronę do identyfikacji języka 36 Bouncerów I I I filtrują teksy z języka polskiego przy pomocy biblioteki CLD2 zapis do Cassandry Wojciech Stokowiec [email protected] http://opi- lil.github.io/ | word2vec dla Polskiego Internetu Nasi aktorzy 24 w1 b1 w2 M wR bR .. . .. . Db bM wN Workers Bouncers Rysunek: Architektura crawlera Wojciech Stokowiec [email protected] http://opi- lil.github.io/ | word2vec dla Polskiego Internetu word2vec na zbiorze Common Crawl Tablica: Najbliższe słowa Słowo Najbliższy Wektor Dystans Król Tusk Kobieta Mężczyzna Sushi Apple Cesarz Donald Dziewczyna Chłopak Pizza Tablety 0.7349 0.7382 0.7998 0.84556 0.75798 0.78932 Dziewczyna Rozochocona :-) 0.81743 Wojciech Stokowiec [email protected] http://opi- lil.github.io/ | word2vec dla Polskiego Internetu 25 word2vec na zbiorze Common Crawl Tablica: Algebra wektorów Wyrażenie Król – Mężczyzna + Kobieta Większy – Duży + Mały Włochy – Rzym + Francja Dżungla + Król Najbliższy wektor Edyp :-) Mniejszy Paryż tarzantarzan lewkról Wojciech Stokowiec [email protected] http://opi- lil.github.io/ | word2vec dla Polskiego Internetu 26 word2vec na polskiej Wikipedii 27 Tablica: Najbliższe słowa Słowo Najbliższy Wektor Dystans Król Tusk Kobieta Mężczyzna Sushi Apple Dziewczyna Władca Ramotar :-) Dziewczyna Chłopak Chowder Iphone Kobieta 0.61166 0.54940 0.74277 0.70107 0.52896 0.6675 0.7428 Kaczyński Wałęsa | Kwaśnieswki | Komorowski 0.83625 Wojciech Stokowiec [email protected] http://opi- lil.github.io/ | word2vec dla Polskiego Internetu word2vec na polskiej 28 Tablica: Algebra wektorów Wyrażenie Król – Mężczyzna + Kobieta Większy – Duży + Mały Włochy – Rzym + Francja Najbliższy wektor Królowa Mniejszy Szwajcaria :-( Wojciech Stokowiec [email protected] http://opi- lil.github.io/ | word2vec dla Polskiego Internetu Podsumowanie I Udało się stworzyć największy korpus języka polskiego filtrując zbiory fundacji Commmon Crawl, ale ... Wojciech Stokowiec [email protected] http://opi- lil.github.io/ | word2vec dla Polskiego Internetu 29 Podsumowanie I Udało się stworzyć największy korpus języka polskiego filtrując zbiory fundacji Commmon Crawl, ale ... I ... to straszny śmietnik. Wojciech Stokowiec [email protected] http://opi- lil.github.io/ | word2vec dla Polskiego Internetu 29 Podsumowanie I Udało się stworzyć największy korpus języka polskiego filtrując zbiory fundacji Commmon Crawl, ale ... I ... to straszny śmietnik. I Pracujemy nad deduplikacją, korekcją błędów i odśmiecaniem. Wojciech Stokowiec [email protected] http://opi- lil.github.io/ | word2vec dla Polskiego Internetu 29 Podsumowanie I Udało się stworzyć największy korpus języka polskiego filtrując zbiory fundacji Commmon Crawl, ale ... I ... to straszny śmietnik. I Pracujemy nad deduplikacją, korekcją błędów i odśmiecaniem. I Wektorowe reprezentacje słów uzyskane poprzez uczenie word2veca na naszym korpusie są przesycone seksem :-) Wojciech Stokowiec [email protected] http://opi- lil.github.io/ | word2vec dla Polskiego Internetu 29 Podsumowanie I Udało się stworzyć największy korpus języka polskiego filtrując zbiory fundacji Commmon Crawl, ale ... I ... to straszny śmietnik. I Pracujemy nad deduplikacją, korekcją błędów i odśmiecaniem. I Wektorowe reprezentacje słów uzyskane poprzez uczenie word2veca na naszym korpusie są przesycone seksem :-) I Wektorowe reprezentacje słów na polskiej wiki są nieznacznie lepsze. Wojciech Stokowiec [email protected] http://opi- lil.github.io/ | word2vec dla Polskiego Internetu 29 Podsumowanie I Udało się stworzyć największy korpus języka polskiego filtrując zbiory fundacji Commmon Crawl, ale ... I ... to straszny śmietnik. I Pracujemy nad deduplikacją, korekcją błędów i odśmiecaniem. I Wektorowe reprezentacje słów uzyskane poprzez uczenie word2veca na naszym korpusie są przesycone seksem :-) I Wektorowe reprezentacje słów na polskiej wiki są nieznacznie lepsze. I Zastosowanie word2veca do uzupełniania leksykonów sentymentu w zagadnieniu analizy wydźwięku Wojciech Stokowiec [email protected] http://opi- lil.github.io/ | word2vec dla Polskiego Internetu 29 Podsumowanie I Udało się stworzyć największy korpus języka polskiego filtrując zbiory fundacji Commmon Crawl, ale ... I ... to straszny śmietnik. I Pracujemy nad deduplikacją, korekcją błędów i odśmiecaniem. I Wektorowe reprezentacje słów uzyskane poprzez uczenie word2veca na naszym korpusie są przesycone seksem :-) I Wektorowe reprezentacje słów na polskiej wiki są nieznacznie lepsze. I Zastosowanie word2veca do uzupełniania leksykonów sentymentu w zagadnieniu analizy wydźwięku I Polska język, trudna język. Wojciech Stokowiec [email protected] http://opi- lil.github.io/ | word2vec dla Polskiego Internetu 29 Uwagi Informacje kontaktowe W razie jakichkolwiek uwag, komentarzy lub wątpliwości proszę o kontakt: Wojciech Stokowiec [email protected] http://opi-lil.github.io/ Wojciech Stokowiec [email protected] http://opi- lil.github.io/ | word2vec dla Polskiego Internetu 30 Dziękuje za uwagę!