看了 项亮 编著的《推荐系统实践》一书,理解还不够深刻,比如里面涉及到的大赛及文章还没来得及看,在此就书中内容做一些记录,后续再去补充。
目录
第 1 章 好的推荐系统
随着互联网的发展,人们从信息匮乏走到了信息过载。未解决信息过载,最具代表性的是 分类目录 和 搜索引擎;对网站来说,分类目录只能覆盖少量热门网站,搜索引擎需要用户主动提供关键词,就是说这两个方法在用户有明确目标时可以起到很好的效果;若用户自己也没有明确目标呢?这就需要 推荐系统 去帮助用户发现感兴趣的内容。
推荐系统可以更好地发掘物品的长尾(个性化需求)。本质是通过一定的方式将用户和物品联系起来;
1.1、推荐系统的应用
三部分构成:展示页面、后台日志、推荐算法系统。
音乐推荐比较特别,因为种类多、耗时少、消费每首歌的代价小(很多免费,不需要付费)、上下文相关(用户的心情、所处情境)、重复利用率高(单曲循环之类)、经常作为背景乐等,非常适合用来推荐?
个性化广告:需注意的是,广告推荐 着重于帮助广告找到可能对它们感兴趣的用户,个性化推荐 着重于帮助用户找到可能令他们感兴趣的物品;
还有电子商务、电影、阅读、基于位置的服务、个性化邮件等。
1.2、推荐系统评测
一个完整的推荐系统一般存在 3 个参与方:用户、物品 和 提供推荐系统的网站;以图书为例,推荐系统首先要满足用户的需求,给用户推荐他们感兴趣的书;其次让各出版社的书都能推荐给 对其感兴趣的用户,而不能只推荐几个大型出版社;最后好的推荐系统设计,能够让推荐系统本身收集到高质量的用户反馈,不断完善推荐质量,增加用户和网站的交互,提高网站的收入。因此评测一个推荐算法时,需同时考虑三方的利益,一个好的推荐系统应该是能够令三方共赢的系统。
一个好的推荐系统可以帮助用户发下他们感兴趣的物品,也可以帮助商家把那些可能埋没在长尾分布中的好商品介绍给可能感兴趣的用户。
1.2.1 推荐系统的试验方法
- 离线实验:快速测试不同算法,迭代优化;优化目标是:最大化预测准确度的同时增加覆盖率、多样性和新颖性;
- 用户调查:因为离线实验的预测准确率高不代表用户满意度高;测试用户分布需与真实用户分布相同,保证双盲实验,避免主管成分的影响;这其中有个问题,就是测试用户少则无统计意义,多则成本大;
- 在线实验:AB测试,将新的方法与旧的方法作比较,可以公平获得不同算法实际在线时的性能指标;
【AB测试】:举个例子,某个App主页换风格,换得不好就会影响点击转化率、留存率,换得好,那二级页面的点击量也会得到提升;所以,先进行AB测试,给新旧版本分别分配10%或20%的用户流量,运行1~2周,观察新版本的点击量是否达到预期目标,达到则可以将新版本投入使用;
还需注意的是,切分流量 非常重要,一个网页从前端到后端的算法,中间有很多层,避免不同层同时进行AB测试而相互干扰,应进行流量分配。
1.2.2 评测指标
- 满意度:用户调查 或 在线实验 获得;对于用户调查需注意从不同侧面询问用户感受,模棱两可很难答;在线实验,可以通过点击率、用户停留时间和转化率等指标度量用户的满意度;
- 预测准确度:RMSE、MAE;Netflix 认为 RMSE加大了对预测不准的用户物品评分的惩罚;TopN推荐用准确度和召回率;
- 覆盖率:描述对物品长尾的发掘能力;覆盖率 100% 即可以将每个物品都推荐给至少一个用户;如果所有的物品都出现在推荐列表中,且出现次数差不多,那么推荐系统发掘长尾的能力就很好;推荐系统给每个用户都推荐一个长度为 N 的 物品列表 ,则覆盖率为: , 覆盖率也可以用信息熵和基尼指数来定义;信息熵: , 这里是物品 i 的流行度除以所有物品流行度之和;
- 多样性:用户的兴趣的广泛的,每个时间点也不一样;
- 新颖性:给用户推荐没有听说过的物品;平均热门度较低的物品‘’
- 惊喜度:即推荐的物品与用户历史兴趣不相似,但却让用户满意;
- 信任度:推荐的可解释性;社交网络可利用好友信息进行解释;itemCF的有很好的解释性,因为它是基于用户的历史行为进行推荐的;
- 实时性:新闻类;
- 健壮性:抗击作弊的能力,刷分之类的;
- 商业目标:平均一个用户给公司带来的盈利;
1.2.3 评测维度
用户、物品、时间三个维度进行评测;
第 2 章 利用用户行为数据
显性反馈:直接给出评分;
隐性反馈:行为数据;
【长尾分布】:用户和物品的流行度都属于长尾分布;长尾分布,就比如微博热点,很热门,但只有几条,热度低的新闻很多很多;涉及到两个概念,物品流行度 指对用户产生过行为的用户数;用户活跃度 指用户产生过行为的物品总数;一般认为,新用户倾向于浏览热门的商品,老用户会逐渐关注冷门商品;
【协同过滤算法】:基于用户行为的推荐算法称为 协同过滤 。基于邻域的方法(userCF,itemCF)、隐语义模型LFM(latent factor model)、基于图的随机游走算法等;
【交叉验证】:将一份数据分成 M 份,其中一份,做测试,另外的做训练,做 M 次试验,M份预测值取平均值作为最后的结果;
2.1 基于邻域的方法
2.1.1 基于用户的协同过滤算法 userCF
两个步骤:
1)先找与目标用户有相似兴趣的用户集合;
2)找到这个集合中用户喜欢,且目标用户没有听说过的物品进行推荐;
具体:
1)先建立 物品-用户 的倒排表;
2)在 1) 的基础上建立用户-用户的相似度矩阵w(即两用户有过共同行为的物品数);
3)基于相似度矩阵w进行推荐;
相似矩阵的计算:
- 交并比;
- 余弦相似度:如图所示:
用户 u 对物品 i 的感兴趣程度:
2.1.2 基于物品的协同过滤算法 itemCF
两个步骤:
1)计算物品之间的相似度;
2)根据物品之间的相似度和用户的历史行为给用户生成推荐列表;
用户 u 对物品 j 的感兴趣程度:
物品相似矩阵需要按最大值归一化(除以最大值)来提高准确度、覆盖率、多样性等;
2.1.3 比较
userCF 的推荐更加社会化;需要维系一张用户相关的表;
itemCF 的推荐更加个性化;需要维系一张物品相关的表;
新闻网站中,对于 itemCF,物品的相关表也要很快更新,技术上难以实现,一般一天一更,而物品的更新速度远远大于新用户的加入速度,所以用 userCF 更好,userCF在抓住热点和实效性的同时,也保证了一定的个性化;
图书、电子商务中,用户的兴趣比较固定和持久,更看重个性化推荐,itemCF效果更好;
itemCF 利用用户的历史行为给用户做推荐解释,可以令用户比较信服;
2.2 隐语义模型 LFM
基于用户的兴趣分类进行推荐;
简单说,LFM 就是矩阵的分解;它引入了一个隐类矩阵,将 用户 对 物品 的兴趣 分解分 用户和每个隐类的关系,物品和每个隐类的关系;也可以说是用户的兴趣向量和物品向量;最后对每个隐类找出权重最大的物品进行推荐;它相当于通过用户行为对物品进行了聚类;
也可以这么解释:通过一些特征联系用户和物品,给用户推荐那么具有用户喜欢的特征的物品;
2.2.1 基础算法
用户 u 对物品 i 的兴趣:
LFM 是一种学习方法。训练样本:正样本为用户喜欢什么物品,负样本为热门用户却没有行为的物品;
【基于 LFM 的实例】:
即:用户的特征向量*新闻链接的内容特征向量(内容属性,如关键词、类别等) ,加上,用户的隐类向量 *链接的隐类向量(用户对链接的行为);
2.2.2 LFM 和 基于邻域的方法的比较
1、LFM 是一种学习方法,通过优化目标而建立的模型;后者是基于统计的方法;
2、空间复杂度:后者要都要维系一张相似度表O(M*M) 或 O(N*N) ,空间复杂度更高;LFM 是 O(F*(M+N))
3、时间复杂度:LFM 需要迭代来收敛参数,时间复杂度更高;
4、在线实时推荐:userCF和itemCF可以在线实时推荐,因为他们的相似表缓存在内存中;
5、推荐解释:itemCF可以,LFM 做不到;
2.3 基于图的模型
用户和物品建立二分图,计算两者之间的路径数,越多则推荐的优先级越大;
第 3 章 冷启动
3.1 用户冷启动
1)基于注册信息(人口统计学、社交账号登录(导入站外行为数据))、
2)登录时让用户对一些物品进行反馈(热门、具有代表性、多样性的物品);后者2)有一种建树的方法,就是,先从所有用户中找一个区分度高的物品 i ,通过用户对它的态度分为 3 类(对物品 i 喜欢、不喜欢、不知道的),然后再在没类用户中找区分度高的物品,然后将每一类用户又分为 3 类,继续下去,通过用户对一系列物品的看法对用户进行分类;冷启的时候从根节点开始询问用户对物品的看法,然后将用户放到不同的分支,直到进入最后的叶子结点;此时我们对一个用户的兴趣就有了比较清楚的了解,从而开始个性化推荐;
3.2 物品冷启动
利用物品内容信息;根据物品相关性来进行推荐;需要频繁更新相关性表;
在新闻网站等实效性很强的网站中非常重要;
物品的内容可以通过向量空间模型表示;文本、分词、实体识别(如人名、地名等)、通过 TF-IDF计算关键词的权重,通过词向量计算余弦相似度;
也可通过 LDA 话题聚类进行物品内容相似度计算(KL散度);
3.3 系统冷启动
发挥专家的作用;
第 4 章 利用用户标签数据
标签是无层次化结构的、用来描述信息的关键词;
标签:便于查找、传达信息;豆瓣
不是所有标签都能反映用户兴趣;可以用物品的标签向量计算物品的相似度(TF-IDF);
标签具有解释性,对质量要求高,不能包含没有意义的停止词和表达情绪的词,也不能包含很多意义相同的词;
第 5 章 利用上下文信息
用户访问系统的时间、地点、心情;
5.1 时间上下文信息
- 用户兴趣是变化的;
- 物品是有生命周期的;
- 季节效应;
5.2 推荐系统的实时性
实时推荐系统:对用户行为进行实时存取;推荐算法本身具有实时性;实时性意味着:
- 在每个用户访问推荐系统时,都根据用户这个时间点前的行为实时计算推荐列表;
- 平衡考虑用户的近期行为和长期行为;既要体现用户的兴趣变化,又不能完全受近期行为的影响;
5.3 推荐系统的时间多样性
- 保证用户有了新的行为之后及时调整推荐结果,满足用户近期兴趣;
- 用户没有新的行为时也要经常变一下结果,具有一定的时间多样性;
一般会记录下用户上一次的推荐结果,在此之上做改变;
5.4 基于位置的推荐算法
餐馆、酒店等的推荐;
不同地区的用户兴趣存在差异;用户往往在附近的地方活动;
位置是层级结构,从国家到省市县等,
第 6 章 利用社交网络数据
很多社交网站注册时都提供了让用户用通讯录等导入好友关系的功能,用以解决社交网络的冷启动问题;
通过用户聊天的频繁程度、邮件的来往频繁程度、共同关注的好友数来度量两用户的熟悉程度;
基于社交网络数据还可以给用户推荐好友(基于内容、兴趣、共同好友等);
好友的推荐对于增加用户对推荐结果的信任度非常重要;广告推荐中有两种情况,一种广告的推荐理由是用户的某些好友关注了这个广告;二是在用户好友关注该品脾时,就在用户的信息流中加入一条信息,告诉用户他的某个好友关注了一个品牌;后者效果更好;
- 利用用户的电子邮件(来往邮件的频繁程度,邮箱后缀(一般为同个公司的));
- 注册信息(地区、学校、公司等信息);
- 位置数据(移动端的IP地址);
- 论坛和讨论组(豆瓣小组,具有相似的兴趣);
- 及时聊天工具(QQ,“你可能认识的人”);
- 社交网站(微博主页人人可见)等
第 7 章 推荐系统实例
7.1 外围架构
推荐系统通过分析用户的行为日志,给用户生成推荐列表,最终展示在网站的界面上;
7.2 推荐系统架构
多个推荐引擎组成,每个负责一类特征和一种任务,推荐系统的任务就是将推荐引擎的结果加权或合并、排序返回;
- 生成用户-特征向量;
- 物品-特征相关推荐(用到了候选物品集合,以保证推荐结果只包含候选集中的物品),得到初始的推荐结果;
- 过滤(用户产生过行为的,候选集之外的,质量很差的(评分));
- 排名(新颖性(发掘长尾)、多样性(覆盖更多兴趣)、时间多样性(实时、变化)、用户反馈(点击模型来预测用户是否为点击结果:搜索结果的点击预测、搜索广告的点击预测、上下文广告的点击预测))
推荐引擎的架构图:
其他:
SVD 分解:矩阵分解 (特征值/奇异值分解+SVD+解齐次/非齐次线性方程组)
架构:推荐系统的架构