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ę!

Podobne dokumenty