• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Jubatusのリアルタイム分散レコメンデーション@TokyoNLP#9
 

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

on

  • 28,404 views

 

Statistics

Views

Total Views
28,404
Views on SlideShare
8,273
Embed Views
20,131

Actions

Likes
38
Downloads
133
Comments
0

22 Embeds 20,131

http://d.hatena.ne.jp 13360
http://blog.jubat.us 6235
https://twitter.com 177
http://jubat.us 129
http://jubatusofficial.tumblr.com 55
http://2023884025454259159_72fe9922d69be86dcda13bb0adbe886583a5d5ad.blogspot.com 52
http://us-w1.rockmelt.com 32
http://webcache.googleusercontent.com 32
http://tweetedtimes.com 18
http://translate.googleusercontent.com 10
http://s.deeeki.com 8
http://safe.tumblr.com 6
http://teishoin.net 4
https://si0.twimg.com 3
http://a0.twimg.com 2
http://favtile.com 2
http://honyaku.yahoofs.jp 1
http://www.blogger.com 1
http://cache.yahoofs.jp 1
https://twimg0-a.akamaihd.net 1
http://2023884025454259159_72fe9922d69be86dcda13bb0adbe886583a5d5ad.blogspot.jp 1
http://dhatenane.greatbabyfood.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Jubatusのリアルタイム分散レコメンデーション@TokyoNLP#9 Jubatusのリアルタイム分散レコメンデーション@TokyoNLP#9 Presentation Transcript

    • Jubatusのリアルタイム分散 レコメンデーション 2012/02/25@TokyoNLP 株式会社Preferred Infrastructure 海野  裕也 (@unnonouno)
    • ⾃自⼰己紹介l  海野  裕也  (@unnonouno) l  unno/no/uno l  ㈱Preferred Infrastructure 研究開発部 l  検索索・レコメンドエンジンSedueの開発などl  専⾨門 l  ⾃自然⾔言語処理理 l  テキストマイニングl  Jubatus開発者
    • 今⽇日のお話l  Jubatusの紹介l  新機能、分散レコメンデーションについて
    • Jubatusの紹介
    • Big Data !l  データはこれからも増加し続ける l  多いことより増えていくということが重要 l  データ量量の変化に対応できるスケーラブルなシステムが求めら れるl  データの種類は多様化 l  定形データのみならず、⾮非定形データも増加 l  テキスト、⾏行行動履履歴、⾳音声、映像、信号l  ⽣生成される分野も多様化 l  PC、モバイル、センサー、⾞車車、⼯工場、EC、病院 5
    • データを活⽤用するSTEP 1. ⼤大量量のデータを捨てずに蓄積できるようになってきたSTEP 2. データを分析することで、現状の把握、理理解ができるSTEP 3. 状況を理理解し、現状の改善、予測ができるl 世の中的には、蓄積から把握、理理解に向かった段階 この本が実際 この⼈人は30代 本の購買情報 に売れている 男性なので、 を全て記録で のは意外にも この本を買う きるように 30代のおっさ のではない なった! ん達だ! か? 蓄積 理理解 予測 より深い解析へ 6
    • Jubatusl  NTT  PF研とPreferred  Infrastructureによる共同開発 10/27よりOSSで公開  http://jubat.us/ リアルタイム   ストリーム 分散並列列 深い解析 7
    • Jubatusの技術的な特徴 分散かつオンラインの機械学習基盤l  オンライン学習をさらに分散化させるl  そのための通信プロトコル、計算モデル、死活監視、学 習アルゴリズムなどの⾜足回りを提供する
    • 分散かつオンラインの機械学習l  処理理が速い! l  処理理の完了了を待つ時間が少ない l  5分前のTV番組の影響を反映した広告推薦ができる l  5分前の交通量量から渋滞をさけた経路路を提案できるl  ⼤大規模! l  処理理が間に合わなくなったらスケールアウト l  ⽇日本全国からデータが集まる状態でも動かしたいl  機械学習の深い分析! l  単純なカウント以上の精度度を 9
    • 他の技術との⽐比較l  ⼤大規模バッチ(Hadoop & Mahout) l  並列列分散+機械学習 l  リアルタイム性を確保するのは難しいl  オンライン学習ライブラリ l  リアルタイム+機械学習 l  並列列分散化させるのはかなり⼤大変l  ストリーム処理理基盤 l  並列列分散+リアルタイム l  分散機械学習は難しい
    • 例例:組み込みJubatusl  ⽇日本全国に散らばったセンサーからデータ収集・分析・ 予測をしたいl  ⽣生データを全部送れないl  それぞれが⾃自律律的に学習してモデル情報だけ交換する
    • Jubatusにおける分散機械学習のイメージ 学習器l  みんな個別に⾃自学⾃自習l  たまに勉強会で情報交換l  ⼀一⼈人で勉強するより効率率率がいいはず! 12
    • 3種類の処理理に分解l  UPDATE l  データを受け取ってモデルを更更新(学習)するl  ANALYZE l  データを受け取って解析結果を返すl  MIX l  内部モデルを混ぜ合わせるl  cf. MAP / REDUCEl  ver. 0.2.0でこの3操作を書くだけで、残りの ソースを⾃自動⽣生成する仕組みができた 13
    • 3つの処理理の例例:統計処理理の場合l  平均値を計算する⽅方法を考えようl  内部状態は今までの合計(sum)とデータの個数(count)l  UPDATE l  sum += x l  count += 1l  ANALYZE l  return (sum / count)l  MIX l  sum = sum1 + sum2 l  count = count1 + count2 14
    • ところで・・・l  機械学習、⼀一般のエンジニアにまだ普及してないような 気がする・・・l  Jubatusの価値が伝わならない
    • 世の中の機械学習ライブラリの敷居はまだ⾼高いl  libsvmフォーマット l  +1 1:1 3:1 8:1 l  何よこれ?  ←普通の⼈人の反応l  ハイパーパラメータ l  「Cはいくつにしましたか?」 l  Cってなんだよ・・・  ←普通の⼈人の反応l  研究者向き、エンジニアが広く使えない 16
    • RDBやHadoopから学ぶべきことl  わからない l  リレーショナル理理論論 l  クエリオプティマイザ l  トランザクション処理理 l  分散計算モデルl  わかる l  SQL l  Map/Reduce l  「あとは裏裏でよろしくやってくれるんでしょ?」 17
    • Jubatus裏裏の⽬目標 全ての⼈人に機械学習を!l  わからない l  オンライン凸最適化 l  事後確率率率最⼤大化 l  MCMC、変分ベイズ l  特徴抽出、カーネルトリックl  わかる l  ⾃自動分類、推薦 l  「あとはよろしくやってくれるんでしょ?」 18
    • ⽣生データを突っ込めば動くようにしたいl  Jubatusの⼊入⼒力力はキー・バリュー l  最初は任意のJSONだった l  twitter APIの⽣生出⼒力力を⼊入⼒力力できるようにしたかったl  あとは勝⼿手に適当に処理理してくれる l  ⾔言語判定して l  各キーが何を表すのか⾃自動で推定して l  勝⼿手に適切切な特徴抽出を選ばせる l  (予定、まだできない) 19
    • 新機能:分散レコメンド
    • レコメンデーションとは何か?l  記事や商品のおすすめ機能 l  この記事に類似した記事はこの記事です l  この商品を買った⼈人はこの商品も買っていますl  技術的には「近傍探索索」を使っている
    • 近傍探索索とは何か?登録されたデータの中から、クエリに近いものを探すl  データ:D={d1, d2, …, dn}l  クエリ:ql  類似度度関数fに対して、f(d, q)の⼤大きいk件を求めなさい l  fはコサイン類似度度やJaccard係数など クエリ q この辺が類似!
    • 近傍探索索の技術的課題l  実⾏行行時間 l  単純な実装だと、データ点のサイズに⽐比例例した時間がかかるl  消費メモリ l  すべてのオリジナルデータを保持するとデータが膨⼤大になる
    • レコメンダーに対する操作l  similar_row l  クエリベクトルqに類似した⽂文書IDのリストを返す l  類似度度のスコアも同時に返すl  update_row l  指定の⽂文書IDのベクトルを更更新するl  complete_row l  クエリベクトルqと類似したベクトルの重み付き線形和を返す l  similar_rowを利利⽤用して実装されている
    • 準備:よくある類似度度尺度度l  コサイン類似度度 l  2つのベクトルの余弦 l  cos(θ(x, y)) = xTy / |x||y|l  Jaccard係数 l  2つの集合の積集合と和集合のサイズの⽐比 l  Jacc(X, Y) = |X∩Y|/|X∪Y| l  ビットベクトル間の距離離と思うことができる
    • 近傍探索索アルゴリズムl  転置インデックスl  Locality Sensitive Hashingl  minhashl  アンカーグラフ
    • 転置インデックスl  疎⾏行行列列と疎ベクトルの内積を計算するl  転置インデックスを⽤用意すると効率率率的に計算できる 全要素で類似度度を計算すると⼤大変 要素のある列列だけ計算する ・ ・ ・ ・ ・ ・
    • 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ビット
    • 絵でわかるLSHl  正負が⼀一致というのは、ランダムな平⾯面の同じ側に来る ということl  この確率率率は1 – θ(x, y)/π ≒ cos(θ(x, y))平⾯面が⼀一つのランダ ムベクトルに対応 ランダムな平⾯面が2点間 を横切切る確率率率はθ/π
    • Jaccard係数l  集合の類似度度を図る関数 l  値を0, 1しか取らないベクトルだと思えばOKl  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
    • minhashl  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]
    • 絵でわかるminhashl  ハッシュ値の最⼩小値が⼀一致するのは、X∪Yの全要素中で ハッシュ値が最⼩小となる要素が、X∩Yに含まれるとき 全体で最⼩小 X Y
    • 重み付き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
    • 重み付き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)に⼀一致
    • アンカーグラフ  [Liu+11]l  予めアンカーを定めておくl  各データは近いアンカーだけ覚える l  アンカーはハブ空港のようなものl  まず類似アンカーを探して、その周辺だけ探せばOK アンカー
    • それぞれのアルゴリズムをオンライン化・・・できるか?Jubatusのポイントはオンライン学習!近傍探索索のオンライン化とは?l  データ集合Dに新しいデータdを追加・変更更できるl  追加したら、直ちにL(d, q)の⼩小さいdを求められる
    • 更更新の分散のさせ⽅方l  IDごとに同じノードに⾏行行くように分散させるl  更更新情報はmixのタイミングで他のノードに通知 1~100 101~200 CHT (Consistent Hashing) 201~300
    • 転置インデックスの分散化l  新規の差分を分散してMIXのタイミングで更更新するl  全サーバーがデータを保持するため容量量の点では分散化 できない 差分1~100 サーバー1 サバー2 差分101~200 サーバー3 差分201~300 MIX!!
    • ビット⾏行行列列の分散化l  LSHとminhashのデータはbit⾏行行列列l  転置インデックスとやることは同じだが容量量が⼩小さい 差分1~100 サーバー1 サバー2 差分101~200 サーバー3 差分201~300 MIX!!
    • アンカーグラフの分散化?l  類似アンカーの情報しか残ってないため、データの⼀一部 を更更新するのが困難 l  オリジナルデータを持っておけばよい?l  実装・デバッグはかなり激しい l  うまく⾏行行っているのかどうかわかりにくい
    • 現在の実装l  転置インデックスとLSHが実装されているl  minhashとアンカーグラフは⼤大⼈人の事情で有りませ ん・・・
    • こんなことができる?:リアルタイムレコメンド⾖豆腐が健康にイイヨー ⼩小売 影響の予測 変化の検知 ユーザーの購買⾏行行動 広告配信 42
    • まとめl  Jubatusの3つの軸 l  リアルタイム l  分散 l  深い解析l  MIX操作による緩い同期計算モデルl  レコメンドの4⼿手法 l  転置インデックス l  Locality Sensitive Hashing l  minhash l  アンカーグラフl  Jubatusでは前者2つを実装
    • 参考⽂文献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.