• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Jubatusでオンラインランク学習
 

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

on

  • 9,648 views

Jubatus Casual Talks #1 2013/06/02

Jubatus Casual Talks #1 2013/06/02

Statistics

Views

Total Views
9,648
Views on SlideShare
1,911
Embed Views
7,737

Actions

Likes
7
Downloads
20
Comments
0

13 Embeds 7,737

http://blog.jubat.us 7055
http://d.hatena.ne.jp 399
http://2023884025454259159_72fe9922d69be86dcda13bb0adbe886583a5d5ad.blogspot.com 183
https://twitter.com 66
http://xyz.yukke.jp 13
http://2023884025454259159_72fe9922d69be86dcda13bb0adbe886583a5d5ad.blogspot.jp 9
http://sonomirai.com 3
http://webcache.googleusercontent.com 3
http://cloud.feedly.com 2
https://twitbridge.com 1
http://www.feedly.com 1
http://news.google.com 1
http://feedly.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でオンラインランク学習 Jubatusでオンラインランク学習 Presentation Transcript

    • Jubatus Casual Talks #1Jubatusでオンラインランク学習2013-06-02Tagami Yukihiro
    • 自己紹介● Tagami Yukihiro– 広告エンジニア– 機械学習とか情報検索– @y_tag– github.com/y-tag– www.kaggle.com/users/33499/y-tag– d.hatena.ne.jp/y_tag/
    • 今日のアジェンダ● ランク学習とは?● どうやって並べるの?● どうやって学習するの?● Jubatusでオンラインランク学習● 実験● まとめ
    • ランク学習とは?
    • ランク学習(Learning-to-Rank)● 目的– 入力として与えられたあるクエリに対して、候補となるアイテムを適切に並び替えたい● ランク学習では– 適切な並べ方をデータから学習する
    • 例: ウェブ検索検索クエリウェブページ
    • 例: 商品検索検索クエリ商品
    • 例: レコメンドクエリアイテム類似アイテム
    • 例: メールの受信トレイユーザーメールsupport.google.com/mail/answer/186543
    • ランク学習の適用先● 入力に対して候補を並べるものなら何でも– ウェブ検索・商品検索– レコメンド– メールの受信トレイ– などなど
    • どうやって並べるの?
    • 並べ方● ランキングモデルを用いてクエリとアイテムの組に対してスコアを付与する● 付与されたスコアによって候補を並べる● ランク学習は、このランキングモデルをデータから構築するクエリ候補集合ランキングモデルアイテムスコア特徴量抽出
    • データの形式● 実際に用いるデータは主に以下の形式– クエリの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)
    • 特徴量ベクトル● クエリとアイテムの関連性– 検索クエリがどれくらいウェブページに含まれているか● クエリによらないアイテムのクオリティ– PageRank
    • ラベル(適合度)● 二値– relevant vs. irrelevant● 多値– Perfect > Excellent > Good > Fair > Bad● 値が大きい方が、より好ましいアイテム
    • データはどう作るの?● 人手で作成– 質は高いけど大変– クラウドソーシング● ユーザーのフィードバックをログから抽出– 大量に作れるけど質はいまいち(かも)– レーティング– クリックログ
    • ここまでのまとめ● 用いるデータは以下三つ組で表現– クエリのID– クエリとアイテムから抽出された特徴量ベクトル– ラベル(適合度)クエリ候補集合ランキングモデルアイテムスコア特徴量抽出q(i)x j(i)y j(i)
    • どうやって学習するの?
    • 主に三つのアプローチ● Pointwiseアプローチ– 単純にラベルの値自体を予測● Pairwiseアプローチ– 二つのアイテムのどちらが優れているかに着目● Listwiseアプローチ– 全体の並びをきちんと考慮
    • Pointwiseアプローチ● ラベルの値を目的変数として分類や回帰を行う– ラベルが二値 {0, 1} → 分類– ラベルが多値 {0, 1, 2, …} → 回帰● 正解ラベルと予測値の間の損失関数を最小化するように学習● 既存の分類や回帰の手法をそのまま適用できる
    • Pairwiseアプローチ● 適合度の値その物ではなく、大小関係に着目● あるクエリに結びつく、二つのアイテムの適合度の大小関係を用いる● 適合度の大小関係に対して、分類や回帰の手法を適用して学習※あとでもう少し詳しく
    • Listwiseアプローチ● 名前の通り、リストの並び順全体を考慮● ランク学習で用いられる評価指標は、そもそも並べられたリストに対して計算されるもの● 前の二つのアプローチとは異なり、分類や回帰の手法をそのまま適用するというわけではない
    • 三つのアプローチまとめ● Pointwiseアプローチ– ラベルの値自体を予測● Pairwiseアプローチ– 二つのアイテムのどちらが優れているかに着目● Listwiseアプローチ– 全体の並びをきちんと考慮詳しくは参考文献を参照
    • Jubatusでオンラインランク学習
    • Jubatusでランク学習● 大量のユーザーフィードバックを用いて、オンラインでランキングモデルを学習したい● Pairwiseアプローチは分類や回帰の手法を適用して学習している● 分類や回帰ができるJubatusなら、ランク学習もできるはず
    • 実装したよ!github.com/y-tag/jubatus/commits/ranking
    • 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)このようなデータに対して このようなスコアを返すランキングモデルを得たい
    • Pairwiseアプローチと分類(2)● ランキングモデルを線形モデルで表現する● 二つの素性ベクトルの差分に対するスコアが、0より大きいか小さいかだけ判別できれば良いscore(x j(i)) > score(xk(i))⇔ f (x j(i)) > f (xk(i))⇔wTx j(i)> wTxk(i)⇔wTx j(i)−wTxk(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)このようなデータに対してこのようなスコアを返すランキングモデルを得たい
    • Pairwiseアプローチと分類(3)● とはいえ、すべての大小関係を正しく表現する線形モデルを構築するのは困難● そこで通常の分類や回帰のように、損失関数を定義してそれを最小化する̂w = argminw∑i=1m∑j=1n(i)−1∑k= j+1n(i)Loss((x j(i)−xk(i)),( y j(i)−yk(i)),w)Losshinge(x , y ,w) ={0 y=0max(0,1−sign( y)⋅wTx) otherwiseLosssquared (x , y ,w) = ( y−wTx)2
    • 現在の実装(学習)● 一回の入力が一つのクエリに対応するとみなし、与えられたリスト内でペアを作成して分類器で学習● ペアデータに対するラベルはすべて”+”(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),+)これらのデータを用いて分類器を学習ラベルの大小関係に応じてペアを作成
    • 現在の実装(予測)● 予測時はアイテムごとにランキングモデルで、ラベル”+”に対するスコアを付与● スコアでアイテムを並び替える(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))スコアの降順でソート
    • 実験
    • 実験設定● 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
    • 実験結果OHSUMED MQ2007 MQ20080.30.320.340.360.380.40.420.440.460.480.5Mean Average PrecisionRankPARankCWRankAROWRankNHERDRankSVM-(Struct)ListNetAdaRank-MAPRankBoost
    • まとめ
    • まとめ● Jubatusでオンラインランク学習できるよ!● でも実システムで使うには、もう少し賢い仕組みが必要になるかも– 特徴量抽出の部分– 検索エンジン(転置インデックス)との連携など● 今後の課題– いろいろありすぎてつらい
    • 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
    • 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
    • おしまい