GensimのDoc2VecでQiitaのタグを可視化 <実践編>
(<理論編>はありません)
Qiitaの記事にはタグがついていて、読者は記事についたタグを見て「何についての記事か」を把握することができるようになってます。書き手は必ず1つ以上タグをつけなければいけないようです。要はタグは記事の内容の特徴を表すものなので、これを利用してDoc2Vecでタグ間の関係性を可視化してみます。おおまかな流れは
- Qiita APIを使って記事を取得
- 前処理を行う
- GensimのDoc2Vecで学習させてmodelを作成
- t-SNEを使って次元圧縮して2次元に
です。雑に書き散らかしたソースは https://github.com/SyureNyanko/Doc2Vec_From_Qiita
Qiita APIは「1時間に1000回」の制限があるので、4秒のSleepを入れました。取得するデータ自体が大きくなる&稼働時間がながくなるのでAWSを利用し、EC2上でスクリプトを動作させて、データはS3へと格納するようにしました。記事数の多い上位282タグを利用しました。
取得されるデータはJSONの配列で、rendered_bodyとbodyなどがあります。rendered_bodyを利用し、lxml.html.document_fromstringで文字列にしてからMecabで分ち書きにしました。最初はJUMAN++を利用していましたが、長い文字列を入れると(?)遅くなるよう(?)で今回は見送りました。後日、検証したいと思います。
Doc2Vecでの学習はMBP(Mid 2015)で6時間ぐらいかかりました。
できたモデルをt-SNEで2次元まで次元圧縮しました。
(重なってわかりづらい...)
- 左上のSQLのあたりにDatabase関連が集合(Database/DB/SQLServer/MongoDB)
- 左下にはテキストエディタが集合(VSCode/Vim/Emacs/Sublime text)
- Security/セキュリティやtest/テスト、Facebook/Twitter、スクレイピング/Selenium、Chrome/Firefoxが重なってますね。HTTPとWebも近い。
わかることを挙げるとキリがありません。楽しいですね。それでは。
(今年はいろいろ勉強してアウトプットしていこうと思います。)
参考にしたサイト/コード:
Qiita公式 https://qiita.com/api/v2/docs
Gensim https://radimrehurek.com/gensim/
DeepAge : Doc2Vecの仕組みとgensimを使った文書類似度算出チュートリアル
https://deepage.net/machine_learning/2017/01/08/doc2vec.html
Jacopo Farina's blog https://jacopofarina.eu/posts/gensim-generator-is-not-iterator/
ARBELT OFFICIAL BLOG https://blog.albert2005.co.jp/2015/12/02/tsne/
Target Visualization - T-SNE and Doc2Vec https://www.kaggle.com/arthurtok/target-visualization-t-sne-and-doc2vec/data (重いので表示されるのに時間がかかります)