整屏建模解决挑选首条的尝试

问题背景

在推荐流里,首位占据着读者视野内的重要位置,第一条推荐内容的优劣决定着读者的第一印象;同时不同位置点击的统计来看,也是顺位衰减的。现对屏内哪条数据该放到第一条,在模型侧尝试解决下。

基本思路

当一屏数据作为候选集,我们可以获得的是前几屏的行为信息,也有当前候选内容的所有信息,那么该把谁在这些约束下放到第一个上呢?当前新闻的上下文是屏内容,当前屏的上下文是之前session行为,全局还有用户的画像类长期表达,可以自然地想到用Attention结构来作为模型的基本结构。总体思路就一句话:在已知中长短行为下,如何挖掘用户点击屏内的某条新闻概率最大,找到它并置于首位。

模型结构

整体基本结构如下,借鉴下快手的一个图【偷下懒】:

我们对该模型结构做适当调整,
1) 只用数据做输入,仅处理一屏数据,且强化了位置信息。【后期发现弱化掉位置效果更好】
2) 用户ID使用一个向量表达,与新闻序列做位运算。【后期发现,不用这么麻烦也可以】
3) 在每个位置做点击与否的二分预测,然后所有位置做softmax,这样不再是每个位置都用全体候选为潜在目标做预测。

调整之后,我们的模型结构如下【懒不可偷】:

再次改进下模型结构如下【完整版,待实验版】:
用户侧:user的长期行为表达【已训练】 + user中期行为表达【已训练】 + user-当前行为向量【待训练】
与当前屏序列做attention,后面结构如上图。
可优化点:attention层,可以继续优化深度和头数;对稀疏的情况下,也可以优化激活函数;对item的表达,可以更丰富,不仅限于用id2emb的表达。

注意事项

注意1:负样本就是屏内没点击的新闻,正样本就是有点击的新闻。
注意2:为了避免正负样本失衡,现对负样本做遮挡采样,以使得负样本量跟正样本量基本持平。
可以用all_mask = tf.bitwise.bitwise_or(pos_mask, neg_mask)来计算当前使用的样本遮挡位。
注意3:训练时以ID数据训练更快,提供服务时则兼容用ID和原始数据做为输入。

代码附录

github-代码位置

Reference

Pei C, Zhang Y, Zhang Y, et al. Personalized re-ranking for recommendation[C]//Proceedings of the 13th ACM Conference on Recommender Systems. 2019: 3-11.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值