confidence weightedで ランク学習を実装してみた

33
Confidence Weightedで ランク学習を実装してみた 徳永拓之 <[email protected]> 2011/01/22 第4回 自然言語処理勉強会@東京

Upload: tkng

Post on 11-Jun-2015

6.295 views

Category:

Technology


5 download

TRANSCRIPT

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

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

徳永拓之 <[email protected]>

2011/01/22 第4回 自然言語処理勉強会@東京

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

自己紹介:徳永 拓之

● twitter id:tkng● (株) Preferred Infrastructure 勤務

● 守備範囲:レコメンド・NLPなど● カレーを食べるのが趣味

● 上野デリーのコルマカレーが好きです● 早売りの週刊少年ジャンプを読むのも好き

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

宣伝:NLP2011で発表します

C4-6 日本語かな漢字変換における識別モデルの適用とその考察

○徳永拓之, 岡野原大輔 (PFI)

3月10日(木) 13:00-15:30 (A1-201教室)

● 今日の発表でここが一番NLPっぽい

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

発表の概要

● ランク学習とは● Confidence Weightedとは● Confidence Weightedによるランク学習

中身の薄い発表なのでゆったりとリラックスした気持ちで聞くのがオススメ!

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

ランク学習とは?

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

ランク学習(Learning to Rank)

データの集合に対して順位付けを行う問題● データの与え方によってBipartite, Pairwise,

Listwiseなどに分類できる

検索結果の並べかえやインターネット広告の最適化など、近年応用できる範囲が広がり、研究として重要になっている

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

Learning to Rankの研究グループ

● Yahoo Research, MS Researchが強い● 要するにデータ持ってるところが強い● Googleは調べた頃は論文あまり出してなかった

● 今回のスライドもMS ResearchのHang LiやTie-Yan Liuのスライドを参考に作りました● 日本語ではチュートリアルっぽい資料があまりない

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

自然言語処理

● 高次元● スパース

● (比較的)低次元● デンス

ランク学習

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

今日簡単に紹介するいろいろ

● RankingSVM● このあたりがLearning to Rankの始まり?

● RankBoost● Bipartite Learningの高速な学習

● ListNet● Listwise Learningを提案

● Sofia-ML● サンプリングしても精度はほとんど落ちない

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

どんな素性を使うか?

● BM25● クエリに対する文書の適合度を計算する指標

● PageRank● 文書の重要度を表すアレ

● 文書長、タイトル文字列の長さなど

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

ランク学習の評価指標

● NDCGとかMAPが使われる● NDCG (=Normalized Discounted Cumulative Gain)

– 0〜1の値を取り、大きいほど良い

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

Bipartite Learning

● データはGood, Badの2つの集合で与えられる● 学習データを作るのが比較的簡単● 学習が高速なことが多い

good

bad

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

Pairwise Learning

● データはペアの形で与えられる● クエリQに対し、文書Aと文書Bはどっちが適切?● データを作るのはそこそこ簡単● 気をつけないとおかしなデータができる

A > B, B > C, C > A みたいな三すくみ状態

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

Listwise Learning

● データはリストの形で与えられる● 学習データを作る時点でまずちょっと難しい…

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

学習の簡単さで比較する

● Bipartite, Pairwise, Listwiseの順に簡単● 例えば、Listwiseを単純にPairwiseに直すと、

n^2個のペアができちゃう● n=50なら50x50=2500個のペアを見る事にな

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

RankingSVM (Herbrich, 1998)

● Pairwise● ランク学習の分野で最も基本的な学習器の一つ● オリジナルのアルゴリズムは学習時間が超長い

● Bipartiteなデータの与え方をした場合、すべてのサンプルの組みわせを使う

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

RankBoost (Freund, 2003)

● Boostingのランク学習への拡張● 基本的にPairwiseだが、Bipartiteだと高速に

学習できる● 圧倒的に高速に学習できるようになったという点でエポックメーキング

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

ListNet (Cao, 2007)

● 並べ替えるんだから、並べ替えた結果のリストから学習すればいい

● ニューラルネットで学習する● Listwiseアプローチはこの後もたくさん出てる

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

●Large Scale Learning to Rank

● 2009年のNIPSのワークショップでD. Sculley. が発表

全部のペアを見なくても、ランダムにサンプリングして数%ぐらいの数を見ればいいよ

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

Pairwiseについてさらに詳しく

A > Bの時、

(Ψ(A) - Ψ(B)) ・W > 0

となるように学習する

 W:パラメーターベクトル

 Ψ:素性関数

(Ψ(A) - Ψ(B)) を素性とみなせば普通の二値分類問題!

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

Pairwiseでの文書の並べ替え

● 未知の文書A, B, Cの並べ替え● スコアで並べ替える

● Learning to Rank的にはスコアを出す必要はないのだが、ほぼ確実にスコアでソートする

● w・Ψ(A), w・Ψ(B) ...

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

Confidence Weighted

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

Confidence Weightedとは

● オンライン線形学習アルゴリズムの1つ● サンプルを一つ読んでパラメーターを更新する

● それぞれの素性に対して分散を考慮しながらアップデートを行う● 分散が小さい=自信(Confidence)がある

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

更新式

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

Confidence Weightedの特徴

● 学習が早い● ループを1回回すとほぼ収束し、しかも精度は高い

● ノイズに弱い● AROW, NAROWという対策が提案されている

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

というわけで、作ってみた

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

RankCW

● 二値分類としての学習にはollを利用● リストからランダムにサンプリングしてペアワ

イズで学習● 2年ぐらい前の正月に作った

● 雑誌記事からの締切り逃避パワー

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

早速実験してみよう

実験データ:LETOR● MS Researchが作っているデータセット群● Pairwise, Listwiseの2種類でデータが提供される● 文書からあらかじめ素性が抽出されている

– 自分で素性を作らなくていい– 逆に新しく素性を作りたくても作れない

● データセットによっては元データが入手できる

● 今回はOHSUMEDとMQ2007を使用

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

実験結果(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より引用

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

実験結果をよく見る

ありえないぐらいにCWの性能が低い!

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

調査した結果と感想

● Confidence Weightedはノイズに弱い● あまりの低性能さに最初はバグかと思った● SVM(最適化にはFOBOSを利用)に変えると圧倒的に

よくなった

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

本当は何がやりたかったか?

● Listwiseだとデータがリストでくるので、データに重み付けしてPairwise Trainingすれば実装は簡単でいい性能が出せるのでは?

→単純にやっただけではうまくいかなかった

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

まとめ

● Learning to Rankはデータの並べ替え● 手法を選べば実装は難しくない

● それでいて結構いい精度が出る● Confidence Weightedは高速だがノイズに弱い

● 適用するデータをよく考えよう!● 伝統的な手法もとりあえず試した方がいい