41
31

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

TensorFlow 0.12で追加されたEmbedding Visualizationを試す

Last updated at Posted at 2016-11-30

はじめに

先日 TensorFlow 0.12 がリリースされました。
その機能の一つとして、埋め込み表現の可視化があります。これにより高次元のデータをインタラクティブに分析することが可能になります。

以下は MNIST を可視化したものです。以下の画像は静止画ですが、公式サイトでは3次元でぬるぬる動いているところを見ることができます。
embedding_visualization.png

本記事ではWord2vecの可視化を通じて、Embedding Visualization の使い方を試してみました。まずはインストールから行っていきます。

インストール

まずは TensorFlow 0.12 をインストールします。以下のページを参考にインストールしてください。

インストールが終わったら可視化のために学習を行います。

モデルを学習する

まずはリポジトリをクローンした後、以下のコマンドを実行して移動します:

$ git clone https://github.com/tensorflow/tensorflow.git
$ cd tensorflow/models/embedding

学習データと評価データをダウンロードするために以下のコマンドを実行します:

$ wget http://mattmahoney.net/dc/text8.zip -O text8.zip
$ unzip text8.zip
$ wget https://storage.googleapis.com/google-code-archive-source/v2/code.google.com/word2vec/source-archive.zip
$ unzip -p source-archive.zip  word2vec/trunk/questions-words.txt > questions-words.txt
$ rm source-archive.zip

データが用意できたので単語ベクトルを学習します。以下のコマンドを実行してください:

$ python word2vec_optimized.py --train_data=text8 --eval_data=questions-words.txt --save_path=/tmp/

学習には1時間くらいかかるのでお待ちください。

TensorBoard で Embedding を表示する

学習が終わったら表示を行います。まずは以下のコマンドを実行して TensorBoard を起動してください:

$ tensorboard --logdir=/tmp/

起動したら、指定されたアドレスにアクセスします。その後 Embedding タブを選択すると可視化されたベクトルが表示されます。

ちなみにWord2vecの可視化を行ったら、ボキャブラリ数が多すぎてわけがわからないことになりました。

Metadataを使うと単語IDではなく単語そのものを表示できるようになるみたいです。

もし何も表示されなかったら

Embedding タブを選択した際にブラウザに何も表示されず、コンソールに以下のようなエラーが出ることがあります。というか出ました。

 File "/Users/user_name/venv/lib/python3.4/site-packages/tensorflow/tensorboard/plugins/projector/plugin.py", line 139, in configs
    run_path_pairs.append(('.', self.logdir))
AttributeError: 'dict_items' object has no attribute 'append'

その場合、インストールしたTensorFlowのtensorflow/tensorboard/plugins/projector/plugin.pyの139行目を以下のように変更してください。その後、TensorBoard を再実行します。

- run_path_pairs.append(('.', self.logdir))
+ run_path_pairs = [('.', self.logdir)]

いろいろいじってみる

あるノード(単語)を選択した後、「isolate 101 points」を選択したら以下のように表示されました。

スクリーンショット 2016-11-30 17.50.31.png

これは選択した単語に類似した100単語を表示していることになります。ここで類似度を測るためには、コサイン類似度、ユークリッド距離を使うことができます。また、neighborsを指定することで、表示する単語数を増減させることができます。

可視化のためのアルゴリズムも複数使うことができます。
スクリーンショット 2016-11-30 18.18.57.png

デフォルトではPCAですが、T-SNEやCUSTOMも使うことができます。画像では3次元表示していますが、2次元表示を行うこともできます。

おわりに

ラベルとして単語を割り当てられるともっと面白くなりそうです。今回は取り急ぎこんな感じの紹介に留めておきます。

参考

41
31
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
41
31

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?