捗るリコメンドシステムの裏事情(ハッカドール)

  • CategoryEngineering

  • View178633

Report
of 91
Description
捗る!
 リコメンドシステムの裏事情 2014/10/11 @mosa_siru (榎本悠介) 1 自己紹介 2 @mosa_siru • 「もさ」って呼んでください • 大学:複雑ネットワーク研究…
Transcript
  • 捗る!
 リコメンドシステムの裏事情 2014/10/11 @mosa_siru (榎本悠介) 1
  • 自己紹介 2
  • @mosa_siru • 「もさ」って呼んでください • 大学:複雑ネットワーク研究 • ネットワーククラスタリングの高速化手法 • Twitter SmartList 開発 3
  • @mosa_siru • DeNA(2年目) • プラットフォーム API開発・運用 • ハッカドール 立ち上げからジョイン • サーバーAPI 設計・開発・運用(ほぼ全部) • フロント/バックエンド Web開発 • ログ設計・リコメンドシステムをうんうん考える • 社内の分析チームと密に連携 4
  • 特技 5
  • Bomberman 6
  • ボンバーマン • 2年間引きこもって極めてました • 戦績をつけてRatingで可視化しながら対戦 • 極めるとぷよぷよ化する 7
  • 解説動画がホットエントリ入り 8
  • アジェンダ 9
  • アジェンダ 1. ハッカドールって? 2. ターゲットユーザーの特徴 3. リコメンドシステムの紹介 10
  • 1. ハッカドールって? 11
  • ハッカドールって? • アニメ・マンガ・ゲームなど、 オタク系の記事のみを扱った ニュース配信アプリ • 政治・スポーツなどのニュー スは一切扱わない • 使えば使うほど学習していく 12
  • ハッカドールって? • ゲーミフィケーション ! • というかゲームできる ! • オタクユーザーに刺さる機能 が満載 13
  • 2014夏コミに合わせてリリース 14
  • • 1ヶ月あまりで数十万DL突破 • 高いリターンレート(継続率) 極めて高いユーザー評価 15
  • なんでこんなアプリ
 作ったの? 16
  • 捗りたい! • 好きなゲームの情報を毎日調 べる辛さ • え、あの漫画の新刊出てたん だ… • もっともっと、まだ見ぬ面白 いコンテンツに出会いたい! 17
  • コンテンツのマッチング • 増え続けるコンテンツ • 漫画の1日あたり新刊数はどんどん増えている • でも売上は横ばい • 面白いコンテンツと、それを求めるユーザーを マッチングさせて、エンタメ業界を活性化させ たい 18
  • こんな人達が開発してます 19
  • 開発陣 • 「オタク以外はチー ムに入れません」 20
  • 開発風景 社内での観光名所化 21
  • 2. ターゲットユーザーの特徴 22
  • 情報収集力が高い 23
  • 情報収集力が高い • 自力でどんどん好きな情報を集める • 受動的でない • そのためには多少の苦労はいとわない 24
  • こだわりが強い 25
  • こだわりが強い • 「絶対にラブライブ!の情報は逃したくな い!」 • 1秒でも速く知りたい!! • 興味のある・ないでの差が激しい • 「~のニュースとか本当にどうでもいい」 26
  • ニッチな記事も好む 27
  • ニッチな記事も好む • 必ずしもTweet数、はてブ数が高い記事を好む わけでもない • 例:声優ブログ 28
  • とにかく嗜好にマッチ
 していることが重要 29
  • ハッカドールのリコメンドの 仕組み 30
  • 一般的なリコメンド手法って? 31
  • 一般的なリコメンド手法 32 • 大きく分けて二分される • ユーザーベース • 「この商品を買った人はこんな商品 も買っています」 • アイテムベース • 「この商品はキルラキルのフィギュ アなので、キルラキルが好きな人に 推薦しよう」
  • ユーザーベースの特徴 33 • 推薦されるアイテムの中身に依存しな いので、汎用的 • ユーザーアクティビティの情報が大量 に必要 • コールドスタート問題 • ニュースや新商品のアクティビティ情 報が少ない • 計算量の工夫が必要
  • アイテムベースの特徴 34 • 推薦対象となるアイテムの情報が必要 • 全体のアクティビティ量は必ずしも多くなく て良い • ニュース・新情報に対応可能 • 計算量はユーザー数に対して線形
  • ハッカドールでは 35 • リリース当初はアイテムベースがメイン • 現在はユーザーベースも組み合わせて記事を 配信しています • 試行錯誤し、各種ABテストで検証しながら 導入しています • 今回は、アイテムベースの手法を紹介します
  • アイテムベースの手法
 (ベクトル空間モデルの紹介) 36
  • アイテムの持つ情報とは 37 • ニュースの場合 • タイトル • 記事本文 • 画像 • サイト情報、メタ情報、Tweet情報 etc..
  • ベクトル空間モデル 38 • 例えば文章情報に着目 • たとえば文章に含まれる「単語の登場数」にだ け着目してみると
  • 39 キーワード 登場数 立体機動装置 1 講談社 1 漫画 2 エレン 1 リヴァイ 1 ウサイン・ボルト 3 進撃の巨人 1 空想科学読本 3 諫山創 1 (略) ※実際は各種の 重み調整が必要
  • ベクトル空間モデル 40 • アイテムを全てベクトルで表現 • ユーザーの嗜好もベクトルで表現 • 例:読んだ記事のベクトルを足していく • ベクトルの”近さ”は簡単に計算できる • ユーザーのベクトルと”近い”記事を推薦
  • 今回はどうやって
 良いベクトル空間を作るか?に フォーカスを当てます 41
  • どうやって単語を抜き出すか 42
  • 形態素解析 43 • wikipedia「対象言語の文法の知識(文法のルールの集まり) や辞書(品詞等の情報付きの単語リスト)を情報源として用い、 自然言語で書かれた文を形態素(Morpheme, おおまかにいえ ば、言語で意味を持つ最小単位)の列に分割し、それぞれの品 詞を判別する作業を指す。」
  • 44
  • 45
  • mecab 46
  • mecab 47 • 日本製のオープンソースの形態素解析エンジン • 簡単、シンプル、速い • すぐに試せる brew install mecab mecab-ipadic
  • 48
  • がっ…!ダメっ…! 49
  • ちゃんとした辞書が必要 50 • 形態素解析は、辞書(単語リスト)をもとに分割している • デフォルトのmecabの辞書では、一般用語しか入っていない • 「ラブライブ!」「μ's」などに対応するには、独自のユー ザー辞書が必要
  • オタク辞書の作り方 51
  • 外部リソースを使う 52 • wikipedia • データが全公開されている • ニコニコ大百科 • オタクキーワードが満載 • 記事のタイトルから、ニッチな キーワードを取得
  • でも全然必要ない単語もいっぱい… 53
  • うーむ… 54
  • とある声優ソムリエが
 思いついた手法 55
  • 56 wikipediaにはカテゴリ情報がある
  • 57 どんどんサブカテゴリを辿っていくと…
  • 58 !!!
  • 親カテゴリからの幅優先探索
 で専門辞書を作成 59
  • 必要な単語だけ
 抽出することに概ね成功 60
  • 61 before
  • 62 after
  • まだまだこだわる 63 • 100%完璧な手法ではない • 探索の深さはadhoc • 公開直後の情報など、wikipediaに記事がない場合がある • 辞書の管理ツールを作成 • 手動で辞書に必要単語を追加できる • 新単語にいち早く対応
  • 結論:なんだかんだで泥臭い 64
  • オタク辞書ができた後の話 65
  • 「続きを読む」を含んだ記事を
 良く読んでいるので、
 「続きを読む」を含んだ記事が 推薦される 66
  • ??? 67
  • リコメンドに不要な単語 68 • 辞書には欲しいが、リコメンドには不要かもしれない単語 • 「そもそも」「こちら」「続き」 (各種一般用語) • 数字、記号 etc…
  • リコメンドに不要な単語 69 • オタク辞書にない単語は使わない • 不要単語(ブラックリスト)管理ツールも作成
  • シノニム変換 70 • 「アイマス」=「アイドルマスター」 • 「ごちうさ」=「ご注文はうさぎですか?」 ! • シノニム管理ツールも作成
  • いいかんじになってきたので
 プロトタイプつくってみた 71
  • ラブライブ!
 の記事しか出ない… 72
  • 重み調整 73 • TFIDF • 「アニメ」を含む記事を1回読むことと、
 「ボンバーマン」を含む記事を1回読むことの重みは異なる • TFIDFだけじゃうまくいかなくなってきた • キーワードの重み管理ツールも作成
  • 重み調整 74 • よりオタク向けなキーワードの重みを上げる • 一般記事全体と、オタク向け記事全体でのキーワード登場回 数の違いを考慮
  • どんどん捗る
 ようになってきた 75
  • 試行錯誤と泥臭さの連続 76
  • 今でも議論・検証しながら 着実に改善しています 77
  • おわりです 78
  • ありがとうございました! @mosa_siru 79
  • おまけ 80
  • ターゲットユーザーに
 さらにフォーカスした機能 81
  • 捗った?機能 82
  • 捗った?機能 83 • ハッカドールちゃんに、リコメンドの フィードバックをするシンプルな機能 • 学習を加速させる ! • 「自動学習じゃないじゃん!」 • 能動的であるターゲットユーザーから、 よりはやく正確な情報が集められる
  • ウォッチリスト 84
  • ウォッチリスト 85 • 好きなタイトル名などを登録しておくと、 そのキーワードを含んだニュースが出る たびに教えてくれる ! • 全文検索エンジンから取得
  • めちゃくちゃ評判が良い 86
  • もはやリコメンドじゃない 87
  • ユーザーのことを考えると 
 絶対に必要な機能だった 
 (というか俺が欲しい) 88
  • 僕らが提供しているのは 
 ”サービス”
 技術とかアルゴリズムはその手段 89
  • ハッカドールはまだ発展途上。 
 より多くの「捗る!」を 
 提供していきます 90
  • おわり 91 @mosa_siru