七月在线4月机器学习算法班课程笔记——No.9
推荐系统——我早就很感兴趣的一个方向,可以说是机器学习在各个公司广泛应用的一个内容,从求职招聘就可以感觉到。另外,我们也经常在使用推荐系统,比如以推荐为特色的今日头条(你关心的,才是头条),还有淘宝的商品推荐等。曾经试图在网络上了解推荐系统,但都是零散的内容,不是太系统。这次算是有条理的学习了,get到了之前好奇的问题,自然要好好整理。
这篇的主要内容有:推荐系统需求、推荐系统结构与评估;基于内容和协同过滤等推荐算法;推荐系统案例讲解 。
如果定义推荐系统,则有:
从用户的角度:在互联网信息大爆炸的时代,每天有听不完看不完的讯息,每个人关注的内容都不一样,怎样让每个人都能迅速get到内心所爱呢?对推荐系统有了很大的需求。有了推荐系统,用户不用再信息的海洋苦苦搜索,偶尔可能还有surprise(猜你喜欢),增强了用户体验。总结一下就是:找到喜欢的、帮助决策、发现新事物。
从商家的角度:通过推荐系统可以提供个性化服务,提高用户信任度和粘性。当然,还可以增加营收。比如Google news推荐系统能带来额外38%的点击;亚马逊每年35%的销售额都来源于它的推荐;今日头条半数以上新闻和广告点击来源于推荐。
系统结构,先看这张图:
分为offline和online两部分。offline做数据数理和模型学习,得到模型,online做推荐判定推出结果,对准确度和时间要求比较高。
假定我们已经有了一个推荐系统,那么需要评估后才能上线。如何评估呢?
1)准确度:评定方法有打分系统、Top N推荐。
打分系统:例如豆瓣电影的电影评分,淘宝的商品打分等。设 rui 为用户u对物品i的实际评分, rˆui 为预测分。|T|是测试的样本集,用RMSE和MAE来评判两者之间的差异性。
通常使用在文本相关产品上进行推荐,基于用户喜欢的item的属性/内容进行推荐,无需考虑其他用户的行为。Item之间通过内容(比如关键词)关联,比如电影题材可以有“ 爱情/探险/动作/喜剧/悬疑”等,推荐时基于item的内容来进行。
过程:
1)对于每个要推荐的内容, 我们需要建立一份资料:比如词 kj 在文件 dj 中的权重 wij ,常用的方法比如TF-IDF,搜索引擎中常在用的东西。
2)对用户也建立一份资料:比如说定义一个权重向量 (wc1,...,wck) ,其中 wci 表示第 ki 个词对用户c的重要度。
3)计算匹配度:有很多方法,比如计算余弦距离。
举个栗子:基于书名进行书的推荐
一个用户对《 Building data mining applications for CRM 》 这本书感兴趣,从以下书中进行推荐:
1. Building data mining applications for CRM
2. Accelerating Customer Relationships: Using CRM and Relationship Technologies
3. Mastering Data Mining: The Art and Science of Customer Relationship Management
4. Data Mining Your Website
5. Introduction to marketing
6. Consumer behavior
7. marketing research, a handbook
8. Customer knowledge management
首先对这几个书名进行分词(英文不需要分词)、停用词处理;对所有的词建立一个词表,在书名和词表间建立映射,存在的词是1,不存在的是0;然后用TF-IDF计算书名和各个词之间的关联度,每个书都可以用一个词向量表示;再用余弦定理计算书1和其他7本书的相似度,得到相似度排名,就可以用排名的结果做推荐了。
总结一下,基于内容的推荐优点是不需要考虑用户行为,缺点是仅对于文本数据的操作,而且需要对每个内容都做处理,比较耗时耗力。
协同过滤,几乎是面试推荐算法工程师的都会问到的内容,我也被问到过。可见应用性很广,是很核心的内容,接下来听寒老师怎么讲。
协同过滤分两种:Item-based CF、User-based CF。
思想:根据用户对商品/内容的行为,计算item和item相似度, 找到和当前item最近的进行推荐。
过程:
1)一个用户序列 ui,i=1,...,n ,一个item序列 pj,j=1,...,m
2)一个n×m的矩阵v, 每个元素 vij 表示用户i对j的打分
3)计算item和item之间的相似度/距离
4)选取Top K推荐或者加权预测得分
实例:有12个用户、6部电影,下图是用户对电影的打分数据,空格为0表示打分情况未知,现在要预测第5个用户对1号电影的打分。
对于每一部电影都可以得到一个向量,例如电影1为v1=[1,0,3,0,0,5,0,0,5,0,4,0]。计算相似度时,先计算平均值m1=(1+3+5+5+4)/5=3.6,电影1的每个值都减去均值,得到row1=[-2.6,0,-0.6,0,0,1.4,0,0,1.4,0,0.4,0],然后计算第一个电影和其他几部电影的余弦相似度。这里,减去均值,得到正负均匀的数,是为了更好的衡量喜好。如下图,可以知道movie3和movie6的相似度较高。
然后用user5对movie3和movie6的打分估算user5对movie1的评分:
思想:找到和用户最接近的其他用户,找到他们看/买过但当前用户没看/买过的item, 根据距离加权打分找得分最高的推荐。比如:有一个新用户,他想要看电影,我们没有他的历史信息可以参考,就找他朋友的观影历史信息及评价,通过打分推荐电影给新用户。
过程:
1)一个用户序列 ui,i=1,...,n ,一个item序列 pj,j=1,...,m
2)一个n×m的矩阵v, 每个元素 vij 表示用户i对j的打分
3)计算用户之间的相似度/距离
4)预测得分
绝大多数情况下,会选择Item-based CF,因为一般情况下,物品种类比用户数少。再者Item-based CF稳定性较好,因为人的喜好是会变的。
协同过滤优点:
1)基于用户行为, 因此对推荐内容无需先验知识;例如不需要知挖掘电影的内容,关键词等信息。
2)只需要用户和商品关联矩阵即可, 结构简单;
3)在用户行为丰富的情况下, 效果好;数据丰富的情况下CF的准确度比其他算法高。
协同过滤缺点:
1)需要大量的显性/隐性用户行为;显性就是打分等,隐性就是点击、停留等表现。
2)需要通过完全相同的商品关联, 相似的不行;
3)假定用户的兴趣完全取决于之前的行为, 而和当前上下文环境无关;
4)在数据稀疏的情况下受影响,可以考虑二度关联。
冷启动就是没有历史信息的情况下来推荐,什么是正常的打开方式呢?这里给出一些解决方法。
a. 对于新用户
1)所有推荐系统对于新用户都有这个问题
2)推荐非常热门的商品, 收集一些信息
3)在用户注册的时候收集一些信息
4)在用户注册完之后, 用一些互动游戏等确定喜欢与不喜欢
b. 对于新商品
1)根据本身的属性, 求与原来商品的相似度
2)Item-based协同过滤可以推荐出去
自从Netflix Prize比赛举办以来, LFM(latent factor model)隐语义模型逐渐成为推荐系统领域耳熟能详的名词。其实该算法最早在文本挖掘领域被提出,用于找到文本的隐含语义。
上一节的例子中,我们有一个用户评分矩阵, 但是有一些位置是空着的(没打分),需要做的事情是, 尽量填满未打分的项(预测得分) 。怎么填呢?我们猜测有一些隐藏的因素,影响用户的打分,比如电影的演员、题材、年代等。那么,我们就希望找到一些隐藏因子,可以把user和item关联起来。
这个图表示user和电影的关系,有的位置打分为0,我们假设用户根据f1、f2、f3三个隐含特征进行的打分,同时得到电影的这些特征。这两个矩阵有如下关系:
这里就需要矩阵分解,可以直接矩阵分解或者SVD,接下来会细讲。
CF简单直接可解释性强, 但隐语义模型能更好地挖掘用户和item关联中的隐藏因子。
假定有U个用户,D个item,R为打分矩阵;假定有K个隐含变量, 我们需要找到矩阵P(U*K)和Q(D*K),然后R=P*Q,希望得到的R能填上原始矩阵为0的位置。如何才能找到最佳的P和Q呢?
步骤一:梯度下降;
定义损失函数:
求解梯度:
迭代更新:
步骤二:正则化
步骤三:再次求梯度/偏导, 更新迭代公式。
步骤四:再还原回矩阵乘积, 即可补充未打分项。
通常情况下, 我们会限定分解得到的P和Q中的元素都非负,这样得到的结果是一定程度上可解释的。因为不存在减法操作,因此可以看做对隐变量特征的线性加权拟合。
每一个用户会有自己的偏好,比如某个用户最低就给3分,有个用户最高就给2分。我们引入三个参数:
- μ :全局均值
- bx :用户x带来的影响
- bi :电影i带来的影响
加上bias的隐语义模型可表示为:
Word2vec是NLP中的方法,给定中文分词后的文本,使用word2vec能得到每个词(phrase)在高维空间的特征向量。向量和向量之间的距离远近,表示2个词的关联度高低。例如和“北京” 最近的词为“东京”“柏林” “巴黎”“伦敦”。
在推荐里怎么用呢?把用户的行为序列当做分词过后的phrase,送给word2vec学习,根据商品映射得到的特征向量去找相似的商品。实践证明了这个方法比协同过滤的覆盖率高。
课程的最后讲解了python实现的协同过滤算法案例,详见课程提供的ipython notebook。
视频及PPT下载:机器学习公开课——推荐系统
下图是推荐系统可用的一些库:
《推荐系统实践》项亮编著