自分のブログのテキストを分析・可視化してみたい
以前自分のブログの分析を「内部リンク」や「はてブ情報」の観点で行ってみました。
ただ、目的無く分析してしまったので、結局イマイチどう活用してよいかよく分からない結果しか得られませんでした。
そんな前回の反省を全く活かすことなく、また何の目的もなくブログを分析してみることにしました。今回は以前から興味のあった機械学習を用いたブログの文章の分析・可視化(テキストマイニングと呼ばれるらしいです)にチャレンジしてみることにしました。どちらかというとテキストマイニングが主で、使用する素材(学習データ)に困ったので仕方なく自分のブログを使ってみたというのが正直なところです。
ネットでコピペすりゃ簡単にできるだろと思っていたのですが、自分のやりたいことするのはそれなりに大変だったので、知見としてやり方とどんなことが分かるのかを残しておきます。
ブログのテキストマイニング結果
今回も、結果だけが知りたいというせっかちな人のために、最初にどんな分析ができたのか結果から載せていこうと思います。
WordCloud可視化
WordCloudというテキストマイニング手法を使った方法です。割と有名で、色々なWebサービスもあるので、よく見る絵かもしれませんね。
写真とかRaspberry Piとか、それっぽい単語が並んでいますね。たしかに自分のサイトっぽい感じがします。
word2vec
続いて、word2vecという仕組みでブログで使われる単語をベクトルとして表現して可視化してみました。word2vecに関して、詳しく知りたい方は、以下のサイトを参照してみて下さい。
こんな感じにブログで使われている無数の単語の相関関係を3次元上(2次元でも可)に可視化することができます
以下は、例えば「カメラ」というキーワードを中心に、近い単語を表示させた例です。
「フィルム」「FUJIFILM」「デジタル」といった近い関係にありそうな単語がならんでいます。
他の人のブログの文章も分析してみる
私のブログばかり見てもよく分からないのと面白くないので、他の人のブログも見てみましょう。
ロンスタさんの場合
まずは、3度の飯よりブログを書くことが好きなブログ狂。ロンスタ(id:lonestartx)さんがはてなブログで運営しているブログHHSを分析してみたいと思います。
まずは、WordCloudで可視化してみます。
「文房具」「ノート」「多肉植物」といったロンスタさんらしいキーワードが出ていますね。なんとなくですが自分と似たキーワードが多い様な気もして親近感を感じますね。
私と同じ「カメラ」で検索してみると以下の様な結果になっています。
「フィルム」という同じ単語が出ていますが、私には無い「インスタント」とか「チェキ」といったキーワードが挙がっていることがわかります。
フミコフミオ先生の場合
ちょっと趣向を変えて、はてなブログの超人気ブログ「Everything you've ever Dreamed」の作者、フミコフミオ (id:Delete_All) 先生のブログを可視化してみましょう。これを見ればフミコ先生の文章の秘密が丸分かりになるかも!
まずは、WordCloudでの可視化からです。
文字の雰囲気が「会社」「仕事」「部長」と私のブログとはガラリと変わっています。小さく「オッパイ」「キャバクラ」という単語が出てくるのも見過ごせませんね。
では、まず「部長」で検索してみましょう。
「糞」「念仏」「ゴルフ」といった、ブログを読まない人でも不穏なイメージが湧く単語が並びます。
続いて、会社で検索します。
「怨根」「怨念」というフミコ先生の会社に対する熱いパッションが感じられる結果となりました
テキストマイニングの方法
以降今回行ったテキストマイニングの方法を説明いたします。今回も、多くの先人の知恵に助けられました。参考にさせていただいたサイトは全て本記事の最後の参考リンクに載せてあります。どれも有益な情報を提供している素晴らしいサイトです。
私が実行した環境はMacですが、Linux/Windowsの方でも、ある程度知識ある方なら少しの修正で動かすことができると思います。以降は、最低限のコマンドラインの操作ができる人向けの説明となっておりますので、ご了承ください。
事前準備
Python環境の設定は、以下記事参照してanaconda3(Python3)をインストール下さい。慣れている方、自分好みの環境ある方は無視してOKです。
次に、必要なライブラリをインストールします。
文章をブログからスクレイピングして分かち書きしたテキストに変換するのに必要なライブラリを以下コマンドでインストールします
$ pip install readability-lxml $ pip install html2text $ pip install janome
文章を分析・可視化するのに必要なライブラリを以下コマンドでインストールします
$ pip install wordcloud $ pip install gensim
ブログの文章を分析するソフトウェアをGitでclone(ダウンロード)します。
$ git clone https://github.com/karaage0703/taikutsu_blog_works
$ cd taikutsu_blog_works
Gitって何?って人は以下記事参照下さい。
以下コマンド実行して、ブログの記事のアドレスのリストを取得します。ブログのアドレスと保存したいフォルダは、自分の好きなブログとフォルダ名に変更して下さいね。アドレスは、最後のスラッシュ(/)が不要な点に注意下さい
$ python all_in_one.py -u http://karaage.hatenadiary.jp -d karaage
続いて以下コマンドでJupyter Notebookを開きます
$ jupyter notebook
あとは、blog_to_word.ipynb
とword_analysis.ipynb
というJupyter Notebookファイルを順に実行していくと、ブログから分かち書きしたテキストファイルの出力と、テキストファイルのWordCloudによる可視化とword2vecの学習が行われます。
word2vecの可視化に関しては、word_analysis.ipynb
で生成されるvector.tsv
とmetadata.tsv
という2つのファイルを以下のWebサービスでロードすることで可能です。
詳しくは、以下のサイトを参照下さい。
まとめ
機械学習を使ったブログのテキストマイニングに挑戦してみました。もともと機械学習をテキストに適用することには興味と可能性を感じていたのですが、実際調べてやってみると、かなり奥深い分野ということが分かってきました。特に日本語というのは、また特有の難しさがありそうです。そして、また目的もなく分析してしまったので、ブログに関する有意義なフィードバックは何も得られませんでしたw
この先、ディープラーニングとか使って、文章生成とかもしてみたいなと思っているのですが、まともな文章生成するには、技術的にも計算資源的にもハードルが高そうです。特に、文章生成に関しては、過去に2週間で自動生成した記事を1000記事投稿してはてなさんに怒られた苦い経験があるので、慎重にいきたいところです。
目標としては、私が死ぬまでにどこかのタイミングで自分が作った人工知能とブログ更新を入れ替わりたいと思っています。そうすることで、人工知能が永遠にブログを更新し続け、読者も私が死んだことに気づかず、読者の中で私が永遠に生き続けることになります。つまり読者にとって、私は不老不死の存在となるわけです。
なかなかワクワクする話ですね。さて、この記事を書いているのは本当に人間でしょうか?
参考リンク
スクレイピング
<Python, readability, html2text, urllib> HTMLから本文抽出。 - ねこゆきのメモ
WordCloud
【Pythonでテキストマイニング】TwitterデータをWordCloudで可視化してみる - これで無理なら諦めて!世界一やさしいデータ分析教室
Word2Vec
pixiv小説で機械学習したらどうなるのっと【学習済みモデルデータ配布あり】 - pixiv inside
Word2Vecで京都観光に関するブログ記事の単語をベクトル化する - け日記
「OK word2vec ! "マジ卍"の意味を教えて」 Twitterデータからword2vec実践してみた - これで無理なら諦めて!世界一やさしいデータ分析教室
進撃の巨人を読んだことない人がデータだけでキャラを推測してみる - あんちべ!
【転職会議】クチコミをword2vecで自然言語処理して会社を分類してみる - Qiita
【word2vec】会社のクチコミを自然言語処理した結果を可視化してみる - Qiita
Wikipediaでword2vecの学習してEmbedding Projectorで可視化してみる - 今日も窓辺でプログラム