Submit Search
Jubatusのリアルタイム分散レコメンデーション@TokyoNLP#9
•
45 likes
•
13,710 views
Yuya Unno
Follow
1 of 44
Download now
Downloaded 157 times
More Related Content
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 新機能、分散レコメンデーションについて
4.
Jubatusの紹介
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 それぞれが⾃自律律的に学習してモデル情報だけ交換する
12.
Jubatusにおける分散機械学習のイメージ
学習器 l みんな個別に⾃自学⾃自習 l たまに勉強会で情報交換 l ⼀一⼈人で勉強するより効率率率がいいはず! 12
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
20.
新機能:分散レコメンド
21.
レコメンデーションとは何か? l
記事や商品のおすすめ機能 l この記事に類似した記事はこの記事です l この商品を買った⼈人はこの商品も買っています l 技術的には「近傍探索索」を使っている
22.
近傍探索索とは何か? 登録されたデータの中から、クエリに近いものを探す l データ:D={d1, d2,
…, dn} l クエリ:q l 類似度度関数fに対して、f(d, q)の⼤大きいk件を求めなさい l fはコサイン類似度度やJaccard係数など クエリ q この辺が類似!
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 アンカー
36.
それぞれのアルゴリズムをオンライン化・・・でき るか? Jubatusのポイントはオンライン学習! 近傍探索索のオンライン化とは? l データ集合Dに新しいデータdを追加・変更更できる l 追加したら、直ちにL(d,
q)の⼩小さいdを求められる
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とアンカーグラフは⼤大⼈人の事情で有りませ ん・・・
42.
こんなことができる?:リアルタイムレコメンド ⾖豆腐が健康にイイヨー
⼩小売 影響の予測 変化の検知 ユーザーの購買⾏行行動 広告配信 42
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.
Download