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