Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Jubatusのリアルタイム分散 レコメンデーション @TokyoWebmining

Jubatusのリアルタイム分散 レコメンデーション @TokyoWebmining

Yuya Unno

May 20, 2012
Tweet

More Decks by Yuya Unno

Other Decks in Technology

Transcript

  1. ⾃自⼰己紹介 l  海野  裕也 (@unnonouno) l  unno/no/uno l  ㈱Preferred Infrastructure 研究開発部

    l  検索索・レコメンドエンジンSedueの開発など l  専⾨門 l  ⾃自然⾔言語処理理 l  テキストマイニング l  Jubatusチームリーダー
  2. Big Data ! l  データはこれからも増加し続ける l  多いことより増えていくということが重要 l  データ量量の変化に対応できるスケーラブルなシステムが求めら れる

    l  データの種類は多様化 l  定形データのみならず、⾮非定形データも増加 l  テキスト、⾏行行動履履歴、⾳音声、映像、信号 l  ⽣生成される分野も多様化 l  PC、モバイル、センサー、⾞車車、⼯工場、EC、病院 5
  3. データを活⽤用する STEP 1. ⼤大量量のデータを捨てずに蓄積できるようになってきた STEP 2. データを分析することで、現状の把握、理理解ができる STEP 3. 状況を理理解し、現状の改善、予測ができる

    l 世の中的には、蓄積から把握、理理解に向かった段階 6 6 蓄積 理理解 予測 より深い解析へ 本の購買情報 を全て記録で きるように なった! この本が実際 に売れている のは意外にも 30代のおっさ ん達だ! この⼈人は30代 男性なので、 この本を買う のではない か?
  4. 分散かつオンラインの機械学習 l  処理理が速い! l  処理理の完了了を待つ時間が少ない l  5分前のTV番組の影響を反映した広告推薦ができる l  5分前の交通量量から渋滞をさけた経路路を提案できる l 

    ⼤大規模! l  処理理が間に合わなくなったらスケールアウト l  ⽇日本全国からデータが集まる状態でも動かしたい l  機械学習の深い分析! l  単純なカウント以上の精度度を 9
  5. 他の技術との⽐比較 l  ⼤大規模バッチ(Hadoop & Mahout) l  並列列分散+機械学習 l  リアルタイム性を確保するのは難しい l 

    オンライン学習ライブラリ l  リアルタイム+機械学習 l  並列列分散化させるのはかなり⼤大変 l  ストリーム処理理基盤、CEP l  並列列分散+リアルタイム l  分散機械学習は難しい
  6. 今までにない技術、これからの技術 l  欲張り l  今までのトレンドを全部取り込む l  制約が多く、実験も実装も難しい l  これからの技術 l 

    今すぐ実⽤用的になる部分、そうでない部分を含む l  最初の1⼈人になるなら今! l  新しい研究分野 l  研究テーマとしても⾯面⽩白い l  乗っかるなら今!
  7. Jubatusの挑戦 単なる機械学習ライブラリではなく、そこに必要なあらゆ る技術を検討 l  オンライン分散学習 l  ⾮非構造データ、特徴抽出 l  計算モデル l 

    分散システム l  RPCの抽象化 メンバーも、機械学習、⾃自然⾔言語処理理、プログラミング⾔言 語、分散システムなどを得意とする
  8. 3種類の処理理に分解 l  UPDATE l  データを受け取ってモデルを更更新(学習)する l  ANALYZE l  データを受け取って解析結果を返す l 

    MIX l  内部モデルを混ぜ合わせる l  cf. MAP / REDUCE l  分散機械学習を3操作だけでどこまで記述できる か? 14
  9. 世の中の機械学習ライブラリの敷居はまだ⾼高い l  libsvmフォーマット l  +1 1:1 3:1 8:1 l  何よこれ?  ←普通の⼈人の反応

    l  ⽣生データを扱えない l  ハイパーパラメータ l  「Cはいくつにしましたか?」 l  Cってなんだよ・・・  ←普通の⼈人の反応 l  複雑な設定 l  研究者向き、エンジニアが広く使えない 16
  10. RDBやHadoopから学ぶべきこと l  わからない l  リレーショナル理理論論 l  クエリオプティマイザ l  トランザクション処理理 l 

    分散計算モデル l  わかる l  SQL l  Map/Reduce l  「あとは裏裏でよろしくやってくれるんでしょ?」 17
  11. Jubatus裏裏の⽬目標 l  わからない l  オンライン凸最適化 l  事後確率率率最⼤大化 l  MCMC、変分ベイズ l 

    特徴抽出、カーネルトリック l  わかる l  ⾃自動分類、推薦 l  「あとはよろしくやってくれるんでしょ?」 18 全ての⼈人に機械学習を!
  12. ⽣生データを突っ込めば動くようにしたい l  Jubatusの⼊入⼒力力はキー・バリュー l  最初は任意のJSONだった l  twitter APIの⽣生出⼒力力を⼊入⼒力力できるようにしたかった l  あとは勝⼿手に適当に処理理してくれる

    l  ⾔言語判定して l  各キーが何を表すのか⾃自動で推定して l  勝⼿手に適切切な特徴抽出を選ばせる l  というようなことができるようになるかも l  特徴抽出エンジンのプラグイン化 l  様々な特徴関数をダウンロードして⾃自由に組み合わせたい 19
  13. Remote Procedure Call (RPC) も抽象化 l  mprpc-idlからクライアントコードを⾃自動⽣生成! l  IDL (Interface

    Definition Language) でプロトコルを記述 l  各⾔言語⽤用の通信ライブラリはIDLを元に⾃自動⽣生成 Ruby RPCの仕様 Rubyラ イブラリ Python Pythonラ イブラリ Java Javaライ ブラリ Ruby IDLによる仕様 Rubyラ イブラリ Python Pythonラ イブラリ Java Javaライ ブラリ mprpc-idlを使う 通常 IDLから⾃自動⽣生成される
  14. 近傍探索索とは何か? 登録されたデータの中から、クエリに近いものを探す l  データ:D={d 1 , d 2 , …,

    d n } l  クエリ:q l  類似度度関数fに対して、f(d, q)の⼤大きいk件を求めなさい l  fはコサイン類似度度やJaccard係数など クエリ q この辺が類似!
  15. 準備:よくある類似度度尺度度 l  コサイン類似度度 l  2つのベクトルの余弦 l  cos(θ(x, y)) = xTy

    / |x||y| l  Jaccard係数 l  2つの集合の積集合と和集合のサイズの⽐比 l  Jacc(X, Y) = |X∩Y|/|X∪Y| l  ビットベクトル間の距離離と思うことができる
  16. Locality Sensitive Hashing (LSH) l  ランダムなベクトル r を作る l  このときベクトルx,

    yに対してxTrとyTrの正負が⼀一致する 確率率率はおよそ cos(θ(x, y)) l  ランダムベクトルをk個に増やして正負の⼀一致率率率を数え れば、だいたいコサイン距離離になる l  ベクトルxに対して、ランダムベクトル{r 1 , …, r k }との内 積の正負を計算 H(x) = {sign(xTr 1 ), …, sign(xTr k )} l  signは正なら1、負なら0を返す関数 l  H(x)だけ保存すればよいので1データ当たりkビット
  17. 絵でわかるLSH l  正負が⼀一致というのは、ランダムな平⾯面の同じ側に来る ということ l  この確率率率は1 – θ(x, y)/π ≒

    cos(θ(x, y)) 平⾯面が⼀一つのランダ ムベクトルに対応 ランダムな平⾯面が2点間 を横切切る確率率率はθ/π
  18. 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
  19. minhash l  X = { x 1 , x 2

    , …, x n } l  Xは集合なので、感覚的には⾮非ゼロ要素のインデックスのこと l  H(X) = { h(x 1 ), …, h(x n ) } 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]
  20. 重み付きJaccard係数 l  各集合の要素のidfのような重みをつける l  wJacc(X, Y) = Σ i∈X∩Y w

    i / Σ i∈X∪Y w i l  w i が常に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
  21. 重み付きJaccard版minhash [Chum+08] l  X = { x 1 , x

    2 , …, x n } l  H(X) = {h(x 1 )/w 1 , …, h(x n )/w n } l  論論⽂文中では-log(h(x))としている l  差分はw i で割っているところ l  感覚的にはw i が⼤大きければ、ハッシュ値が⼩小さくなりやすいの で、選ばれる確率率率が⼤大きくなる l  m(X) = argmin(H(X)) l  m(X) = m(Y)となる確率率率はwJacc(X, Y)に⼀一致
  22. まとめ l  Jubatusは総合格闘技 l  MIX操作による緩い同期計算モデル l  ⾮非構造データを扱うための特徴抽出 l  IDLからのクライアントコード⾃自動⽣生成 l 

    レコメンドの4⼿手法 l  転置インデックス l  Locality Sensitive Hashing (simhash) l  minhash l  アンカーグラフ l  現在は前者2つを公開
  23. 参考⽂文献 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.