深入浅出推荐系统之简单推荐模型
先来回答一个最关键的问题:到底什么是推荐系统?
下面从3个角度来回答:
它能做什么
它需要什么
它怎么做
先来第一个问题推荐系统能做啥?
推荐系统可以把那些最终会在用户(User)和物品(Item)之间产生的连接提前找出来。
此处关键就在于提前二字,推荐系统要从一个巨大的网络中,去提前发现人和物品之间的连接,并帮助这条连接尽可能早的建立起来。
第二个问题它需要什么?
发现人和物品之间连接的前提是,已经有足够多的连接存在了,推荐系统才可能去预测未来的连接。
第三个问题,怎么做?
有很多方式,本系列主要讲通过机器学习的方式。
我们现在知道了什么是推荐系统后,再来看下一个问题:我们什么时候需要推荐系统?
前面从3个方面介绍了什么是推荐系统,我们如果需要去预测连接,并且已经有足够多的连接了,那这个时候推荐系统就是必须的了。
上面有一个不好量化的点是:怎么去定义连接是否足够多?首先我们得知道影响人和物品连接的因素有哪些?
第一自然是物品数本身,如果产品中物品很少,少到用人工就可以应付过来,那么用户产生的连接肯定不多,因为连接数量的瓶颈在于物品的数量,这时候不适合搭建推荐系统。
第二是用户和物品数量在某些手段下也变得很多,但是用户和物品之间的连接很少,表现就是用户的留存回访很低,这时候也不是很需要一个推荐系统,此时应该想办法找到用户流失的原因,直到他们能贡献第一批连接才行。
我们有一个简单的公式来判断是否需要推荐系统:
分子是增加的连接数,分母是增加的活跃用户数和增加的有效物品数。
如果增加的连接数主要靠增加的活跃用户数和增加的物品数贡献,则该值会较小,不适合加入推荐系统;
如果增加的连接数和新增活跃用户和物品关系不大,那说明连接数已经有自发生长的趋势了,适合加入推荐系统加速这一过程。
下面我们开始介绍最简单的推荐系统:基于流行度的推荐模型。
流行度模型
推荐系统中最基本的推荐模型:基于流行度的推荐模型,通俗讲就是什么内容吸引用户就推荐用户什么内容。
这边一个衡量内容的标准是流行度,而影响物品流行度的因素有两个:
时间:上下班时间,大家打开头条的可能性会大于其他时间段,自然文章的关注度就高,但是这并不能表明文章的质量就高。
位置:这个“位置”并不是真正的地理位置,而是在一个服务或者网站的什么位置显示你的物品。比如说,在绝大多数的搜索引擎服务中,排名第一的物品所受到的关注度很可能大大高于排名第二和之后的物品。
因此,我们在衡量流行度上就不能使用绝对值,而应该使用的是一个“比值”(Ratio),或者是计算某种“可能性”(Probability)。
一个可行的方式就是计算点击率。如果从数学上对点击率建模,其实可以把一个物品在显示之后是否被点击看成是一个“伯努利随机变量”,于是对点击率的估计,就变成了对一个伯努利分布参数估计的过程。
对于伯努利参数估计,我们可以采用最大似然估计,假设点击的概率为p,则总共N次展现,其中有n次点击,则出现的概率为:
P = p^n * (1-p)^(N-n)
对上面的概率两边取log,得到
log§ = nlog§ + (N-n)log(1-p)
求导,得到p=n/N的时候得到极值。
但是当物品的N或者n为0的时候,此时通过最大似然得到的p其实都不是很准确。
于是现在我们遇到的问题是:N或者n为0 的时候,此时最大似然估计并不能很好地反应这些物品的真实属性。
一种解决方法是采用先验分布,这就引出了共轭先验分布的概念。
伯努利分布的共轭分布是beta分布,其用到了贝叶斯公式,其核心公式是:
后验分布 = 似然函数* 先验分布/ P(X)
关于共轭先验这部分可以查看之前的文章主题模型:LDA 数学基础(https://www.zybuluo.com/zhuanxu/note/1016850),此处我们知道Beta分布给出了p的先验分布即可。
另外一种解决方案是基于不同的时间段来预估点击率,我们可以使用上一时间段的点击率作为先验知识来更加准确地估计现在这个时段的点击率。
相似度模型
介绍完基于流行度的推荐模型后,我们接着看基于相似信息的推荐模型,这类模型又叫做协同过滤,其总结起来就是:
相似的用户可能会有相似的喜好,相似的物品可能会被相似的人所偏好。
于是我们就要去寻找相似的用户或者相似的物品。
协同过滤的核心思想是借用数据,具体理解就是在用户 A 数据不足的情况下,我们挖掘到可以借鉴的用户 B,从而利用用户B的数据来完善A。
其原理是我们把用户 A 和用户 B“聚类”到了一起,认为他们代表了一个类型的用户。我们把对单个用户的建模抽象到了某个类型的用户,从而能够获得更多的数据。
协同主要有两类:
基于记忆的协同
用户协同
物品协同
基于模型的协同
基于记忆的协同,其重点在于记忆,记住每个人消费过的物品,然后给他推荐,此时又可细分为
用户协同:跟你相似的人都消费过什么
物品协同:跟你消费过物品相似的物品有哪些
因此基于记忆的协同,重点就在于去找相似的用户或者相似的物品,我们先来看相似的用户。
用户协同
用户协同背后的思想是:根据用户的历史行为,对用户进行聚类,然后基于同一类用户的共同喜好,给用户推荐物品。
用户协同的核心公式:
我们来解读下上面的公式:
公式左边的表示用户u对物品i的预测,公式右边是一个关于用户u和用户j的一个相似度加权,表示用户u和用户j的相似度,表示用户j对物品i的评分。
有了上面的公式后,我们就来看实际生产中要运用的话,需要注意的几个地方:
- 用户向量我们通过物品来表示,如果物品个数很多,则用户向量维度很高,计算向量相似度耗时
- 因为要计算任意两个用户的相似度,所有复杂度为
- 要计算每个用户和物品之间的相互关系,复杂度是
针对上面的问题,可以看我github上的代码(https://github.com/zhuanxuhit/kaggle/blob/master/tencentAd/2-协同过滤版本.ipynb)是如何解决的,欢迎大家star。
物品协同
物品协同的关键公式如下:
有了前面用户协同的基础后,可以很容易的看懂。此处我们需要记住的关键点是:
用户协同由于用户基数远大于物品数,所有计算成本高
用户协同中,用户和用户之间有共同的消费行为实际上是比较少的,即使有一般也都是热门物品,对用户相似度计算帮助不大
用户的喜好相比于物品的特征变化快
总结来说:物品协同就是根据用户已有记录的物品,去找跟这些物品最相似的物品。
slope one 算法
slope one 算法是面对物品协同中模型无法在线更新的问题而提出的。
其主要创新点在于引入了:
- 通过引入两个物品的共同用户数量来代表两个物品差距的置信程度
- 模型可以在线实时更新
总结
本文介绍了两种推荐模型:
基于流行度的推荐模型
基于相似信息的推荐模型和基于内容特征的推荐模型
其中基于流行度的模型简单有效,可以通过一些先验知识,解决部分冷启动问题,而基于相似信息的推荐模型则是充分利用群里智慧,通过聚类的方式来解决用户、物品稀疏的问题。
深入浅出推荐系统之简单推荐模型相关推荐
- 推荐系统(5)-深度推荐模型-AutoRec、DeepCrossing、NeuralCF、PNN、WideDeep、FNN、DeepFM、NFM
GBDT+LR 1. AutoRec-2015 2. Deep Crossing-2016 3. NeuralCF-2016 4. PNN-2016 5. Wide&Deep-2016 6. ...
- Facebook 面向个性化推荐系统的深度学习推荐模型
作者:王鸣辉 整理:Hoh Xil 来源:http://wd1900.github.io/#blog https://www.zhihu.com/people/wang-ming-hui-38/pos ...
- 推荐系统 | 基础推荐模型 | 逻辑回归模型 | LS-PLM | PyTorch实现
基础推荐模型--传送门: 推荐系统 | 基础推荐模型 | 协同过滤 | UserCF与ItemCF的Python实现及优化 推荐系统 | 基础推荐模型 | 矩阵分解模型 | 隐语义模型 | PyTor ...
- 推荐系统 | 基础推荐模型 | GBDT+LR模型 | Python实现
基础推荐模型--传送门: 推荐系统 | 基础推荐模型 | 协同过滤 | UserCF与ItemCF的Python实现及优化 推荐系统 | 基础推荐模型 | 矩阵分解模型 | 隐语义模型 | PyTor ...
- 【王喆-推荐系统】模型篇-(task9)强化学习推荐模型DRN
学习总结 (1)深度推荐模型的前沿趋势,强化学习(Reinforcement Learning,又叫增强学习)与深度推荐模型的结合.强化学习的大体过程:通过训练一个智能体(它与环境交互,不断学习并强化 ...
- 自己写的推荐模型中的简单排序总结
最近被别人问到推荐算法,他们公司想做推荐算法,然后我懂一些相关的东西,就简单写了一些东西,仅作为记录. 内容如下: 某个人喜欢看电影:[007,邦德,飓风营救,变形金刚,钢铁侠,独行月球] 使用算法计 ...
- NVIDIA GPUs上深度学习推荐模型的优化
NVIDIA GPUs上深度学习推荐模型的优化 Optimizing the Deep Learning Recommendation Model on NVIDIA GPUs 推荐系统帮助人在成倍增 ...
- 独家 | 一文读懂LinkedIn个性化推荐模型及建模原理
原文标题:HowLinkedIn Makes Personalized Recommendations via Photon-ML Machine Learning tool 作者:Yiming Ma ...
- 开源 | 基于会话的最优推荐模型:SR-GNN的PaddlePaddle实现
https://www.toutiao.com/a6690696657228530187/ 2019-05-14 10:00:09 本文转载自百度 PaddlePaddle 百度深度学习平台Paddl ...
最新文章
- 给批量用户设磁盘配额
- display环境变量如何配置_JDK 安装 Java环境变量配置
- LINUX安装百度网盘
- Delphi JSON总结
- matlab的矩阵运算,MATLAB的矩阵运算
- android测行走距离,如何在Android中行走时计算距离?
- Intent启动拨号盘,实现打电话功能
- 计算机服务里wlan功能是什么意思,WLAN是什么意思?WLAN基础知识介绍
- 弱电计算机网络系统技术交底,弱电综合布线施工技术交底.doc
- python 游戏引擎 cocos2d_2.2 完成一个Cocos2d游戏程序代码
- java 汉字笔画_java如何获取笔画
- 面包板入门电子制作(class1)视频 全套30集高清
- 设f(x)=∑x^n/n^2,证明f(x)+f(1-x)+lnxln(1-x)=∑1/n^2
- 微机原理 单片机笔记
- 2018年7月21日日报
- 高速电路设计基本概念之——IBIS和SPICE模型
- 【AUTOSAR CanDrive 2.了解通信Hoh、CanId与PduID的Mapping关系】
- php写字本写,php在图片上写字的类
- 杭州bgp高防服务器稳定性和安全性怎么样?103.219.30.*
- 跑深度模型的显卡_2020年人工智能深度学习 GPU 解决方案推荐
热门文章
- DeFi 衍生品平台 Deri Protocol 新增三家投资者
- 今日恐慌与贪婪指数为66 贪婪程度有所缓解
- TokenInsight:反映区块链行业整体表现的TI指数较昨日同期上涨4.73%
- TokenInsight:反映区块链行业整体表现的TI指数较昨日同期上涨2.66%
- 调查:拉丁美洲25%的信用卡用户希望使用加密货币付款
- 美联储FOMC会议前瞻:预计美联储将维持目前的政策不变
- SAP License:SAP中的文本管理
- 风控的这些工作机会看起来挺没用
- 用 Python 写一个 Kaggle 比赛排行榜的爬虫
- 物维管理、楼控系统、安防系统、巡检管理、电子巡更、门禁管理、变配电、给排水、防盗报警、消防报警、电梯监视、智能楼宇、物业管理、报修管理、维保管理、工单管理、物料管理、审批、租赁管理、楼宇管理、房产管理