关于推荐系统,若是忘掉全部的公式和代码,忘记全部的语言描述,脑海里就剩下几张图景,会是什么?一张二维表格 ,一个拓扑图 ,一条时间线 。这三幅图景,是我看待推荐算法的三种视角。
视角一:矩阵视角
在脑中想象一个二维的表格,每一行表明一个用户,每一列表明一个物品,表格里的每个点表明用户对物品的操做,这个操做能够是评分,点击,点赞。其中,有些格子记录了行为,有些格子是空的。到这里,咱们就创建了基本的矩阵视角,
推荐问题转化成了如何补上那些空格子。
用户对物品的评分等于类似用户对该物品评分的加权平均值,这就是user-base的协同过滤了。换一个方向,用户对物品的评分等于该用户对其余物品的评分按物品类似加权平均值,这就是item-base的协同过滤。度量用户之间的类似度,把矩阵的一行——对物品的评分向量做为该用户的表示向量,那么用户之间能够计算向量的距离,能够选择任何距离公式,如余弦距离,皮尔森距离。对于物品之间的类似度,换一个方向便可。
对于任何两个物品,能够计算它们的评分差值。具体来讲,两个物品有一批共同的历史评分用户,也就是矩阵里两列有交集的行,每一行能够计算一个差值,将差值平均起来,做为两个物品的距离。和上面的距离不一样的,这个差值能够想象成物理中的位移,带着符号的。推荐时,某用户对于某个物品的评分,等于某用户对其余物品评分加上这个位移,再进行平均获得的平均评分。和上面的item-base同样的,都是列向量计算类似度,只不过类似度由距离变成了位移。这就是著名的
Slope-One算法
。
物品直接的类似度,除了上面的启发式算法,能不能经过数据自己学习所得?这就诞生了SLIM(Sparse Linear Methods)方法。矩阵
是
评分矩阵,要学习一个
维的物品类似的矩阵
。
的每一行是用户的历史评分,
的每一列是每个物品和该列对应物品的类似度,计算内积即为该用户对该列物品的评分,经过梯度降低训练来拟合真实评分。其中,
非负体现了类似度的物理意义;对角线限制为0避免对角线全都学习到1完美过拟合;添加L1正则产生稀疏的
,使得结果在大规模物品集上可用;
的每一列的学习均可以看做一个线性回归模型,训练时能够彼此相互独立,于是能够分布式学习。
在矩阵视角下,很天然能够进行矩阵分解。SVD矩阵分解将n个用户m个物品的大矩阵分解成三个矩阵相乘,中间的矩阵越靠近左上角的特征值越大,表明矩阵分解的主要成分,也就是说保留左上角的
维矩阵D,其他的都置为零,将原来的等于变为约等于。将蓝色和红色的矩阵合并,获得一个
维的矩阵,每个行表明一个
维的用户向量,对于黄色矩阵保留其前
行(后面的不影响计算了),每一列表明一个物品向量,用户和物品向量的内积也就是矩阵相乘后对应矩阵的值,也就是空缺处的评分,将向量索引发来就能够推荐了。
要使用SVD分解,待分解矩阵要是稠密的,稀疏的评分矩阵要按照统计学方法填充,如填充均值。另外,SVD过拟合现象严重,泛化偏差太大。在2006年Netflix Prize的百万推荐大奖赛上, Simon Funk 在博客公开
FunkSVD算法
。直接将评分矩阵分解成两个矩阵相乘,
维度的用户矩阵,每一行是用户的隐式向量表示,
维的物品矩阵,每一列是物品的隐式向量表示,用户和物品向量的内积即为预估的评分。那如何进行分解呢?随机初始化矩阵,使用均方偏差做为loss,梯度降低进行学习。这个过程当中还能够加入正则项,下降泛化偏差。由
FunkSVD
开始,基于
Matrix factor(MF)
的方法大放异彩。
在MF的基础上,考虑推荐中的side information,如用户的年龄性别,物品的类目价格。用户和物品自身或属性称做一个field,field之间能够两两进行矩阵分解,这个被称做二阶项,相似
BiasSVD
考虑每个field都有一个bias,这个被称做一阶项,再加上一个全局的bias项。这就是著名的
Factorization Machines(FM)。
若是把上面介 绍的
SLIM 和
MF 解结合起来,将
物品的类似度矩阵
分解成
两个低维矩阵,用户对某物品的评分,等于他过去评分过的物品在
中对应的向量和
中该物品向量内积的和,这就是FISM算法。相比SLIM的稀疏处理,变为分解降维。最后再附上一张图,说明
MF
,
SLIM
和
FISM
之间的关系。
视角二:图视角
把用户和物品看做顶点,用户的评分在用户和物品之间创建起边,就获得了一个二部图;在二部图的基础上添加更多的顶点和边,造成一个更为复杂的图,辅助二部图的计算。
在图的视角下,推荐问题转化成了在图上寻找高效的连接模式。
咱们认为在同一个用户的历史行为中,那么两个物品之间有一条边,如今要计算两个物品之间的类似度,最朴素的思想就是数一数他们之间有多少条边。考虑每一条边权重不同,边是经过用户创建的,用户的点击的物品越多,对应边的权重就越小。这就是Adamic/Adar算法 的思想。
阿里著名的协同过滤推荐算法swing,寻找图中更加稳固的形状,共同评分过两个物品的用户集合中,每两个用户和这个两个物品造成了一个四边形(下图红边为一个swing结构),统计有多少个这样的结构,每个结构的权重是不一样的,这个结构里两个用户共同评分过的物品的数量越多权重就越小。
从用户和物品的二部图出发进行构图,再结合隐因子模型(Latent Factor Model) ,就进入了Graph-Embedding 的领域。DeepWalk算法在图上随机游走深度优先遍历获得序列,而后和word2vec 相似地使用Skip-Gram (A和B序列中相邻,用A的embedding做为特征最大化B的选中几率)进行训练。Node2Vec算法在DeepWalk的基础上,考虑随机游走的方式,引入深度优先和广度优先的权衡,可以获得更好的更灵活的顶点隐式表示。LINE算法 考虑顶点的二阶类似,两个顶点有边为一阶类似,两个顶点有共同的邻居顶点为二阶类似,它虽不作随机游走,但能够看做是广度优先的采样。Graph-Embedding 取得了顶点的embedding,计算类似度能够获得用户物品距离,物品物品距离,用于推荐。
GCN(图卷积) 接收拓扑图做为网络输入,能够计算每个顶点更好的表示,相比graph-embedding 能够有监督地为推荐目标而训练。但GCN在运算时,每一层都要输入整个图,在推荐系统里,物品和用户均可以是百万级别以上,实际中没法使用。GraphSAGE 经过RandomWalk采样,解决了这个问题,用在推荐领域就是PinSage算法 。从某顶点出发,深度优先走k步,获得多个子图,组成一个batch进行训练,。而后按照采样的反方向作前向传播,这就是一个k层的图网络,下图是一个k为2的例子。
在用户和物品的二部图基础上,用户和用户根据社会关系创建起边来,这就是社会化推荐。
在用户和物品的二部图基础上,增长物品的属性做为顶点,创建新的边,就获得了一个异质信息网络 。好比一个电影推荐系统,除了用户和电影外,还有导演,演员,电影类型,导演拍摄电影,电影属于某种类型,演员出演电影,导演与演员合做,诸如此类就能创建不少边。其中一类推荐算法叫作meta-path ,经过专家经验人工挑选出一些图中路径,如用户->演员->电影,用户->导演->电影,这样的路径称之为meta-path,计算每一条meta-path的权重,将用户和物品间的全部meta-path联合计算评分。
视角三:时间线
把用户对物品的行为想象成一条时间线,咱们已知当前时刻前用户的物品行为序列,
推荐问题被转化成了预测下一个时刻用户发生行为的物品。
假设序列中下一个物品只与上一个物品有关,可使用马尔科夫模型MC(Markov Chains) ,序列中相邻的物品间进行矩阵分解。结合上文提到的用户和物品间矩阵分解MF,用户,当前行为物品和下一个物品三者之间两两进行矩阵分解,将三个值加起来拟合评分,就获得了FPMC(Factorizing Personalized Markov Chains)算法。
Translation-based推荐在序列建模中引入Metric Learning (把行为关系和高维空间距离映射起来),用户
,当前行为物品
,下一个物品
三者向量化表示,训练使得它们知足
,推荐时只需拿到用户历史行为的物品向量加上用户向量获得下一个物品向量,而后在推荐集合中KNN寻找便可完成推荐。
之前模型的输入形式有限,人们经过特征处理将数据组织成模型能够接受的形式;随着深度学习的发展,数据愈来愈倾向于保存其原有的形式,人们经过模型设计来学习有效的模式。在时间线的视角下,直接用深度模型结构建模序列,预测下一物品,造成了一个能够发挥想象力和燃烧算力的领域——Sequential/Session-base推荐 。在2016年的时候,RNN是处理序列问题的标配,它从NLP领域走来,诞生了GRU4Rec算法 。受到NLP领域Char-CNN 启发,CNN的结构也逐渐用于建模序列结构,Attention机制大火以后,RNN+Attention,CNN+Attention,RNN+CNN+Attention被枚举了一遍。随着google老师的BERT取得NLP领域巨大成就,Self-Attention以及多层的Transformer结构开始成为序列建模的常规配置。最近的文章里,图神经网络(GNN),Memory networks,变分自编码器(VAE) 也成为了序列推荐领域的深度乐高积木。
在CTR预估领域,愈来愈多的模型直接将用户历史行为序列按照时间顺序排列,使用深度模型结构直接建模。
总结
其实若是要细数,还有一个视角叫作高维空间视角。 用户和物品都是一个高维度空间里的点,空间里点之间的距离越近,表明着物品和物品越相关,用户对物品越偏好,
推荐问题转化成了如何将用户和物品嵌入到高维空间里。
典型的主题如Metric Learning。 不过这个视角的正交性很差,深度学习席卷推荐系统后,embedding 是个太常见的思路,前面不少的方法也都是最终把问题转化成了高维空间嵌入,如graph-embedding,Transition-base 推荐。为了不归类上的纠结;再加上任何一个深度网络做为Encoder把用户和物品embedding,均可以归在这个视角,没有那么多使人印象深入的典型方法,就不作单独梳理了。
To My Best Knowledge,我把本身认为推荐系统里经典且使人印象深入的方法归在三种视角中——矩阵,图,时间线 。原本想谈谈认识的,写着写着写多了,变成了一篇梳理文章。但愿能对你们从偏算法的角度理解推荐系统有所助益。
引用
https://link.zhihu.com/?target=https%3A//blog.csdn.net/baimafujinji/article/details/6474273web
http://xtf615.com/2018/05/03/recommender-system-survey/算法
Sequential Recommender Systems: Challenges, Progress and Prospects 微信
Translation-based Recommendation 网络
商业机器智能部是一支数据和算法一体的团队,服务于淘宝、天猫、聚划算、闲鱼和躺平等业务线的二十余个业务场景,提供线上零售、内容社区、3D智能设计和端上智能等数据和算法服务。
咱们经过机器学习、强化学习、数据挖掘、机器视觉、NLP、运筹学、3D算法、搜索和推荐算法,为千万商家寻找商机,为平台运营提供智能化方案,为用户提升使用体验,为设计师提供自动搭配和布局,从而促进平台和生态的供给繁荣和用户增加,不断拓展商业边界。
这是一支快速成长中的学习型团队。 在创造业务价值的同时,咱们不断输出学术成果,在KDD、ICCV、Management Sc ience等国际会议和杂志上发表数篇学术论文。 团队学习氛围浓厚,每一年组织上百场技术分享交流,互相学习和启发。 真诚邀请海内外相关方向的优秀人才加入咱们,在这里成长并贡献才智 。
若是您有兴趣可将简历发至
jiusheng.lsw@alibaba-inc.com
,期待您的加入!
✿ 拓展阅读 app