これはなに?
Word2Vecを使って、ポルカの歌詞データを分析したので、その結果について可視化してみました。
前回の記事でモデル化まで終わっているので、内容としては結構簡単です。
歌詞データの分析モデル作成は以下の記事を参照ください。 www.cloudnotes.tech
環境
- インフラ: Docker
- 言語: Python3
- 作業環境: Jupyter Lab
- 機械学習
- 形態素解析: Mecab
- Word2Vec: gensim
- 可視化: TensorBoard
JupayterLabの環境を前提として記載していきます。 以下の記事に記載しているコンテナイメージにTensorFlowを追加でインストールしたDocker環境を利用しています。
DockerFileはこちら。 github.com
可視化
1. モデルの保存
以下記事で作成したモデルをSaveメソッドを利用して、ファイルに出力します。
ポルカドットスティングレイの歌詞データをPythonで機械学習、分析してみた -word2vec‐ - 雲のメモ帳
# 学習モデルの保存 model.save("./polka.model")
2. 可視化コンテンツの作成
保存したモデルをTensorbordXを使って、TensorBoardで可視化できる状態とします。
import gensim from tensorboardX import SummaryWriter import torch #モデルを保存したPath model_path = "./polka.model" writer = SummaryWriter() model = gensim.models.Word2Vec.load(model_path) weights = model.wv.vectors labels = model.wv.index2word writer.add_embedding(torch.FloatTensor(weights), metadata=labels)
上記を実行するとカレントディレクトリに runs というフォルダが作成され、可視化コンテンツが格納されます。
3. TensorBoardの起動
可視化コンテンツまで作成できたので、TensorBoardを起動、コンテンツをロードします。
Jupyter Labでは、TensorBoard用のライブラリがあり、JupyterLab上でTensorBoardを表示できます。
%load_ext tensorboard %tensorboard --port 6006 --logdir=./runs/ --bind_all
--logdirに可視化コンテンツのフォルダパスを指定します。
TensorBoardが起動したら、「PROJECTOR」を選択すると、Word2Vecの結果を次元削減(PCA)した結果が可視化されます。
次元削減説明は以下の記事がわかりやすいので、興味がありましたら、こちら参照くださいー。
30分でわかる機械学習用語「次元削減(Dimensionality Reduction)」 - Qiita
4. 可視化
TensorBoardを使うことで、文字同士の距離を実際に可視化することができました。各Labelを指定することで、類似性が高い文字ののみ表示することが可能です。 ちなみに可視化するために、次元削減によって多次元(100次元)だったものを3次元にしているため、分析結果とは少し異なる距離になっています。 正確ではありませんが、ある程度の関係性を見るくらいなら使えそうです。
意外な単語の距離が近かったら、なぜこの単語間の距離が近いのか考察したりすると楽しそうです。
音楽
人生
ギター
t-SNEという次元削減の方法があり、そちらのほうが良いみたいですが、私が作成したモデルだとあまり結果は変わりませんでした。
最後に
自然言語処理の学習として、Word2Vecを使ったモデル作成、TensorBoardの可視化を実施してみましたが、かなり面白い内容でした。Twitter等のSNSを分析してみると面白そうな感じがします。顧客のクレーム情報を分析、可視化してみると意外な文字が距離的に近いものがあって、それが実は根本原因だったとかありそう。夢が広がりますねー。NLPは奥深いのでこれからも色々触ってみようと思います。感情分析とかDoc2Vecとかやりたいな。