一、推荐系统简介
个性化推荐(推荐系统)经历了多年的发展,已经成为互联网产品的标配,也是AI成功落地的分支之一,在电商、资讯、音乐、短视频等热门应用中,推荐系统都是核心组件之一。
1、产生背景:信息过载及用户需求不明确
2、产生历史:1)分类目录(1990s):覆盖少量的热门网站,如hao123,Yahoo
2)搜索引擎(2000s):通过搜索词明确需求,如Google,Baidu
3)推荐系统(2010s):不需要用户提供明确的需求,通过分析用户的历史行为给用户的兴趣进行建模,从而主动给用户推荐能够满足他们兴趣和需求的信息,如抖音短视频
推荐系统和搜索引擎的区别 | 推荐 | 搜索 |
行为方式 | 被动 | 主动 |
意图 | 模糊 | 明确 |
个性化 | 强 | 弱 |
流量分布 | 长尾效应 | 马太效应 |
目标 | 持续服务 | 快速满足 |
评估指标 | 复杂 | 简明 |
二、什么是推荐系统
没有明确需求的用户访问了我们的服务,且服务的物品对用户构成了信息过载,系统通过一定的规则对物品进行排序,并将排在前面的物品展示给用户,这样的系统就是推荐系统
1、推荐系统的作用
1)高效连接用户和物品,发现长尾物品
2)留住用户和内容生产者,实现商业目标
2、推荐系统的工作原理
1)社会化推荐:向朋友资讯,社会化推荐,让好友给自己推荐物品
2)基于内容的推荐:打开搜索引擎,输入自己喜欢的演员的名字,然后看看返回结果中还有什么电影是自己没看过的
3)基于流行度的推荐:查看票房排行榜
4)基于协同过滤的推荐:找到和自己历史兴趣相似的用户,看看他们最近在看什么电影
3、推荐系统和Web项目的区别
通过信息过滤实现目标的提升 VS 稳定的信息流通系统
推荐系统:追求指标增长,留存率/阅读时间/GMV/视频网站VV(Video View)
Web项目:处理复杂逻辑,处理高并发,实现高可用,为用户提供稳定服务,构建一个稳定的信息流通的服务
不确定思维 VS 确定
推荐系统:结果是概率问题
Web项目:对结果有确定预期
三、推荐系统设计
1、推荐系统要素
a、UI和UE(前端界面)
b、数据(Lambda架构)
c、业务知识
d、算法
2、推荐系统架构
Lambda系统架构提供了一个结合实时数据和Hadoop预先计算的数据环境和混合平台,提供一个实时的数据视图。
2.1、分层架构
批处理层
- 数据不可变,可进行任务计算,可水平扩展
- 高延迟,几分钟-几小时
- 日志收集 Flume
- 分布式存储 Hadoop hdfs
- 分布式计算 Hadoop MapReduce & Spark
- 视图存储数据库(nosql<HBase/Cassandra>,Redis/memcache,MySQL)
实时处理层
- 流式处理,持续计算
- 存储和分箱某个窗口期内的数据
- 最终正确性(Eventual Accuracy)
- 实时数据收集 Flume & Kafka
- 实时数据分析 Spark streaming/storm/flink
服务层
- 支持随机读
- 需要在非常短的时间内返回结果
- 读取批处理层和实时处理层结果并对其归并
2.2、算法架构
1)召回阶段(海选),召回决定了最终推荐结果的天花板,常用算法:
- 协同过滤(基于用户,基于物品)
- 基于内容(根据用户行为总结出用户偏好,根据偏好通过文本挖掘技术找到内容上相似的物品)
- 基于隐语义
2)排序阶段
召回决定了最终推荐结果的天花板,排序逼近这个极限,决定了最终的推荐结果
CTR预估(点击率预估,使用LR算法),估计用户是否会点击某个商品,需要用户的点击数据
3)策略调整
四、推荐算法及模型构建
1、推荐模型构建流程
数据获取及清洗 ——> 特征工程 ——> 机器学习算法 ——> 预测输出
数据来源
显性数据:Rating打分;Comments评价
隐性数据:历史订单、加购物车、页面浏览、点击、搜索记录等
特征工程
从数据中筛选特征
1)一个给定的商品,可能被拥有类似品味或需求的用户购买
2)使用用户行为数据描述商品
用数据表示特征
1)将所有用户行为合并在一起,形成一个user-item矩阵
机器学习算法--经典的推荐算法:协同过滤推荐算法(Collaborative Filtering)
1)算法思想:物以类聚人以群分
2)基本的协同过滤推荐算法基于以下假设:
a、“跟你喜好相似的人喜欢的东西你也很有可能喜欢”:基于用户的协同过滤推荐(User-based)
b、“跟你喜欢的东西相似的东西你也很有可能喜欢”:基于物品的协同过滤推荐(Item-based)
实现协同过推荐分以下几个步骤:
- 找出最相似的人或物品:通过计算两两的相似度来进行排序,即可找出TOP-N相似的人或物品
- 根据相似的人或物品产生推荐结果:利用TOP-N结果生成初始推荐结果,然后过滤掉用户已经有过记录的物品或明确表示不感兴趣的物品
基于user-based的基本计算过程示例如下:(打钩表示用户对物品有购买记录)
item-based的计算过程基本和user-based类同。
3)相似度计算方法
a、欧式距离,是一个欧式空间下度量距离的方法。两个物体,都在同一个空间下表示为两个点,假如记为p、q,分别都是n个坐标,那么欧式距离就是衡量这两个点之间的距离。欧式距离不适用于布尔向量之间。
欧式距离的值是一个非负数,最大值正无穷,而相似度的结果希望是[-1,1]之间,一般可以使用如下公式进行转化:
b、余弦相似度
- 度量的是两个向量之间的夹角,用夹角的余弦值来度量相似的情况
- 两个向量的夹角为0时,余弦值为1;当夹角为90度时余弦值为0,为180度时余弦值为-1
- 余弦相似度在度量文本相似度、用户相似度、物品相似度的时候较为常用
- 余弦相似度的特点,与向量长度无关,余弦相似度计算要对向量长度归一化,两个向量只要方向一致,无论程度强弱,都可以视为“相似”
c、皮尔逊相关系数
- 实际上也是一种余弦相似度,不过先对向量做了中心化,向量a,b各自减去向量的均值后,再计算余弦相似度
- 皮尔逊相似度计算结果在-1,1之间,-1表示负相关,1表示正相关
- 度量两个变量是不是同增同减
- 皮尔逊相关系数度量的是两个变量的变化趋势是否一致,不适合计算布尔值向量之间的相似度
d、杰卡德相似度
- 两个集合的交集元素个数在并集中所占的比例,非常适用于布尔向量
- 分子是两个布尔向量做点积计算,得到的就是交集元素的个数
- 分母是两个布尔向量做或运算,再求元素和
4)基于模型的方法
a、算法思想
- 通过机器学习算法,在数据中找出模式,并将用户与物品间的互动方式模式化
- 基于模型的协同过滤方式是构建协同过滤更高级的算法
b、近邻模型的问题
- 物品之间存在相关性,信息量并不随着向量维度增加而线性增加
- 矩阵元素稀疏,计算结果不稳定,增减一个向量维度,导致近邻结果差异很大的情况存在
c、算法分类
- 基于图的模型
基于邻域的模型看做基于图的模型的简单形式
原理
i)将用户的行为数据表示为二分图
ii)基于二分图为用户进行推荐
iii)根据两个顶点之间的路径数、路径长度和经过的顶点数来评价两个顶点的相关性
- 基于矩阵分解的方法
原理
i)根据用户与物品的潜在表现,我们就可以预测用户对未评分的物品的喜爱程度
ii)把原来的大矩阵,近似分解成两个小矩阵的乘积,在实际推荐计算时不再使用大矩阵,而是使用分解得到的两个小矩阵
iii)用户-物品评分矩阵A是M*N维,即一共有M个用户,N个物品,我们选一个很小的数K(K<<M,K<<N)
iiii)通过计算得到两个矩阵U、V,U是M*K的矩阵,V是K*N
基于矩阵分解的方法
- ALS交替最小二乘法
i)ALS-WR(加权正则化交替最小二乘法):alternating-least-squares with weighted-λ-regularization
ii)将用户(user)对商品(item)的评分矩阵分解为两个矩阵:一个是用户对商品隐含特征的偏好矩阵,另一个是商品所包含的隐含特征的矩阵。在这个矩阵分解的过程中,评分缺失项得到了填充,也就是说我们可以基于这个填充的评分来给用户做商品推荐