prawidłowości językowe
teraz przyjrzyjmy się, jak działa osadzanie słów w rękawicy. Jak powszechnie wiadomo, wektory wyrazów word2vec wychwytują wiele prawidłowości językowych. Dla przykładu kanonicznego, jeśli weźmiemy wektory wyrazów „Paryż”, „Francja” i „Niemcy” i wykonamy następującą operację:
\
otrzymany wektor będzie zbliżony do wektora dla „berlin”
pobierzmy te same dane Wikipedii użyte jako demo przez word2vec:
w następnym kroku stworzymy słownictwo, zestaw słów, dla których chcemy nauczyć się wektorów słów. Zauważ, że wszystkie funkcje text2vec, które działają na surowych danych tekstowych(create_vocabulary
, create_corpus
, create_dtm
, create_tcm
) masz API streamingu i powinieneś iterować nad tokenami jako pierwszy argument dla tych funkcji.
te słowa nie powinny być zbyt rzadkie. Fot przykład nie możemy obliczyć znaczącego wektora wyrazu dla słowa, które widzieliśmy tylko raz w całym ciele. Tutaj weźmiemy tylko słowa, które pojawiają się co najmniej pięć razy. text2vec oferuje dodatkowe opcje filtrowania słownictwa (patrz ?prune_vocabulary
).
teraz mamy 71,290 terminów w Słowniku i jesteśmy gotowi do skonstruowania macierzy term-co-occurence (TCM).
teraz mamy matrycę TCM i możemy ją faktoryzować za pomocą algorytmu rękawicy.
text2vec wykorzystuje równoległy algorytm opadania gradientu stochastycznego. Domyślnie będzie używać wszystkich rdzeni na twoim komputerze, ale możesz określić liczbę rdzeni, jeśli chcesz.
dopasujmy nasz model. (Dopasowanie może potrwać kilka minut!)
## INFO epoch 1, loss 0.1755 ## INFO epoch 2, loss 0.1228 ## INFO epoch 3, loss 0.1085 ## INFO epoch 4, loss 0.1005 ## INFO epoch 5, loss 0.0954 ## INFO epoch 6, loss 0.0918 ## INFO epoch 7, loss 0.0890 ## INFO epoch 8, loss 0.0869 ## INFO epoch 9, loss 0.0851 ## INFO epoch 10, loss 0.0837
## 71290 50
zauważ, że model uczy się dwóch zestawów wektorów słowa-głównego i kontekstu. Zasadniczo są one takie same, ponieważ model jest symetryczny. Z naszego doświadczenia wynika, że nauczenie się dwóch zestawów wektorów słów prowadzi do osadzenia wyższej jakości. Model GloVe ’ a jest modelem „dekompozycji” (dziedziczy od mlapiDecomposition
– ogólnej klasy modeli rozkładających macierze wejściowe na dwie macierze o niskiej randze). Tak więc na równi z każdym innym modelem mlapiDecomposition
druga macierz niskopoziomowa (wektory słowa kontekstowego) jest dostępna w polu components
:
## 50 71290
zauważ, że tak jak we wszystkich modelach dziedziczących po mlapiDecomposition
przekształcona macierz będzie miała nrow = nrow(input)
, ncol = rank
, a druga component
macierz będzie miała nrow = rank
, ncol = ncol(input)
.
podczas gdy obie macierze słowno-wektorowe mogą być użyte jako wynik, zwykle lepiej (pomysł z papieru z rękawicy) ustawić średnią lub wziąć sumę wektora głównego i kontekstowego:
możemy znaleźć najbliższe wektory wyrazów dla naszego przykładu Paryż-Francja + Niemcy:
## paris berlin munich germany versailles ## 0.7724678 0.7156243 0.6962157 0.6381500 0.6170311
możesz osiągnąć znacznie lepsze wyniki, eksperymentując z skip_grams_window
i parametrami klasy GloVe
(w tym wielkością wektorów słowa i liczbą iteracji). Więcej szczegółów i eksperymentów na dużą skalę na danych Wikipedii można znaleźć w tym starym poście na moim blogu.