Re:ゼロから始めるML生活

どちらかといえばエミリア派です

word2vecを使って単語の共起性を可視化してみる

最近突然、自然言語処理の勉強を始めたきっかけは、こちらの記事を拝見したからです。

karaage.hatenadiary.jp

こういうコンピュータ・サイエンスっぽい絵を作りたくて作りたくて…(泣)

というわけで、今回は共起ネットワークを作ってみました。

基本的に上の記事をなぞって勉強していきます。

共起ネットワーク

共起ネットワークとは、KH Corderの説明を借りると、こんな意味になっています。

抽出語またはコードを用いて、出現パターンの似通ったものを線で結んだ図、すなわち共起関係を線(edge)で表したネットワークを描く機能です。

なんとなくですが、単語を多次元空間にマッピングして、その距離が近い(相関関係が強い)ものを線で結んだものというイメージですかね。 今回は線では結びませんが、可視化して距離の近さから相関関係を見えるようにしたい思います。 固定次元の空間に落とし込むにはword2vecなんか使えばいけるかと思います。

word2vec

word2vecの内容については割愛します。 イメージはこの辺ご参考ください。

tsunotsuno.hatenablog.com

可視化ツール

ざっと調べた感じですが、可視化には下の3つくらいがいい感じみたいですね。

  • KH Corder
  • Embedding Projector
  • Tensorboard

KH Corder

簡単に作るならKH Corderがいいらしいです。 この辺りの記事を見てる感じ、結構かっこいい図が出てくるんですね。

khcoder.net

antibayesian.hateblo.jp

お手軽に作るならこちらをどうぞ。

Embedding Projector

外部のサービスで利用するのなら、こちらも使えるみたいです。 開いた瞬間かっこいい図が出てきます。

projector.tensorflow.org

Tensorboard

上のサイトとほとんど同じですが、Tensorflowを使うのも一つの手ですね。

この辺りのサイトなんかを参考に作るのが良いのではないでしょうか。

media.accel-brain.com

http://tensorflow.classcat.com/2017/09/10/tensorflow-programmers-guide-embedding/

実際にやってみた

さて、本題に入ります。 今回はまずはTensorBoardでやってみようかと思います。ちょうどチュートリアルもあることですし。

環境構築

環境を整えるためにまずはTensorFlow用のDocker環境を用意します。

www.tensorflow.org

この辺参考にすると、なんかこれ一発でうまくいきそうですね。

docker pull tensorflow/tensorflow

コンテナの起動はこんな感じでしょうか。

docker run -it -p 8888:8888 -p 6006:6006 -v $HOME:/home -w /home tensorflow/tensorflow:latest-py3 bash

$HOMEのところで、適当に使うディレクトリをマウントすればいいと思います。 あとでtensorboardを使うので、そのために6006番ポートも開けておきます。 python3でやりたいというか、2.x系を使う理由が見当たらないので、3.x系でやるためにlatest-py3を使います。

これでログインできました。

コード

こちらのコードがそのまま動きました。

github.com

Macbookをつかいましたが、計算時間は大体10分くらいでしたね。 これくらいならノートPC でも全然いけるみたいですね。

可視化

tensorboardを起動してブラウザからアクセスすれば勝手に可視化できます。

起動

tensorboard --logdir=./log

表示

http://localhost:6006/

こんな感じに見えました。

f:id:nogawanogawa:20190209091622p:plain

感想

今回はとりあえず可視化出来るとこまでできればよかったんですが、これ英語しかできないですね。日本語の文書を可視化するには形態素解析をしないといけないんですね。自分のブログを分析するまでは先は長そうです。

何はともあれ、かっこよさげな図が出せたので今回は良しということで。