sproglige regelmæssigheder
lad os nu undersøge, hvordan Handskeindlejringer fungerer. Som almindeligt kendt, ord2vec ordvektorer fange mange sproglige regelmæssigheder. For at give det kanoniske eksempel, hvis vi tager ordvektorer for ordene “paris”, “Frankrig” og “Tyskland” og udfører følgende operation:
\
den resulterende vektor vil være tæt på vektoren for”berlin”
lad os hente de samme data, der bruges som en demo af ord2vec:
i det næste trin opretter vi et ordforråd, et sæt ord, som vi ønsker at lære ordvektorer for. Bemærk, at alle tekst2vecs funktioner, der fungerer på rå tekstdata (create_vocabulary
, create_corpus
, create_dtm
, create_tcm
) har en streaming API, og du bør gentage over tokens som det første argument for disse funktioner.
disse ord bør ikke være for ualmindelige. Fot eksempel Vi kan ikke beregne en meningsfuld ordvektor for et ord, som vi kun så en gang i hele corpus. Her tager vi kun ord, der vises mindst fem gange. tekst2vec giver yderligere muligheder for at filtrere ordforråd (se ?prune_vocabulary
).
nu har vi 71.290 udtryk i ordforrådet og er klar til at konstruere term-co-occurence matrice (TCM).
nu har vi en TCM-Matrice og kan faktorisere den via Handskealgoritmen.
tekst2vec bruger en parallel stokastisk gradientafstamningsalgoritme. Som standard bruger den alle kerner på din maskine, men du kan angive antallet af kerner, hvis du ønsker det.
lad os passe vores model. (Det kan tage flere minutter at 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
bemærk, at modellen Lærer to sæt ordvektorer-hoved og kontekst. I det væsentlige er de de samme, da modellen er symmetrisk. Fra vores erfaring med at lære to sæt ordvektorer fører til indlejringer af højere kvalitet. Handske model er” nedbrydning ” model (arver fra mlapiDecomposition
– generisk klasse af modeller, der nedbryder input matricer i to lav rang matricer). Så på niveau med alle andre mlapiDecomposition
model anden lav rang matrice (kontekst ord vektorer) er tilgængelig i components
felt:
## 50 71290
Bemærk, at som i alle modeller, der arver fra mlapiDecomposition
transformeret matrice har nrow = nrow(input)
, ncol = rank
og anden component
matricen har nrow = rank
, ncol = ncol(input)
.
mens begge ordvektorer matricer kan bruges som resultat, er det normalt bedre (ide fra Handskepapir) til gennemsnit eller tage en sum af hoved-og kontekstvektor:
vi kan finde de nærmeste ordvektorer til vores paris – Frankrig + Tyskland eksempel:
## paris berlin munich germany versailles ## 0.7724678 0.7156243 0.6962157 0.6381500 0.6170311
du kan opnå meget bedre resultater ved at eksperimentere med skip_grams_window
og parametrene for GloVe
klassen (inklusive ordvektorstørrelse og antallet af iterationer). Se dette gamle indlæg på min blog for flere detaljer og store eksperimenter med data.