検索結果スクレイピング&doc2vecで企業の業種分類(3)
検索結果スクレイピング&doc2vecで企業の業種分類(1)
検索結果スクレイピング&doc2vecで企業の業種分類(2)
の最終回です。今回は作成したモデルをクラスタリングすべく、デンドログラムを書きます。
今回の構成
- Google検索結果からのサイトURLの取得&検索結果テキストの取得(beautifulsoup)
- Doc2vecでベクトル化
- デンドログラム作成←いまココ
gensimのword2vecで語のベクトル表現を作り、その空間を試してみたいを参考にDoc2vecのモデルからベクトル部分を抜き出してグラフ化しました。
最も困ったのは、Doc2vecのモデルにそのattributionはないよ、というエラーが頻発することと、普通に変更しても画像サイズが大きくならないことでした。
ライブラリの読み込み
matplotlibとscipyを使います。
import gensim
import sys
import scipy.spatial.distance
import scipy.cluster.hierarchy
import matplotlib.pyplot as plt
import numpy as np
モデルの読み込み
前回保存したモデルをロードします。
model = gensim.models.word2vec.Word2Vec.load('doc2vec.model')
デンドログラム作成用にデータ成形
- タグ(ラベル):model.docvecs.doctags に入っています。
- 中身(ベクトル):model.docvecs['任意のタグ名']で引いてこれます。
- 単語リスト:model.wv.vocab
ここまでわかればほとんど完成です。
タグのリストを作って、そのリストを元にモデルからベクトルを引き抜いて渡します。
vocnew = list(map(lambda x: x, model.docvecs.doctags))
voc = scipy.cluster.hierarchy.linkage(model.docvecs[vocnew])
出力
scipy.cluster.hierarchy.dendrogram(voc, labels=vocnew, ax=axes[0])
plt.show()
scipy.cluster.hierarchy.dendrogram(voc, labels=vocnew, ax=axes[0])
plt.show()
画像サイズの変更
小さすぎて読めないので、画像を大きくしたいですよね。
窓分割してサイズ指定することはできたので以下にコードを書いておきます。他の方法があったら教えてください。
ig, axes = plt.subplots(2, 1, figsize=(30, 15))
size*100ピクセルで画像が出力されます。あまり大きいと重くなるので注意。
おわりに
今回は体系的にまとめたかったのでデンドログラムを使いましたが、このままk-meansに適用することもできます。
企業を表すための変数としても使えるのではないかと思います。そうすると、企業名を明らかにしないままこの企業に紐づく別の変数を利用してモデルを作ったりすることができるようになります。
また何か面白い利用があったらシェアしたいと思います。
Author And Source
この問題について(検索結果スクレイピング&doc2vecで企業の業種分類(3)), 我々は、より多くの情報をここで見つけました https://qiita.com/tizuo/items/8000ea71e49248c35260著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .