前言:
传说,这是另外一本入门书。
反正我已经做好了跪的打算了
第一章:好的推荐系统:
1.1 什么是推荐系统
为了解决信息过载问题而提出的解决方案:
最开始是分类目录与搜索引擎,然后诞生了推荐系统。
搜索引擎满足了用户有明确目的时的主动查找需求,而推荐系统能够在用户没有明确目的的时候帮助他们发现感兴趣的新内容。
推荐的类别:
- 社会化推荐(social recommendation):即让好友给自己推荐物品。
- 基于内容的推荐(content-basedfiltering):通过分析用户曾经看过的电影找到用户喜欢的演员和导演,然后给用户推荐这些演员或者导演的其他电影
- 基于协同过滤(collaborative filtering)的推荐:如果能找到和自己历史兴趣相似的一群用户,看看他们最近在看什么电影,那么结果可能比宽泛的热门排行榜更能符合自己的兴趣。
1.2 个性化推荐系统的应用
推荐可以起作用的原因:
- 第一是存在信息过载,因为如果用户可以很容易地从所有物品中找到喜欢的物品,就不需要个性化推荐了。
- 第二是用户大部分时候没有特别明确的需求,因为用户如果有明确的需求,可以直接通过搜索引擎找到感兴趣的物品
电子商务:amazon
- 个性化推荐列表:基于历史行为,facebook好友进行推荐,同时可以对推荐结果进行反馈(feedback)
- 相关推荐列表:一种是包含购买了这个商品的用户也经常购买的其他商品,另一种是包含浏览过这个商品的用户经常购买的其他商品
电影与视频网站:Netflix,YouTube,hulu
- 基于物品的推荐算法,即给用户推荐和他们曾经喜欢的电影相似的电影
个性化音乐电台
- 前端:设置用户反馈,收集信息
- 音乐基因工程项目:根据专家标注的基因(歌曲旋律,节奏,风格等)计算歌曲的相似度,并给用户推荐和他之前喜欢的音乐在基因上相似的其他音乐
- 用户行为:
- 记录了所有用户的听歌记录以及用户对歌曲的反馈,在这一基础上计算出不同用户在歌曲上的喜好相似度,从而给用户推荐和他有相似听歌爱好的其他用户喜欢的歌曲。
- 同时利用社交网络,让用户给好友推荐自己喜欢的歌曲或。
社交网络
- 利用用户的社交网络信息对用户进行个性化的物品推荐;
- 信息流的会话推荐:Facebook开发了EdgeRank算法对这些会话排序,使用户能够尽量看到熟悉的好友的最新会话
- 给用户推荐好友。
个性化阅读
基于位置的服务
- 基于位置给用户推荐离他近的且他感兴趣的服务,用户就更有可能去消费
个性化邮件
- 个性化邮件推荐系统:它通过分析用户阅读邮件的历史行为和习惯对新邮件进行重新排序,从而提高用户的工作效率。
个性化广告
- 上下文广告 通过分析用户正在浏览的网页内容,投放和网页内容相关的广告。代表系统是谷歌的Adsense。
- 搜索广告 通过分析用户在当前会话中的搜索记录,判断用户的搜索目的,投放和用户目的相关的广告。
- 个性化展示广告 我们经常在很多网站看到大量展示广告(就是那些大的横幅图片),它们是根据用户的兴趣,对不同用户投放不同的展示广告。雅虎是这方面研究的代表。
1.3 推荐系统评测
什么是好的推荐系统:
- 准确性:推荐系统需要满足用户的需求,给用户推荐那些令他们感兴趣的图书。
- 多样性与资源利用:推荐系统要让各出版社的书都能够被推荐给对其感兴趣的用户,而不是只推荐几个大型出版社的书。
- 可迭代更新:好的推荐系统设计,能够让推荐系统本身收集到高质量的用户反馈,不断完善推荐的质量,增加用户和网站的交互,提高网站的收入。
推荐系统实验方法:
- 离线
- 用户调查
- 在线a/btest:切分流量是AB测试中的关键,不同的层以及控制这些层的团队需要从一个统一的地方获得自己AB测试的流量,而不同层之间的流量应该是正交的。
评测指标
- 用户满意度
- 预测准确度:
- 评分预测:预测准确度一般通过均方根误差(RMSE)和平均绝对误差(MAE)计算。
-
TopN推荐:TopN推荐的预测准确率一般通过准确率(precision)/召回率(recall)度量。
image.png
- 覆盖率:最简单的定义为推荐系统能够推荐出来的物品占总物品集合的比例,也可以通过研究物品在推荐列表中出现次数的分布描述推荐系统挖掘长尾的能力
- 信息熵
- gini系数:评测推荐系统是否具有马太效应的简单办法就是使用基尼系数。如果G1是从初始用户行为中计算出的物品流行度的基尼系数,G2是从推荐列表中计算出的物品流行度的基尼系数,那么如果G2 >G1,就说明推荐算法具有马太效应(热门物品更加热门)。
image.png
-
多样性:具有一定的多样性,但又考虑到了用户的主要兴趣
image.png - 新颖性:
- 惊喜度:如果推荐结果和用户的历史兴趣不相似,但却让用户觉得满意,那么就可以说推荐结果的惊喜度很高
- 信任度:商品评价体系,帮助用户判断是否信任当前用户对某一个商品的评论
- 实时性:
- 健壮性:设计推荐系统时尽量使用代价比较高的用户行为。比如,如果有用户购买行为和用户浏览行为,那么主要应该使用用户购买行为,因为购买需要付费,所以攻击购买行为的代价远远大于攻击浏览行为。
- 商业目标
第二章:利用用户行为数据
2.1 用户行为数据简介
显式反馈数据:评分制度,like or not like
隐式反馈数据:行为浏览数据
2.2 用户行为分析
用户活跃度与流行度符合的数学分布:
一般都符合长尾分布。
不同活跃度的用户喜欢的物品的流行度是否有差别:
一般认为,新用户倾向于浏览热门的物品,因为他们对网站还不熟悉,只能点击首页的热门物品,而老用户会逐渐开始浏览冷门的物品。
2.3 实验设计与算法评测
数据集合
本章选用中等大小的数据集。该数据集包含6000多用户对4000多部电影的100万条评分。该数据集是一个评分数据集,用户可以给电影评5个不同等级的分数(1~5分)。本章着重研究隐反馈数据集中的TopN推荐问题,因此忽略了数据集中的评分记录
实验设计
n折交叉
评测方式
准确率/召回率/覆盖率
新颖度(计算平均流行程度,有热门物品的个数,然后取对数)
2.4 基于领域的算法
1. 基于用户的协同过滤
为了解决两两用户都计算余弦相似度的复杂性问题:首先建立物品到用户的倒排表,对于每个物品都保存对该物品产生过行为的用户列表
简化思路:为每个用户选出K个和他兴趣最相似的用户,然后推荐那K个用户感兴趣的物品。因此离线实验测量了不同K值下UserCF算法的性能指标
- Random算法:每次都随机挑选10个用户没有产生过行为的物品推荐给当前用户
- MostPopular算法:按照物品的流行度给用户推荐他没有产生过行为的物品中最热门的10个物品。这两种算法都是非个性化的推荐算法,但它们代表了两个极端。(走统计ctr的感觉?)
用户相似度的改进:
实际在线策略
基于物品的协同过滤
看上去还是余弦相似度
用户活跃度对物品相似度存在较大的影响:
image.png
针对比较活跃的用户,直接增加惩罚项:
ItemCF-IUF 算法:
image.png
物品相似度的归一化:Karypis在研究中发现如果将ItemCF的相似度矩阵按最大值归一化,是可以提高准确性的。
两类算法的差异:
- UserCF给用户推荐那些和他有共同兴趣爱好的用户喜欢的物品,UserCF的推荐结果着重于反映和用户兴趣相似的小群体的热点,即 UserCF的推荐更社会化,反映了用户所在的小型兴趣群体中物品的热门程度
-
ItemCF给用户推荐那些和他之前喜欢的物品类似的物品,ItemCF的推荐结果着重于维系用户的历史兴趣。即ItemCF的推荐更加个性化,反映了用户自己的兴趣传承。
image.png
离线模型选择的其他要素:
- 首先应该满足产品的需求,比如如果需要提供推荐解释,那么可能得选择ItemCF算法。
- 其次,需要看实现代价,比如若用户太多,很难计算用户相似度矩阵,这个时候可能不得不抛弃UserCF算法。
- 最后,离线指标和点击率等在线指标不一定成正比。而且,这里对比的是最原始的UserCF和ItemCF算法,这两种算法都可以进行各种各样的改进。一般来说,这两种算法经过优化后,最终得到的离线性能是近似的。
为什么原始ItemCF算法的覆盖率和新颖度都不高
- 出现过于热门的书籍,比如哈利波特
image.png
如何解决
两个不同领域的最热门物品之间往往具有比较高的相似度。这个时候,仅仅靠用户行为数据是不能解决这个问题的,因为用户的行为表示这种物品之间应该相似度很高。此时,我们只能依靠引入物品的内容数据解决这个问题,比如对不同领域的物品降低权重等
2.5 隐语义模型
2.5.1 基础模型
核心思想是通过隐含特征(latentfactor)联系用户兴趣和物品。
可以解决什么问题:
- 编辑的意见不能代表各种用户的意见,但隐含语义分析技术的分类来自对用户行为的统计,代表了用户对物品分类的看法。隐含语义分析技术和ItemCF在物品分类方面的思想类似,如果两个物品被很多用户同时喜欢,那么这两个物品就很有可能属于同一个类。
- 编辑很难控制分类的粒度,但隐含语义分析技术允许我们指定最终有多少个分类,这个数字越大,分类的粒度就会越细,反之分类粒度就越粗。
- 编辑很难给一个物品多个分类,但隐含语义分析技术会计算出物品属于每个类的权重,因此每个物品都不是硬性地被分到某一个类中。
- 编辑很难给出多维度的分类,但隐含语义分析技术给出的每个分类都不是同一个维度的,它是基于用户的共同兴趣计算出来的,如果用户的共同兴趣是某一个维度,那么LFM给出的类也是相同的维度。
- 编辑很难决定一个物品在某一个分类中的权重,但隐含语义分析技术可以通过统计用户行为决定物品在每个类中的权重,如果喜欢某个类的用户都会喜欢某个物品,那么这个物品在这个类中的权重就可能比较高。
隐语义模型类别
pLSA、LDA、隐含类别模型(latent class model)、隐含主题模型(latent topic model)、矩阵分解(matrix factorization)。
本章将以LFM为例介绍隐含语义分析技术在推荐系统中的应用。
image.pngLFM在显性反馈数据(也就是评分数据)上解决评分预测问题并达到了很好的精度。当数据集的特点是只有正样本(用户喜欢什么物品),而没有负样本(用户对什么物品不感兴趣)的时候,就需要先生成负样本。
负样本采样时应该遵循以下原则:
- 对每个用户,要保证正负样本的平衡(数目相似)。
- 对每个用户采样负样本时,要选取那些很热门,而用户却没有行为的物品。
负采样的实现逻辑:
从其他网站粘贴过来eui的定义,终于明白了一点点:
LFM和基于领域的算法优缺点对比:
- 在一般情况下,LFM的时间复杂度要稍微高于UserCF和ItemCF,这主要是因为该算法需要多次迭代。但总体上,这两种算法在时间复杂度上没有质的差别。
- LFM不能进行在线实时推荐,也就是说,当用户有了新的行为后,他的推荐列表不会发生变化
2.6 基于图的模型
2.6.1 用户行为数据的二分图表示
图的遍历逻辑:
image.png
基于随机游走的PersonalRank算法:
image.png
image.png
第三章:推荐系统冷启动问题
3.1 冷启动问题简介
冷启动分类:
- 用户冷启动主要解决如何给新用户做个性化推荐的问题。当新用户到来时,我们没有他的行为数据,所以也无法根据他的历史行为预测其兴趣,从而无法借此给他做个性化推荐。
- 物品冷启动主要解决如何将新的物品推荐给可能对它感兴趣的用户这一问题。
- 系统冷启动 系统冷启动主要解决如何在一个新开发的网站上(还没有用户,也没有用户行为,只有一些物品的信息)设计个性化推荐系统,从而在网站刚发布时就让用户体验到个性化推荐服务这一问题。
解决方案:
- 提供非个性化的推荐 非个性化推荐的最简单例子就是热门排行榜,我们可以给用户推荐热门排行榜,然后等到用户数据收集到一定的时候,再切换为个性化推荐。
- 利用用户注册时提供的年龄、性别等数据做粗粒度的个性化。
- 利用用户的社交网络账号登录(需要用户授权),导入用户在社交网站上的好友信息,然后给用户推荐其好友喜欢的物品
- 要求用户在登录时对一些物品进行反馈,收集用户对这些物品的兴趣信息,然后给用户推荐那些和这些物品相似的物品。
- 对于新加入的物品,可以利用内容信息,将它们推荐给喜欢过和它们相似的物品的用户。
- 在系统冷启动时,可以引入专家的知识,通过一定的高效方式迅速建立起物品的相关度表。下面几节将详细描述其中的某些方案。
3.2 利用用户注册信息
image.png image.png3.3 选择合适的物品启动用户的兴趣
能够用来启动用户兴趣的物品需要具有以下特点。
- 热门
- 具有代表性和区分性
- 启动物品集合需要有多样性
3.4 利用物品的内容信息
针对冷启动的用户,基于某个强特征做随机,比如app-key/gitlhub用户之类的
技术抽取关键词
如何建立文章、话题和关键词的关系是话题模型(topicmodel)研究的重点。代表性的话题模型有LDA
(假设有两篇论文,它们的标题分别是“推荐系统的动态特性”和“基于时间的协同过滤算法研究”,这两个应该是一类)
image.png
3.5 发挥专家的作用
第四章:利用用户的标签数据
4.1 UGC标签系统中的代表应用
4.2 标签系统中的推荐问题
标签流行度的定义:
我们定义的一个标签被一个用户使用在一个物品上,它的流行度就加一。如下代码计算了每个标签的流行度。
4.3 基于标签的推荐系统
预测用户会给什么产品打什么标签。
评价指标:
- 覆盖率
- 准确率
-
多样性
image.png
TagBasedTFIDF算法:
image.png
4.4 给用户推荐标签
4.5 拓展阅读
第五章:利用上下文信息
5.1 时间上下文信息
时间属性有哪些:
- 数据集每天独立用户数的增长情况:有些网站处于快速增长期,它们每天的独立用户数都在线性(甚至呈指数级)增加。而有些网站处于平稳期,每天的独立用户数都比较平稳。还有一些网站处于衰落期,每天的用户都在流失。在不同的系统中用户行为是不一样的,因此我们首先需要确定系统的增长情况。
- 系统的物品变化情况: 有些网站,比如新闻网站,每天都会出现大量新的新闻,而每条热门的新闻其时间周期都不会太长,今天热门的新闻也许明天就被人忘记了
- 用户访问情况: 有些网站用户来一次就永远不来了,有些网站用户每周来一次,而有些网站用户每天都来。为了度量这些特性,我们可以统计用户的平均活跃天数,同时也可以统计相隔T天来系统的用户的重合度。
时间特征:
- 物品平均在线天数
- 相隔T天系统物品流行度向量的平均相似度
提高推荐结果的时间多样性需要分两步解决
- 需要保证推荐系统能够在用户有了新的行为后及时调整推荐结果,使推荐结果满足用户最近的兴趣;
- 在生成推荐结果时加入一定的随机性。比如从推荐列表前20个结果中随机挑选10个结果展示给用户,或者按照推荐物品的权重采样10个结果展示给用户。
- 记录用户每天看到的推荐结果,然后在每天给用户进行推荐时,对他前几天看到过很多次的推荐结果进行适当地降权。
- 每天给用户使用不同的推荐算法。可以设计很多推荐算法,比如协同过滤算法、内容过滤算法等,然后在每天用户访问推荐系统时随机挑选一种算法给他进行推荐。
- 需要保证推荐系统在用户没有新的行为时也能够经常变化一下结果,具有一定的时间多样性。
时间上下文算法:
-
推荐最近最热门的算法:
image.png - 时间上下文相关的item算法:
- 物品相似度 用户在相隔很短的时间内喜欢的物品具有更高相似度。
- 在线推荐 用户近期行为相比用户很久之前的行为,更能体现用户现在的兴趣。
- 时间上下文的相关的user算法:
5.2 地点上下文信息
LARS(Location Aware Recommender System,位置感知推荐系统)的和用户地点相关的推荐系统
5.3 拓展阅读
第六章:利用社交网络数据
6.1 获取社交网络数据的途径
6.2 社交网络数据简介
6.3 基于社交网络的推荐
信息流推荐算法是Facebook的EdgeRank
6.4 给用户推荐好友
- 基于内容
- 基于共同兴趣
- 基于社交网络图
网友评论