「一番いいおすすめを頼む」 ~5分でわかるレコメンドエンジンの基礎~...
DESCRIPTION
2010/12/11におこなったLT資料 二本のうち、比較的真面目な方TRANSCRIPT
「一番いいおすすめを頼む」 〜5分でわかるレコメンドエンジンの基礎〜
Present by ぱろっと(@parrot_studio)
for Gunma.web #3
2010/12/11
Twitter : @parrot_studio hatena/github : parrot_studio
Profile
RDGC - Ruby(Random) Dungeon Game Core 0.2 http://sourceforge.jp/projects/rdgc/
2010/11 Released!!
レコメンドの話で大丈夫か?
You sure that’s story of “recommend”?
レコメンド機能
=Amazonのおすすめ
4コマ漫画と技術書でカオスな
私のおすすめ
Amazon says:
お前と似た購買傾向のユーザは
これも買ってるから
お前も買えや( ゚Д゚)y─~~
でも、技術屋で4コマを買う
「私と似たユーザ」は
そんなにいる(´・ω・)?
ROをやってる技術屋より少ないような・・・
「似ている」の基準は?
一番いい説明を頼む
I'll take the best explanation you have.
例:ラーメン屋の特徴調査
スープの濃さ:薄い1-10濃い
麺の太さ:細い1-10太い
※数字が大きい≠高スコア
どれが「似ている」?
濃さ 太さ
A店 7 2
B店 3 5
C店 7 6
グラフにプロットしてみる
どれが「似ている」?
0
1
2
3
4
5
6
7
8
0 1 2 3 4 5 6 7
A B C
似ている=角度が小さい
∠α < ∠β
「似ていること」は
ベクトルの角度から求められる
ところで・・・
「濃さ」「太さ」→2次元
+「価格」→3次元
+「駅からの距離」→4次元
もはや想像不能
Σ(゚Д゚;≡;゚д゚)
公式で機械的に求めよう
(`・ω・´) b
これは「公式」 うまく使いこなせよ
This is Formula. I think now you'll have more luck.
求めたいもの
=ベクトルaとbの角度Θ
角度Θは面倒なので
cosΘを求める
Θが小さいほどcosΘは1に近づく
=cosΘが1に近いほど似ている
公式:
cosΘ = a・b / |a||b|
a・b = a1b1+a2b2+…+anbn
|a| = sqrt(a1^2+a2^2+…+an^2)
ラーメン屋の例だと・・・
a1:A店の濃さの値
a2:A店の太さの値
etc...
実際に計算してみよう
|A|^2
= 7^2+2^2 = 49+4 = 53
|A| = sqrt(53) = 7.2801
A・B
= 7*3+2*5 = 31
|B| = … = 5.8309
cos∠AB
= 31/(7.28 * 5.83)
= 0.7304
同じように計算すると・・・
cos∠BC = 0.9483
cos∠AC = 0.9088
cos∠AB = 0.7304
もしかして:
・BとCはよく似ている
・AとCもそれなりに似ている
・AとBはさほど似てない
グラフの通り(`・ω・´)
0
1
2
3
4
5
6
7
8
0 1 2 3 4 5 6 7
A B C
お前は常にレコメンドにとって
最良のベクトルを思い、
自由に選択していけ
So choose factors of vector carefully. The recommend depends on it.
何をベクトルとするか?
例1:ユーザが購入した本
{プレゼン=>1, Ruby=>3, 4コマ=>10}
例2:記事に使われている
キーワードの出現回数
{勉強会=>5, Ruby=>3,
レコメンド=>8, 群馬=>2}
キーワードの出現傾向が似ている
=よく似た記事はこちら(´・ω・)っ
=記事の推薦システム
そうだな、次もこれを見ている奴に
付き合ってもらう
Well, next time we'll have to get help, again...
今回やらなかったこと:
レコメンドシステムの仕組み
・類似度から推薦するロジック
・計算を最適化するためのIndex構築
・IndexとNoSQL系ストレージの関係
・大規模データをどう分散処理させるか
etc...
また次の機会に(`・ω・´)ノ
ありがとうございました
(´・ω・)っ旦~