ハッカドールというニッチ向けの自動ニュースレコメンドアプリの出来がなかなかおもしろく、日曜データサイエンティストとしていろいろ刺激されたので、久々に単語の重要度とかを表現できるTF-IDFのプログラムを作ってみました。
刺激を受けたスライドはこちら
www.slideshare.net
そして、実際に作ってみたやつ。
問題と解決
・問題1
このプレゼンで触れられているようにニッチ界隈の単語やネットスラングなどは、日々増えたり減ったりしていて、とてもじゃないが自分では管理しきれない
・解決1
IPADIC-NEOLOGDというプロジェクトでGITで常に最新の単語にアップデートされ続けているものを発見。ヒューリスティックに単語、新語などを追加しているようです。自分一人での単語追加は膨大な手間がかかるもの。IMEとかを作っている会社様ならユーザのIME使用状況から新語を辞書に追加できるかもしれませんが、一般人は無理なので利用しない手はないと思います。
・問題2
IDF辞書の土台となるページのサンプルがない。
・解決2
IDF辞書の作り方によって重要語の抜き出しは大きく影響されます。ABテストなどを用いて評価するなどが理想的ではありますが、Wikipediaの全データがXMLで落ちているということを今の今まで知らなかったのでこれも利用しない手はありません。
ここからダウンロード出来ます。
http://dumps.wikimedia.org/jawiki/latest/jawiki-latest-pages-articles.xml.bz2
・問題3
Ajaxはどうするの?
・解決3
PhantomJSなどのヘッドレスブラウザを想定してスクレイピングする予定ですが、Javascriptでしか書けないのは私にはハードルが少し高いので、後回しです。
コード
最後に
IDFを作るのにWikipediaのデータが良いかどうかはわかりません。ハッカドールの開発チーム様もある程度、IDFの元となるページ、記事を適切な粒度で切り出しているから高いユーザ満足度が得られるのでしょう。
銀の弾丸は存在しませんが、ABテストなどを繰り返しおこなっていくことで、良いものに近づくことは可能であると感じました。デザインやコンテンツをABテストする重要性を再認識いたしました。TF-IDFとは別にデザインでこれを行ってみたいものです。