Rでword2vec

こちらを参考にRでWord2Vecを実行してみたが、ちょっとハマったのでメモ

パッケージインストール

必要なパッケージをインストールします

install.packages("devtools")
library(devtools)
install.packages("tsne")
install.packages("magrittr")
install.packages("stringi")
library(tsne)
library(magrittr)
library(stringi)
devtools::install_github("bmschmidt/wordVectors")

データ作成

青空文庫から夏目漱石の三四郎をテストデータとします

$ wget http://www.aozora.gr.jp/cards/000148/files/794_ruby_4237.zip
$ unzip 794_ruby_4237.zip
$ nkf -w  --overwrite sanshiro.txt
$ mecab -Owakati sanshiro.txt -o data.txt

UTF8へ文字コードを変換しておきます。ちなみにmecabはUTF8のものをインストールしておいてください

R実行

Rから実行します

library(devtools)
library(wordVectors)
library(magrittr)
library(tsne)
library(magrittr)
wordVectors::train_word2vec(
  train_file = "data.txt", output_file = "model.txt",
  vectors = 200, window = 10,
  threads = 3
)

threadsはCPU数−1あたりで設定します
これを実行すると

 type.convert(data[[i]], as.is = as.is[i], dec = dec, numerals = numerals,  でエラー: 
   '(;;{ֺ3:q9<9a><99>
8(c<91>:' に不正なマルチバイト文字があります 追加情報: 警告メッセージ: 1: utils::read.table(filename, header = F, skip = 1, colClasses = c("character", で: line 1 appears to contain embedded nulls 2: utils::read.table(filename, header = F, skip = 1, colClasses = c("character", で: line 2 appears to contain embedded nulls 3: utils::read.table(filename, header = F, skip = 1, colClasses = c("character", で: line 3 appears to contain embedded nulls 4: utils::read.table(filename, header = F, skip = 1, colClasses = c("character", で: line 4 appears to contain embedded nulls 5: utils::read.table(filename, header = F, skip = 1, colClasses = c("character", で: line 5 appears to contain embedded nulls 6: utils::read.table(filename, header = F, skip = 1, nrows = 1, で: line 1 appears to contain embedded nulls

このようなエラーが出ます
この場合には気にせずRで

word2vec_model <- read.vectors("model.txt",binary=TRUE)

これで読み込み直してやります。

確認

> nearest_to(word2vec_model,word2vec_model[["三四郎"]])
      三四郎       与次郎       じっと           秋     ますます         勇気     見合わせ     おかしく           次 
3.330669e-16 4.131871e-01 4.873280e-01 4.886600e-01 4.895344e-01 4.948309e-01 5.033392e-01 5.220245e-01 5.278047e-01 
      腹の中 
5.329964e-01 
> nearest_to(word2vec_model,word2vec_model[["東京"]])
        東京       生まれ     これから       ずっと         変る         おれ       いなか         うえ       いっそ 
5.551115e-16 3.663971e-01 3.754231e-01 3.864140e-01 4.024397e-01 4.056571e-01 4.078920e-01 4.080678e-01 4.103215e-01 
    文芸時評 
4.340431e-01 

ま、こんなもんです