More Related Content
Similar to Jubatusのリアルタイム分散レコメンデーション@TokyoWebmining#17 (20)
Jubatusのリアルタイム分散レコメンデーション@TokyoWebmining#17
- 1. Jubatusのリアルタイム分散
レコメンデーション
2012/05/20@TokyoWebmining
株式会社Preferred Infrastructure
海野 裕也 (@unnonouno)
- 2. ⾃自⼰己紹介
l 海野 裕也 (@unnonouno)
l unno/no/uno
l ㈱Preferred Infrastructure 研究開発部
l 検索索・レコメンドエンジンSedueの開発など
l 専⾨門
l ⾃自然⾔言語処理理
l テキストマイニング
l Jubatusチームリーダー
- 3. 今⽇日のお話
l Jubatusの紹介
l 分散レコメンデーションについて
#TokyoNLPではなした内容とだいたい同じですm(_ _)m
- 5. Big Data !
l データはこれからも増加し続ける
l 多いことより増えていくということが重要
l データ量量の変化に対応できるスケーラブルなシステムが求めら
れる
l データの種類は多様化
l 定形データのみならず、⾮非定形データも増加
l テキスト、⾏行行動履履歴、⾳音声、映像、信号
l ⽣生成される分野も多様化
l PC、モバイル、センサー、⾞車車、⼯工場、EC、病院
5
- 6. データを活⽤用する
STEP 1. ⼤大量量のデータを捨てずに蓄積できるようになってきた
STEP 2. データを分析することで、現状の把握、理理解ができる
STEP 3. 状況を理理解し、現状の改善、予測ができる
l 世の中的には、蓄積から把握、理理解に向かった段階
この本が実際 この⼈人は30代
本の購買情報 に売れている 男性なので、
を全て記録で のは意外にも この本を買う
きるように 30代のおっさ のではない
なった! ん達だ! か?
蓄積 理理解 予測
より深い解析へ
6
- 7. Jubatus
l NTT PF研とPreferred Infrastructureによる共同開発
10/27よりOSSで公開 http://jubat.us/
リアルタイム
ストリーム 分散並列列 深い解析
7
- 8. Jubatusの技術的な特徴
分散かつオンラインの機械学習基盤
l オンライン学習をさらに分散化させる
l そのための通信プロトコル、計算モデル、死活監視、学
習アルゴリズムなどの⾜足回りを提供する
- 9. 分散かつオンラインの機械学習
l 処理理が速い!
l 処理理の完了了を待つ時間が少ない
l 5分前のTV番組の影響を反映した広告推薦ができる
l 5分前の交通量量から渋滞をさけた経路路を提案できる
l ⼤大規模!
l 処理理が間に合わなくなったらスケールアウト
l ⽇日本全国からデータが集まる状態でも動かしたい
l 機械学習の深い分析!
l 単純なカウント以上の精度度を
9
- 10. 他の技術との⽐比較
l ⼤大規模バッチ(Hadoop & Mahout)
l 並列列分散+機械学習
l リアルタイム性を確保するのは難しい
l オンライン学習ライブラリ
l リアルタイム+機械学習
l 並列列分散化させるのはかなり⼤大変
l ストリーム処理理基盤、CEP
l 並列列分散+リアルタイム
l 分散機械学習は難しい
- 11. 今までにない技術、これからの技術
l 欲張り
l 今までのトレンドを全部取り込む
l 制約が多く、実験も実装も難しい
l これからの技術
l 今すぐ実⽤用的になる部分、そうでない部分を含む
l 最初の1⼈人になるなら今!
l 新しい研究分野
l 研究テーマとしても⾯面⽩白い
l 乗っかるなら今!
- 14. 3種類の処理理に分解
l UPDATE
l データを受け取ってモデルを更更新(学習)する
l ANALYZE
l データを受け取って解析結果を返す
l MIX
l 内部モデルを混ぜ合わせる
l cf. MAP / REDUCE
l 分散機械学習を3操作だけでどこまで記述できる
か?
14
- 15. 3つの処理理の例例:統計処理理の場合
l 平均値を計算する⽅方法を考えよう
l 内部状態は今までの合計(sum)とデータの個数(count)
l UPDATE
l sum += x
l count += 1
l ANALYZE
l return (sum / count)
l MIX
l sum = sum1 + sum2
l count = count1 + count2
15
- 16. 世の中の機械学習ライブラリの敷居はまだ⾼高い
l libsvmフォーマット
l +1 1:1 3:1 8:1
l 何よこれ? ←普通の⼈人の反応
l ⽣生データを扱えない
l ハイパーパラメータ
l 「Cはいくつにしましたか?」
l Cってなんだよ・・・ ←普通の⼈人の反応
l 複雑な設定
l 研究者向き、エンジニアが広く使えない
16
- 17. RDBやHadoopから学ぶべきこと
l わからない
l リレーショナル理理論論
l クエリオプティマイザ
l トランザクション処理理
l 分散計算モデル
l わかる
l SQL
l Map/Reduce
l 「あとは裏裏でよろしくやってくれるんでしょ?」
17
- 18. Jubatus裏裏の⽬目標
全ての⼈人に機械学習を!
l わからない
l オンライン凸最適化
l 事後確率率率最⼤大化
l MCMC、変分ベイズ
l 特徴抽出、カーネルトリック
l わかる
l ⾃自動分類、推薦
l 「あとはよろしくやってくれるんでしょ?」
18
- 19. ⽣生データを突っ込めば動くようにしたい
l Jubatusの⼊入⼒力力はキー・バリュー
l 最初は任意のJSONだった
l twitter APIの⽣生出⼒力力を⼊入⼒力力できるようにしたかった
l あとは勝⼿手に適当に処理理してくれる
l ⾔言語判定して
l 各キーが何を表すのか⾃自動で推定して
l 勝⼿手に適切切な特徴抽出を選ばせる
l というようなことができるようになるかも
l 特徴抽出エンジンのプラグイン化
l 様々な特徴関数をダウンロードして⾃自由に組み合わせたい
19
- 20. Remote Procedure Call (RPC) も抽象化
l mprpc-idlからクライアントコードを⾃自動⽣生成!
l IDL (Interface Definition Language) でプロトコルを記述
l 各⾔言語⽤用の通信ライブラリはIDLを元に⾃自動⽣生成
mprpc-idlを使う 通常
Ruby Python Java Ruby Python Java
Rubyラ Pythonラ Javaライ
Rubyラ Pythonラ Javaライ イブラリ イブラリ ブラリ
イブラリ イブラリ ブラリ
IDLによる仕様 RPCの仕様
IDLから⾃自動⽣生成される
- 22. レコメンデーションとは何か?
l 記事や商品のおすすめ機能
l この記事に類似した記事はこの記事です
l この商品を買った⼈人はこの商品も買っています
l 技術的には「近傍探索索」を使っている
- 24. 何も考えずに近傍探索索しよう
l 全データに対して類似度度を計算して上位を返せばOK
input: x
for d in all data:
score[d] = sim(x, d)
sort score
return top-K elements of score
- 25. 近傍探索索の技術的課題
l 実⾏行行時間
l 単純な実装だと、データ点のサイズに⽐比例例した時間がかかる
l 消費メモリ
l すべてのオリジナルデータを保持するとデータが膨⼤大になる
上記2点と精度度とのトレードオフ
- 26. 準備:よくある類似度度尺度度
l コサイン類似度度
l 2つのベクトルの余弦
l cos(θ(x, y)) = xTy / |x||y|
l Jaccard係数
l 2つの集合の積集合と和集合のサイズの⽐比
l Jacc(X, Y) = |X∩Y|/|X∪Y|
l ビットベクトル間の距離離と思うことができる
- 27. 近傍探索索アルゴリズム
l 転置インデックス
l Locality Sensitive Hashing (simhash)
l minhash
l アンカーグラフ
- 28. 転置インデックス
l 疎⾏行行列列と疎ベクトルの内積を計算する
l 転置インデックスを⽤用意すると効率率率的に計算できる
全要素で類似度度を計算すると⼤大変 要素のある列列だけ計算する
・ ・
・ ・
・ ・
- 29. Locality Sensitive Hashing (LSH)
l ランダムなベクトル r を作る
l このときベクトルx, yに対してxTrとyTrの正負が⼀一致する
確率率率はおよそ cos(θ(x, y))
l ランダムベクトルをk個に増やして正負の⼀一致率率率を数え
れば、だいたいコサイン距離離になる
l ベクトルxに対して、ランダムベクトル{r1, …, rk}との内
積の正負を計算 H(x) = {sign(xTr1), …, sign(xTrk)}
l signは正なら1、負なら0を返す関数
l H(x)だけ保存すればよいので1データ当たりkビット
- 30. 絵でわかるLSH
l 正負が⼀一致というのは、ランダムな平⾯面の同じ側に来る
ということ
l この確率率率は1 – θ(x, y)/π ≒ cos(θ(x, y))
平⾯面が⼀一つのランダ
ムベクトルに対応
ランダムな平⾯面が2点間
を横切切る確率率率はθ/π
- 31. Jaccard係数
l 集合の類似度度を図る関数
l 値を0, 1しか取らないベクトルだと思えばOK
l Jacc(X, Y) = |X∩Y| / |X∪Y|
例例
l X = {1, 2, 4, 6, 7}
l Y = {1, 3, 5, 6}
l X∩Y = {1, 6}
l X∪Y = {1, 2, 3, 4, 5, 6, 7}
l Jacc(X, Y) = 2/7
- 32. minhash
l X = { x1, x2, …, xn }
l Xは集合なので、感覚的には⾮非ゼロ要素のインデックスのこと
l H(X) = { h(x1), …, h(xn) }
l m(X) = argmin(H(X))
l m(X) = m(Y)となる確率率率はJacc(X, Y)に⼀一致
l ハッシュ関数を複数⽤用意したとき、m(X)=m(Y)となる回数を数
えるとJacc(X, Y)に収束する
l m(X)の最下位ビットだけ保持すると、衝突の危険が⾼高
まる代わりにハッシュ関数を増やせる [Li+10a, Li+10b]
- 33. 絵でわかるminhash
l ハッシュ値の最⼩小値が⼀一致するのは、X∪Yの全要素中で
ハッシュ値が最⼩小となる要素が、X∩Yに含まれるとき
全体で最⼩小
X Y
- 34. 重み付きJaccard係数
l 各集合の要素のidfのような重みをつける
l wJacc(X, Y) = Σ i∈X∩Y wi / Σ i∈X∪Y wi
l wiが常に1なら先と同じ
例例
l X = {1, 2, 4, 6, 7}
l Y = {1, 3, 5, 6}
l w = (2, 3, 1, 4, 5, 2, 3)
l X∩Y = {1, 6}
l X∪Y = {1, 2, 3, 4, 5, 6, 7}
l wJacc(X, Y) = (2+2)/(2+3+1+4+5+2+3)=4/20
- 35. 重み付きJaccard版minhash [Chum+08]
l X = { x1, x2, …, xn }
l H(X) = {h(x1)/w1, …, h(xn)/wn}
l 論論⽂文中では-log(h(x))としている
l 差分はwiで割っているところ
l 感覚的にはwiが⼤大きければ、ハッシュ値が⼩小さくなりやすいの
で、選ばれる確率率率が⼤大きくなる
l m(X) = argmin(H(X))
l m(X) = m(Y)となる確率率率はwJacc(X, Y)に⼀一致
- 36. アンカーグラフ [Liu+11]
l 予めアンカーを定めておく
l 各データは近いアンカーだけ覚える
l アンカーはハブ空港のようなもの
l まず類似アンカーを探して、その周辺だけ探せばOK
アンカー
- 38. 更更新の分散のさせ⽅方
l IDごとに同じノードに⾏行行くように分散させる
l 更更新情報はmixのタイミングで他のノードに通知
1~100
101~200
CHT (Consistent Hashing)
201~300
- 39. 転置インデックスの分散化
l 新規の差分を分散してMIXのタイミングで更更新する
l 全サーバーがデータを保持するため容量量の点では分散化
できない
差分1~100
サーバー1 サバー2
差分101~200 サーバー3
差分201~300
MIX!!
- 40. ビット⾏行行列列の分散化
l LSHとminhashのデータはbit⾏行行列列
l 転置インデックスとやることは同じだが容量量が⼩小さい
差分1~100
サーバー1 サバー2
差分101~200 サーバー3
差分201~300
MIX!!
- 41. アンカーグラフの分散化?
l 類似アンカーの情報しか残ってないため、データの⼀一部
を更更新するのが困難
l オリジナルデータを持っておけばよい?
l 実装・デバッグはかなり激しい
l うまく⾏行行っているのかどうかわかりにくい
- 42. 現在の実装
l 転置インデックスとLSHが公開されている
l minhashは特許問題で調整中
l アンカーグラフはうまく分散させるに⾄至らず
- 44. まとめ
l Jubatusは総合格闘技
l MIX操作による緩い同期計算モデル
l ⾮非構造データを扱うための特徴抽出
l IDLからのクライアントコード⾃自動⽣生成
l レコメンドの4⼿手法
l 転置インデックス
l Locality Sensitive Hashing (simhash)
l minhash
l アンカーグラフ
l 現在は前者2つを公開
- 45. 参考⽂文献
l [Chum+08] Ondrej Chum, James Philbin, Andrew Zisserman.
Near Duplicate Image Detection: min-Hash and tf-idf
Weighting.
BMVC 2008.
l [Li+10a] Ping Li, Arnd Christian Konig.
b-Bit Minwise Hashing.
WWW 2008.
l [Li+10b] Ping Li, Arnd Christian Konig, Wenhao Gui.
b-Bit Minwise Hashing for Estimating Three-Way Similarities.
NIPS 2008.
l [Liu+11] Wei Liu, Jun Wang, Sanjiv Kumar, Shin-Fu Chang.
Hashing with Graphs.
ICML 2011.