工业界常用的推荐系统模型有哪些?
最近收到很多同学的提问,目前工业界常用的推荐系统模型有哪些?CTR和推荐算法有什么本质区别?推荐系统中如何做 User Embedding?橙子邀请了淘系技术部的豆苗同学对以上问题进行解答,也欢迎大家一起交流。
Q:工业界推荐系统采用什么架构?
豆苗:
▐ 召回环节优化通常经历三个阶段
基础个性化召回
深度个性化召回
将user、item转化为向量,通过向量检索技术召回topk,变“精确匹配”为“模糊查找”,提升召回的扩展性。首先需要尝试的是FM,可以参考:张俊林的《推荐系统召回四模型之:全能的FM模型》
https://zhuanlan.zhihu.com/p/58160982
还有基于用户行为序列、基于多兴趣拆分的、基于graph embedding和和基于知识图谱融合的。
用户行为序列
这类模型代表性的方法是SASRec,这是18年的发表在ICDM上的一篇针对召回的工作,主要是借助transformer来对用户的历史行为序列建模,提取更为有价值的信息。整个模型基本上是套在transformer这个框架下的,所以有position embedding、block的stacking等等,需要注意的是作者也有作一些调整,比如只有当j > i 的时候Qi 和 kj 才会进行相关性的计算,并且采用非固定的Position embedding。
https://cseweb.ucsd.edu/~jmcauley/pdfs/icdm18.pdf
用户多兴趣拆分
这类模型核心的思想就是认为单一的向量无法充分表征用户,从而采用多个向量表征用户的多峰兴趣,最为典型的就是MIND,它利用动态路由技术,对用户兴趣进行拆分。模型的输入包含三部分:用户属性特征、用户行为特征(例如点击过的商品/内容)和label特征。首先,所有的id类特征都经过embedding层,其中对于用户行为特征对应的embedding向量还会进行average pooling。接着,传递给multi-Interest extract layer,生成的interest capsules。最后将interest capsules与用户属性特征的embedding concate起来经过几层全连接网络,得到用户多个兴趣表达向量。值得注意的是,在模型的最后有设计一个label-aware attention层,用以针对每个用户从多个兴趣中挑选出与其下一次点击行为最相关的兴趣, 送入到后续的训练。
https://arxiv.org/abs/1904.08030v1
其他相关的多兴趣拆分的方法有:
基于注意力机制
https://dl.acm.org/doi/abs/10.1145/3394486.3403344https://dl.acm.org/doi/abs/10.1145/3397271.3401088
基于层次凝聚聚类
https://dl.acm.org/doi/10.1145/3394486.3403280
Graph Embedding
这类模型是近期推荐系统召回环节较为热门的研究方法,并且也在线上拿到了收益。例如EGES、PinSAGE、PinnerSAGE等。
多目标多策略召回
在以点击率为优化目标的基础上,尝试优化发现性、成交率等其他目标。以及将积累的各种召回模型,根据业务实际需求实行多策略召回。
Q:CTR和推荐算法有什么本质区别?
豆苗:
▐ 召回有没有必要?——有必要!
基于统计的启发式召回
基于深度学习的向量召回方法
https://zhuanlan.zhihu.com/p/58160982
▐ 推荐系统仅有ctr预估打分排序就够了吗?——不够!
Q:推荐系统中如何做 User Embedding?
豆苗:
常用的embedding模型有:
▐ 传统的MF模型
https://zhuanlan.zhihu.com/p/35262187
▐ 端到端DNN-embedding模型
▐ Graph embedding模型
▐ 浅层模型
在由item-item组成的网络中进行随机游走,产生item序列库。将item序列库当做NLP中语料库作为训练样本输入word2vec进行训练,得到item的embedding。例如:DeepWalk、Node2vec、EGES。具体可参考王喆的《深度学习中不得不学的Graph Embedding方法》
https://zhuanlan.zhihu.com/p/64200072
▐ 深层模型
目前广泛使用的方法是Graph Convolutional Networks(GCN)。GCN将卷积从图像和NLP领域拓展到Graph Embedding,每个节点单独encode,但encode的时候,会利用卷积操作来汇聚邻域节点的属性信息,并叠加多层网络,形成节点的embedding表示。相比较于浅层模型,卷积核参数或网络的参数是所有节点之间共享的,因此能够有效减少参数量,同时能够泛化到新的节点。例如:GraphSAGE、GAT、NGCF、LightGCN等。更多论文可参考:
https://github.com/thunlp/GNNPapers
通常情况下,user和item处在相互对等的位置。
所以在建模user-user关系得到user embedding的任务中可尝试将item-item的建模模型迁移过来;在建模user-item关系得到user embedding的任务中,可尝试端到端的双塔模型或异构网络表示模型。
大家还有什么话题想要了解,欢迎评论区留言,我们下期见~
作者|豆苗
编辑|橙子君
出品|阿里巴巴新零售淘系技术