1. 好的推荐系统
什么是推荐系统?
在这个时代,无论是信息消费者还是信息生产者都遇到了很大的挑战:对于信息消费者,从大量信息中找到自己感兴趣的信息是一件非常困难的事情;对于信息生产者,让自己生产的信息脱颖而出,收到广大用户的关注,也是一件非常困难的事。
推荐系统就是解决这一矛盾的重要工具。推荐系统的任务就是联系用户和信息,一方面帮助用户发现对自己有价值的信息,另一方面让信息能够展现在对它感兴趣的用户面前,从而实现信息消费者和信息生产者的双赢。
即解决信息过载问题。同“分类目录”和“搜索引擎”。搜索引擎是用户明确知道自己的需求,从而主动去找对自己有价值的信息,而很多情况下用户是没有目标的,或者说目标不明确的。那么,就需要推荐系统来帮助用户快速发现有用信息了,它不需要用户有明确的兴趣需求,而是通过挖掘用户行为,给其兴趣建模,从而主动给用户推荐能够满足他们兴趣需求的信息。
以生活中看电影的例子来说。我们想看电影时,决定看什么电影,基本有以下几种推荐种类:
- 向朋友、向其他人咨询推荐(社会化推荐)
- 我喜欢看“周星驰”的电影,那就推荐周星驰早年拍过的,我还没看过的电影给我(基于内容的推荐,推荐在内容上和我之前看的相似的电影给我)
- 找到和我兴趣比较相似的一群用户,推荐他们看的电影给我(基于协同过滤)
推荐系统的应用
在互联网各类网站中都可以看到个性化推荐的应用,通过分析大量用户行为日志,给不同的用户提供不同的个性化页面展示,来提高网站的点击率和转化率。比如网上商城、电影和视频、音乐、社交、阅读、基于位置的服务、广告等各个领域。
推荐结果展示页面一般包含以下信息:
- 推荐物品本身的信息;
- 推荐理由(曾今喜欢/购买过相似的,好友喜欢/好友购买等)
- 用户反馈交互(喜欢/购买,or不感兴趣)
推荐系统评测——什么才是好的推荐系统?
什么才是好的推荐系统?
推荐系统的参与者:用户、物品提供者、提供推荐的网站。
给图书推荐为例:
首先,推荐系统需要满足用户的需求,给用户推荐那些令他们感兴趣的图书;
其次,推荐系统要让各出版社的书都能被推荐给对其感兴趣的用户,而不是只推荐几个大型出版社的书;
最后,好的推荐系统设计,能够让推按系统本身收集到高质量的用户反馈,不断完善推荐的质量,增加用户和网站的交互,提高网站的收入。
准确的预测并不代表是好的推荐
比如说,一个图书推荐系统预测一个用户将来会购买《Thinking in Java》这本书,而用户后来确实购买了,那这就是一次准确的预测。预测准确度确实是推荐系统领域的重要指标,但是准确的预测不代表就是好的推荐。比如说,该用户早就想买《Thinking in Java》这本书了,无论你是否推荐,他都准备买。那么这个推荐结果显然是不太好的,因为它并未使用户购买更多的书,而仅仅是方便用户购买了一本他原本就准备买的书。
好的推荐系统不仅仅要能够准确预测用户的行为,而且能够拓展用户的视野,帮助用户发现那些他们可能会感兴趣,但却不那么容易发现的东西。同时,推荐系统还要能够帮助商家将那些埋没在长尾中的好商品介绍给可能会对它们感兴趣的用户。
评测推荐效果的3种实验方法:
- 离线实验:
a. 通过日志获得用户行为数据,并按照一定格式生成一个标准的数据集;
b. 然后将数据集按照一定的规则分为训练集和测试集;
c. 在训练集上训练用户兴趣模型,在测试集上进行预测;
d. 通过事先定义的指标评测在测试集上的预测结果。
优点:不需要对实际系统的控制权;不需要用户参与实验;速度快,可以测试大量算法;
缺点:无法计算商业上关心的指标;离线实验的指标和商业指标存在差距。
- 用户调查:
a. 找一些真实的用户,让他们在系统上完成一些任务。
b. 观察并记录他们的行为,并让他们回答一些问题。
c. 最后,我们需要分析他们的行为和答案来了解测试系统的性能。
优点:获得很多体现用户主观感受的指标,相对风险低。
缺点:招募测试用户代价较大;很难组织大规模的测试用户,因此会使测试结果的统计意义不足;设计双盲实验非常困难;用户在测试环境下和真实环境下的行为可能有所不同等。
- 线上AB测试:
a. 将用户随机分成几组,并对不同组的用户采用不同的算法;
b. 然后统计不同组用户的各种不同的评测指标来比较算法。
优点:可以公平获得不同算法线上实际的指标,包括商业上关注的指标。
缺点:周期较长,长期的实验才能得到可靠的结果;其次,大型网站AB测试的设计也比较复杂,一个网站多层多模块协作,相互影响,一个指标的变动,很有可能是其他处的变动导致的。
评测推荐效果的评测指标
用户满意度
通过用户调查和在线实验获得。用户调查就比如问卷调查,在线实验就是指统计到的行为,比如购买行为,或者页面上设计的推荐反馈按钮(喜欢,不感兴趣等)
预测准确度
覆盖率
覆盖率描述一个推荐系统对物品长尾的发掘能力。覆盖率为100%的推荐系统,会将系统内所有物品至少都推荐给一位用户。
覆盖率低的推荐系统,容易造成“马太效应”,即所谓强者会更强,弱者会更弱。热门排行榜就有马太效应,那些热门的、曝光率高的物品会越来越热门,而比较冷门的物品则会越来越冷门。
新颖性
新颖的推荐是指给用户推荐那些他们以前没有听说过的物品。实现新颖性就简单的办法是,在推荐列表中将该用户有过行为的物品过滤掉。以视频网站举例,过滤掉该用户那些他之前观看浏览过的的等视频。但是这仅仅是过滤掉了本站的视频数据,用户还可能在其他平台其他媒介上也观看视频,仅仅过滤本站数据,过滤得不彻底,新颖性还是不够。
稍微好点的方案就是,利用推荐结果的平均流行度,因为越不热门的物品越可能让用户觉得新颖。因此,如果推荐结果中物品的平均热门程度较低,那么推荐结果就可能有比较高的新颖性。
惊喜性
推荐结果和用户的历史兴趣不相似,但却让用户觉得满意,那么就可以说推荐结果的惊喜度很高。而推荐的新颖性仅仅取决于用户是否听说过这个推荐结果。(发现宝藏up主,发现新大陆)
如果获得了一个用户观看电影的历史,得到这些电影的演员和导演集合A,然后给用户推荐一个不属于集合A的导演和演员创作的电影,而用户表示非常满意,这样就实现了一个惊喜度很高的推荐。
信任度
假如你有两个朋友,一个人你很信任,一个人经常满嘴跑火车。那么前者给你的推荐你很可能会接受,而后者的推荐你则可能不接受。这两个人即便他们推荐的内容一致,但你却可能会产生不同的反应。
推荐系统也存在同样的信任问题,如果用户信任推荐系统,那就会增加用户和推荐系统的交互。比如在电子商务、广告中,让用户信任的推荐,就更能让户产生购买欲。
提高推荐系统的信任度可以:
- 增加推荐系统的透明度,即提供解释,让用户了解推荐机制。
- 利用用户的社交网络信息,利用用户的好友给用户做推荐和推荐解释(相对平台而言,用户对好友一般比较信任)
实效性
大多数领域网站的推荐非常在意时效性。如新闻资讯网站推荐当日或近几日的新闻,如电子商城推荐刚下单购买相关的配件,推荐当季的衣物等。
健壮性
推荐算法也会被攻击作弊的,其中最著名的就是行为注入攻击。比如豆瓣的评分是推荐算法的一个重要参数,攻击者可以注册很多账号给该物品刷高分,从而影响推荐结果。或者有些商城的推荐逻辑是“购买商品A的用户也经常购买的其他商品”,它是统计购买商品A的用户购买其他商品的次数,从而形成一个推荐列表。攻击者可以注册很多账号,用这些账号同事购买A和自己的商品,从而提高自己商品在该推荐列表中的排序。
提高系统的健壮性可以这么做:
- 设计推荐系统时尽量使用代价比较高的用户行为(购买支付优于观看浏览)
- 进行攻击检测,清理数据。
商业目标
不同的网站具有不同的商业目标,销售额、广告展示总数、广告点击总数等。
2. 利用用户行为数据
实现个性化推荐的最理想情况是用户能在注册的时候主动告诉我们他喜欢什么,但这种方法有3个缺点:
- 现在的自然语言理解技术很难理解用户用来描述兴趣的自然语言;
- 用户的兴趣是不断变化的,到哪用户不会不停地更新兴趣描述;
- 很多时候用户并不知道自己喜欢什么,或者很难用语言描述自己喜欢什么。
协同过滤算法
基于用户行为分析的推荐算法是个性化推荐系统的重要算法,学术界一般将这种类型的算法称为协同过滤算法。即用户可以齐心协力,通过不断地和网站互动,使自己的推荐列表能够不断过滤掉自己不感兴趣的物品,从而越来越满足自己的需求。
显性反馈行为和隐形反馈行为
显性反馈行为包括用户明确表示对物品喜好的行为(喜欢/不感兴趣/点赞/打分;
隐性反馈行为指那些不能明确反映用户喜好的行为(页面浏览量)
用户活跃度和物品流行度的关系
不同活跃度的用户喜欢的物品的流行度有所差别。新用户倾向于浏览热门的物品,因为他们对网站还不熟悉,只能点击网页的热门物品,而老用户会逐渐开始浏览冷门的物品。用户越活跃,越倾向于浏览冷门的物品。
协同过滤算法
[图片上传失败...(image-506b3a-1574151319079)]
基于用户的协同过滤算法:给用户推荐和他兴趣相似的其他用户喜欢的物品;
基于物品的协同过滤算法:给用户推荐和他自己之前喜欢的物品相似的物品。
基于用户的协同过滤算法
基于用户的协同过滤算法主要包括两个步骤:
- 找到和推荐目标用户兴趣相似的用户集合;
- 找到这个集合中的用户喜欢的,且目标用户没有听说过的物品推荐给他。
两个冷门物品采取过同样的行为更能说明他们兴趣的相似度。可因此优化改进步骤1寻找相似用户的集合。(比如两个用户都买过《新华字典》,这丝毫不能说明他们兴趣相似,因为绝大多数中国人小时候都买过《新华字典》。但若两个用户都买过《数据挖掘导论》,那可以认为他们的兴趣比较相似,因为只有研究数据挖掘的人才会买这本书)
基于物品的协同过滤算法
也即它会因为买过《数据挖掘导论》而给你推荐《机器学习》。
但是他并不利用物品的内容属性计算物品之间的相似度,它主要通过分析用户的行为记录计算物品之间的相似度。
基于物品的协同过滤孙发主要包括两个步骤:
- 计算物品之间的相似度;
- 根据物品的相似度和用户的历史行为给用户生成推荐列表。
隐语义模型
基于图的随机游走算法
3. 推荐系统冷启动问题
冷启动问题分3类:
用户冷启动,给新用户做个性化推荐的问题。当新用户到来时,我们没有他的行为数据,无法根据他的历史行为预测其兴趣,从而无法借此给他做个性化推荐。
物品冷启动,物品冷启动主要解决如何将新的物品推荐给可能对她感兴趣的用户这一问题。
系统冷启动系统冷启动主要解决如何在一个新开发的网站上(还没有用户,也没有用户行为,只有一些物品的信息)设计个性化推荐系统,从而在网站刚发布时就让用户体验到个性化推荐服务这一个问题。
可有如下解决方案:
- 提供非个性化的推荐,即热门排行榜;
- 利用用户注册时提供的性别、年龄等数据做粗粒度的个性化推荐;
- 利用用户的社交网络账号登录(需要用户授权),导入用户在社交网站上的好友信息,然后给用户推荐其好友喜欢的物品;
- 要求用户在第一次启动时,对一些分类或物品进行反馈,收集用户对这些物品的兴趣信息,然后给用户推荐那些和这些物品相似的物品;
- 对于新加入的物品,可以利用内容信息,将它们推荐给喜欢个偶和他们相似的物品的用户;
- 在系统冷启动时,可以引入专家知识,通过一定的高效方式迅速建立起物品的相关度表。
利用用户注册信息
- 获取用户的注册信息;
- 根据用户的注册信息对用户分类;
- 给用户推荐他所属分类中用户喜欢的物品。
例如:根据注册信息只得知该用户是27岁的女性,那系统就可以推荐二十几岁女性都喜欢的热门商品。虽然推荐的粒度很粗,但是相比不区分男女的方式,精度已经大大提高了。
首次启动直接让用户反馈
例如:第一次进入一个电影平台网站时,网页会弹出很多电影类别让用户选择感兴趣或者喜欢的。系统据此来收集用户兴趣。从而实现推荐的冷启动。
利用物品的内容信息
如果物品的内容是一些诸如导演、演员等实体的话,可以直接将这些实体作为关键词。但如果内容是文本的形式,则需要引入一些理解自然语言的技术抽取关键词。最后对关键词进行排名,计算每个关键词的权重。
发挥专家的作用
例如,音乐播放平台,请专家对几万首歌曲从多维度打特征标签,解决冷启动问题。
4. 利用用户标签数据
标签是一种无层次化结构的、用来描述信息的关键词。
UGC的标签系统是一种表示用户兴趣和物品语义的重要方式。当一个用户对一个物品打上一个标签,这个标签一方面描述了用户的兴趣,另一方面则表示了物品的语义,从而将用户和物品联系了起来。
用户为什么打标签?
便于内容上传者组织自己的信息;方便广大用户查找;传达信息(照片拍摄时间、地点等)
我们希望用户打的标签能够准确描述物品内容属性,但用户往往不是按照我们的想法操作,而是可能会给物品打上各种各样奇奇怪怪的标签。
基于标签的推荐系统
通过标签特征,联系用户和物品,给用户推荐那些具有用户喜欢的特征的物品。步骤如下:
- 统计一个用户最常用的标签;
- 找到具有这些标签的最热门物品推荐给这个用户。
上面第2步中推荐最热门标签是有严重缺陷的,推荐的是热门物品,新颖性比较低。
清理标签
原因:
- 不是所有标签能反应兴趣;(用户打的类似“不好笑”、“无聊”的标签,不能反应出用户喜欢不好笑和无聊的东西)
- 标签系统里经常出现词形不同、词义相同的标签;
- 标签有时还承担推荐解释的作用,是要呈现给用户看的,将其作为给用户推荐某一物品的解释,因此对标签的要求较高,需要清理掉低质量的标签。
5. 利用上下文信息
上下文信息包括用户访问推荐系统的时间、地点、心情等。利用上下文信息,对于提高推荐系统的推荐效果是非常重要的。
- 卖衣服的推荐系统在冬天和夏天应该给用户推荐不同的服装;
- 推荐餐厅的推荐系统应该基于用户当前所在地理位置做出不同的推荐;
时间上下文信息
时间是一种重要的上下文信息,对用户兴趣有着深入而广泛的影响。
时间信息对用户兴趣的影响表现在:
- 用户兴趣是变化的。 用户的兴趣是会自发变化的。比如小时候喜欢看动画片,长大后喜欢看文艺片。一位程序员随着工作时间的增加,逐渐从阅读入门书籍过渡到阅读专业书籍。
若我们想准确预测用户现在的兴趣,就应该关注用户最近的行为,因为用户最近的行为最能体现他现在的兴趣。
物品也是有生命周期的。 很少有电影能够经久不衰, 大多都是上映后不久就会被人们淡忘。所以给用户推荐电影时,要考虑推荐的电影是否已经过时了。
且不同物品有不同的生命周期,相对新闻的生命周期,电影的生命周期其实已经挺久了。季节效应。 夏天吃冰激凌,冬天吃火锅 ,夏天穿T恤,冬天穿棉衣。
地点上下文信息
6. 利用社交网络数据
电子邮件
- 联系人列表;
- 研究两个用户之间的邮件往来频繁程度度量两个用户的熟悉程度;
- 根据邮件后缀名判断是否是同一家公司的,同一家公司的则可能相互认识,隐性的社交关系;
用户注册信息
- 用户注册时填写的学校、公司等信息;
用户的位置数据
- IP地址;
- 对于移动设备来说,可根据GPS定位到城市级别。有时也可以定位到某栋宿舍楼或者某家公司。对于住在某栋宿舍楼或者同一家公司的用户可能有好友关系。
讨论和讨论组
例如豆瓣上有很多小组,每个小组都包含一些志同道合的人。如果两个用户同时加入了很多不同的小组,我们就可以认为这两个用户很可能相互了解或者具有相似的兴趣。如果两个用户在讨论组中增进就某一个帖子共同进行过讨论,那就更加说明他们之间的熟悉程度或兴趣相似度很高。
及时聊天工具
- MSN、QQ和微信等的好友列表,好友分组;
- 统计用户之间聊天的频繁程度,可以度量出用户之间的熟悉程度。
社交网站
在Facebook和Twitter诞生之前,社会化应用(电子邮件和及时聊天应用)都过于封闭。用户只能和自己的好友进行交流,而无法了解到好友圈以外的世界,而且用户之间交流的内容都是非常私密的,大部分用户不会允许将它们公开来用作其他用途。
社会图谱和兴趣图谱
Facebook和Twitter作为社交网站中的两个代表,它们其实代表了不同的社交网络结构。在Facebook(微信)里,人们的好友一般都是自己的在社会中认识的人,比如亲戚、同学、同事等,而且Facebook中的好友关系是需要双方确认的;
但在Twitter(微博)中,人们的好友往往都是现实中自己不认识的,而只是处于对对方言论的兴趣而建立好友关系,好友关系也是单向的关注关系。
以Facebook(微信)为代表的社交网络称为社会图谱,而以Twitter(微博)为代表的社交网络称为兴趣网络。
关于这两种社交网络的分类其实早在19世纪就被社会学家研究过了。19世纪,德国社会学家斐迪南·滕尼斯认为社会群体分为两种,一种是通过人们之间的共同兴趣和新年形成的,他将这种社会群体称为“社区”。另一种社会群体则是犹豫人们之间的亲属关系,工作关系而形成的的,他称之为“社会”。
社交网络数据
双向确认的社交网络数据: 用户A和用户B形成好友关系需要通过双方的确认。(微信,人人网,Facebook)
单向关注的社交网络数据: 用户A可以关注用户B而不需要得到用户B的允许,因此这种社交网络中的用户关系是单向的。(微博,Twitter)
基于社区的社交网络数据: 还有一种社交网络数据,用户之间没有明确的关系,但是这种数据包含了用户属于不同社区的数据。(豆瓣小组,属于同一个小组可能代表了用户兴趣的相似性;同一个学校的人;同一家公司的人;在同一个课题下发表论文的不同作者等)
社交网络数据也遵循长尾分布。即:
- 在一个社交网络中影响力大的用户总是占少数;
- 关注很多人的用户占少数,绝大多数用户只关注很少的人。
基于社交网路的推荐
好友推荐可以增加推荐的信任度 用户对好友的信任胜过平台;
社交网络可以解决冷启动问题 在我们还没有用户行为数据时就可根据用户逇社交好友数据给用户推荐物品。
社会化推荐的缺点
有时可能推荐的精准度不高,尤其是在社会图谱中,因为用户的好友关系不是基于统统兴趣产生的,所以用户好友的兴趣往往和好友的兴趣并不一致。
给用户推荐好友
好友推荐系统的目的是根据用户现有的好友、用户的行为记录给用户推荐新的好友,从而增加整个社交网络的稠密程度和社交网站用户的活跃度。
好友推荐算法在社交网络上被称为“链接预测”。
基于用户属性的预测: 毕业院校、就职公司、职业、同一区域、同一住址等;
基于共同兴趣的好友推荐: 计算用户之间的相似度。有些用户共同一些物品,则说明他们就有相似的兴趣。(在新浪微博中,若两个用户曾今评论过或转发过相同的微博,说明他们具有相似的兴趣。)
基于社交网络图的好友推荐: 给用户推荐好友的好友。