Successfully reported this slideshow.
Your SlideShare is downloading. ×

Jubatusでオンラインランク学習

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Upcoming SlideShare
Php Lt 20080316
Php Lt 20080316
Loading in …3
×

Check these out next

1 of 39 Ad

More Related Content

Viewers also liked (20)

Recently uploaded (20)

Advertisement

Jubatusでオンラインランク学習

  1. 1. Jubatus Casual Talks #1 Jubatusでオンラインランク学習 2013-06-02 Tagami Yukihiro
  2. 2. 自己紹介 ● Tagami Yukihiro – 広告エンジニア – 機械学習とか情報検索 – @y_tag – github.com/y-tag – www.kaggle.com/users/33499/y-tag – d.hatena.ne.jp/y_tag/
  3. 3. 今日のアジェンダ ● ランク学習とは? ● どうやって並べるの? ● どうやって学習するの? ● Jubatusでオンラインランク学習 ● 実験 ● まとめ
  4. 4. ランク学習とは?
  5. 5. ランク学習(Learning-to-Rank) ● 目的 – 入力として与えられたあるクエリに対して、 候補となるアイテムを適切に並び替えたい ● ランク学習では – 適切な並べ方をデータから学習する
  6. 6. 例: ウェブ検索 検索クエリ ウェブページ
  7. 7. 例: 商品検索 検索クエリ 商品
  8. 8. 例: レコメンド クエリアイテム 類似アイテム
  9. 9. 例: メールの受信トレイ ユーザー メール support.google.com/mail/answer/186543
  10. 10. ランク学習の適用先 ● 入力に対して候補を並べるものなら何でも – ウェブ検索・商品検索 – レコメンド – メールの受信トレイ – などなど
  11. 11. どうやって並べるの?
  12. 12. 並べ方 ● ランキングモデルを用いてクエリとアイテムの組に 対してスコアを付与する ● 付与されたスコアによって候補を並べる ● ランク学習は、このランキングモデルをデータから 構築する クエリ 候補集合 ランキング モデル アイテム スコア 特徴量 抽出
  13. 13. データの形式 ● 実際に用いるデータは主に以下の形式 – クエリのID – クエリとアイテムから抽出された特徴量ベクトル – ラベル(適合度) (x1 (i) , y1 (i) ) (x2 (i) , y2 (i) ) ⋮ (xn(i) (i) , yn(i) (i) ) q (i) q (i) x j (i) y j (i) (x1 (1) , y1 (1) ) (x2 (1) , y2 (1) ) ⋮ (xn(1) (1) , yn(1) (1) ) q (1) ⋯ ⋯ (x1 (m) , y1 (m) ) (x2 (m) , y2 (m) ) ⋮ (xn(m) (m) , yn(m) (m) ) q (m)
  14. 14. 特徴量ベクトル ● クエリとアイテムの関連性 – 検索クエリがどれくらいウェブページに含まれているか ● クエリによらないアイテムのクオリティ – PageRank
  15. 15. ラベル(適合度) ● 二値 – relevant vs. irrelevant ● 多値 – Perfect > Excellent > Good > Fair > Bad ● 値が大きい方が、より好ましいアイテム
  16. 16. データはどう作るの? ● 人手で作成 – 質は高いけど大変 – クラウドソーシング ● ユーザーのフィードバックをログから抽出 – 大量に作れるけど質はいまいち(かも) – レーティング – クリックログ
  17. 17. ここまでのまとめ ● 用いるデータは以下三つ組で表現 – クエリのID – クエリとアイテムから抽出された特徴量ベクトル – ラベル(適合度) クエリ 候補集合 ランキング モデル アイテム スコア 特徴量 抽出 q (i) x j (i) y j (i)
  18. 18. どうやって学習するの?
  19. 19. 主に三つのアプローチ ● Pointwiseアプローチ – 単純にラベルの値自体を予測 ● Pairwiseアプローチ – 二つのアイテムのどちらが優れているかに着目 ● Listwiseアプローチ – 全体の並びをきちんと考慮
  20. 20. Pointwiseアプローチ ● ラベルの値を目的変数として分類や回帰を行う – ラベルが二値 {0, 1} → 分類 – ラベルが多値 {0, 1, 2, …} → 回帰 ● 正解ラベルと予測値の間の損失関数を最小化す るように学習 ● 既存の分類や回帰の手法をそのまま適用できる
  21. 21. Pairwiseアプローチ ● 適合度の値その物ではなく、大小関係に着目 ● あるクエリに結びつく、二つのアイテムの適合度の 大小関係を用いる ● 適合度の大小関係に対して、分類や回帰の手法 を適用して学習 ※あとでもう少し詳しく
  22. 22. Listwiseアプローチ ● 名前の通り、リストの並び順全体を考慮 ● ランク学習で用いられる評価指標は、そもそも並 べられたリストに対して計算されるもの ● 前の二つのアプローチとは異なり、分類や回帰の 手法をそのまま適用するというわけではない
  23. 23. 三つのアプローチまとめ ● Pointwiseアプローチ – ラベルの値自体を予測 ● Pairwiseアプローチ – 二つのアイテムのどちらが優れているかに着目 ● Listwiseアプローチ – 全体の並びをきちんと考慮 詳しくは参考文献を参照
  24. 24. Jubatusで オンラインランク学習
  25. 25. Jubatusでランク学習 ● 大量のユーザーフィードバックを用いて、 オンラインでランキングモデルを学習したい ● Pairwiseアプローチは分類や回帰の手法を 適用して学習している ● 分類や回帰ができるJubatusなら、ランク学習も できるはず
  26. 26. 実装したよ! github.com/y-tag/jubatus/commits/ranking
  27. 27. Pairwiseアプローチと分類(1) ● 二つのサンプルに対するモデルのスコアの 大小関係が、適合度の大小関係通りになるように モデルを学習したい score(x j (i) ) > score(xk (i) ) (x j (i) , y j (i) ),(xk (i) , yk (i) ) where y j (i) > yk (i) このようなデータに対して このようなスコアを返す ランキングモデルを得たい
  28. 28. Pairwiseアプローチと分類(2) ● ランキングモデルを線形モデルで表現する ● 二つの素性ベクトルの差分に対するスコアが、 0より大きいか小さいかだけ判別できれば良い score(x j (i) ) > score(xk (i) ) ⇔ f (x j (i) ) > f (xk (i) ) ⇔wT x j (i) > wT xk (i) ⇔w T x j (i) −w T xk (i) > 0 ⇔wT (x j (i) −xk (i) ) > 0 ⇔ f (x j (i) −xk (i) ) > 0 (x j (i) , y j (i) ),(xk (i) , yk (i) ) where y j (i) > yk (i) このようなデータに対して このようなスコアを返す ランキングモデルを得たい
  29. 29. Pairwiseアプローチと分類(3) ● とはいえ、すべての大小関係を正しく表現する 線形モデルを構築するのは困難 ● そこで通常の分類や回帰のように、損失関数を 定義してそれを最小化する ̂w = argmin w ∑ i=1 m ∑ j=1 n (i) −1 ∑ k= j+1 n (i) Loss((x j (i) −xk (i) ),( y j (i) −yk (i) ),w) Losshinge(x , y ,w) = {0 y=0 max(0,1−sign( y)⋅w T x) otherwise Losssquared (x , y ,w) = ( y−w T x) 2
  30. 30. 現在の実装(学習) ● 一回の入力が一つのクエリに対応するとみなし、 与えられたリスト内でペアを作成して分類器で学習 ● ペアデータに対するラベルはすべて”+” (x1 (i) , y1 (i) =0) (x2 (i) , y2 (i) =2) (x3 (i) , y3 (i) =0) (x4 (i) , y4 (i) =0) (x5 (i) , y5 (i) =1) (x2 (i) −x1 (i) ,+) (x2 (i) −x3 (i) ,+) (x2 (i) −x4 (i) ,+) (x2 (i) −x5 (i) ,+) (x2 (5) −x1 (i) ,+) (x5 (i) −x3 (i) ,+) (x5 (i) −x4 (i) ,+) これらのデータを用いて分類器を学習 ラベルの大小関係に 応じてペアを作成
  31. 31. 現在の実装(予測) ● 予測時はアイテムごとにランキングモデルで、 ラベル”+”に対するスコアを付与 ● スコアでアイテムを並び替える (x1 (test) ) (x2 (test) ) (x3 (test) ) (x4 (test) ) (x5 (test) ) 学習した モデルで スコアを付与 (x1 (test) ,0.67) (x2 (test) ,−0.18) (x3 (test) ,0.09) (x4 (test) ,−0.27) (x5 (test) ,0.62) (x1 (test) ) (x5 (test) ) (x3 (test) ) (x2 (test) ) (x4 (test) ) スコアの 降順で ソート
  32. 32. 実験
  33. 33. 実験設定 ● LETORのデータセットで実験 – OHSUMED, MQ2007, MQ2008 – research.microsoft.com/en-us/um/beijing/projects/letor/ ● 今回の実装と既存のベースラインを比較 – PA, CW, AROW, NHERD vs. RankSVM ● 詳しい実験の設定と結果はここを参照 – d.hatena.ne.jp/y_tag/20130423/online_learning_to_rank
  34. 34. 実験結果 OHSUMED MQ2007 MQ2008 0.3 0.32 0.34 0.36 0.38 0.4 0.42 0.44 0.46 0.48 0.5 Mean Average Precision RankPA RankCW RankAROW RankNHERD RankSVM-(Struct) ListNet AdaRank-MAP RankBoost
  35. 35. まとめ
  36. 36. まとめ ● Jubatusでオンラインランク学習できるよ! ● でも実システムで使うには、もう少し賢い仕組みが 必要になるかも – 特徴量抽出の部分 – 検索エンジン(転置インデックス)との連携など ● 今後の課題 – いろいろありすぎてつらい
  37. 37. Reference ● Learning to Rank for Information Retrieval – research.microsoft.com/en- us/people/tyliu/learning_to_rank_tutorial_-_www_-_2008.pdf ● ランキング学習ことはじめ – www.slideshare.net/sleepy_yoshi/dsirnlp1 ● Large Scale Learning to Rank – http://research.google.com/pubs/archive/35662.pdf
  38. 38. Implementation ● sofia-ml – code.google.com/p/sofia-ml/ ● Jforests – code.google.com/p/jforests/ ● y-tag / cpp-ToyBox-Ranking – github.com/y-tag/cpp-ToyBox-Ranking
  39. 39. おしまい

×