word2vecのデモを試す（特にMac環境）

![SS 192.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565043/a41cd967-f549-8677-1efa-2e99bf69518d.png) 　今すぐword2vecを使ってみたい。最短でやりたい。

##やること

「単語をベクトル化する」とか「単語分散表現」とかよく聞きます。文章の中の単語を単語同士で機械学習でいろいろ比較して、その特徴を次元で表すという手法です。「日本 - 東京 + フランス = パリ」のような単語同士の計算もできるようになるそうです。面白そう。

2020年6月現在、特にMac環境でやる場合にword2vecをスルッと導入するためのメモです。

##環境

- Linux系
- 手元の環境はMacですがwindowsやラズパイなどでもOK。

##やり方

#### word2vecをインストールする
(参考）https://qiita.com/yuichi_tr/items/cb885a022b8e2233d097

```Console:
$ git clone https://github.com/svn2github/word2vec.git
$ cd word2vec
$ make
```
word2vecをgitからダウンロードしインストールしていきます。

Macの場合で $ makeの後に 'malloc.h' file not found ... #include &lt;malloc.h &gt; とエラーが出る場合は、ライブラリ名の違いを修正する必要がありますので下記を参考に書き換えます。
(参考）https://note.com/nozomukubota/n/nd3727c2354f9
具体的には、nanoやvimのエディタでdistance.c、word-analogy.c、compute-accuracy.c の各ファイルの中にある #include &lt;malloc.h &gt; を #include &lt;stdlib.h &gt; に書き換えます。書き換えたら再度 $ make します。makeが通ればインストール成功です。

```Console:
$ chmod +x *.sh
```
シェルスクリプトに実行権を追加しておきます。

#### デモ用のテキストデータをダウンロードする

```Console:
$ curl -O http://mattmahoney.net/dc/text8.zip >text8.zip
 または $ wget http://mattmahoney.net/dc/text8.zip >text8.zip
```
text8という機械学習用のテキストデータをダウンロードします。

```Console:
$ unzip text8.zip
```
ダウンロードしたら解凍します。

これでもうデモを試せるようになります。
ちなみにtext8はwikipediaを元にした7万単語ほどのテキストデータです。テキストファイル形式になっており、中をのぞいて見ると単語がスペース区切りで延々と並んでいるのがわかります。

#### word2vecのデモを試す

```Console:
$ ./demo-word.sh 
```
さきほどダウンロードしたtext8というコーパスを使ってのデモです。実行するとまずword2vecがベクトル計算を行います。Progress:XX.XX%と進捗が表示されるので、気長に待ちます。
（手元のMacBookAirはすぐ熱くなるので外から扇風機を当ててます。）

計算終了後、自動的にデモ立ち上がります。
アルファベットでキーワードを入力すると、類似語が出ます。

```Console:
$ Enter word or sentence (EXIT to break): soba

Word: soba  Position in vocabulary: 46018

                           Word       Cosine distance
-----------------------------------------------------
                           udon				0.676965
                           noodles			0.642184
                           broth			0.630183
                           tofu				0.622382
                           steamed			0.619639
                           ramen			0.598241
                           buckwheat		0.581692
                           wonton			0.564115
                           stew				0.563284
											(以下略)
```
ためしにsobaと入力してみると、上記のように結果が出力されます。単語ベクトル空間においてsobaに一番似ている（コサイン類似度が近い）のはudonだそうです。
EXITと入力することで終了できます。

続いてword-analogyも試してみます。

```Console:
$ ./word-analogy vectors.bin
```
ここで指定されているvectors.binというのは、さきほどtext8からword2vecで生成されたベクトルデータです。

実行すると単語を3つ入力するように指示が出ますので、スペース区切りでjapan tokyo spainと入力してみます。

```Console:
Enter three words (EXIT to break): japan tokyo spain

Word: japan  Position in vocabulary: 582
Word: tokyo  Position in vocabulary: 4909
Word: spain  Position in vocabulary: 804

                           Word				Distance
-----------------------------------------------------
                           madrid			0.546240
                           toledo			0.543838
                           lleida			0.513116
											(以下略)
```
japan tokyo spainに関係するのはmadridである可能性が高いとの結果が出ました。

## おわり
word2vecが動いて一安心。
こうなってくると日本語でもいろいろ試したくなってきます。
[次は日本語データの作成に挑戦](https://qiita.com/Ninagawa_Izumi/items/4e9b895e233c982118fb)してみます。