kielelliset säännönmukaisuudet
nyt tutkitaan, miten käsine-upotukset toimivat. Kuten yleisesti tiedetään, word2vec-sanavektorit vangitsevat monia kielellisiä säännönmukaisuuksia. Kanonisen esimerkin antamiseksi, jos otamme sanavektorit sanoille ”Pariisi”, ”Ranska” ja ”saksa” ja suoritamme seuraavan operaation:
\
tuloksena oleva vektori on lähellä vektoria ”berlin”
ladataanpa sama Wikipedia-data, jota word2vec käytti demona:
seuraavassa vaiheessa luodaan sanasto, sanakokonaisuus, johon haluamme oppia sanavektoreita. Huomaa, että kaikki text2vec: n toiminnot, jotka toimivat raakatekstidatalla (create_vocabulary
, create_corpus
, create_dtm
, create_tcm
) on streaming API ja sinun pitäisi iteroida yli tokens kuin ensimmäinen argumentti näitä toimintoja.
näiden sanojen ei pitäisi olla liian harvinaisia. Fot esimerkki emme voi laskea merkityksellistä sanavektoria sanalle, jonka näimme vain kerran koko korpuksessa. Tähän otamme vain sanat, jotka esiintyvät vähintään viisi kertaa. text2vec tarjoaa lisävaihtoehtoja sanaston suodattamiseen (KS. ?prune_vocabulary
).
nyt meillä on sanastossa 71 290 termiä ja olemme valmiita rakentamaan termien yhteistoimintamatriisin (TCM).
nyt meillä on TCM-matriisi ja voimme factorisoida sen Hansikasalgoritmin avulla.
text2vec käyttää rinnakkaista stokastista gradientin laskeutumisalgoritmia. Oletuksena se käyttää kaikkia ytimiä koneessasi, mutta voit halutessasi määrittää ytimien määrän.
sovitellaan mallia. (Se voi kestää useita minuutteja sopivaksi!)
## 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
huomaa, että malli oppii Kahdet sanavektorit-pää-ja asiayhteys. Pohjimmiltaan ne ovat samat, koska malli on symmetrinen. Kokemuksemme oppiminen Kahdet sanavektorit johtaa laadukkaampiin upotuksiin. Käsinemalli on ”hajoamismalli” (periytyy mlapiDecomposition
– geneerisestä malliluokasta, joka hajottaa tulomatriisin kahdeksi matalaksi matriisiksi). Joten par kaikkien muiden mlapiDecomposition
mallin toisen matalan tason matriisin (kontekstisanavektorit) kanssa on components
kentässä:
## 50 71290
huomaa, että kuten kaikissa malleissa, jotka perivät mlapiDecomposition
muunnetun matriisin on nrow = nrow(input)
, ncol = rank
ja toisen component
matriisin on nrow = rank
, ncol = ncol(input)
.
vaikka molempia sanavektorimatriiseja voidaan käyttää tuloksena se yleensä parempi (idea Käsinepaperista) keskiarvoon tai ottaa pää-ja kontekstivektorin summa:
voimme löytää lähimmät sanavektorit Pariisi-Ranska + Saksa-esimerkillemme:
## paris berlin munich germany versailles ## 0.7724678 0.7156243 0.6962157 0.6381500 0.6170311
voit saavuttaa paljon parempia tuloksia kokeilemalla skip_grams_window
ja GloVe
luokan parametreilla (mukaan lukien sanavektorien koko ja iteraatioiden määrä). Lisätietoja ja laajamittaisia kokeiluja wikipedia tietoja katso tämä vanha viesti blogissani.