Språklige regulariteter
la Oss nå undersøke hvordan Hanske embeddings fungerer. Som kjent, word2vec word vektorer fange mange språklige regulariteter. For å gi det kanoniske eksempelet, hvis vi tar ordvektorer for ordene «paris», «frankrike» og «tyskland» og utfør følgende operasjon:
\
den resulterende vektoren vil være nær vektoren for»berlin»
la oss laste ned De samme Wikipedia-dataene som brukes som en demo av word2vec:
i neste trinn vil vi lage et ordforråd, et sett med ord som vi ønsker å lære ordvektorer. Merk at alle text2vec funksjoner som opererer på rå tekstdata (create_vocabulary
, create_corpus
, create_dtm
, create_tcm
) har en streaming API, og du bør iterere over tokens som det første argumentet for disse funksjonene.
disse ordene skal ikke være for uvanlige. Fot eksempel vi kan ikke beregne en meningsfull ord vektor for et ord som vi så bare en gang i hele corpus. Her tar vi bare ord som vises minst fem ganger. text2vec gir flere alternativer for å filtrere vokabular (se ?prune_vocabulary
).
nå har vi 71 290 termer i vokabularet og er klare til å konstruere term-co-occurence matrix (TCM).
nå har Vi EN tcm-matrise og kan faktorisere den via Hanskealgoritmen.
text2vec bruker en parallell stokastisk gradient descent algoritme. Som standard vil den bruke alle kjerner på maskinen din, men du kan angi antall kjerner hvis du ønsker det.
La oss passe vår modell. (Det kan ta flere minutter å passe!)
## 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 at modellen lærer to sett med ordvektorer-hoved og kontekst. I hovedsak er de de samme siden modellen er symmetrisk. Fra vår erfaring å lære to sett med ord vektorer fører til høyere kvalitet embeddings. Hanskemodell er» dekomponering » – modell (arver fra mlapiDecomposition
– generisk klasse av modeller som dekomponerer inngangsmatrise i to matriser med lav rang). Så på nivå med alle andre mlapiDecomposition
modell andre low-rank matrise (kontekst ord vektorer) er tilgjengelig i components
felt:
## 50 71290
Merk at som i alle modeller som arver fra mlapiDecomposition
transformert matrise vil har nrow = nrow(input)
, ncol = rank
og andre component
matrise vil har nrow = rank
, ncol = ncol(input)
.
mens begge ordvektorer matriser kan brukes som resultat, er det vanligvis bedre (ide Fra Hanskepapir) til gjennomsnitt eller ta en sum av hoved-og kontekstvektor:
Vi kan finne de nærmeste ordvektorer for vårt paris – frankrike + tyskland eksempel:
## paris berlin munich germany versailles ## 0.7724678 0.7156243 0.6962157 0.6381500 0.6170311
du kan oppnå mye bedre resultater ved å eksperimentere med skip_grams_window
og parametrene til GloVe
– klassen(inkludert ordvektorstørrelse og antall iterasjoner). For flere detaljer og store eksperimenter på wikipedia-data, se dette gamle innlegget på bloggen min.