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

  2012/05/20@TokyoWebmining
  株式会社Preferred Infrastructure
     海野  裕也 (@unnonouno)
⾃自⼰己紹介

l    海野  裕也  (@unnonouno)
      l    unno/no/uno
      l    ㈱Preferred Infrastructure 研究開発部
      l    検索索・レコメンドエンジンSedueの開発など


l    専⾨門
      l    ⾃自然⾔言語処理理
      l    テキストマイニング

l    Jubatusチームリーダー
今⽇日のお話

l    Jubatusの紹介

l    分散レコメンデーションについて

#TokyoNLPではなした内容とだいたい同じですm(_ _)m
Jubatusの紹介
Big Data !

l    データはこれからも増加し続ける
      l    多いことより増えていくということが重要
      l    データ量量の変化に対応できるスケーラブルなシステムが求めら
            れる


l    データの種類は多様化
      l    定形データのみならず、⾮非定形データも増加
      l    テキスト、⾏行行動履履歴、⾳音声、映像、信号

l    ⽣生成される分野も多様化
      l    PC、モバイル、センサー、⾞車車、⼯工場、EC、病院


                           5
データを活⽤用する

STEP 1. ⼤大量量のデータを捨てずに蓄積できるようになってきた
STEP 2. データを分析することで、現状の把握、理理解ができる
STEP 3. 状況を理理解し、現状の改善、予測ができる


l 世の中的には、蓄積から把握、理理解に向かった段階

                この本が実際        この⼈人は30代
   本の購買情報       に売れている        男性なので、
   を全て記録で       のは意外にも        この本を買う
   きるように        30代のおっさ       のではない
   なった!         ん達だ!          か?


    蓄積           理理解          予測
               より深い解析へ
                  6
Jubatus
l    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    ストリーム処理理基盤、CEP
      l    並列列分散+リアルタイム
      l    分散機械学習は難しい
今までにない技術、これからの技術

l    欲張り
      l    今までのトレンドを全部取り込む
      l    制約が多く、実験も実装も難しい


l    これからの技術
      l    今すぐ実⽤用的になる部分、そうでない部分を含む
      l    最初の1⼈人になるなら今!


l    新しい研究分野
      l    研究テーマとしても⾯面⽩白い
      l    乗っかるなら今!
Jubatusの挑戦

単なる機械学習ライブラリではなく、そこに必要なあらゆ
る技術を検討

l    オンライン分散学習
l    ⾮非構造データ、特徴抽出
l    計算モデル
l    分散システム
l    RPCの抽象化

メンバーも、機械学習、⾃自然⾔言語処理理、プログラミング⾔言
語、分散システムなどを得意とする
「緩いモデル共有」による分散機械学習


                              学習器




l    みんな個別に⾃自学⾃自習
l    たまに勉強会で情報交換
l    ⼀一⼈人で勉強するより効率率率がいいはず!
                    13
3種類の処理理に分解

l    UPDATE
      l    データを受け取ってモデルを更更新(学習)する
l    ANALYZE
      l    データを受け取って解析結果を返す
l    MIX
      l    内部モデルを混ぜ合わせる

l    cf. MAP / REDUCE
l    分散機械学習を3操作だけでどこまで記述できる
      か?


                       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


                                      15
世の中の機械学習ライブラリの敷居はまだ⾼高い

l    libsvmフォーマット
      l    +1 1:1 3:1 8:1
      l    何よこれ?  ←普通の⼈人の反応
      l    ⽣生データを扱えない

l    ハイパーパラメータ
      l    「Cはいくつにしましたか?」
      l    Cってなんだよ・・・  ←普通の⼈人の反応
      l    複雑な設定

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    というようなことができるようになるかも

l    特徴抽出エンジンのプラグイン化
      l    様々な特徴関数をダウンロードして⾃自由に組み合わせたい

                            19
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から⾃自動⽣生成される
新機能:分散レコメンド
レコメンデーションとは何か?

l    記事や商品のおすすめ機能
      l    この記事に類似した記事はこの記事です
      l    この商品を買った⼈人はこの商品も買っています


l    技術的には「近傍探索索」を使っている
近傍探索索とは何か?
登録されたデータの中から、クエリに近いものを探す
l  データ:D={d1, d2, …, dn}
l  クエリ:q
l  類似度度関数fに対して、f(d, q)の⼤大きいk件を求めなさい
  l    fはコサイン類似度度やJaccard係数など



                    クエリ q
                                 この辺が類似!
何も考えずに近傍探索索しよう

l    全データに対して類似度度を計算して上位を返せばOK

input: x
for d in all data:
  score[d] = sim(x, d)
sort score
return top-K elements of score
近傍探索索の技術的課題

l    実⾏行行時間
      l    単純な実装だと、データ点のサイズに⽐比例例した時間がかかる


l    消費メモリ
      l    すべてのオリジナルデータを保持するとデータが膨⼤大になる


上記2点と精度度とのトレードオフ
準備:よくある類似度度尺度度

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 Hashing (simhash)
l    minhash
l    アンカーグラフ
転置インデックス

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ビット
絵でわかるLSH

l    正負が⼀一致というのは、ランダムな平⾯面の同じ側に来る
      ということ
l    この確率率率は1 – θ(x, y)/π ≒ cos(θ(x, y))


平⾯面が⼀一つのランダ
 ムベクトルに対応




                              ランダムな平⾯面が2点間
                               を横切切る確率率率はθ/π
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
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]
絵でわかるminhash

l    ハッシュ値の最⼩小値が⼀一致するのは、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は特許問題で調整中

l    アンカーグラフはうまく分散させるに⾄至らず
こんなことができる?:リアルタイムレコメンド

⾖豆腐が健康にイイヨー               ⼩小売
               影響の予測




           変化の検知

 ユーザーの購買⾏行行動




                          広告配信

                   43
まとめ

l    Jubatusは総合格闘技
      l    MIX操作による緩い同期計算モデル
      l    ⾮非構造データを扱うための特徴抽出
      l    IDLからのクライアントコード⾃自動⽣生成


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

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
  • 4.
  • 5.
    Big Data ! l  データはこれからも増加し続ける l  多いことより増えていくということが重要 l  データ量量の変化に対応できるスケーラブルなシステムが求めら れる l  データの種類は多様化 l  定形データのみならず、⾮非定形データも増加 l  テキスト、⾏行行動履履歴、⾳音声、映像、信号 l  ⽣生成される分野も多様化 l  PC、モバイル、センサー、⾞車車、⼯工場、EC、病院 5
  • 6.
    データを活⽤用する STEP 1. ⼤大量量のデータを捨てずに蓄積できるようになってきた STEP2. データを分析することで、現状の把握、理理解ができる 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  乗っかるなら今!
  • 12.
    Jubatusの挑戦 単なる機械学習ライブラリではなく、そこに必要なあらゆ る技術を検討 l  オンライン分散学習 l  ⾮非構造データ、特徴抽出 l  計算モデル l  分散システム l  RPCの抽象化 メンバーも、機械学習、⾃自然⾔言語処理理、プログラミング⾔言 語、分散システムなどを得意とする
  • 13.
    「緩いモデル共有」による分散機械学習 学習器 l  みんな個別に⾃自学⾃自習 l  たまに勉強会で情報交換 l  ⼀一⼈人で勉強するより効率率率がいいはず! 13
  • 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から⾃自動⽣生成される
  • 21.
  • 22.
    レコメンデーションとは何か? l  記事や商品のおすすめ機能 l  この記事に類似した記事はこの記事です l  この商品を買った⼈人はこの商品も買っています l  技術的には「近傍探索索」を使っている
  • 23.
    近傍探索索とは何か? 登録されたデータの中から、クエリに近いものを探す l  データ:D={d1, d2,…, dn} l  クエリ:q l  類似度度関数fに対して、f(d, q)の⼤大きいk件を求めなさい l  fはコサイン類似度度やJaccard係数など クエリ q この辺が類似!
  • 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 アンカー
  • 37.
  • 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  アンカーグラフはうまく分散させるに⾄至らず
  • 43.
    こんなことができる?:リアルタイムレコメンド ⾖豆腐が健康にイイヨー ⼩小売 影響の予測 変化の検知 ユーザーの購買⾏行行動 広告配信 43
  • 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] OndrejChum, 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.