GloVe Word Embeddings

Linguistic regularities

laten we nu onderzoeken hoe GloVe embeddings werkt. Zoals algemeen bekend, vangen word2vec woordvectoren veel taalkundige regelmatigheden. Om het canonieke voorbeeld te geven, als we woordvectoren nemen voor de woorden “Parijs”, “Frankrijk” en “Duitsland” en de volgende bewerking uitvoeren:

\

de resulterende vector zal dicht bij de vector voor “berlin”

laten we dezelfde Wikipedia-gegevens downloaden die gebruikt worden als een demo door word2vec:

In de volgende stap zullen we een woordenschat maken, een verzameling woorden waarvoor we woordvectoren willen leren. Merk op dat alle functies van text2vec die werken op ruwe tekstgegevens (create_vocabulary, create_corpus, create_dtm, create_tcm) heb een streaming API en je moet itereren over tokens als het eerste argument voor deze functies.

deze woorden mogen niet te ongewoon zijn. In het voorbeeld kunnen we geen betekenisvolle woordvector berekenen voor een woord dat we maar één keer zagen in het hele corpus. Hier nemen we alleen woorden die minstens vijf keer voorkomen. text2vec biedt extra opties om de woordenschat te filteren (zie ?prune_vocabulary).

nu hebben we 71.290 termen in de woordenschat en zijn we klaar om term-co-occurence matrix (TCM) te construeren.

nu hebben we een TCM matrix en kunnen we deze factoriseren via het GloVe algoritme.
text2vec gebruikt een parallel stochastisch gradiëntafdalingsalgoritme. Standaard zal het alle kernen op uw machine gebruiken, maar u kunt het aantal kernen opgeven als u dat wilt.

laten we ons model aanpassen. (Het kan enkele minuten duren om te passen!)

## 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

merk op dat het model twee sets van woordvectoren leert – hoofd en context. In wezen zijn ze hetzelfde omdat het model symmetrisch is. Vanuit onze ervaring leidt het leren van twee sets woordvectoren tot een hogere kwaliteit inbedding. Handschoenmodel is een “ontledingsmodel” (erft van mlapiDecomposition – generieke klasse van modellen die invoermatrix ontleden in twee matrices met een lage rang). Dus op gelijke voet met elke andere mlapiDecomposition model tweede laag-rang matrix (context woord vectoren) is beschikbaar in components veld:

## 50 71290

merk op dat zoals in alle modellen die erven van mlapiDecomposition getransformeerde matrix nrow = nrow(input), ncol = rank en tweede component matrix nrow = rank, ncol = ncol(input)heeft.

hoewel beide woordvectoren gebruikt kunnen worden als resultaat is het meestal beter (idee van Handschoenenpapier) om een gemiddelde of een som van hoofd-en contextvector te nemen:

we kunnen de dichtstbijzijnde woordvectoren vinden voor ons voorbeeld Parijs-Frankrijk + Duitsland:

## paris berlin munich germany versailles ## 0.7724678 0.7156243 0.6962157 0.6381500 0.6170311

u kunt veel betere resultaten bereiken door te experimenteren met skip_grams_window en de parameters van de klasse GloVe (inclusief de grootte van woordvectoren en het aantal herhalingen). Voor meer details en grootschalige experimenten op Wikipedia data zie deze oude post op mijn blog.

You might also like

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.