GensimのDoc2VecでQiitaのタグを可視化 <実践編>

(<理論編>はありません) 

 

  Qiitaの記事にはタグがついていて、読者は記事についたタグを見て「何についての記事か」を把握することができるようになってます。書き手は必ず1つ以上タグをつけなければいけないようです。要はタグは記事の内容の特徴を表すものなので、これを利用してDoc2Vecでタグ間の関係性を可視化してみます。おおまかな流れは

  1.   Qiita APIを使って記事を取得
  2.   前処理を行う
  3.   GensimDoc2Vecで学習させてmodelを作成
  4.   t-SNEを使って次元圧縮して2次元に

です。雑に書き散らかしたソースは https://github.com/SyureNyanko/Doc2Vec_From_Qiita 

 

 Qiita APIは「1時間に1000回」の制限があるので、4秒のSleepを入れました。取得するデータ自体が大きくなる&稼働時間がながくなるのでAWSを利用し、EC2上でスクリプトを動作させて、データはS3へと格納するようにしました。記事数の多い上位282タグを利用しました。

 取得されるデータはJSONの配列で、rendered_bodybodyなどがあります。rendered_bodyを利用し、lxml.html.document_fromstringで文字列にしてからMecabで分ち書きにしました。最初はJUMAN++を利用していましたが、長い文字列を入れると(?)遅くなるよう(?)で今回は見送りました。後日、検証したいと思います。

 Doc2Vecでの学習はMBP(Mid 2015)で6時間ぐらいかかりました。

   できたモデルをt-SNEで2次元まで次元圧縮しました。

f:id:SyureNyan:20190506105140j:plain

(重なってわかりづらい...)

わかることを挙げるとキリがありません。楽しいですね。それでは。

(今年はいろいろ勉強してアウトプットしていこうと思います。)

 

参考にしたサイト/コード:

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 (重いので表示されるのに時間がかかります)