ほとんどマニュアル通りに行っただけ。
GloVe Word Embeddings
<環境>
> sessionInfo() R version 3.4.2 (2017-09-28) Platform: x86_64-w64-mingw32/x64 (64-bit) Running under: Windows 10 x64 (build 16299) Matrix products: default locale: [1] LC_COLLATE=Japanese_Japan.932 LC_CTYPE=Japanese_Japan.932 [3] LC_MONETARY=Japanese_Japan.932 LC_NUMERIC=C [5] LC_TIME=Japanese_Japan.932 attached base packages: [1] stats graphics grDevices utils datasets methods [7] base other attached packages: [1] RevoUtils_10.0.6 RevoUtilsMath_10.0.1 loaded via a namespace (and not attached): [1] compiler_3.4.2 tools_3.4.
> packageVersion("text2vec")
[1] ‘0.5.0’- 【0】使用するライブラリの読み込み
- 【1】データの取得と読み込み
- 【2】単語を抽出する
- 【3】TCM(term-co-occurence matrix)を作成する
- 【4】ワードベクトルを作成する
- 【5】うまくいっているか試してみる(paris - france + germany)
【0】使用するライブラリの読み込み
library(text2vec)
【1】データの取得と読み込み
download.file("http://mattmahoney.net/dc/text8.zip", "text8.zip") unzip("text8.zip", "text8") text8 <- readLines("text8", warn = FALSE)
【2】単語を抽出する
it <- itoken(text8) voc <- create_vocabulary(it) voc <- prune_vocabulary(voc, term_count_min = 5)
> voc
Number of docs: 1
0 stopwords: ...
ngram_min = 1; ngram_max = 1
Vocabulary:
term term_count doc_count
1: kentauros 5 1
2: tornatore 5 1
3: phantastica 5 1
4: steinhoff 5 1
5: minthe 5 1
---
71286: in 372201 1
71287: one 411764 1
71288: and 416629 1
71289: of 593677 1
71290: the 1061396 1
【3】TCM(term-co-occurence matrix)を作成する
tcm <- create_tcm(it, vocab_vectorizer(voc), skip_grams_window = 5)
【4】ワードベクトルを作成する
glove <- GlobalVectors$new(word_vectors_size = 50, vocabulary = voc, x_max = 10) main <- glove$fit_transform(tcm, n_iter = 20) context <- glove$components word_vectors <- main + t(context)
【5】うまくいっているか試してみる(paris - france + germany)
paris <- word_vectors["paris",, drop = FALSE] france <- word_vectors["france",, drop = FALSE] germany <- word_vectors["germany",, drop = FALSE] answer <- paris - france + germany cos_sim <- sim2(x = word_vectors, y = answer, method = "cosine", norm = "l2") head(sort(cos_sim[,1], decreasing = TRUE), 5)
berlin paris munich germany vienna 0.7652117 0.7228930 0.6976820 0.6499416 0.6340590