最近想要总结一下 LTR的算法。
先讲解LTR的评价指标
排序指标
信息检索和推荐系统常用排序质量评分有4种:
- MRR(Mean Reciprocal Rank):平均倒数排名。 通用的对搜索推荐算法进行评价的机制,即第一个结果匹配,分数为1,第二个匹配分数为0.5,第n个匹配分数为1/n,如果没有匹配的句子分数为0。最终的分数为所有得分之和。
- MAP(Mean Average Precision):平均正确率均值。
- ERR(Expected Reciprocal Rank):预期倒数排名。
- NDCG(Normalized Discounted Cumulative Gain) :归一化折损累积增益。(DCG,IDCG,NDCG)
- AUC(Area under ROC Curve): ROC 曲线下的面积。
其中MRR和MAP 只能针对二级的相关性(排序等级:相关和不相关,也就是label只有0和1)进行评分,而NDCG和ERR则可以对多级的相关性进行评分(label可以为1,2,3,4,5 五个等级)。NDCG和ERR的另外一个优点是更关注排名靠前的文档,在计算分数时会给予排名靠前的文档更高的权重。但是这两种评分方式的缺点时函数不连续,不能进行求导,所以也就不能简单地将这两种评分方式加入到模型的损失函数中去。
1.1 MRR
对于一个查询 i i i 来说, r a n k i rank_i ranki表示第一个相关结果的排序位置,所以 M R R ( Q ) = 1 ∣ Q ∣ ∑ i = 1 ∣ Q ∣ 1 r a n k i MRR(Q) = \frac{1}{|Q|}\sum^{|Q|}_{i=1}\frac{1}{rank_i} MRR(Q)=∣Q∣1i=1∑∣Q∣ranki1
∣ Q ∣ |Q| ∣Q∣表示查询的数量,MRR表示搜索系统在查询集Q下的平均倒数排名值。MRR只能度量检索结果只有一个并且相关性等级只有相关和不相关两种的情况。
比如:
查询语句 | 查询结果 | 正确结果 | 排序位置 | 排序倒数 |
---|---|---|---|---|
眼霜 | 小棕瓶精华,小棕瓶眼霜,面霜 | 小棕瓶眼霜 | 2 | 1/2 |
神仙水 | skII 神仙水,兰蔻粉水, 菌菇水 | skii神仙水 | 1 | 1 |
面膜 | 芦荟霜,高保湿面霜,skii面膜 | skii面膜 | 3 | 1/3 |
M R R ( Q ) = 1 / 2 + 1 / 3 + 1 3 = 11 18 MRR(Q) =\frac{1/2+1/3+1}{3} = \frac {11}{18} MRR(Q)=31/2+1/3+1=1811
1.2 MAP
假定信息需求 q j ∈ Q q_j \in Q qj∈Q 对应的所有相关文档集合为 d 1 , d 2 . . . . d m j , R j k d_1, d_2....d_{mj}, R_{jk} d1,d2....dmj,Rjk是返回结果中直到遇到 d k d_k dk后其所在位置前(含 d k d_k dk)的所有文档的集合,则定义 M A P ( Q ) 2 MAP(Q)^2 MAP(Q)2如下: M A P ( Q ) = 1 ∣ Q ∣ ∑ j = 1 ∣ Q ∣ 1 m j ∑ k = 1 m j P r e c i s i o n ( R j k ) MAP(Q) = \frac {1}{|Q|}\sum^{|Q|}_{j=1}\frac{1}{m_j}\sum_{k=1}^{m_j}Precision(R_{jk}) MAP(Q)=∣Q∣1j=1∑∣Q∣mj1k=1∑mjPrecision(Rjk)
∣ Q ∣ |Q| ∣Q∣表示查询的数量.
其实有两种计算MPP的方法:
- 第一种,是在每篇相关文档所在位置上求正确率然后平均. 这个称为 非插值MAP(Q), 一般的MAP就是指这个。
- 另一种,是在每个召回率水平上计算此时的插值正确率,然后求平均正确率,最后在不同查询之间计算均值。
查询1 MAC 口红 | – | 查询2 神仙水 | – |
---|---|---|---|
排序位置 | 是否相关 | 排序位置 | 是否相关 |
1 | 是 | 1 | 否 |
2 | 是 | 2 | 是 |
3 | 否 | 3 | 是 |
4 | 否 | 4 | 否 |
5 | 是 | 5 | 否 |
6 | 否 | 6 | 是 |
7 | 否 | 7 | 是 |
针对上面的检索结果,可以计算出:
A P ( 1 ) = ( 1 ∗ 1 + 1 ∗ 1 + 2 / 3 ∗ 0 + 2 / 4 ∗ 0 + 3 / 5 ∗ 1 + 3 / 6 ∗ 0 + 3 / 7 ∗ 0 ) / 3 = 13 / 15 AP(1) = (1*1 + 1*1 + 2/3*0 + 2/4*0 + 3/5*1 + 3/6*0 + 3/7*0)/3=13/15 AP(1)=(1∗1+1∗1+2/3∗0+2/4∗0+3/5∗1+3/6∗0+3/7∗