confidence weightedで ランク学習を実装してみた
TRANSCRIPT
自己紹介:徳永 拓之
● 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は高速だがノイズに弱い
● 適用するデータをよく考えよう!● 伝統的な手法もとりあえず試した方がいい