> For the complete documentation index, see [llms.txt](https://json007.gitbook.io/svm/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://json007.gitbook.io/svm/rank/lambdarank.md).

# LambdaRank

LambdaRank就是在RankNet中定义了一个$$\lambda$$ 作为梯度，然后从新反推出新的损失函数。

RankNet的损失函数中设计到两个神经网络的输出$$s\_i,s\_j$$ ，所以梯度如下：

$$
\frac {\partial C\_{ij}}{\partial W\_k} =
\frac {\partial C\_{ij}}{\partial s\_i} \frac {\partial s\_i}{\partial W\_k} + \frac {\partial C\_{ij}}{\partial s\_j} \frac {\partial s\_j}{\partial W\_k}
$$

> 一次请求召回的待排序**文档集**D的损失$$C = \sum\_{i,j \in D} \frac {\partial C\_{ij}}{\partial W\_k}$$

对梯度展开

$$
\frac {\partial C\_{ij}}{\partial s\_i} =
\frac {\partial \frac {1}{2} (1-S\_{ij}) \sigma(s\_i-s\_j) + \log (1+e^{-\sigma(s\_i-s\_j)}) }{\partial s\_i} =
\frac {1}{2} (1-S\_{ij}) - \frac {1}{1+e^{-\sigma(s\_i-s\_j)}} = -
\frac {\partial C\_{ij}}{\partial s\_j}
$$

$$
\frac {\partial C\_{ij}}{\partial W\_k} =
(\frac {1}{2} (1-S\_{ij}) - \frac {1}{1+e^{-\sigma(s\_i-s\_j)}})(\frac {\partial s\_i}{\partial W\_k} - \frac {\partial s\_j}{\partial W\_k})  = \lambda\_{ij} (\frac {\partial s\_i}{\partial W\_k} - \frac {\partial s\_j}{\partial W\_k})  \\
\lambda\_{ij} = \frac {1}{2} (1-S\_{ij}) - \frac {1}{1+e^{-\sigma(s\_i-s\_j)}}
$$

$$
\text{对于文档pair，由于} d\_i \triangleright d\_j \text{因此：} S\_{ij} = 1 \text{所以}\\
\lambda\_{ij} = - \frac {1}{1+e^{-\sigma(s\_i-s\_j)}}
$$

因此对每个文档$$d\_i$$，有$$\lambda\_i = \sum\_{j(i,j) \in D} \lambda\_{ij} - \sum\_{j(j,i) \in D} \lambda\_{ij}$$，即每一个文档下一次调序的方向和强度取决于**所有同一query的其他不同label的文档**。

此外，还引入评价指标Z（如NDCG、ERR等），把交换两个文档的位置引起的评价指标的变化$$\left| \Delta Z\_{i,j} \right|$$作为其中一个因子。

通过梯度反推出LambdaRank的**损失函数**：$$C\_{ij} = \log (1+e^{-\sigma(s\_i-s\_j)}) \left| \Delta Z\_{i,j} \right|$$ 。

LambdaRank相比RankNet的优势在于分解因式后训练速度变快，同时考虑了评价指标，直接对问题求解，效果更明显。

**Ranklib**开源工具包定义的数据格式如下：

> label qid:$id $feaid:$feavalue $feaid:$feavalue … #description

每行代表一个样本，相同查询请求的样本的qid相同，label表示该样本和该查询请求的相关程度，description描述该样本属于哪个待排序文档，用于区分不同的文档。

## 参考佳文

[Learning To Rank之LambdaMART的前世今生](http://blog.csdn.net/huagong_adu/article/details/40710305)

<http://datayuan.baijia.baidu.com/article/486753> 达观数据帮你揭开搜索引擎排序的神秘面纱
