开发者学堂课程【跟阿里云技术专家学习智能推荐系统: 推荐系统召回算法及架构说明】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/662/detail/11075
推荐系统召回算法及架构说明
内容介绍:
一、召回模块在推荐系统中的位置
二、召回算法的介绍
三、协同过滤
四、向量召回架构说明
五、召回算法的输入输出结果
一、召回模块在推荐系统中的位置
召回模块主要完成一件事,就是粗筛。当用户进到平台中后,可能有潜在的超大规模的Item,需要去筛选a可能喜欢的 Item 缩小范围。
比如平台上有10万个 Item,用户进来之后会筛选出500个他可能会喜欢的 Item,但这个时候并不知道a更喜欢什么 Item,那么接下来就要进行排序模块,判断出 a 到底喜欢什么。
二、召回算法的介绍
1、GraphSage
图神经网络召回算法,基于深度学习框架构建的图算法。可以基于用户和商品特征及行为产出 user embedding 和 item embedding
2、ALS
矩阵分解经典方法,可以基于行为数据表,产出user embedding表和item embedding 表
3、FM-Embedding
通过内积方式增强特征表现力,PAI 的 FM 算法基于 Flink 实现,可以做到流批一体化训练
4、协同过滤
基于统计的方式找到相似的 item 关联关系以及 user-item 的关联关系
上述算法并不是全部的召回算法,本视频在此讲述最为常用的四个算法。首先对上述算法进行分类,前三个为一类,协同过滤算法属于另一类。
前三个算法可以叫做召回相关算法,协同过滤算法可以叫做向量召回相关算法,向量召回相关算法又可以分为很多种类。协同过滤算法其实是一种基于统计的算法,它会找出兴趣相同的一些人,或者说找出可以被同时购买的一些商品,比较经典的例子就是啤酒和尿布的故事,我们发现在大型超市,啤酒和尿布经常被一起购买,他们经常会被一起加入购物车,这是基于大量的数据统计得到的结果,所以协同过滤可能不能完全算是一种算法,它可能就是一种统计方式,会返回一个结果,说明哪些商品会被一起购买,比如手机和手机壳,摩托车和摩托车头盔等一些商品进行组合。
前三个召回更偏向机器学习的一些深层模型,比如说 ALS 其实是一个经典的矩阵分解方法,当输入一个用户的行为表之后,会把这个用户行为表中的数据作为一个矩阵进行转换,最后得到结果是User的embedding和Item的embedding,其中embedding就是一个向量,即user embedding生成一个user的向量,代表这个user的一些属性,Item embedding生成一个Item的向量,代表该Item的属性,然后可以简单的计算User embedding与Item embedding去判断user是否喜欢这个Ite。
FM-Embedding 也是类似的逻辑,当把用户交互的行为数据(behaviour)输入进去之后,会生成 User embedding 与 Item embedding。
而 GraphSage 算法其实是一种图神经网络召回方法,这种方法在整个的泛互联网领域应用的还不是特别多,但是在一些比较大的互联网公司,比如说淘宝这个方法应用的就非常多。
近期 PAI 团队也推出了开源的阿里 graph 框架,GraphSage 就是可以基于阿里 graph 图神经网络框架去开发,GraphSage 算法也经常会被用于电商的招聘场景,它的原理也是输入一个用户的行为表,然后返回User embedding与Item embedding,这三个算法在进入到 PAI 里时,会给大家展示一下其输入和输出的样式。对于上述前三种方法呢,大家想了解底层的细节与方法逻辑,可以直接在搜索引擎去搜它的名字,很容易找到数学推导方式。
三、协同过滤
比如说有用户 ABC,用户 A 喜欢 Rice、Lamb、Milk,用户 B 喜欢 Noodle、Fish、Red wine,用户 C 喜欢 Rice、Milk,所以会发现 A 和 C 会有些相似的口味,他们都喜欢吃饭,然后都爱喝牛奶,但可以发现 A 还喜欢吃 Lamb,则我们就说 A 和 C 有相似的口味,这个时候A喜欢的某个东西,C 没有尝试过,我们就可以假设 C 也喜欢 A 的另一种食物,就可以把它作为 C 的召回结果。
四、向量召回架构说明
向量召回架构简图如下:
有一些用户的 ID 以及一些物品 ID,然后存有一些用户行为数据,比如说用户对于某个商品是否点击过,是否有买过等作为用户行为数据表,进来之后呢无论通过哪种召回方式(GraphSage 召回、矩阵分解召回、FM 召回),最终得到的是两个向量表,A的向量表和B的向量表,这些向量表在实际的生产中可以在 redis 里暂存,在实际的使用过程中需要把这些向量全部存到 Faiss 服务器里,Faiss 服务器是Facebook 的 AI 团队开展的专门针对于向量检索的这样的服务器,它的好处是运行速度非常快,甚至可以在一毫秒之内返回几百万级别的向量检索,并且可以提供多种向量检索模式,检索的性能非常好,常会应用到推荐召回领域。举例来说,比如我们想给用户推荐物品的时候,就是拿着用户的 User ID 和与其对应的向量进入到 Faiss 引擎中去查哪些物料的向量与该用户向量的欧式距离最近。
将 top10个拿出来,这10个物料就是该用户的最终结果。即把物料的向量全部放到 Faiss 里,然后在用户进来的时候,拿着用户 Id 去 redis 里把它的向量取出来,然后把向量送到 Faiss 里去做笛卡尔积或者其他更优的结合策略的距离计算,最终返回出距离最近的结果。
五、召回算法的输入输出结果
1、协同过滤
其原始输入是这样的,有一些用户的 ID,有一些商品的 ID,以及一些行为,比如0就表示查看,2表示收藏,1就是购买等等,最终经过协同过滤在计算之后会生成一个结果,即目标商品、KT 结构,每个 KT 对中的第一个 K 就是商品 ID,比如1000这个商品跟24277这个商品他俩同时被购买的概率是1,1000这个商品跟18612这个商品同时被购买的概率是0.5,而1大于0.5,所以说当一个用户买了一个1000这个商品的时候,把24277推荐给该用户,相对于18612他更有可能被同时购买。
即1000和24277可能是手机和手机壳之间的关系,他俩关系很密切,被一起购买的几率很大,但18612可能是手机上一个小贴纸,不是一个刚需,不一定非要购买,1000和18612被一起购买的概率会低一些。当把所有的商品与其相似的物品都计算出来之后,就可以进行召回。比如用户购买过某件商品,我们可以推荐出他可能会再购买的商品。
2、ALS 矩阵分解
对 ALS 矩阵分解的几何数据进行举例,该例子是基于音乐偏好的数据完成的打分,每个 User 具有一个 ID,每个 Item 代表歌,之前对于每首歌做过一个评分,分数越高代表对歌曲的喜爱程度越高,最终结果会是一个 user 的向量,一个 Item 的向量。ALS 输入的是一个表,即一个 User,一个 Item,以及行为(分数)。
3、GraphSage
GraphSage 图神经网络的召回模式的输入与上述的 ALS 不同,GraphSage 输入三个表,这三个表分别代表了行为及另外两个表,而这两个表就是这个算法的好处,可以不光考虑到用户的行为,还可以兼顾到用户的特征和商品的特征,可以看到其中一个表里每个用户可以带一个 feature 字段,这个字段里的每一个冒号分隔的都是一种特征,比如该用户的身高、年龄、区域等特征,另一个表代表的是 Item 的特征。
GraphSage 算法相比于 ALS 考虑的更多,不光考虑了用户和商品的交互,比如说对于视频的点赞、收藏,还额外考虑到用户本身的一些特征,以及视频本身的特征,比如用户的年龄、身高、样貌,视频的时长、标签等等。最终呢生成的也是向量,第一个是 user 的向量,第二个就是 Item 的向量。