Confidence Weightedで
ランク学習を実装してみた


徳永拓之 <tkng@preferred.jp>

      2011/01/22 第4回 自然言語処理勉強会@東京
自己紹介:徳永 拓之
●
    twitter id:tkng
●
    (株) Preferred Infrastructure 勤務
    ●
        守備範囲:レコメンド・NLPなど
●
    カレーを食べるのが趣味
    ●
        上野デリーのコルマカレーが好きです
●
    早売りの週刊少年ジャンプを読むのも好き
宣伝:NLP2011で発表します
    C4-6 日本語かな漢字変換における識別モデル
    の適用とその考察
     ○徳永拓之, 岡野原大輔 (PFI)
     3月10日(木) 13:00-15:30 (A1-201教室)


●
    今日の発表でここが一番NLPっぽい
発表の概要
●
    ランク学習とは
●
    Confidence Weightedとは
●
    Confidence Weightedによるランク学習


中身の薄い発表なのでゆったりと
リラックスした気持ちで聞くのが
オススメ!
ランク学習とは?
ランク学習(Learning to Rank)
データの集合に対して順位付けを行う問題
●
    データの与え方によってBipartite, Pairwise,
    Listwiseなどに分類できる


検索結果の並べかえやインターネット広告の最
適化など、近年応用できる範囲が広がり、研究
として重要になっている
Learning to Rankの研究グループ
●
    Yahoo Research, MS Researchが強い
    ●
        要するにデータ持ってるところが強い
    ●
        Googleは調べた頃は論文あまり出してなかった


●
    今回のスライドもMS ResearchのHang Liや
    Tie-Yan Liuのスライドを参考に作りました
    ●
        日本語ではチュートリアルっぽい資料があまりない
自然言語処理     ランク学習
●
    高次元    ●   (比較的)低次元
●
    スパース   ●   デンス
今日簡単に紹介するいろいろ
●
    RankingSVM
    ●
        このあたりがLearning to Rankの始まり?
●
    RankBoost
    ●
        Bipartite Learningの高速な学習
●
    ListNet
    ●
        Listwise Learningを提案
●
    Sofia-ML
    ●
        サンプリングしても精度はほとんど落ちない
どんな素性を使うか?
●
    BM25
    ●
        クエリに対する文書の適合度を計算する指標
●
    PageRank
    ●
        文書の重要度を表すアレ
●
    文書長、タイトル文字列の長さなど
ランク学習の評価指標
●   NDCGとかMAPが使われる
    ●   NDCG (=Normalized Discounted Cumulative Gain)




        –   0〜1の値を取り、大きいほど良い
Bipartite Learning
●
    データはGood, Badの2つの集合で与えられる
    ●
        学習データを作るのが比較的簡単
    ●
        学習が高速なことが多い


            good

                   bad
Pairwise Learning
●
    データはペアの形で与えられる
    ●
        クエリQに対し、文書Aと文書Bはどっちが適切?
    ●
        データを作るのはそこそこ簡単
    ●
        気をつけないとおかしなデータができる
         A > B, B > C, C > A みたいな三すくみ状態
Listwise Learning
●
    データはリストの形で与えられる
    ●
        学習データを作る時点でまずちょっと難しい…
学習の簡単さで比較する
●
    Bipartite, Pairwise, Listwiseの順に簡単
●
    例えば、Listwiseを単純にPairwiseに直すと、
    n^2個のペアができちゃう
●
    n=50なら50x50=2500個のペアを見る事にな
    る
RankingSVM (Herbrich, 1998)
●
    Pairwise
●
    ランク学習の分野で最も基本的な学習器の一つ
●
    オリジナルのアルゴリズムは学習時間が超長い
    ●
        Bipartiteなデータの与え方をした場合、すべての
        サンプルの組みわせを使う
RankBoost (Freund, 2003)
●
    Boostingのランク学習への拡張
●
    基本的にPairwiseだが、Bipartiteだと高速に
    学習できる
●
    圧倒的に高速に学習できるようになったという
    点でエポックメーキング
ListNet (Cao, 2007)
●
    並べ替えるんだから、並べ替えた結果のリスト
    から学習すればいい
●
    ニューラルネットで学習する
●
    Listwiseアプローチはこの後もたくさん出てる
Large Scale Learning to Rank
    ●



●
    2009年のNIPSのワークショップでD. Sculley.
    が発表
    全部のペアを見なくても、ランダムにサンプリ
    ングして数%ぐらいの数を見ればいいよ
Pairwiseについてさらに詳しく
A > Bの時、
(Ψ(A) - Ψ(B)) ・W > 0
となるように学習する
 W:パラメーターベクトル
 Ψ:素性関数


(Ψ(A) - Ψ(B)) を素性とみなせば普通の二値分類問
題!
Pairwiseでの文書の並べ替え
●
    未知の文書A, B, Cの並べ替え
●
    スコアで並べ替える
    ●
        Learning to Rank的にはスコアを出す必要はない
        のだが、ほぼ確実にスコアでソートする
●
    w・Ψ(A), w・Ψ(B) ...
Confidence Weighted
Confidence Weightedとは
●
    オンライン線形学習アルゴリズムの1つ
    ●
        サンプルを一つ読んでパラメーターを更新する
●
    それぞれの素性に対して分散を考慮しながら
    アップデートを行う
    ●
        分散が小さい=自信(Confidence)がある
更新式
Confidence Weightedの特徴
●
    学習が早い
    ●
        ループを1回回すとほぼ収束し、しかも精度は高い
●
    ノイズに弱い
    ●
        AROW, NAROWという対策が提案されている
というわけで、作ってみた
RankCW
●
    二値分類としての学習にはollを利用
●
    リストからランダムにサンプリングしてペアワ
    イズで学習
●
    2年ぐらい前の正月に作った
    ●
        雑誌記事からの締切り逃避パワー
早速実験してみよう
実験データ:LETOR
●
    MS Researchが作っているデータセット群
●
    Pairwise, Listwiseの2種類でデータが提供される
●
    文書からあらかじめ素性が抽出されている
    –   自分で素性を作らなくていい
    –   逆に新しく素性を作りたくても作れない
        ●
            データセットによっては元データが入手できる
●
    今回はOHSUMEDとMQ2007を使用
実験結果(NDCG)
●   OHSUMED
    ●   CW:   0.475   0.424   0.405   0.404   0.397
    ●   SVM: 0.544    0.461   0.442   0.431   0.423
●   MQ2007-list
    ●   CW:   0.221   0.228   0.226   0.230   0.235
    ●   SVM: 0.409    0.407   0.406   0.408   0.414
    ●   ※MQ-2007のSVMの結果はLETORより引用
実験結果をよく見る




ありえないぐらいにCWの性能が低い!
調査した結果と感想
●
    Confidence Weightedはノイズに弱い
    ●
        あまりの低性能さに最初はバグかと思った
    ●
        SVM(最適化にはFOBOSを利用)に変えると圧倒的に
        よくなった
本当は何がやりたかったか?
●
    Listwiseだとデータがリストでくるので、デー
    タに重み付けしてPairwise Trainingすれば実
    装は簡単でいい性能が出せるのでは?


→単純にやっただけではうまくいかなかった
まとめ
●
    Learning to Rankはデータの並べ替え
●
    手法を選べば実装は難しくない
    ●
        それでいて結構いい精度が出る
●
    Confidence Weightedは高速だがノイズに弱い
    ●
        適用するデータをよく考えよう!
    ●
        伝統的な手法もとりあえず試した方がいい

Confidence Weightedで ランク学習を実装してみた

  • 1.
  • 2.
    自己紹介:徳永 拓之 ● twitter id:tkng ● (株) Preferred Infrastructure 勤務 ● 守備範囲:レコメンド・NLPなど ● カレーを食べるのが趣味 ● 上野デリーのコルマカレーが好きです ● 早売りの週刊少年ジャンプを読むのも好き
  • 3.
    宣伝:NLP2011で発表します C4-6 日本語かな漢字変換における識別モデル の適用とその考察 ○徳永拓之, 岡野原大輔 (PFI) 3月10日(木) 13:00-15:30 (A1-201教室) ● 今日の発表でここが一番NLPっぽい
  • 4.
    発表の概要 ● ランク学習とは ● Confidence Weightedとは ● Confidence Weightedによるランク学習 中身の薄い発表なのでゆったりと リラックスした気持ちで聞くのが オススメ!
  • 5.
  • 6.
    ランク学習(Learning to Rank) データの集合に対して順位付けを行う問題 ● データの与え方によってBipartite, Pairwise, Listwiseなどに分類できる 検索結果の並べかえやインターネット広告の最 適化など、近年応用できる範囲が広がり、研究 として重要になっている
  • 7.
    Learning to Rankの研究グループ ● Yahoo Research, MS Researchが強い ● 要するにデータ持ってるところが強い ● Googleは調べた頃は論文あまり出してなかった ● 今回のスライドもMS ResearchのHang Liや Tie-Yan Liuのスライドを参考に作りました ● 日本語ではチュートリアルっぽい資料があまりない
  • 8.
    自然言語処理 ランク学習 ● 高次元 ● (比較的)低次元 ● スパース ● デンス
  • 9.
    今日簡単に紹介するいろいろ ● RankingSVM ● このあたりがLearning to Rankの始まり? ● RankBoost ● Bipartite Learningの高速な学習 ● ListNet ● Listwise Learningを提案 ● Sofia-ML ● サンプリングしても精度はほとんど落ちない
  • 10.
    どんな素性を使うか? ● BM25 ● クエリに対する文書の適合度を計算する指標 ● PageRank ● 文書の重要度を表すアレ ● 文書長、タイトル文字列の長さなど
  • 11.
    ランク学習の評価指標 ● NDCGとかMAPが使われる ● NDCG (=Normalized Discounted Cumulative Gain) – 0〜1の値を取り、大きいほど良い
  • 12.
    Bipartite Learning ● データはGood, Badの2つの集合で与えられる ● 学習データを作るのが比較的簡単 ● 学習が高速なことが多い good bad
  • 13.
    Pairwise Learning ● データはペアの形で与えられる ● クエリQに対し、文書Aと文書Bはどっちが適切? ● データを作るのはそこそこ簡単 ● 気をつけないとおかしなデータができる A > B, B > C, C > A みたいな三すくみ状態
  • 14.
    Listwise Learning ● データはリストの形で与えられる ● 学習データを作る時点でまずちょっと難しい…
  • 15.
    学習の簡単さで比較する ● Bipartite, Pairwise, Listwiseの順に簡単 ● 例えば、Listwiseを単純にPairwiseに直すと、 n^2個のペアができちゃう ● n=50なら50x50=2500個のペアを見る事にな る
  • 16.
    RankingSVM (Herbrich, 1998) ● Pairwise ● ランク学習の分野で最も基本的な学習器の一つ ● オリジナルのアルゴリズムは学習時間が超長い ● Bipartiteなデータの与え方をした場合、すべての サンプルの組みわせを使う
  • 17.
    RankBoost (Freund, 2003) ● Boostingのランク学習への拡張 ● 基本的にPairwiseだが、Bipartiteだと高速に 学習できる ● 圧倒的に高速に学習できるようになったという 点でエポックメーキング
  • 18.
    ListNet (Cao, 2007) ● 並べ替えるんだから、並べ替えた結果のリスト から学習すればいい ● ニューラルネットで学習する ● Listwiseアプローチはこの後もたくさん出てる
  • 19.
    Large Scale Learningto Rank ● ● 2009年のNIPSのワークショップでD. Sculley. が発表 全部のペアを見なくても、ランダムにサンプリ ングして数%ぐらいの数を見ればいいよ
  • 20.
    Pairwiseについてさらに詳しく A > Bの時、 (Ψ(A)- Ψ(B)) ・W > 0 となるように学習する  W:パラメーターベクトル  Ψ:素性関数 (Ψ(A) - Ψ(B)) を素性とみなせば普通の二値分類問 題!
  • 21.
    Pairwiseでの文書の並べ替え ● 未知の文書A, B, Cの並べ替え ● スコアで並べ替える ● Learning to Rank的にはスコアを出す必要はない のだが、ほぼ確実にスコアでソートする ● w・Ψ(A), w・Ψ(B) ...
  • 22.
  • 23.
    Confidence Weightedとは ● オンライン線形学習アルゴリズムの1つ ● サンプルを一つ読んでパラメーターを更新する ● それぞれの素性に対して分散を考慮しながら アップデートを行う ● 分散が小さい=自信(Confidence)がある
  • 24.
  • 25.
    Confidence Weightedの特徴 ● 学習が早い ● ループを1回回すとほぼ収束し、しかも精度は高い ● ノイズに弱い ● AROW, NAROWという対策が提案されている
  • 26.
  • 27.
    RankCW ● 二値分類としての学習にはollを利用 ● リストからランダムにサンプリングしてペアワ イズで学習 ● 2年ぐらい前の正月に作った ● 雑誌記事からの締切り逃避パワー
  • 28.
    早速実験してみよう 実験データ:LETOR ● MS Researchが作っているデータセット群 ● Pairwise, Listwiseの2種類でデータが提供される ● 文書からあらかじめ素性が抽出されている – 自分で素性を作らなくていい – 逆に新しく素性を作りたくても作れない ● データセットによっては元データが入手できる ● 今回はOHSUMEDとMQ2007を使用
  • 29.
    実験結果(NDCG) ● OHSUMED ● CW: 0.475 0.424 0.405 0.404 0.397 ● SVM: 0.544 0.461 0.442 0.431 0.423 ● MQ2007-list ● CW: 0.221 0.228 0.226 0.230 0.235 ● SVM: 0.409 0.407 0.406 0.408 0.414 ● ※MQ-2007のSVMの結果はLETORより引用
  • 30.
  • 31.
    調査した結果と感想 ● Confidence Weightedはノイズに弱い ● あまりの低性能さに最初はバグかと思った ● SVM(最適化にはFOBOSを利用)に変えると圧倒的に よくなった
  • 32.
    本当は何がやりたかったか? ● Listwiseだとデータがリストでくるので、デー タに重み付けしてPairwise Trainingすれば実 装は簡単でいい性能が出せるのでは? →単純にやっただけではうまくいかなかった
  • 33.
    まとめ ● Learning to Rankはデータの並べ替え ● 手法を選べば実装は難しくない ● それでいて結構いい精度が出る ● Confidence Weightedは高速だがノイズに弱い ● 適用するデータをよく考えよう! ● 伝統的な手法もとりあえず試した方がいい