jazykové zákonitosti
nyní se podívejme, jak funguje GloVe embeddings. Jak je všeobecně známo, slovní vektory word2vec zachycují mnoho jazykových zákonitostí. Dát kanonický příklad, pokud budeme mít slovo vektorů za slova „paříž“, „francie“ a „německo“ a provést následující operace:
\
výsledný vektor bude mít blízko k vektoru pro „berlin“
Pojďme si stáhnout stejné údaje Wikipedia použité jako demo word2vec:
v dalším kroku vytvoříme slovní zásobu, sadu slov, pro kterou se chceme naučit slovní vektory. Všimněte si, že všechny text2vec funkcí, které fungují na syrové textových dat (create_vocabulary
, create_corpus
, create_dtm
, create_tcm
) mít streaming API a ty by měl iterovat přes tokeny jako první argument těchto funkcí.
tato slova by neměla být příliš neobvyklá. Fot příklad nemůžeme vypočítat smysluplný slovní vektor pro slovo, které jsme viděli pouze jednou v celém korpusu. Zde budeme mít pouze slova, která se objeví nejméně pětkrát. text2vec poskytuje další možnosti filtrování slovní zásoby (viz ?prune_vocabulary
).
nyní máme ve slovní zásobě 71 290 termínů a jsme připraveni vytvořit matici pojmů (TCM).
nyní máme matici TCM a můžeme ji faktorizovat pomocí algoritmu rukavice.
text2vec používá algoritmus paralelního stochastického sestupu gradientu. Ve výchozím nastavení bude používat všechna jádra na vašem počítači, ale můžete určit počet jader, pokud si budete přát.
pojďme se přizpůsobit našemu modelu. (To může trvat několik minut, aby se vešly!)
## 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
Všimněte si, že model se učí dvě sady slovních vektorů-hlavní a kontext. V podstatě jsou stejné, protože model je symetrický. Z našich zkušeností učení dvou sad slovních vektorů vede k vyšší kvalitě embeddings. GloVe model je „rozkladový“ model (dědí se z mlapiDecomposition
– generické třídy modelů, které rozkládají vstupní matici na dvě nízkopodlažní matice). Takže na stejné úrovni se všemi ostatními mlapiDecomposition
model druhý low-hodnost matice (kontext slovo vektorů) je k dispozici v components
pole:
## 50 71290
Všimněte si, že stejně jako u všech modelů, které dědí z mlapiDecomposition
transformované matice bude již nrow = nrow(input)
, ncol = rank
druhý component
matice bude již nrow = rank
, ncol = ncol(input)
.
Zatímco obě slova-vektory, matice mohou být použity jako výsledek je obvykle lepší (nápad z Rukavice, papír) k průměru, nebo se částka na hlavní a kontextové vektor:
můžeme najít nejbližší slovo vektory pro naše paříž – francie + německo příklad:
## paris berlin munich germany versailles ## 0.7724678 0.7156243 0.6962157 0.6381500 0.6170311
můžete dosáhnout mnohem lepších výsledků experimentováním s skip_grams_window
a parametry třídy GloVe
(včetně velikosti vektorů slov a počtu iterací). Další podrobnosti a rozsáhlé experimenty na datech Wikipedie naleznete v tomto starém příspěvku na mém blogu.