word2vec を(Pythonでなく)ターミナルから直接、実行するための環境構築の備忘録 (デモ用.shファイルの実行まで)

  • 20
    いいね
  • 2
    コメント
この記事は最終更新日から1年以上が経過しています。

【 事後追記 】2016年8月

word2vec は、現在は、

svn checkout http://word2vec.googlecode.com/svn/trunk/

ではなく、

git clone https://github.com/svn2github/word2vec.git

で落としてくるようです。

上記を含め、Mac OS X 環境で DLした word2vecのC言語ソースコード を make する場合に 各ファイルのinclude文のinclude対象を変更する変更が必要なことなど、以下の記事にまとまっています。

Macにインストールする際には、以下のようなエラーが出ます。

terminal
$ cd word2vec
$ make
gcc word2vec.c -o word2vec -lm -pthread -O3 -march=native -Wall ->funroll-loops -Wno-unused-result
gcc word2phrase.c -o word2phrase -lm -pthread -O3 -march=native ->Wall -funroll-loops -Wno-unused-result
gcc distance.c -o distance -lm -pthread -O3 -march=native -Wall ->funroll-loops -Wno-unused-result
distance.c:18:10: fatal error: 'malloc.h' file not found
#include <malloc.h>
        ^
1 error generated.
make: *** [distance] Error 1

malloc.hが無いよーというエラー。

macOSではmalloc.hではなくstdlib.hを使うので、以下のファイルのincludeを変更。

  • compute-accuracy.c
  • distance.c
  • word-analogy.c
c_file
// #include <malloc.h>
#include <stdlib.h>

その後、再度ビルドすればインストールできます。

// #include <malloc.h>
#include <stdlib.h>

再度ビルド。

$ make
gcc distance.c -o distance -lm -pthread -O3 -march=native -Wall ->funroll-loops -Wno-unused-result
distance.c:32:8: warning: unused variable 'ch' [-Wunused-variable]
 char ch;
      ^
1 warning generated.
gcc word-analogy.c -o word-analogy -lm -pthread -O3 -march=native ->Wall -funroll-loops -Wno-unused-result
word-analogy.c:32:8: warning: unused variable 'ch' [-Wunused->variable]
 char ch;
      ^
1 warning generated.

使ってない変数がありますよ、という警告メッセージだけなので、ビルドはこれで良いことにしておきます。


Pythonword2vec モジュールばかり使っていたので、ターミナルから直接、コマンドをたたいて、 C言語 ファイルを実行するようにしてみます

【 実行環境 】

( 仮想環境 ) Virtual BoxGuest Additions 一度入ったものの、昨夜からマウント fail 状態 ※ 画面が拡大できず、小窓状態に (> <)
( ホスト OS ) Windows 7(64 bit)
( ゲスト OS )Ubuntu 14.04 LTS(日本語版)

以下、O'Reilly 西尾本 (日本語 電子書籍)に沿って環境構築します

O'Reilly ジャパン ウェブサイト へのリンク )

OReilly.png

環境構築 

Googlecode.com 内の資源をダウンロード & コンパイル )

 subversion インストール

word2vecC言語 ソースファイルは、バージョン管理ツール sv を用いて落としてきます ( svn checkout コマンド )
zsh(Ubuntu terminal)
sudo apt-get install subversion

1kaikai.png

( インストール完了 )

2kai.png

Googlecode サーバ から、 word2vec 一式ファイルをダウンロード

【 ダウンロード先 ディレクトリ名 】 trunk
※ ディレクトリの名前は、好きな文字列を任意で入力
sv(Ubuntu terminal)
svn checkout http://word2vec.googlecode.com/svn/trunk/

3.png

( 以下の word2vec 資源一式 がダウンロードされる )

【 資源一式 】

C 言語ソースファイル
② コンパイル用 make ファイル ③ .sh シェルスクリプトファイル

4.png

C 言語ソースファイル のコンパイル ( make ) に必要な gcc 等をインストール

zsh(Ubuntu terminal)
sudo apt-get install build-essential

5.png

( 資源格納先ディレクトリ (例: trunk ディレクトリ)に移動 )

6.png

C 言語ソースファイルをコンパイル実行

zsh(Ubuntu terminal)
make

7.png

コンパイル完了したら、ディレクトリ内を確認

8.png

( 環境構築 完了 )

デモを実行

つづけて、デモ実行ファイル ( _.shファイル )を使ってみる

demo-word.sh ファイルの中身をのぞいてみる

emacs demo-word.sh

20.png

http://mattmahoney.net から、text8.zip コーパス・データファイルを wget して、以下の引数・オプション設定で、word2vec.c ファイルを実行する内容であることを確認

train(コーパス・ファイル名): text8
output(学習済みバイナリ・ファイル (.bin)生成時のファイル名): vectors.bin
cbow ( word2vec 実行時の演算アルゴリズム指定 ): 0(ゼロ)なので、skip-gram アルゴリズムを選択
window (単語前後の認識範囲(単語数)指定): 5
** ( 以下、省略 )

21kai.png

demo-word.sh を実行

【 処理内容 】

text8.zip を読込みに行って、ダウンロード&解凍後、上で見たオプション設定で、text8 コーパス・ファイルに対して、学習( 出現単語ごとの特徴ベクトル演算 )を行っている

9.png

【 学習( 出現単語ごとの特徴ベクトル演算 )の進捗度 が 100% に達して完了 】

(単語)類似度演算 ( distance.c ファイルを実行 )の引数に渡す単語 の入力を即すプロンプトが点滅表示される

10.png

O(Reilly 西尾本 に従い、cat と入力

同じ動物の単語 が 返り値として戻ってくる

11.png

12.png

返り値が延々、表示されるので、Ctrl + C で強制終了

類似度演算コード をのぞいてみる

emacs distance.c

13.png

14.png

15.png

O'Reilly 西尾本 に沿って、返り値の単語数を、40 から 10 に減らすよう、コードを書き換える

 ( 書き換え前 )

16.png

 ( 書き換え後 )

17.png

書き換えた distance.C ファイルを保存後、再コンパイル実行

zsh(terminal)
make

18.png

再コンパイル完了後、書き換えた distance.c コードを、実行

※ 引数に与える学習済みファイル(特徴ベクトル空間ファイル)は、先ほどと同じ vectors.bin ファイルを使用

返り値が、10単語 に抑制された( ※ 修正どおり)

19.png