Learning to Order Thing

問題設定 #

$a, b\in X$とする。$a, b$に対して、$a < b$($b$は$a$より良い)か$a > b$($a$は$b$より良い)のように、優劣を伝えるクエリがあるとする。

大量にその形のクエリを読み込んで、全体で$X$の各要素をランキングを作りたい

人が判断していると考えるので、$a < b$というクエリと$a > b$というクエリは両方存在しても矛盾とはみなさない。

論文情報 #

タイトルLearning to Order Things
刊行物Journal of Artificial Intelligence Research 10(1999) 243-270
著者William W. Cohen, Robert E. Schapire, Yoram Singer

論文の手法 #

設定 #

  • $X$は比較対象の集合とする。
  • pref(a, b)を、$X \times X \rightarrow [0, 1]$の関数とする。
    • 1に近いほど、$a > b$の傾向が強い。
    • 0に近いほど、$b < a$の傾向が強い。
    • 0.5に近ければ、どちらとも言えない。
  • pref(a, b)は、本質的にはいくつかの「好み関数」の線形合成である。下図参照。

これは、左と真ん中は、「ある順序(大概はわからないけど)に従って、作られるpref()」であり、それらを線形合成して新たなpref()を右図に作っている。

また、明確に順位を持っているときに、pref()を作ること自体は容易である。以下のようにすればいい。

  • pref(a, b)で、$a < b$なら、1、$a > b$なら0、$a = b$なら0.5

学習のやり方 #

あらかじめ、各人の意見に重み$w_i$を設定する。

毎回、何人かの人からそれぞれ各々の$X$内でのランキングを作る。そのランキングをもとに、重みつきでpref()を作る。つまり以下の式。

$$ pref(a, b) = \Sigma_{i = 1}^{N} w_i pref_{sub}(a, b) $$

そして、後述の方法でpref()から、あらたにランキングを生成し、それをuserにfeedback。

そして、今のprefを使い、ロスを以下の式で計算。

$$ ロス = 1 - \frac{1}{|F|} \Sigma_{(a, b) \in F} pref(a, b) $$

このロスをもって、$w_i$を更新して、一周が終わる。

$$ w_i \leftarrow \frac{w_i \beta ^{ロス}}{Z} $$

この$\beta$はハイパーパラメタであって、$Z$はweightの和が1となる正規化のために割っている。

ランキングの推定方法 #

私が知りたかったやつ。

AGREE()という関数を考える。これは順位で$a$が$b$より優れるときのpref(a, b)を全て足し合わせたもの

一般論をいうと、厳密なランキングを見つけるのはNP困難である。

というわけで貪欲法