《推荐系统实践》的笔记

来源:互联网 发布:泉州金蝶软件 编辑:程序博客网 时间:2024/05/21 14:53
     
推荐系统实践
  • 书名: 推荐系统实践
  • 作者: 项亮
  • 页数: 197
  • 出版社: 人民邮电出版社
  • 出版年: 2012-6
正如吴军在序言中所述,本书算是填补了系统分析论述推荐系统方面书籍的空白。下面按照书的章节顺序进行总结。
声明:本文完全按照本人兴趣有选择性的总结,有想了解详情者请自行看书。
1. 为什么要有Rec Sys?
在我们日常的信息接收过程,往往存在的以下两个问题:
· 信息过载;
· 用户本身需求并不明确,需要引导(不然他就直接去搜了,还推荐个蛋);
对照着这两个问题,个性化推荐系统便应运而生。
本书从几个熟悉的实例出发,本书先给出了推荐系统的真容貌,同时整理分析了几个推荐系统评测的标准和方法,为后文叙述打下基础。而具体的评测指标包括:
· 用户满意度:主要是用户调查;
· 预测准确度:这个是核心,相关指标有RMSE、MAE等。而在不同问题中,还有不同考虑,如TopN推荐中需要看准确率/召回率/F1的度量;
· 覆盖率:就是挖掘长尾物品的能力,既可以是推荐的物品占所有物品的比重,也可以复杂点用信息熵和基尼系数,看情况;
· 多样性:提供的推荐列表中,不同类别物品的比值;
· 新颖性:这个不单是说没看过的,更多的是指用户压根就不知道的,然后去推荐;
· 信任度:这个是个主观值,不但需要推荐系统本身提供可靠推荐,还要有推荐理由,同时推荐系统的交互设计也绝对重要;
· 实时性:就是不同时段不同地点推荐是否一样?发生动作后是否立即不一样?不发生动作是否一直一样?
· 健壮性:抗的住刷票,治得了宕机;
· 商业目标blablabla....
一般的,一个推荐算法可能无法在所有方面都bravo,但是某些方面或者准确点维度上是很好的,所以本书说有三个维度可供参考:
· 用户维度:人口统计学信息,活跃度,是否新用户等;
· 物品维度:属性,流行度,平均分,是否新物品等;
· 时间维度:季节,工作日,白天黑夜等;
至于评测方式,没说的,必然交叉验证。
2. 可以上素材了:利用用户行为数据进行统计分析与模型介绍
扯了那么多,下面正式开始上素材,耍菜刀。
当我们面对一堆系统的log时,了解它们很重要。是不是隐形反馈啊?有木有上下文信息?社交信息提不提供啊?等等。做了进一步的简单清理之后,便可以开始一些基本的数据统计分析工作,而本书主要从以下两个方面来考虑:
· 用户活跃度:就产生过行为的物品总数;
· 物品流行度:即指对该物品有过”关系“的用户总数,所以特指物品的。至于人的,自行脑补...
毫无悬念,很多数据在以上两个指标上都满足”长尾“,毕竟榜样只有几个。值得一说的是,”一般认为,新用户偏向于浏览热门的物品,因为他们对网站还不熟悉,只能点击首页的热门物品,而老用户会逐渐开始浏览冷门的物品“。之后,便进入真正的推荐环节:
* 基于领域的算法:
a. 基于用户的协同过滤算法:UserCF
顾名思义,盖房算法包含了两步:
(1) 找到和目标用户兴趣相似的用户集合:简单点就是Jaccard公式或者余弦相似度计算俩用户的相似度。为了提高算法效率,可能会使用倒排表,同时只考虑最相似的K个用户信息。但这还是有问题,比如俩人都看《金瓶梅》与俩人都看这本书是不同的,因为看后者的人相似度更高。所以需要加入物品i的流行度作为一个惩罚因子。
(2) 找到了这个集合中的用户喜欢的,且目标用户没有听说过的物品推荐给用户:即需要衡量该用户对于各个物品的兴趣度。这可以通过俩用户相似度与推荐用户对该物品兴趣度的积的累加得到,最后Sort,不多说。
该算法缺点:运算代价高、推荐结果难以解释;
b. 基于物品的协同过滤算法:ItemCF
同上,只是相似度考察的是物品对应的用户集合。而除了上述的物品流行度对结果的影响外[如降权,去除过热用户等],还需要注意物品相似度的归一化处理,这样才能使不同类别的物品处于一个起跑线,保证覆盖率和多样性。
对比以上俩算法,UserCF的推荐更加社会化,反映了用户所在小型兴趣群体中物品的热门程度,而ItemCF的推荐更加个性化,反映了用户自己的兴趣传承。
最后,还需要注意”哈利波特“问题,即两个不同领域的最热门物品之间往往具有比较高的相似度,而这时候仅仅依靠用户行为数据是不能解决这个问题的,就必须引入物品的内容数据进行解决,比如对不同领域的物品降权等。
哦,差点忘了,UserCF和ItemCF都是用来用户历史行为,所以在冷启动时,no law to see。。。
* 隐语义模型:LFM一大家子
吐槽:这一节叙述很不好,引入方式啰嗦不到位不说,连代码也是漏洞百出。
简单说来,就是转化为一个机器学习问题。先通过一个Funk-SVD分解,得到一些隐类[个数自定义],并得出各用户与隐类,各物品与隐类之间的关系[暂时未知,需训练计算得到]。当要计算预测某个用户u对某个物品i的兴趣值时,只需要对u到i的生成概率进行统计即可。这样,便又得到了一个损失函数,而为了防止过拟合,还需进行正则化。最后便是解答一个最优化问题,本文使用的是随机梯度下降法,计算得到各个关系的值。至此,模型完整了,按照之前的说法,需要预测时对生成概率统计累加即可。
相比之前的基于领域算法,LFM具有比较好的理论基础[这句话的意思就是改进空间大,个人理解...],虽然时间复杂性较高[但无质的区别],但是空间复杂性较低,所以其没法在线大规模的实时推荐。推荐解释性也不太强。
* 基于图的模型:转化为一个二分图
转化为一个二分图之后,相关性好的一对顶点一般具有以下特征:
(1) 两个顶点之间有很多路径相连;
(2) 连接两个顶点之间的路径长度都比较短;
(3) 连接两个顶点之间的路径不会经过出度比较大的顶点。
凭着以上三点,本书介绍了一种基于随机游走的PersonalRank算法,长的很像PageRank,没啥特别的,不介绍。
3. 调味阶段
* 点火:如何冷启动?
主要包括用户冷启动,物品冷启动和系统冷启动三类。因为目前不用,简述之。
要解决这个问题需要从以下几个方面展开:
a. 利用用户注册信息,如人口统计学信息、用户兴趣自我描述、从其他网站导入的用户站外行为数据等,分类分人的进行规律总结;
b. 选择合适的物品启动用户的兴趣:就是注册的时候给出一些你可能感兴趣的XXX让用户选,这里需要满足给出的选项是比价热门的[不然人都不知道还选个p]、具有代表性和区分性的、物品集合具有多样性等;
c. 利用物品的内容信息:很明显这是要解决物品冷启动问题,即将物品的内容通过向量空间模型来表示,生成一个关键词向量,通过向量间的相似度得到物品间的相似度,之后就成了ItemCF算法了。这个方法因为比较依赖于词面的意思,所以有时不够准确,这是可以使用LDA话题模型。它先计算出物品在话题上的分布,然后利用两物品的话题分布计算物品的相似度;
d. 发挥砖家的作用;
* 放蒜:利用用户标签数据
标签既可以是既有属性[如书名,作者等],也可以是用户产生内容,即一个UGC应用。当一个用户对一个物品打上一个标签,既描述了用户对该物品的认知,也说明了物品本身的一些属性,进而为物品间相似度的计算提供支持。
标签的用途很多,而其依据套用书中一个调查结果便是:“客观事实类的标签优于主观感受类标签”。所以,其可以单独作为物品相似度的一种方式,也可以作为一个因子用于解决上述“哈利波特”问题。此外,还可以利用标签之间的相似性,为各个物品内容的数据稀疏性提供补充。
当然,不是所有标签都是有益的,一些停用词,单复数等需要进行清理,所以标签本身的推荐也非常有用处。因为非关注点,不详述。
4. 加水入味:
* 利用上下文信息
上下文有很多,如时间、地点、心情、状态等等,而本书主要对前两者进行量化分析。
时间上下文信息也可以分为很多种,比如周末还是工作日,寒假还是暑假,晚上还是白天等等,而我这里只关注推荐实时性的考察,具体的是时间在基于领域的推荐算法中的作用。
根据基于领域算法的两个阶段,时间信息也可以作为不同的影响因子加入:
a. 计算相似度时,因为时间相差越远的说明相似度会越低,比如十年前看的“21小时精通”与现在看“21小时精通”的人是不一样的,前者要么挂了,要么成了专家,而后者铁定是小白。这样加入一个时间差相关的惩罚因子来减小即可;
b. 在线推荐时:在采纳推荐项时,更应该倾向于找和该用户近期行为有重合的物品/相似用户推荐的最近喜欢的物品,这样才能反映出用户和物品实时的一个状态。其体现在算法中同上,也是以一个衰减因子加入到兴趣度计算中;
在有些时候,推荐算法训练集中包含了时间信息,而测试集却没有的话,也可以使用。即把该因子只用于离线计算相似度,而当在线推荐时,则不加入时间考量,这样也可以对推荐效果进行提升。
* 利用社交网络数据
社交网路数据因为包含了非常多的用户信息,所以被各类推荐系统高端重视。利用社交网络数据不但可以增加推荐的信任度,也能解决推荐系统的冷启动问题[因为可以通过它充分了解用户]。
加入社会化信息的基于领域推荐算法,可以单独成为一个方法。在推荐时,它使用当前用户和好友的亲密度(和好友的权威度,这个也可以考察,比如李开复推荐的创业的书肯定会比你一个普通好友推荐的更加靠谱)替代之前UserCF中的用户相似度来实现推荐。但话说回来,基于领域的社会化推荐算法就是一种特别的UserCF,这是这次参考的用户集合K变成了好友。
除了基于领域算法,还有便是基于图的社会化推荐算法。在加入了社交网络信息之后,之前的二分图就需要加入用户之间的连接了。
当然这些社会化推荐算法事实上都是非常耗时的操作,所以在实际环境中都很难实现,所以需要一些改进,如只取少数好友进行考察,重构系统使得只考虑当前消息队列等。此外,依据作者的说法,
社会化推荐系统的效果往往很难通过离线试验评测,因为社会化推荐的优势不在于增加预测准确度,而是在于通过用户的好友增加用户对推荐结果的信任度,从而让用户单击那些很冷门的推荐结果
此外,很多社交网站中具有好友关系的用户不一定有相似的兴趣
(特别是基于社交图谱的社交网站[兴趣图谱的社交网站,如微博例外?!])。因此,利用好友关系并不会增加离线评测的准确率和召回率。
其他的还有就是信息流推荐和好友推荐,都不是关注重点,所以不详述。
5. 准备锅碗瓢盆:推荐系统架构
这个不多说,上图更明了:
推荐系统与其他系统之间的关系推荐系统与其他系统之间的关系
图1 推荐系统与其他系统之间的关系
推荐系统的架构图推荐系统的架构图
图2 推荐系统的架构图
实际推荐系统通常采用多种推荐算法,并根据用户的实时行为反馈调整用户的特征向量(特征的加权系数),进而融合各个推荐算法的推荐结果,在此基础上过滤不要的推荐项,最后结合用户使用场景调整推荐结果排名,给出最终推荐结果。
推荐引擎的架构图推荐引擎的架构图
图3 推荐引擎的架构图
最后一章讲解评分预测问题,牵涉到很多具体技术细节,之后再总结。
0 0
原创粉丝点击