初めて自然言語処理をword2vecでしてみました


今回は、word2vecを使用して自然言語処理を行います。

自然言語や形態素解析やword2vecなどについては、詳しく説明してくださっている方がいらっしゃったのでそちらを参考にしてください。
自然言語処理(NLP)ってなんだろう?

形態素解析は、前処理の一部みたいです。本によるとなんらかの処理をする前に、プログラムが処理しやすいように処理対象のデータを整えること前処理というみたいで、ほかにもタグや記号を除去する(クリーニング)、半角と全角を揃える(正規化)などがあるようです。

こちらの書籍を見ながら今回は、実行しています。

参考にした本

パソコンで楽しむ自分で動かす人工知能
中島能和 (著)

実際にword2vecを使って自然言語処理を行った手順

①word2vecをインストール
②word2vecをコンパイル
③データをダウンロードし学習する
④学習データをのぞいてみる
⑤関連語を表示させる
⑥単語の関係性を演算してみる

①word2vecをインストール

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

②word2vecをコンパイル

$ cd word2vec
$ ls 
# .cとあるファイルはC言語のソースファイルなのでコンパイルして実行ファイルにする
$ make

※ファイル一覧に「makefile」というファイルがあり、このファイルにコンパイル(ビルド)の手順が書かれている。makeコマンドを実行すると、makefile(Makefile)ファイルに従ってコンパイルが行われる

③データをダウンロードし学習する

# データをダウンロードして学習する
$ ./demo-word.sh

※学習中の画面になります。text8を学習

④学習データをのぞいてみる

# データの中身を見る
$ less text8

※text8(単語同士の関係性を学習するためのものなので、文章ごとに区切らず、「.」も「,」も改行も取り除かれた、約1700万語からなる超長文の英文

⑤関連語を表示させる

# word2vecに戻る(関連語の検索を再開する)
$ ./distance vectors.bin
# 関連語を表示する
$ Enter word or sentence (EXIT to break):

franceと入力

※右側のdistanceは単語の距離を表し、数値が大きいほど関連が近い
soccerと入力

辞書にない単語を指定する

# 関連語の検索を終了するには
$ Enter word or sentence (EXIT to break):EXIT

⑥単語の関係性を演算してみる

3つの単語A,B,Cを入力すると、「AとBの関係はCに対して何であるか」を回答として出力している
パリとフランスの関係は、ベルリンに対して何になるでしょうか。

結果、ドイツ(germany)となりました。
パリがフランスの首都なので、ベルリンに対してドイツという回答は期待通りになりました。
ただ、いくつか試してみましたが、あまりポピュラーでない単語の場合は精度が低くなるようです。

関連情報

word2vec :単語をベクトルにするアルゴリズム。実用面では、word2vecで生成したデータを使って、
・文章中の単語の使われ方や特徴を解析したり可視化したりする
・検索語に指定した単語の関連語検索結果もあわせて表示する

書籍情報

パソコンで楽しむ自分で動かす人工知能
中島能和 (著)