新零售智能引擎事业群出品
一、引言
主流推荐算法的训练过程要求模型根据用户过往行为拟合用户的下一个行为。但只拟合「下一个行为」存在局限:
- 首先,推荐结果会趋向单一。比如当训练数据中存在大量类似“裙子、裙子、裙子、裙子、裙子、发饰”的序列时,由这个序列构造出来的大部分训练样本的标签都是裙子,这会导致学出来的算法在用户点击裙子后依然会倾向于推荐裙子、而不是推荐发饰之类的搭配类目;
- 其次,用户经常同时有多个兴趣点、也经常处于好奇等原因产生新的兴趣点。这导致下一个点击未必与序列中过去的点击有关,比如“裙子、裙子、裙子、椅子”的序列,训练时要求模型去根据裙子拟合椅子似乎有点勉强。
本文提出让模型利用过去行为去拟合「整个未来行为序列」而非单单只是「下一个行为」的辅助训练思路。主要工作内容是结合解纠缠表征学习和自监督对比学习,来解决其中的两个主要挑战:
- 如何压缩未来序列中相同兴趣点的多次点击,以便提高训练效率、平衡多个占比不均衡的未来兴趣点的权重。
- 如何辨别并剔除未来序列中与过往行为毫不相干的部分。
二、方法
为了解决两个挑战,我们的解决方案如下:
- 如何压缩未来序列中相同兴趣点的多次点击,以便提高训练效率、平衡多个占比不均衡的未来兴趣点的权重:先将未来点击序列中的每一个商品都映射为代表用户该时刻兴趣点的向量,e.g., 50+个商品映射到50+个向量。再对这些向量进行聚类,从而获得用户未来的多个主要兴趣向量,e.g., 50+个向量聚类成8个主要的向量。最后,训练过程要求模型去预测这些未来的兴趣向量,而不是预测未来点击的具体商品,这样我们就只需要拟合8个未来的向量,而不是拟合原本多达50+个的商品。
- 如何辨别并剔除未来序列中与过往行为毫不相干的部分:我们额外要求模型预估训练数据中样本的可靠程度,比如,8个未来兴趣向量和8个历史向量的相似程度有多少、每条训练样本是噪声样本的可能性有多少。在训练时,较长时间将主要使用可靠程度较高的样本,比如从8个未来兴趣向量中挑选出最可靠的2~3个,只要求模型拟合这2~3个未来兴趣向量,剩下的5~6个未来兴趣可能和历史行为没太大关联,因此就不要求模型去预测这部分样本了。
需要注意的是,我们提出来的这个新的训练方式,i.e. 新的sequence-to-sequence loss,是叠加在传统的sequence-to-item loss上的,是两个losses一起同步优化的。因为推荐最终是要推荐商品的,传统的sequence-to-item依旧必不可少,sequence-to-sequence loss只是起到提升表征学习质量的辅助作用。
三、实验
在兴趣点复杂的公开数据上,离线的推荐指标提升十分显著:
在对训练集不断加入噪声后,seq2seq loss相比传统seq2item loss更鲁棒:
在手淘大规模的离线实验上,预测下五个点击的HitRate@50比只用传统sequence-to-item loss提升绝对值0.5%,具体为12.6% vs.12.1%。初版上线的结论是点击率等无明显变化、曝光发现性有些许提升,后续将在我们团队改进后的多向量模型MultCLR和具有消除曝光偏差作用的向量召回损失函数CLRec下继续迭代优化线上效果。
四、结论
我们提出了一种新的训练向量召回系统的训练方式,旨在弥补传统训练目标的短时造成的多样性缺乏及不鲁棒的问题。核心技术贡献是结合解纠缠表征学习和自监督学习。
更多数据挖掘内容查看:《KDD论文精华解读》