推荐系统中的召回算法--协同过滤

工业界通用推荐系统架构:

                                推荐系统中的召回算法--协同过滤_第1张图片

Match&Rank

定义:Match基于当前user(profile、history)和context,快速在全库中找到TopN最相关的Item,给Rank来做小范围综合多目标最大化

通常做法:通常情况下,用各种算法做召回,如:item/user/model-based CF/DNN等等,做粗排之后交由后面的Rank层做更精细的排序,最终展现TopK item.

Match 算法典型应用

猜你喜欢:多样推荐  相似推荐:看了还看  搭配推荐:买了还买

 

协同过滤算法介绍(Collaborative Filtering简称CF):

1、定义:

简单地来说,CF就是收集(collaborative)用户偏好信息预测(filtering)用户的兴趣

数学形式化:矩阵补全问题

分类:

       CF主要包括:

             基于邻域(内存、共现关系)的协同过滤---->又包括user-based CF和Item-based CF

             基于模型的协同过滤(model-based CF)

2、基于共现关系的协同过滤算法

1、User-based CF :基于用户的协同过滤算法,多用于挖掘那些有共同兴趣的小团体,通常新颖性比较好,准确性稍差

2、Item-based CF:基于物品的协同过滤算法,多用于挖掘物品之间的关系,然后根据用户的历史行为来为用户生成推荐列表

相比于user-based方法,item-based的应用更加广泛

3、相似度

计算相似度主要是通过余弦距离计算

similarity(A,B) = cos(A,B) = A*B/||A||*||B||

   1)有时候为了简化,会直接去掉分母,会出现哈利波特效应

       (哈利波特效应是指 某个物品太热,而导致好多物品都会跟热门物品关联)

   2)在大数据量的环境下,直接计算两个用户之间的相似度,会出现很多用户之间没有对相同的物品进行过行为,大部分交集为         0,为了解决此问题,需要建立每个物品对应用户的倒排表,如下图所示:

                                          推荐系统中的召回算法--协同过滤_第2张图片

           可以根据倒排表,只对有效的pair进行计算,从而简化计算

      还有一个子主题的知识,看一下下图便知怎么回事,如下图所示: 

                                   推荐系统中的召回算法--协同过滤_第3张图片

4、基于ItemCF的推荐算法调用示意图:

 

                                   推荐系统中的召回算法--协同过滤_第4张图片

  尽量不做补足抄底,用算法补全(补足抄底是指match阶段数据不够,可能会使用热门进行补足)

  match后面一般有rank和rerank的策略

5、改进Item2Item

   针对之前计算Item2Item存在问题:热门用户、哈利波特效应、用户行为缺乏考虑

   解决办法:热门用户降权,热门Item降权

   降低热门用户影响:    

                            推荐系统中的召回算法--协同过滤_第5张图片

   缓解哈利波特效应:

                             

   综合考虑:1、用户行为差  2、热门用户降权

                            推荐系统中的召回算法--协同过滤_第6张图片

                             

6、实时Item2Item

  针对之前的情况会出现新品推荐问题

  解决办法:实时增量Item2Item

                          

  分子:根据user,item的时间顺序流,需要更新item的pair,到存储中去

  实时更新统计量

  具体详见下述参考文献1

7、混合Item2Item算法框架

   针对之前的情况会出现每个场景都用同样的Item2Item

   解决办法:有监督混合多种Item2Item算法

  1)Learning to Rank

   在信息检索中,给定一个query,搜索引擎会召回一系列相关的Documents(通过关键词匹配等方法),然后需要对这些召回的Documents进行排序,最后将Top N的Documents输出。而排序问题就是使用一个模型f(q,d)来对该query下的documents进行排序,这个模型是用机器学习算法训练的模型也可以是人工设定的规则;最关注的是各个Documents之间的相对顺序关系,而不是各个Docuemnts预测分数最准确

  具体详见下述参考文献2

2)Hybrid Item2Item算法框架利用Learning to Rank的思想重构Item2Item

以短视频推荐为例:

Feature:

    Item Feature : video ctr、video pv、video_comment、

    Trigger Feature : trigger ctr、topic ctr

Model:

   自己学习各自特征的重要性

   Loss:Pairwise Loss,同时优化CTR、LikeR、FavorR

   Lambdamart/Neural Nets

                      推荐系统中的召回算法--协同过滤_第7张图片

3、基于模型协同过滤

1、SVD算法:

   目标函数:

                                推荐系统中的召回算法--协同过滤_第8张图片

    SVD存在的几个问题:1、缺失数据和观测到的数据权重相同(>99% 稀疏性)   2、没有正则项,容易过拟合

    SVD具体知识可参考下述参考4

2、矩阵分解(Matrix Factorization)算法

 主要改进

     用latent vector来表示user和item(ID embedding)

     组合关系用内积inner product(衡量user对于某一类商品的偏好)

简化SVD:

                             

举例:u_1,u_2,i_1,i_2,构造4条样本,构造v_u,v_i矩阵

损失函数:

                               

w_ui是样本的权重,比如可观测和不可观测的,权重不同

具体详见下述参考文献5

3、Factored Item Similarity Model(因子项相似度模型)

1)MF用UserID来表示用户,可以叫做user-based CF.(找到相似的user用于推荐)

2)用用户评价过的item表示用户,可以叫做item-based CF(找到相似的item用于推荐)

                                 推荐系统中的召回算法--协同过滤_第9张图片

具体可参考下述参考6

4、SVD++:Fusing User-based and Item-based CF

1) MF(user-based CF)表示UserID表示用户     ->  直接映射ID到隐空间

2) FISM(item-based CF)用用户评价的item来表示用户 -> 映射items到隐空间

3) SVD++混合两种想法

                                  

具体文献详见下述参考文献7

5、Generic Feature-based Recommendation

      上述说到CF的一些算法,但是CF只是用交互矩阵来构建模型,没有利用user/item属性和上下文

如下图所示:

推荐系统中的召回算法--协同过滤_第10张图片

6、FM:Factorization Machines

     FM受到前面所有的分解模型的启发,每个特征都表示成embedding vector,并且构造二阶关系

     FM允许更多的特征工程,并且可以表示之前所有模型为特殊的FM

                   

   只有uid,item_id,那么就相当于是MF;UserID和Item评价,相当于是SVD++

   具体文献详见下述参考文献8

7、之前和现在优化loss方面的区别

   之前的很多工作都在优化L2 loss:

                    

   很多内容表明:一个低MSE模型不一定代表排序模型效果好

   可能的原因:均方误差和排序指标之间的分歧(排序指标AUC等);观察有偏用户总是去对喜欢的电影打分

 

  现在大部分工作都是朝向优化pairwise ranking loss

  Known as the Bayesian Personalized Ranking loss  个性化排名 优化相对顺序,而不是优化绝对值

 

                

8、淘宝搜索推荐核心系统架构(2018)

              推荐系统中的召回算法--协同过滤_第11张图片

具体文章可参考下述参考9

4、深度协同过滤模型(Deep Collaborative Filtering Model)

  Methods of representation learning

                              推荐系统中的召回算法--协同过滤_第12张图片   

  Methods of matching function learning

                                  推荐系统中的召回算法--协同过滤_第13张图片

embedding 学习常用算法:

1、矩阵分解(Matrix Factorization)

                             推荐系统中的召回算法--协同过滤_第14张图片

2、topic model

 1) embedding from topic model:

  看看下面这两张图片你会明白很多东西,?

                          推荐系统中的召回算法--协同过滤_第15张图片                                                

                      推荐系统中的召回算法--协同过滤_第16张图片

2) LDA in music recommendation:(LDA是一个无监督算法,和聚类有点类似的味道)

     建模:歌曲(doc) - 歌词(word) 只看歌词可能是片面的,有时候需要加上其它的特征;用户(doc) - 歌曲(word)

     应用:

              相似歌曲:根据doc的topic分布计算相似度

              生成歌单:每个topic下概率最大的doc

     频率比较低的词学习的效果不好

3、word2vec

   1)由来:

       传统的N-gram统计语言模型:最大化转移概率:w = argmax P(w|History);将词看作原子单位,相互独立;不考虑词之间的相似性;效果受限于语料规模;大多数情况下语料不足,需要平滑

      神经网络语言模型:最大化最大似然估计:w = argmax P(w|content);词的分布式表示:词向量;超越n-gram模型-通过上下文,即周围的环境来表示词

      其它方法:

                   LSA:Latent Sematic Analysis 没有线性规则;LDA:Latent Dirichlet Allocation 大数据训练太慢

 2)实现方法:

                     推荐系统中的召回算法--协同过滤_第17张图片     

     Skip-Ngram是根据word来预测上下文的概率P(context|word)

     CBOW(continuous Bag of Words):根据context来预测word概率P(word|context)

3) 训练

     Hierarchical Softmax:使用一颗二分Huffman树表示,叶子节点是单词,词频越高离根节点越低,优化计算效率O(logV)

     Negative Sampling:

                                  推荐系统中的召回算法--协同过滤_第18张图片

4)优势

  不丢失信息的情况下降低维度;矩阵及向量运算便于并行;向量空间具有物理意义;可以在多个不同的维度上具有相似性

  线性规则:

 

                                    推荐系统中的召回算法--协同过滤_第19张图片

4、DNN(Youtobe应用)

 1) embedding from DNN:

                               推荐系统中的召回算法--协同过滤_第20张图片

2)DNN at Google

                                推荐系统中的召回算法--协同过滤_第21张图片

训练training:通过分类任务学习出用户向量和视频向量,每个视频作为一个类别,观看完成是视频作为一个正例;把最后一层隐层输出作为用户向量(U+C);video embedding:pre trained to feed or training together

服务serving:输入用户向量,查询出与之向量相似度TopK高的视频

3)DNN at Google 前人的一些经验

  随机负采样效果好于hierarchical soft-max

  使用全量的数据而不是只使用推荐数据

  每个用户生成固定数量的样本

  丢弃搜索词的序列性

  输入数据只使用历史信息

上面主要说一下怎么获取embedding几种方法,其实即使你模型构建好啦,来了一个人,你通过模型给他返回一个可推荐物品列表,返回topK个item,想过这个模型之后选取topK等等过程工业界是怎么实现的嘛

这个部分叫做服务serving,想想去饭店吃饭服务员怎么服务的,其实是一个道理,来一个用户你给他服务给他他最想看的几个物品

下面看一下这个部分的通用框架:

 

                                     推荐系统中的召回算法--协同过滤_第22张图片

下面框图是一个参数服务器,说白啦就是一个集群,你把数据给它它分给好几个机器处理,最后汇总一下返回,优点就是大数据量的情况下可以加快速度

DB部分:考虑到这种实时的要求,会采用NoSQL存储系统:存储键值对文档,修改灵活;无join操作,操作简单,速度快

kv存储是NoSQL存储的一种,hbase:分布式、持久化、常用于大数据存储,redis:基于内存、速度快、常用于缓存

现在我接触到的存储:定时更新的库会是hbase、hive,如果涉及到实时的话更多的使用redis和ES

 哈哈哈,我要去跑步啦,周末愉快~~~

   

 

参考:

1、http://net.pku.edu.cn/~cuibin/Papers/2015SIGMOD-tencentRec.pdf

2、https://www.cda.cn/uploadfile/image/20151220/20151220115436_46293.pdf

3、https://blog.csdn.net/huagong_adu/article/details/40710305

4、https://www.cnblogs.com/LeftNotEasy/archive/2011/01/19/svd-and-applications.html

5、https://datajobs.com/data-science-repo/Recommender-Systems-%5BNetflix%5D.pdf

6、https://www.researchgate.net/publication/262219034_FISM_factored_item_similarity_models_for_top-N_recommender_systems

7、https://www.cs.rochester.edu/twiki/pub/Main/HarpSeminar/Factorization_Meets_the_Neighborhood-_a_Multifaceted_Collaborative_Filtering_Model.pdf

8、https://www.csie.ntu.edu.tw/~b97053/paper/Rendle2010FM.pdf

9、https://www.sohu.com/a/212035397_612370

你可能感兴趣的:(推荐系统)