推荐系统的目标
信息爆炸的产品中,通过推荐系统帮助用户从大量信息中筛选出用户最可能感兴趣的;
从场景上分析,推荐实际上对用户来说大多是被动的,需求并不清晰。用户的心理决策如下
1、自某些场景中,用户在UI界面发现了推荐模块
2、用户读取推荐内容并加以判断
3、用户点击内容或者离开
我们的期望当然是用户点击了我们的推荐,但该期望取决于两个因素:
- 推荐模块在UI层让用户易于发现、理解;比如推荐理由、标题、图片、排版等
- 推荐内容能够引起用户兴趣;比如符合用户最近关注点,贴合用户的兴趣等
两个因素共同影响用户点击的概率,前者影响用户感知,后者影响用户信任/惊喜。本篇主要阐述后者的构建方式;
如何筛选推荐内容
推荐系统的目标大多是筛选用户最感兴趣的TOPN内容,这个目标可以拆解为
1、定义人与物的兴趣关系,如何在计算机中表征兴趣这种不标准且定性的概念 (特征定义)
2、如何基于1将内容筛选出来给用户 (算法定义)
通过特征定义兴趣
人对物的兴趣关系是个定性的东西,如果我们无法清晰且定量定义它也就无法通过计算机进行计算。
我们可以通过典型的case来探寻抓取兴趣关系的方式:
1、如果用户标榜自己喜欢喜剧,我们就可以把属于喜剧的周星驰电影推荐给他,这是一种非常显性的关系
2、如果用户A与用户B非常臭味相投,那么把A看过的B没看过的内容推荐给B,B大概率感兴趣,这是一种比较隐性的关系
3、如果用户喜欢看电影功夫,然后我们发现很多人喜欢看功夫的同时喜欢看逃学威龙,我们把后者推荐给他。这也是一种隐性的关系。
(2、3的潜在逻辑是人本身在行为上对喜欢物品会有一致性)
我们可以通过上述用户行为以及用户标签等方式抓取到用户与物品的关系,再通过算法进行量化描述。
通过算法定量描述
基于用户相似推荐
相似的人的物品偏好可以互相推荐;那么如何衡量用户相似?
1、通过用户行为衡量用户相似并推荐-UserCF
原理
A与B是好朋友,她们因为有着非常相似的喜好而惺惺相惜;每当A发现了好剧时,就会推荐给B,然后B基本上都很喜欢。这就是基于用户的协同过滤算法
相似度计算
对问题进行简化,假设平台内容有{a,b,c,d,e,f}
A内容行为【a,b,e】A表示为向量(1,1,0,0,1,0)
B内容行为【b,c,d】B表示为向量(0,1,1,1,0,0)
通过余弦相似度描述相似性:Wab=1/3
另外还需考虑时间因素,应为用户近期行为更具有参考价值
T-t 即用户行为与当下的时间间隔,α为衰减率,物品属性与时间越相关α越大;
推荐
在上述例子中A喜欢a,而B没看到过;基于AB的相似,我们可以给出B喜欢内容a的可能性
P(B,a)=WAB * LAa
L(A,a)即A对a的喜欢程度,由于例子中只存在喜欢或不喜欢,所以L为1)
在更为常规的情境中,我们会参考K个与B相似的用户,那么最终P(B,a)是由K个用户的W*L加和得到的;因为仅仅参考几个用户是具有不确定性的,生活中喜好相似的朋友也会有你喜欢我不感冒的情况,所以这种不确定性是需要【大数据】来平掉。与B相似的A喜欢a是不够的,还需要更多与B相似的用户喜欢a,这样B→a的判断会更加具有参考意义,所以要加起来计算P
2、通过社交网络的关系描述用户相似并推荐
人与人之间的关系是一种潜在的相似性判断,社交网络上互为好友的人可能趣味相投;
在社区型产品中,通常既有内容也有关系链,比如即刻、豆瓣;更为珍贵的是社区类产品的关系链是通过兴趣建立的,而不是类似父母、同学这种强关系;
计算用户之间的熟悉程度
out(u)是用户u关注的人;两个用户的关系链的重合表示两个人的熟悉程度。
通过关系链计算用户对物品的感兴趣程度
我们可以给用户推荐他的好友感兴趣的内容
Wuv指的是用户u与好友v之间的兴趣相似度,rvi指的是好友对物品i的兴趣程度(比如点赞、评论、转发等)那么我们可以用Pui来衡量用户对物品的喜好程度
我们可以用该熟悉程度来表示Wuv,但这种表征仅适合社区中的关系链,因为社区中的关系链是由内容建立起来的,能够代表用户偏好。如果是强关系链,那么还需考虑用户行为相似度UserCF一同来表征Wuv
基于物品相似推荐
1、通过用户行为描述物品相似
原理
啤酒与尿布已经是一个人人皆知的案例了。如果物品A与物品B经常出现在一起,那么这两个物品就具有相关性。如果用在电商网站就映射到组合产品上:咖啡机与咖啡豆等;如果在内容网站就会映射到相似的内容上。这就是亚马逊提出的ItemCF算法
通过行为计算物品相似度
假设喜欢物品a的人数为Na;喜欢物品b的人数为Nb
那么Wab为物品相似度
交集即同时喜欢a、b的人数,分母是各自人数乘积;W就是物品相似的程度
分母是乘积除了作为基数描述相似程度,也惩罚了热门物品的影响:共同喜好ab的人群过于大众反而会导致相似性降低。
另外还需考虑时间因素,应为用户近期行为更具有参考价值
T-t 即用户行为与当下的时间间隔,α为衰减率,物品属性与时间越相关α越大;
为用户推荐
场景一、用户观看完某个内容或者停留在某个内容的详情页
针对用户喜欢的当前物品,进行相似性推荐。
场景二、在首页推荐页面为用户推荐
根据历史用户内容行为,将这些行为对应的相似物品进行W加和。取前几推荐,历史内容的偏好程度可以作为权重
2、通过物品显式特征描述物品相似(冷启动)
一般来说,物品存储在互联网上都会有一定的关键信息描述。我们可以将这些关键词表示为向量,然后计算向量之间的形似度来描述物体之间的相似
比如文本类
将文本内容表示为向量
其中,ei 就是关键词,wi 是关键词对应的权重。文本关键词的权重一般用TF-IDF来做
然后我们可以根据余弦相似度计算向量之间的关系;这样我们就有基于内容的物品相似表。从而可以对新物品在用户以往内容行为基础上进行内容相似推荐。
基于内容相似与ItemCF都是维护了一张物品相似的表,但是思路完全不同。一般来讲ItemCF表现更佳,因为目前技术上对内容相似的挖掘其实是远远不足的,基于关键字或者作者、出版社等特征描述相似度往往是不全面的,效果好不好取决于该特征与用户关注点强不强,不具有普适性。不过随着NLP的发展,机器会对内容背后的含义挖掘能力更强,理论上会越来越好。
基于用户-标签-物品的显性特征
1、通过标签系统推荐
原理
标签系统对内容的衡量相对于关键词更为精细,因为它是用户主动产出的较为深层次的语义标识。推荐结果也更具有可解释性。
假设我们已经拥有大量的用户标注行为,那么通过标签给用户推荐的机理:
1、计算用户对标签的偏好程度
2、计算物品与标签的关联程度
3、基于上述的关联计算用户与物品间的关联
为用户推荐
根据标签集b用户对内容的喜好程度如下
nu,b是用户u对内容有标签b 的次数,这里是用行为次数表示;实际过程中考虑维度更为复杂,包括对该标签内容的浏览、收藏、评论等等,不同维度去衡量用户对b的偏好程度。
nb,i是物品i被打过标签b的次数,即物品与标签b的关联程度;
然后我们需要对公式进行调整,降低热门标签与热门内容的权重,使得内容更个性化
引导用户UGC标签的设计case
在大多数UGC产品中,都会存在让用户进行标签填写的过程;标签作为用户与物品间重要的桥梁,要保证正确、不重复、不缺失、客观语言描述。
因此应通过产品设计引导用户标签的填写,帮助用户填写准确的语义描述;例如下方知乎的设计
case1:绿色框中是系统推荐的标签,相当于默认选项;系统通过判断问题关键字将标签库中可能符合的标签抓过来,为用户省事儿的同时,避免新内容缺乏数据的问题;
case2:红色框中是用户主动填写的场景,系统会根据用户已填写从标签库进行推荐,用户只能选择下方存在的标签;避免重复标签的问题,也避免用户随便填写导致的无效标签问题;
再比如豆瓣,场景多是为已经存在的书本进行标注(增加标签权重),用户可以自由填写(可能需要进行定期清理);新内容的默认标签由系统可能根据关键词抓取,数据上来后会更新
2、通过用户基本信息推荐(冷启动)
当用户注册时,一般可以获取一定的注册信息个人基础信息:性别、年龄、地点、职业、民族等
获得用户的基本信息后,我们可以对这些新用户进行粗分类;利用这些基础特征为用户进行推荐
比如在上述公式中,我们想要推测一个填写过某种基础信息的新用户对物品i的感兴趣程度P;
通过喜欢物品i的用户群N(i)中具有基础特征f的用户群U(f)个数占比N(i)的比例来衡量;
比如假设f为20岁以下,i为天龙八部,则喜欢天龙八部的用户中,20岁以下的用户为P;P值越高,说明该f与i的相关性越强;
这样我们可以计算出各个特征f与i的相关性,然后针对f型新用户给予初步个性化内容推荐;
3、隐语义模型
原理
隐语义模型可以对用户的大量行为进行处理,从中抽取出用户行为背后的分类特征(类似标签)以及内容与类别的权重关系
R=PQ R即用户行为对物品的偏好,而P与Q是用户的偏好与物品偏好权重
这时候计算用户u对一个物体i的喜好程度 Rui=PukQki
这其中,内容的类别K是可以自己设定。
那么现在的问题就是如何获取P与Q
P与Q计算
上述R=P*Q 是我们希望算法做到的,这个R是我们假设P Q存在时,我们对R的期望值。这里可以用到学习算法,根据已有的用户-物品数据R来预测;通过计算损失函数来获取P Q
随机初始化矩阵P、Q当通过梯度算法R预计与R实际的相差值越来越小,那么P Q 就越来越真实
实际R获取一般有正例与负例,正例是用户已经产生的物体行为,负例可以采用用户未曾发生过的热门物体。
其他影响因素
时间上下文
物品本身的价值随时间变化
根据物品属性的不同,物品价值随时间衰减的程度不同
新闻类:时间影响极大,呈现小时/天级别的衰减
社区内容:时间影响极大,呈现小时/天级别的衰减
电影类:时间影响较大,大部分呈现年级别的衰减。仅仅小部分长久不衰
书籍类/问答类:时间影响较小
周期性物品跟随时间变化
人类社会具备周期性变化,比如季节以及各种节日
电商类网站往往具有这类特点,换季影响衣物推荐;情人节等会影响主题物品的推荐;
地点上下文
对于020类产品来讲,本地是默认的。在距离上影响推荐结果。具有代表性的外卖与打车、大众点评等,地点是重要的决策因素。
物品热度
人类有爱好热门的本性;将流行的物品推荐给用户是一个不会错的方式,特别是对用户了解不多时,”大家都爱看“就是一个触动用户初次行为(冷启动)的典型方式
定义热度
热度分 = 初始热度分 + 用户交互产生的热度分 – 随时间衰减的热度分
Score = ( S0(Type) + S(Users) ) / T(Time)
即新物品产生时,赋予一个初始热度S0,随着用户不断进行交互会产生S(User)对热度进行调整。同时时间作为衰减因子对热度产生影响T(Time);热度算法最广泛的应用就是新闻领域;
初始热度S0的设定
1.通过内容类别进行设定;比如娱乐新闻S0就大于财经新闻S0,具体的数值比例需要平台测试
2.通过内容分析进行设定;爬取当前社会的热点词,将内容与热点词进行匹配,匹配越高S0就越高。
用户行为设定
用户可以发生点击阅读(click),收藏(favor),分享(share),评论(comment)这四种行为。对这四种行为做一定定量描述:
S(Users) = 1click + 5favor + 10comment + 20share;
这里的每个行为的分数值需要实践中测试,这里只是一个比例示例;
时间衰减设定
热度的衰减应该随着时间越来越快,这是一种指数型的衰减;随着时间的流逝,需要越来越多的用户交互才能维持热度,这比较符合我们对热度的认知。
T(Time) = e ^ (k*(T1 – T0))
业务需要
从平台的角度,通常对内容会有一定的要求,比如:
1.增加一些重大事件的权重:党和国家的大会
2.减少劣质内容:标题党与涉黄内容
3.推广用户自内容:为ugc的内容增加权重 等等
通用架构
推荐系统主要就是召回—过滤——排序
召回:通过识别特征,将有可能合适的内容从内容库中筛选出来,为后续处理做准备
过滤:剔除一些不合适的内容,比如已经有过行为的物品、质量比较差的物品等
排序:将召回的内容进行重排序,这一步的目标是输出用户最可能喜欢的物品,需要考虑各种特征、上下文、标签、基本信息等等;还需在系统体验的角度考虑内容分发的新颖度、多样性
ps大部分知识来自网络学习,请指正