#Paper Reading# Learning a Deep Listwise Context Model for Ranking Refinement

论文题目: Learning a Deep Listwise Context Model for Ranking Refinement
论文地址: https://dl.acm.org/citation.cfm?id=3209985
论文发表于: SIGIR 2018(CCF A类会议)

论文大体内容:
本文主要提出了一个Rerank模型——Deep Listwise Context Model(DLCM),用于解决传统LTR模型只考虑单item的得分,而没有考虑最后TopN个item之间的相关性问题。

Motivation:
传统LTR模型对整体平均来说是效果不错的,但对于每个query并非是最优的,造成这种现象的原因在于不同的query对应的相关文档可能在特征空间具有不同的分布。其实理解到推荐系统就是:Point-wise模型只考虑单item的得分,而没有考虑最后TopN个item之间的相关性,所以需要一个Rerank的模型来解决这个问题;

Contribution:
本文作者提出使用排序后的TopN个item的信息(local ranking context),来对最终的排序结果进行调整。主要做法是通过使用GRU模型来学习TopN的item形成的local ranking context信息,然后用于rerank;

1. DLCM模型主要包括3步:
①传统LTR模型,得到精排的TopN个item;
②使用GRU从后到前的顺序学习TopN个item的关系;
③根据GRU输出进行rerank学习;

2. DLCM架构图如下;

3. 传统LTR模型使用2层网络来学习Item表示;

这里使用elu激活函数,而非Relu;
常用的几个Relu系列激活函数对比:
(1)Relu激活函数 f(x)=max(0, x)
优点:①解决梯度消失问题;②计算速度快;③收敛速度快;
缺点:①输出不是zero-centered(均值不为0);②Dead Relu问题,某些神经元因为初始化负数,或者Learning rate过大,w=w-αdw,会使w变为负数,一旦死去,不能再复活;
(2)Leaky Relu激活函数 f(x)=max(0.01x, x)
主要解决Dead Relu的问题;
(3)elu激活函数 f(x)=x(x>0)或者α(exp(x)-1)
优点:①解决了Dead Relu的问题;②输出是zero-centered(均值偏向0),收敛速度更快;
缺点:计算量稍大;

4. GRU使用常见的方式,注意的是这里Item的Position是从低分到高分输入到GRU中的,是因为这样的顺序可以使得高分的Item对最终Sn的影响大一些;

5. 最后进行rerank学习的时候,作者用的是类似于机器翻译中的attention函数。作者也试过用三层网络,但是效果并不好;

6. 作者尝试了三种不同的Listwise Loss Function,包括ListMLE,SoftRank,Attention Rank;

实验
7. Dataset

8. Baseline
①SVMrank;
②LambdaMART;

9. Metric
①NDCG;
②ERR(Expected Reciprocal Rank);

10. 实验结果

 

以上均为个人见解,因本人水平有限,如发现有所错漏,敬请指出,谢谢!

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
XGBoost是一种常用的机器学习框架,可以用于排序任务,包括listwise排序。 listwise排序是一种相对较复杂的排序方式,它的目标是对整个排名列表进行优化,而不是单个文档。因此,listwise排序需要使用特殊的代价函数来训练模型。 下面是一个简单的使用XGBoost实现listwise排序的例子: ```python import xgboost as xgb import numpy as np # 构造训练数据 train_data = [ (np.array([1, 2, 3]), 1), (np.array([2, 3, 1]), 2), (np.array([3, 2, 1]), 3) ] # 定义代价函数 def listwise_cost(y_true, y_pred): # 计算所有文档的平均评分 avg_score = np.mean(y_true) # 计算代价 cost = np.sum((y_true - y_pred)**2) - len(y_true)*(avg_score - np.mean(y_pred))**2 return cost # 定义模型参数 params = { 'objective': 'rank:ndcg', 'eval_metric': 'ndcg@5', 'learning_rate': 0.1, 'max_depth': 3, 'n_estimators': 100 } # 训练模型 model = xgb.sklearn.XGBRanker(**params) model.fit(X=np.array([x[0] for x in train_data]), y=np.array([x[1] for x in train_data]), group=[len(train_data)]) # 预测 test_data = np.array([4, 5, 6]) y_pred = model.predict(test_data.reshape(1, -1)) print(y_pred) ``` 在这个例子中,我们使用了XGBoost的Ranker模型,并定义了代价函数listwise_cost。我们使用NDCG作为评价指标,并使用XGBoost默认的NDCG代价函数进行优化。我们还使用了group参数来指定每个query中的文档数。 在训练模型时,我们传入了X和y数组,其中X是一个二维数组,每行代表一个query的所有文档的特征向量,y是一个一维数组,代表每个文档的评分。我们还传入了group参数,它是一个一维数组,代表每个query中的文档数。 最后,我们使用训练好的模型对一个新的query进行预测,并输出预测结果。 需要注意的是,listwise排序是一种比较复杂的排序方式,需要针对具体的业务场景进行调整和优化。上面的例子只是一个简单的示例,实际应用中需要根据具体情况进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值