雲のメモ帳

猫とクラウドと旅行が好きなインフラエンジニアです。 日々の調べたことや興味が持ったことをこのブログにアウトプットします。

ポルカドットスティングレイの歌詞データの分析結果を可視化してみた -TensorBoard-

これはなに?

Word2Vecを使って、ポルカの歌詞データを分析したので、その結果について可視化してみました。
前回の記事でモデル化まで終わっているので、内容としては結構簡単です。

歌詞データの分析モデル作成は以下の記事を参照ください。 www.cloudnotes.tech

環境

  • インフラ: Docker
  • 言語: Python3
  • 作業環境: Jupyter Lab
  • 機械学習
    • 形態素解析: Mecab
    • Word2Vec: gensim
    • 可視化: TensorBoard

JupayterLabの環境を前提として記載していきます。 以下の記事に記載しているコンテナイメージにTensorFlowを追加でインストールしたDocker環境を利用しています。

www.cloudnotes.tech

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)した結果が可視化されます。

f:id:ykoomaru:20210519172731p:plain

f:id:ykoomaru:20210519180213p:plain

次元削減説明は以下の記事がわかりやすいので、興味がありましたら、こちら参照くださいー。

30分でわかる機械学習用語「次元削減(Dimensionality Reduction)」 - Qiita

4. 可視化

TensorBoardを使うことで、文字同士の距離を実際に可視化することができました。各Labelを指定することで、類似性が高い文字ののみ表示することが可能です。 ちなみに可視化するために、次元削減によって多次元(100次元)だったものを3次元にしているため、分析結果とは少し異なる距離になっています。 正確ではありませんが、ある程度の関係性を見るくらいなら使えそうです。

意外な単語の距離が近かったら、なぜこの単語間の距離が近いのか考察したりすると楽しそうです。

音楽

f:id:ykoomaru:20210519174558p:plain

人生

f:id:ykoomaru:20210519174708p:plain

ギター

f:id:ykoomaru:20210519174332p:plain

t-SNEという次元削減の方法があり、そちらのほうが良いみたいですが、私が作成したモデルだとあまり結果は変わりませんでした。

最後に

自然言語処理の学習として、Word2Vecを使ったモデル作成、TensorBoardの可視化を実施してみましたが、かなり面白い内容でした。Twitter等のSNSを分析してみると面白そうな感じがします。顧客のクレーム情報を分析、可視化してみると意外な文字が距離的に近いものがあって、それが実は根本原因だったとかありそう。夢が広がりますねー。NLPは奥深いのでこれからも色々触ってみようと思います。感情分析とかDoc2Vecとかやりたいな。