【推荐系统】技术积累

目录

 

1 CSDDN特约专稿:个性化推荐技术漫谈

a 推荐系统的特点:

b 完整的推荐系统构成:

c  协同过滤(Collaborative Filtering) 

1 user-based 基于用户

2 item-based 基于内容项

3 对item-based扩展性的改进(大数据量时)——聚类分析

2 协同过滤

 a 近实时协同过滤算法工程实践

b 协同过滤特点:

c 协同过滤的使用

3 SVD/ LFM/ SVD++ 

 a. SVD(奇异值分解)

b. LFM(latent factor model)隐因子模型

 c. bias LFM

d. SVD++


1 CSDDN特约专稿:个性化推荐技术漫谈

a 推荐系统的特点:

精确性、实时性、反馈性。

挑战:在合理时间内,从海量数据中完成精准推荐;将用户相似性与内容相似性有效结合。

b 完整的推荐系统构成:

行为记录(记录反应用户喜好的行为,购买,下载,评分等)

模型分析(对用户行为进行分析,采用算法对用户喜好进行建模)

推荐模块(对目标客户进行实时推荐)

c  协同过滤(Collaborative Filtering) 

 

1 user-based 基于用户

基本原理是基于用户行为选择的相关性。通过用户间相似度的计算(欧几里得距离、皮尔逊相关系数)找到具有相同喜好的用户(同好,最近邻居),将同好用户的感兴趣内容,推荐给目标用户。

缺点:冷启动(如果某产品未被相当数量的人购买或评价过,就不会进入推荐集)扩展性不好(用户量巨大时 计算相似度的代价太大,数据库io操作开销太大)

2 item-based 基于内容项

基于内容与内容项的相似性进行推荐。得到内容项的历史评分数据->相似度计算,找到最近邻居(余弦相似度、pearsoon系数)->推荐。内容项的相似度计算:根据用户行为选择矢量得到的。

优势:一般情况下内容的数量较稳定,远小于用户数量,计算开销更小)

缺点:大数据量的时候,item的计算量还是会非常大,扩展性还是不好。

3 对item-based扩展性的改进(大数据量时)——聚类分析

解决:在用户评分数据上做一次聚类分析(clustering),将具有相似兴趣爱好的用户分配到相同的分类中,然后将寻找最近邻居的范围限定在该类别中,用聚类中心或类别中其他用户的喜好产品,进行推荐。

聚类过程可以离线进行(因为用户累类别的相对变化比较小),可以大大降低实时计算的压力,提高推荐速度(有多少类别,速度就会快几倍),聚类方法的选择要因情况而异(k-means 只能针对数值型数据,DBSCAN 密度变化较大的不适合,birch层次聚类)

2 协同过滤

"协同过滤的思路是通过群体的行为来找到某种相似性(用户之间的相似性或者标的物之间的相似性),通过该相似性来为用户做决策和推荐。"

 a 近实时协同过滤算法工程实践

对于新闻、短视频这类增量非常大并且时效性强的产品(如今日头条、快手等),需要近实时的推荐算法策略。

1 获取用户在一个时间窗口内的行为

首先Spark Streaming程序从kafka读取一个时间窗口(Window)(一般一个时间窗口几秒钟,时间越短实时性越好,但是对计算能力要求也越高)内的用户行为数据,我们对同一个用户U的行为做聚合,得到上面图中间部分的用户行为列表(用户在该时间窗口中有k次行为记录)。

顺便说一下,因为是实时计算,所以用户行为数据会实时传输到Kafka中,供后续的Spark Streaming程序读取。

2 基于用户在时间窗口W内的行为及用户行为记录表更新标的物关联表CR

3 更新用户的行为记录HBase表: UAction

4 为用户生成个性化推荐

  

score(u,t)是用户操作过的标的物评分,sim(t,s)是标的物s与t的相似度,R(U,s)是用户U对标的物s的评分

以上对一个用户做近实时计算的过程,如果对多个用户,可以将用户均匀分配到不同的Partition中,每个Partition为一批用户计推荐

 

b 协同过滤特点:

优势:

(1) 算法原理简单、思想朴素

(2) 算法易于分布式实现、可以处理海量数据集:可以非常容易利用Spark分布式平台来实现,因此可以通过增加计算节点很容易处理大规模数据集。

3) 协同过滤算法只需要用户的行为信息,不依赖用户及标的物的其他信息(行为信息:行向量——用户对每个标的物的评分显示or隐式,列向量——所有用户对某个标的物的评分向量)

缺陷:

1 冷启动问题:用户冷启动与标的物冷启动:

user-based,依赖用户的行为来为用户做推荐,如果用户行为少(比如新上线的产品或者用户规模不大的产品),这时就很难发挥协同过滤算法的优势和价值,甚至根本无法为用户做推荐;

item-based,如果新入库的标的物拥有很少的操作行为,列向量基本都是零,此时无法计算出item与item的相似性

2 稀疏性问题:

item与user数量巨大,导致用户行为矩阵非常稀疏,此时计算出的相似度就不够准确,影响推荐精度。

c 协同过滤的使用

1 选择问题user or item?(用户数量巨大时,多选择item)

2 考虑时间加权(用户的兴趣也是会随着时间变化的,考虑对用户评分加上时间惩罚因子,越久远的贡献越小)

3 用户的评分(真实业务场景中可能不会有评分操作,可以采用隐式反馈作为评分:浏览、点击、点赞、购买、收藏等)

4 相似度计算方法的选择(cosine余弦相似度、皮尔森相关系数、欧几里得距离等)

5 冷启动问题解决(user冷启动:为其推荐热门标签,直接采用item;item冷启动:将新物品曝光到比较好的推荐位上,将新物品以一定概率混杂在推荐列表中)

3 SVD/ LFM/ SVD++ 

 a. SVD(奇异值分解)

降维思想,最大化地代替原矩阵

R_{f}^{\prime}=U_{f}^{T} S_{f} V_{f}

通过隐藏 的feature ,建立起 user 和 item联系

缺陷:需要补全稀疏矩阵R(用户行为矩阵),造成存储空间巨大;计算复杂度太高,适用1000维以下。

b. LFM(latent factor model)隐因子模型

分解为两个低秩矩阵:\hat{R}=P^{T}Q ==>  \hat{r}_{u i}=\sum_{f} p_{u f} q_{i f}

 损失函数: C(p, q)=\sum_{(u, j) \in T \sin }\left(r_{u i}-\sum_{f=1}^{F} p_{u f} q_{i f}\right)^{2}+\lambda\left(\left\|p_{u}\right\|^{2}+\left\|q_{i}\right\|^{2}\right)

利用梯度下降方法,最小化RMSE,学习PQ矩阵,可以学习的模型

 c. bias LFM

LFM将user与item联系在了一起,但实际情况下,有些固有属性(系统的、用户的、物品的)无联系

\hat{r}_{u i}=\mu+b_{u}+b_{i}+p_{u}^{T} \cdot q_{i}

损失函数:J(p, q)=\sum_{(u, j) \in T \sin }\left(r_{u i}-\sum_{f=1}^{F} p_{u f} q_{i f}\right)^{2}+\lambda\left(\left\|p_{u}\right\|^{2}+\left\|q_{i}\right\|^{2}\right+\left\|b_{i}\right\|^{2}\right+\left\|b_{u}\right\|^{2}\right))

三个偏置项,分别表示训练集(网站导致数据的差异性)、用户(打分的苛刻度)以及物品的固有属性(物品本身的品质)

d. SVD++

SVD++: LFM融合了itemCF,显示地考虑用户历史行为 (LFM只隐式地考虑了用户的历史行为记录对评分的影响)

itemCF: \hat{r}_{u i}\hat{r}_{u i}=\frac{1}{\sqrt{|N(u)|}} \sum_{j \in N(u)} w_{i j},这里wij不再是item相似度,而是可以学习的模型,通过优化损失函数求出

wij损失函数:C(w)=\sum_{(u, i) \in T \operatorname{rain}}\left(r_{u i}-\sum_{j \in N(u)} w_{i j} r_{u j}\right)^{2}+\lambda w_{i j}^{2}

wij是稠密矩阵,进行分解:\hat{r}_{u i}=\frac{1}{\sqrt{|N(u)|}} \sum_{j \in N(u)} x_{i}^{T} y_{j}=\frac{1}{\sqrt{N(u)} |} x_{i}^{T} \sum_{j \in N(u)} y_{j}

与bias LFM相加:\hat{r}_{u i}=\mu+b_{u}+b_{i}+p_{u}^{T} \cdot q_{i}+\frac{1}{\sqrt{|N(u)|}} x_{i}^{T} \sum_{j \in N(u)} y_{j}

令x=q  ==>SVD++: \hat{r}_{u i}=\mu+b_{u}+b_{i}+q_{i}^{T} \cdot\left(p_{u}+\frac{1}{\sqrt{|N(u)|}} x_{i}^{T} \sum_{j \in N(u)} y_{j}\right)

4 工业界的推荐系统架构:

推荐系统架构:

召回-排序-策略调整

Match基于当前user(profile、history)和context,快速在全库里找到TopN最相关的item,给Rank来做小范围综合多目标最大化,通常做法:用各种算法做召回,做粗排之后交由后面的Rank层做更精细的排序。

召回算法:

基于邻域的:CF.  LFM. SVD++

基于内容的:Content based,User based

基于神经网络的:item2vec

排序架构:

召回计算得到的item集合中的每个物品,都要经过排序算出其score,然后决定展现的优先级。排序过程包括,特征提取(与召回训练文件的特征一致),获取模型文件(模型的参数),计算score

排序算法

单一的浅层模型:LR,FM

浅层模型的组合模型:GBDT+LR,LightGBM/XGBoost+LR

深度学习模型:DeepFM

主要参考: M《推荐系统实践》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值