Hatena Engineer Seminar #5 @ Tokyoに行ってきた

最近、機械学習に興味がありちょっとずつではあるけど勉強始めているので、今回は検索と機械学習を活用したシステムの話という濃い内容のHatena Engineer Seminar #5 @ Tokyoに参加してみた。

Hatena Engineer Seminar #5 @ Tokyo - connpass

以下発表内容の転載と感想。

はてなブックマークには膨大な量の URL がインデックスされており、本文検索での検索ノイズが多いことが課題でした。 はてなブックマークに蓄積されたタグの情報と、検索エンジン Elasticsearch の機能をうまく使って、検索精度を向上する方法を紹介します。

はてなブックマークのタグ情報を元にタグ付けされた記事から記事の特徴語を抽出して関連したキーワードからElasticsearchのクエリを拡張して、概念検索を行うという話を聞いた。概念検索という単語自体は初めて聞いた。

概念検索というのは「京都」で検索したら単に記事から全文検索して「京都」と書かれた文書を取り出すのではなく、「京都」っぽいもの、「京都」という概念(例えば京都の地理や観光グルメ情報など)を検索するというものだった。

概念検索の説明はありつつも、後半からそれを実現するためのアルゴリズムについて緻密に解説してくれるのが凄い良かった。概念検索自体は他の場所でも活用できそうとのことなので、検索を実装する時があれば俺も何か試してみたい。

はてなブックマークではエントリーページで関連エントリーを提示していますが、既存のアルゴリズムではブックマーク数が少ないエントリーに対する関連エントリーの計算が苦手でした。 関連エントリー算出性能の改善、および、コンテンツマーケティングでの活用を視野に、関連記事レコメンドエンジンのプロトタイプを開発したので、そのアルゴリズムについて紹介します。

関連記事ってそもそも何?って考えた時に関連は関連でも、たとえば「類似」とか「構成要素」とかいろいろカテゴリがあるのでそれらをまんべんなく出せるようにするとユーザにとって本当に価値のある関連記事が取り出せませたよ、みたいな話だった。

説明するための例がすごいわかりやすくて、関連記事レコメンド機能を実装するためのひと通りの考え方が解説されていてレコメンドエンジン開発未経験者でも雰囲気はつかめて良かった。

最初の2つの発表ではTD-IDFするためにElasticsearchのmulti term vector APIというものを活用していて、最終的なアウトプットはそれぞれ違うけど途中の過程は結構似ていた。社内でこういうことをやるような人たちがいるグループがちゃんと確立されているとその辺のノウハウ共有ができてすごい捗りそうだなぁというのを感じた。

*『BrandSafe はてな』のアドベリフィケーションのしくみ id:tarao / @oarat

『BrandSafe はてな』は不適切なWebページへの広告出稿の防止を目的としたサービスで、Webページ属性の自動判別により実現しています。この自動判別のための具体的な手法、とくにAdaBoostやPerceptronといった機械学習のしくみを紹介します。

アドベリフィケーションというのは↑に書いてあるとおり不適切な広告の出稿を防止するためのもので、例えば自社のアプリの広告がエロサイトとか違法サイトに表示されるのを防ぎたいときに使えるとのこと。これは上場企業に結構需要がありそうだなと思った。

単純なNGワードのリストを人手で作って出稿先のURLのページを調べて出さざるべきって判定するのはできるけど、どうして誤判定などが多くなるのでそこを自動化しようという話。

基本的には出稿先ページのコンテンツからキーワードを取り出して、そのキーワードを元に判定できると良いけど確実に判定し切るのは難しいので、より精度を上げるためにAdaBoostという弱い分類器を組み合わることで精度を上げる手法利用したとのこと。

キーワードの判定で失敗したら、次ははてなブックマークを元にした〇〇を使って、それでも失敗したら☓☓を利用して・・・みたいな。AdaBoost自体は名前は聞いたことあるけど詳細知らないので今度調べてみたいなと思った。

肝心のキーワード判定は古くからあるパーセプトロンを使って学習部分を実装したらしい。パーセプトロンを使った理由はコードがすごいシンプルになるし、近年研究が盛り上がってるのでその波に後から乗れるように採用したそうだった。仮にそれで精度が悪いようなら別のアルゴリズムに乗り換えることも検討してたけど、十分な精度がでたのでそのまま使ってるとのこと。

懇親会ではtaraoさんに機械学習アプリケーションの運用の話とかを聞いて苦労話とかも聞けた。 (taraoさん自身はEmacsユーザとしても有名なのでEmacsの話も聞いた。Scalaを最近仕事で書いているが、EmacsScala環境がめっちゃ良く出来ているのでEmacsで書いてるとの事だった。)

全般的にはてなブックマークを中心とした高度なアプリケーションの開発が披露されていて、大規模な人の入力データはすごい強いな―という感じだった。今回のような話を外の勉強会で聴くのはあまりなかったし、社内でもなかなか聴けるものじゃないので、まだ勉強中の自分としては実際にこういう風な事を考えて開発してるのか〜という雰囲気がつかめただけでも成果だった気がする。