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

91
捗る! リコメンドシステムの裏事情 2014/10/11 @mosa_siru (榎本悠介) 1

Upload: mosa-siru

Post on 16-Apr-2017

178.641 views

Category:

Engineering


0 download

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