具体的代码见:http://datawhale.club/t/topic/201
特征构造很重要的是要结合用户的历史点击文章信息。 往往用户的最后一次点击会和其最后几次点击有很大的关联。 所以我们就可以对于每个候选文章, 做出与最后几次点击相关的特征如下:
- 候选item与最后几次点击的相似性特征(embedding内积) — 这个直接关联用户历史行为
- 候选item与最后几次点击的相似性特征的统计特征 — 统计特征可以减少一些波动和异常
- 候选item与最后几次点击文章的字数差的特征 — 可以通过字数看用户偏好
- 候选item与最后几次点击的文章建立的时间差特征 — 时间差特征可以看出该用户对于文章的实时性的偏好
- 如果使用了youtube召回的话, 我们还可以制作用户与候选item的相似特征
实现思路:
- 我们首先获得用户的最后一次点击操作和用户的历史点击
- 基于用户的历史行为制作特征, 这个会用到用户的历史点击表, 最后的召回列表, 文章的信息表和embedding向量
- 制作标签, 形成最后的监督学习数据集
对训练数据做负采样
通过召回我们将数据转换成三元组的形式(user1, item1, label)的形式,观察发现正负样本差距极度不平衡,我们可以先对负样本进行下采样,下采样的目的一方面缓解了正负样本比例的问题,另一方面也减小了我们做排序特征的压力,我们在做负采样的时候又有哪些东西是需要注意的呢?
- 只对负样本进行下采样(如果有比较好的正样本扩充的方法其实也是可以考虑的)
- 负采样之后,保证所有的用户和文章仍然出现在采样之后的数据中
- 下采样的比例可以根据实际情况人为的控制
- 做完负采样之后,更新此时新的用户召回文章列表,因为后续做特征的时候可能用到相对位置的信息。