RankNet では \((x_1, x_2) : x_1 \succ x_2\) というペアから学習するのに対して、 この論文が提案する ListNet は、純粋にランキング
\[(x_1, x_2, \ldots, x_n) : x_1 \succ x_2 \succ \cdots \succ x_n\]から学習する. RankNet が pairwise であると呼ばれるのに ListNet は listwise だと言われる.
オブジェクト (あるいは素性) の列
\[x = (x_1, x_2, \ldots, x_n)\]が与えられた時に、これの 置換確率 というものを考える.
\[\phi : \mathcal{X} \to \mathbb{R}\]置換 \(\pi\) とは \((1,2,\ldots,n)\) を並び替えてできる列のこと (対称群の元としての置換).
これらについて置換確率
\[P_x(\pi; \phi) = \prod_{j=1}^n \frac{\phi(y_j)}{\sum_{k=j}^n \phi(y_k)}\]ただし \(y\) は \(x\) を \(\pi\) によって置換してできる列 ( \(y=\pi(x)\) ).
いくつか重要な性質が定理として紹介され論文では証明が載ってる.
swap sort みたいなことを考えると確かめられる.
全く同様に、
\(\phi\) が \(\phi(x) = \exp(x)\) のとき、 \(\phi(x + a) = \exp(a) \phi(x)\) なので
\[P_x(\pi; \phi) = P_{x + \lambda}(\pi; \phi)\]が成立する.
基本的には \(\phi\) には線形関数とか指数関数そのものみたいに簡単な関数が来ることを想定してるらしい.
ランキングの top \(k\) についてだけ考えるなら、初めの \(k\) 項の積だけ計算すれば周辺確率を計算することになって、
\[P_x^k(\pi; \phi) = \prod_{j=1}^k \frac{\phi(y_j)}{\sum_{k=j}^n \phi(y_k)}\]となって計算量が削減できる.
ところで softmax 関数は \(k=1\) で \(\phi = \exp \circ f\) という場合に一致する.
というわけで、置換確率を損失関数に入れて、 \(\phi\) を学習、予測は \(\phi(x_i)\) をスコアにしてランキングを作ればよい.
損失関数は具体的にはあらゆる (top \(k\) の) 置換での確率を計算してその交差エントロピーを計算する.
[^1] : A Probabilistic Framework for Learning to Rank(final-7).dvi - 139.pdf [^2] : ランク学習のListNetをChainerで実装してみた - Qiita