GloVe Word Embeddings

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.

You might also like

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.