språkliga regelbundenheter
låt oss nu undersöka hur handske inbäddning fungerar. Som allmänt känt fångar word2vec-ordvektorer många språkliga regelbundenheter. För att ge det kanoniska exemplet, om vi tar ordvektorer för orden ”paris”, ”Frankrike” och ”Tyskland” och utför följande operation:
\
den resulterande vektorn kommer att ligga nära vektorn för ”berlin”
Låt oss ladda ner samma Wikipedia-data som används som en demo av word2vec:
i nästa steg skapar vi ett ordförråd, en uppsättning ord som vi vill lära oss ordvektorer för. Observera att alla text2vec: s funktioner som fungerar på rådata (create_vocabulary
, create_corpus
, create_dtm
, create_tcm
) har en streaming API och du bör iterera över tokens som det första argumentet för dessa funktioner.
dessa ord bör inte vara alltför ovanligt. Fot exempel vi kan inte beräkna en meningsfull ordvektor för ett ord som vi bara såg en gång i hela corpus. Här tar vi bara ord som visas minst fem gånger. text2vec ger ytterligare alternativ för att filtrera ordförråd (se ?prune_vocabulary
).
nu har vi 71,290 termer i ordförrådet och är redo att konstruera term-co-occurence matrix (TCM).
nu har vi en TCM-matris och kan faktorisera den via Handskalgoritmen.
text2vec använder en parallell stokastisk gradient nedstigningsalgoritm. Som standard kommer det att använda alla kärnor på din maskin, men du kan ange antalet kärnor om du vill.
Låt oss passa vår modell. (Det kan ta flera minuter att passa!)
## 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
Observera att modellen lär sig två uppsättningar ordvektorer-huvud och sammanhang. I huvudsak är de desamma eftersom modellen är symmetrisk. Från vår erfarenhet att lära två uppsättningar av ord vektorer leder till högre kvalitet inbäddning. Handskmodell är” nedbrytningsmodell ” (ärver från mlapiDecomposition
– generisk klass av modeller som sönderdelar ingångsmatris i två lågrankade matriser). Så i nivå med alla andra mlapiDecomposition
model second low-rank matrix (context word vectors) finns i fältet components
:
## 50 71290
Observera att som i alla modeller som ärver från mlapiDecomposition
transformerad matris kommer har nrow = nrow(input)
, ncol = rank
och andra component
matrix kommer har nrow = rank
, ncol = ncol(input)
.
medan båda ordvektormatriserna kan användas som resultat är det vanligtvis bättre (idea från Handskpapper) till genomsnitt eller ta en summa av huvud-och kontextvektor:
vi kan hitta de närmaste ordvektorerna för vårt paris-Frankrike + Tyskland exempel:
## paris berlin munich germany versailles ## 0.7724678 0.7156243 0.6962157 0.6381500 0.6170311
du kan uppnå mycket bättre resultat genom att experimentera med skip_grams_window
och parametrarna för klassen GloVe
(inklusive ordvektorstorlek och antalet iterationer). För mer information och storskaliga experiment på wikipedia data se denna gamla inlägg på min blogg.