学习总结
- 召回中,一般的训练方式分为三种:point-wise、pair-wise、list-wise。RecHub中用参数
mode
来指定训练方式,每一种不同的训练方式也对应不同的Loss。对应的三种训练方式可以参考下图,其中a表示user的embedding,b+表示正样本的embedding,b-表示负样本的embedding。- 前面两行是指pointwise即图例看待每个正负样本,使用二分类交叉熵
- pairwise:每次选择一个正样本和一个负样本,使用Hinge loss或者BPR loss损失函数
- listwise:每次选择一个正样本和多个负样本,使用softmax loss函数,其实就是多分类问题(如下图最下面的CrossEntropyLoss函数)
- 召回中样本的选择:
- 正样本:用户点击的物品
- 负样本:没有被召回的;召回但是被排序淘汰的;曝光但是未点击的(排序中最简单的也是曝光未点击的item)
- 微软DSSM奠定的基本思想:
- 离线使用cosine优化相似度
- 在线使用ANN向量化召回
- 首次提出随机负采样
- YouTube双塔的思想:
- In-batch sampled softmax:首次提出in-batch负采样,在batch中除了item以外的所有item作为负样本
- Sample-Bias Corrected:
- Batch内出现的是随机采样的结果,热门物品被采样概率大,造成热门惩罚过高
- 流式纠偏模块:通过采样频率估计采样概率(简单trick:可他通过全局被采频率代替)
- 排序看特征,召回看样本。
- 向量召回:Annoy或者Faiss向量搜索库
- 召回的难点:
- 样本构造不容易,比如负样本比例,负样本采样规则
- 缺乏置信度高的离线评估指标:
- AUC只能参考
- Facebook:拿topk召回结果与用户实际点击做交集并计算precision、recall
- Airbnb:看用户“实际点击”在召回结果中的平均位置
- 多样性
- Pytorch中没有sampled softmax:手动提前负采样一些负样本,和本次的1个正样本计算
LTR排序中的pointwise、pairwise、listwise方法:
- Pointwise方法(单点法):通过近似为回归问题解决排序问题:
- 输入的单条样本为得分-文档,将每个查询-文档对的相关性得分作为实数分数或者序数分数,使得单个查询-文档对作为样本点(Pointwise的由来),训练排序模型。
- 预测时候对于指定输入,给出查询-文档对的相关性得分。
- Pairwise方法(配对法):
- 通过近似为分类问题解决排序问题,输入的单条样本为标签-文档对。对于一次查询的多个结果文档,组合任意两个文档形成文档对作为输入样本。
- 即学习一个二分类器,对输入的一对文档对AB(Pairwise的由来),根据A相关性是否比B好,二分类器给出分类标签1或0。对所有文档对进行分类,就可以得到一组偏序关系,从而构造文档全集的排序关系。
- 该类方法的原理是对给定的文档全集S,降低排序中的逆序文档对的个数来降低排序错误,从而达到优化排序结果的目的。
- Listwise方法(列表法)