はてなブックマークのトピックページの裏側

こんにちは、はてなアプリケーションエンジニアの id:skozawa です。現在は、ブックマークチーム、及び、プラットフォームチームで開発をしています。

先日リリースされたはてなブックマークの新機能「トピック」の裏側について、Hatena Enginner Seminar #4で紹介しました。

Hatena Enginner Seminar #4で紹介した資料に少し加筆・修正を加えたものを公開します。


内容

「トピック」機能は、はてなブックマーク開発ブログにもある通り、これまで何人かのエンジニアが挑戦してきましたが、実現できていませんでした。その主な要因として、

  • トピック生成の精度が低い
  • トピックタイトル生成が難しい

という問題があり、これらを検索技術と自然言語処理技術によって解決することによりベータリリースへとこぎつけました。

トピック生成

これまでキーワードなどを用いて記事をクラスタリングするというアプローチでトピック生成をしてきましたが、どうしてもノイズを除去できずリリースする水準まで持っていくことができていませんでした。そこで今回はトピック生成と記事クラスタリングを別々に行うアプローチをとりました。また、トピック生成ではElasticsearchのSignificant Terms Aggregation機能を活用しており、Elasticsearchを導入したことも鍵となっています。

トピックタイトル生成

タイトル生成は自然言語処理分野では要約技術の一種として知られています。これまでの自然言語処理分野での実験から記事のタイトルと本文1文目が要約において重要であることがわかっているため、今回は各記事のタイトルを利用してトピックタイトルの生成を行いました。アプローチとしては重要文抽出+文圧縮という比較的シンプルなアプローチをとっています。
また、タイトル生成では以下の論文を参考にしました。

質疑応答

Hatena Enginner Seminar #4の懇親会で受けた質問の一部を取り上げて紹介します。

トピックの単位

「イスラム国のような1ヶ月程度にわたって続くトピックは作られるのか」といった質問を頂きました。
現在は大きなトピックではなく比較的小さなトピックを捉えるアプローチをとっています。そのため、「イスラム国」という大きなトピックが作られることはあまりなく、「イスラム国+何か(身代金要求、後藤さん殺害)」というサブトピック相当のものをトピックとして捉えています。大きなトピックについては今後取り組みたいと考えています。

トピックの課題

「トピックにできていないものにはどういったものがあるか」といった質問でした。
現在のアプローチは多くのニュースサイトなどに取り上げられて発火するようなトピックを捉えることが得意なモデルになっています。これは多くのトピックを捉えることよりも、精度よくトピックを捉えることを優先したためです。そのため、ブログなどで少しづつ盛り上がるようなトピックを捉えることは苦手となります。こちらについても今後改善していきたいと考えています。

テストについて

「トピックタイトルの生成のテストをどうしているか」という質問でした。
テストについてはまだちゃんとしたフローを確立できていないのが現状です。何か良い方法等あれば是非教えていただきたいです。

ディスカッションについて

「トピック機能の実装でロジックに関するディスカッションはどの程度したか」という質問でした。
はてなには現在、博士出身者が4名いるため、ロジック周りのディスカッションも可能な環境にはあると思います。ただし、専門分野は全員異なるので、トピックタイトル生成のような自然言語処理の少し深い話となると深くディスカッションするのはどうしても難しくなります。そのため、大学や研究所など、一緒にブックマークのデータを使って研究、ディスカッションしていただける方も募集していますので、興味があれば是非ご連絡ください。

終わりに

「トピック」機能は、はてなブックマーク10周年の第1弾として開発してきました。今回の開発は一般的なWebサービスの機能開発とは少し毛色が異なり、未知の部分が多い研究的な側面のある開発でした。そのため、最新の技術や研究論文を参考にしつつ開発を進めることで機能の実現に至ることができました。
研究成果を活かしつつ、サービスとして形にし、実際に多くのユーザに利用してもらう体験はなかなか経験することができないものだと思います。はてなブックマークには10年にわたる大規模なデータが蓄積されています。はてなでは、こうしたデータをサービスへ活かしてくれる、アルゴリズムや検索技術、機械学習、自然言語処理などに関心のあるエンジニア(中途、新卒、アルバイト)を募集しています。