More Related Content
Similar to Jubatusのリアルタイム分散レコメンデーション@TokyoNLP#9
Similar to Jubatusのリアルタイム分散レコメンデーション@TokyoNLP#9 (20)
Jubatusのリアルタイム分散レコメンデーション@TokyoNLP#9
- 1. Jubatusのリアルタイム分散
レコメンデーション
2012/02/25@TokyoNLP
株式会社Preferred Infrastructure
海野 裕也 (@unnonouno)
- 2. ⾃自⼰己紹介
l 海野 裕也 (@unnonouno)
l unno/no/uno
l ㈱Preferred Infrastructure 研究開発部
l 検索索・レコメンドエンジンSedueの開発など
l 専⾨門
l ⾃自然⾔言語処理理
l テキストマイニング
l Jubatus開発者
- 3. 今⽇日のお話
l Jubatusの紹介
l 新機能、分散レコメンデーションについて
- 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 ストリーム処理理基盤
l 並列列分散+リアルタイム
l 分散機械学習は難しい
- 11. 例例:組み込みJubatus
l ⽇日本全国に散らばったセンサーからデータ収集・分析・
予測をしたい
l ⽣生データを全部送れない
l それぞれが⾃自律律的に学習してモデル情報だけ交換する
- 13. 3種類の処理理に分解
l UPDATE
l データを受け取ってモデルを更更新(学習)する
l ANALYZE
l データを受け取って解析結果を返す
l MIX
l 内部モデルを混ぜ合わせる
l cf. MAP / REDUCE
l ver. 0.2.0でこの3操作を書くだけで、残りの
ソースを⾃自動⽣生成する仕組みができた
13
- 14. 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
14
- 15. ところで・・・
l 機械学習、⼀一般のエンジニアにまだ普及してないような
気がする・・・
l Jubatusの価値が伝わならない
- 16. 世の中の機械学習ライブラリの敷居はまだ⾼高い
l libsvmフォーマット
l +1 1:1 3:1 8:1
l 何よこれ? ←普通の⼈人の反応
l ハイパーパラメータ
l 「Cはいくつにしましたか?」
l Cってなんだよ・・・ ←普通の⼈人の反応
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 (予定、まだできない)
19
- 21. レコメンデーションとは何か?
l 記事や商品のおすすめ機能
l この記事に類似した記事はこの記事です
l この商品を買った⼈人はこの商品も買っています
l 技術的には「近傍探索索」を使っている
- 23. 近傍探索索の技術的課題
l 実⾏行行時間
l 単純な実装だと、データ点のサイズに⽐比例例した時間がかかる
l 消費メモリ
l すべてのオリジナルデータを保持するとデータが膨⼤大になる
- 24. レコメンダーに対する操作
l similar_row
l クエリベクトルqに類似した⽂文書IDのリストを返す
l 類似度度のスコアも同時に返す
l update_row
l 指定の⽂文書IDのベクトルを更更新する
l complete_row
l クエリベクトルqと類似したベクトルの重み付き線形和を返す
l similar_rowを利利⽤用して実装されている
- 25. 準備:よくある類似度度尺度度
l コサイン類似度度
l 2つのベクトルの余弦
l cos(θ(x, y)) = xTy / |x||y|
l Jaccard係数
l 2つの集合の積集合と和集合のサイズの⽐比
l Jacc(X, Y) = |X∩Y|/|X∪Y|
l ビットベクトル間の距離離と思うことができる
- 26. 近傍探索索アルゴリズム
l 転置インデックス
l Locality Sensitive Hashing
l minhash
l アンカーグラフ
- 27. 転置インデックス
l 疎⾏行行列列と疎ベクトルの内積を計算する
l 転置インデックスを⽤用意すると効率率率的に計算できる
全要素で類似度度を計算すると⼤大変 要素のある列列だけ計算する
・ ・
・ ・
・ ・
- 28. 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ビット
- 29. 絵でわかるLSH
l 正負が⼀一致というのは、ランダムな平⾯面の同じ側に来る
ということ
l この確率率率は1 – θ(x, y)/π ≒ cos(θ(x, y))
平⾯面が⼀一つのランダ
ムベクトルに対応
ランダムな平⾯面が2点間
を横切切る確率率率はθ/π
- 30. 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
- 31. 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]
- 32. 絵でわかるminhash
l ハッシュ値の最⼩小値が⼀一致するのは、X∪Yの全要素中で
ハッシュ値が最⼩小となる要素が、X∩Yに含まれるとき
全体で最⼩小
X Y
- 33. 重み付き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
- 34. 重み付き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)に⼀一致
- 35. アンカーグラフ [Liu+11]
l 予めアンカーを定めておく
l 各データは近いアンカーだけ覚える
l アンカーはハブ空港のようなもの
l まず類似アンカーを探して、その周辺だけ探せばOK
アンカー
- 37. 更更新の分散のさせ⽅方
l IDごとに同じノードに⾏行行くように分散させる
l 更更新情報はmixのタイミングで他のノードに通知
1~100
101~200
CHT (Consistent Hashing)
201~300
- 38. 転置インデックスの分散化
l 新規の差分を分散してMIXのタイミングで更更新する
l 全サーバーがデータを保持するため容量量の点では分散化
できない
差分1~100
サーバー1 サバー2
差分101~200 サーバー3
差分201~300
MIX!!
- 39. ビット⾏行行列列の分散化
l LSHとminhashのデータはbit⾏行行列列
l 転置インデックスとやることは同じだが容量量が⼩小さい
差分1~100
サーバー1 サバー2
差分101~200 サーバー3
差分201~300
MIX!!
- 40. アンカーグラフの分散化?
l 類似アンカーの情報しか残ってないため、データの⼀一部
を更更新するのが困難
l オリジナルデータを持っておけばよい?
l 実装・デバッグはかなり激しい
l うまく⾏行行っているのかどうかわかりにくい
- 41. 現在の実装
l 転置インデックスとLSHが実装されている
l minhashとアンカーグラフは⼤大⼈人の事情で有りませ
ん・・・
- 43. まとめ
l Jubatusの3つの軸
l リアルタイム
l 分散
l 深い解析
l MIX操作による緩い同期計算モデル
l レコメンドの4⼿手法
l 転置インデックス
l Locality Sensitive Hashing
l minhash
l アンカーグラフ
l Jubatusでは前者2つを実装
- 44. 参考⽂文献
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.