推荐系统(2)-架构
业务架构
由前文可以看出,推荐系统的本质就是拟合一个用户满意度的函数y=(Xi,Xu,Xc)
函数结果受主要受内容Xi、用户Xu、上下文Xc三个维度的影响因子影响;一般还会外加业务规则Xb进行人工调控;这是推荐系统的架构。同时这个架构中的影响因子又是一个动态变化的过程
- 对于内容而言,每一个用户既是消费者又是决策者,每一次用户行为都对内容的特征进行更新、强化、减削,从而影响后续内容的流转程度
- 对于用户而言,每一次行为反馈都在不断完善自己的用户画像;每一次与新内容的交互都丰富了用户画像的维度,从而影响后续系统的推荐
更好的了解待推荐的内容、更好的了解要推荐给的人,从而更高效的完成内容与人之间的对接。断物识人,是一切推荐行为的起点。
用户画像
用户画像就像是一连串”偏好“标签的聚类;比如:历史10%、科技8%、游戏玩家4%......等等;每一次行为都对内容标签加权,多次行为过后某些标签会越来越凸显,表明了用户的偏好程度;在时间流上整个画像都是动态的,因为用户的兴趣不断变化,标签的大小与有无也不断更新;
豆瓣音乐画像用户的画像信息可以根据来源分为两种类型
静态标签
用户独立于产品场景之外的属性,如性别、学历、年龄、婚育状况、常驻位置、教育程度等相对稳定的信息。一般修改频率很低,当然也有可能存在滞后性、信任度问题。
动态标签
用户在产品场景中所产生的行为。显式反馈行为如给某篇文章进行了点赞评论分享行为、关注了某个作者等等。隐式反馈行为如页面的停留时长、用户的操作行为轨迹等等。通常,显式行为的权重要高于隐式行为,但是由于其更稀疏,所以我们需要隐式行为来补充验证;在显式行为里,因产品场景的不同,不同的动作权重也不相同(如对于电商场景,购买>购物车>查看)
常见的影响动态标签的用户行为
- 搜索行为:在电商以及内容网站,搜索行为明确说明了用户当前的信息关注点是什么;
- 浏览行为:隐式反馈,用户点击查看某些内容,即表明对内容的兴趣,可以增加相关标签的权重;但是需要针对不同平台内容特性,确定怎么浏览才是有兴趣而不是误触,什么程度的浏览是对内容的喜欢程度:比如内容观看10%与100%是不同的权重,页面停留时长表明内容的喜欢程度,内容过程中进行了多次快进就要考虑减权;
- 点赞:点赞是一种显式反馈,相对来讲重要程度大于浏览
- 收藏:一种显式反馈,重要程度大于点赞
- 评分与评论:一种明显的显式反馈,但是不一定正负
- 转发:一种显式反馈
对产品来讲,完善用户画像对推荐系统非常重要,我们需要产品设计(初次注册后)以及一些产品运营活动来尽量丰富用户的画像从而提供更好的推荐服务
内容画像
想要推荐给别人内容,首先需要明确内容是什么,具有什么特点;我们常见的对内容的描述有三种
通过分类树状关联内容
分类的整理方式由来已久,生活中处处可见;这是一种树状的、自上而下的、多级的方式,对内容的概括比较抽象,颗粒度比较粗;常见于电商网站、新闻网站,目的是让用户快速筛选目标内容;分类的建立多来源于官方编辑,需要的是全而准确;
通过标签网状关联内容
标签是一种语义层级的映射,对内容的描述非常细致;标签可能网状关联到各个内容上,关联上存在权重关系,以表征内容对标签语义的映射的符合程度
豆瓣标签标签的产出由用户与平台一同管理,大量的用户能够提供多维、深入的标签定义,平台负责对标签进行清洗标签,避免一些错误、重复的标签使用;
成熟的标签体系更多的在于用户对已有标签的加权,每个内容中不同的标签标注次数表示该内容在不同标签维度的权重。
通过关键词、实体关联内容
不论是分类还是标签,对内容的理解都是有限的;我们可以通过NLP的手段进行更为精确的衡量;比如TF-IDF来进行词频处理,以描述标题/文章文本相似度;还有通过提取实体来描述内容的相似程度;当然由于人类语言表达特色,这样的方式会有一定的偏失,但随着技术的发展,我们对内容的分析会越来越精确,比如最近的bert模型在阅读理解上的进步就说明能够进一步对内容含义进行衡量;
内容质量
在推荐系统中,我们可以根据分类、标签、关键词等描述内容的相似度,从而将内容推荐出去;但同时需要思考将相似的东西推荐给用户是推荐系统的目标吗?不,还不够,推荐系统的目标应该是”帮助用户找到他想要的内容“,我们不仅仅要考虑用户对内容的偏好,还要考虑内容的质量;
关于质量的定义
所谓质量就是好坏的意思,是个相对词;意味着更是个主观判断词,不同人就有不同的标准;
比如,同样是偏好生活故事的用户,有的就认为生活琐事,七大姑八大姨是生活;有的就认为诗和远方才是生活;还有的认为研究真理的生活才有意义;而且这些人还互相看不上,互相diss;这时候我们会发现,好坏是不存在的,只有一个人群的认知匹配某个层次的内容,只有合适不合适;那我们就无法定义内容的好坏了吗,就不能给用户推荐大概率上”好“的内容吗?
我们无法严格定义内容的好,但是我们可以定义内容的坏;有些内容是我们普遍不认可的:
1、歪曲事实,不具有真实性的内容
2、标题党,文不对题的内容
3、价值观扭曲,非议国家的内容
4、广告软文、侵权的内容
所以在产品设计中,评分、评论不仅仅是从用户角度说明内容有多好,也是为了反映内容有多坏;外加举报等操作将劣质内容交由平台审核;
再进一步,我们似乎可以定义普世角度的好,就像是有些坏是确定的,有些好也是确定的;
比如具有优秀价值观的文章、行业顶尖人才的内容输出、政府(专业机构)的发展报告;这些我们可以明确是好的,但需要我们的编辑团队进行区分;类似于知乎中会有”编辑精选“;”专业“之类的文章;而这类文章在对应的内容下应该有更高的权重;
剩下的中间层次的内容就是需要对不同用户群进行分配;这个过程的核心在于识别用户,内容的质量是客观的,影响因素在于主观用户。通过不断的用户行为我们可以获知用户画像,同时我们可以设计负反馈帮助用户尽快得丰富画像;就比如一个文艺青年在生活类的推荐中对七大姨八大姑类的内容点击了负反馈,从而加速了用户对诗和远方内容的触达概率;
知识图谱
知识图谱作为一种丰富的语义结构,可以帮助推荐系统做浅层的推理,为推荐提供更为深层的兴趣理解与兴趣探索;近年来在推荐系统中得到了应用,通过对用户行为的深度挖掘,解决推荐系统内容窄化的问题,同时在内容和用户冷启动阶段提供了其他维度的考虑;
是什么
知识图谱旨在描述真实世界中存在的各种实体或概念及其关系,是一种结构化的语义知识。
知识图谱节点
实体节点:独立存在的某种事物:比如一个人、一个城市、一个狗
概念节点:具有某种特性的实体构成的集合:比如国家、民族、产品经理
内容节点:通常作为实体和概念的名字、描述、解释等,可以由文本、图像、音视频等来表达。
边
属性边:某个节点具有什么属性:比如中国具有960万平方公里国土、13亿人口
关系边:每个节点属于哪个节点的什么;比如北京是中国的首都
所以知识图谱的主要结构就是【实体1-关系-实体2】和【实体-属性-属性值】
在推荐系统中的作用
1、对兴趣的深入挖掘
image.png2、提供丰富的推荐维度,增加推荐的多样性
image.png3、推荐结果的可解释性强,系统能够明确告知用户为什么推荐该内容
工程架构
推荐系统当前推荐系统主要就是召回—过滤——排序
召回:通过识别特征,将有可能合适的内容从内容库中筛选出来,为后续处理做准备
过滤:剔除一些不合适的内容,比如已经有过行为的物品、质量比较差的物品等
排序:将召回的内容进行重排序,这一步的目标是输出用户最可能喜欢的物品,需要综合所有特征,精细化得进行内容打分;还需在系统体验的角度考虑内容分发的新颖度、多样性;
多路召回
召回的目标就是要将内容从千万百万级别减少的千级别;需要计算的候选集合太大,所以要想速度快,就只能用简单模型,使用少量特征,多路并行,尽量把用户感兴趣的筛出来
召回模型K即该路召回会拉会多少内容,调节K即调节召回率;之前提到过各种可能对相似有影响的特征,每个可以作为一条规则从内容库中召回
传统模型召回
内容召回
使用分类召回相似内容
使用标签召回相似内容
使用文章标题或者正文提取关键词、实体向量,进行文本相似性召回
内容召回是在用户画像维护一个用户兴趣的集合以及相应的权重,离线维护用户兴趣-物品表
协同召回
通过协同过滤算法召回相似内容
深度模型召回
YouTube召回模型
深度NN召回1、将用户观影行为、搜索行为、上下文、用户画像信息等进行embedding处理,把各个维度特征进行average处理或者注意力处理为单个向量,再将所有向量进行拼接为一个长输入向量丢入NN网络
2、进过三层ReluNN网络之后得到用户向量u,向量u可以理解为用户的兴趣映射
3、向量u经过一个softmax层处理,softmax是一个多分类函数;输出向量为vj,即模型预测用户在视频库V中观看视频i的概率;训练学习的目标就是vj→j的embedding编码,但我们最终需要的是向量u,训练完成后的u就准确得描述了用户的兴趣映射。
train训练方式类似于word2vec,通过挖去中间词,通过周围词来预测中心词,只不过这里不是词而是用户的行为预测;
4、对于每个用户算出的向量u,对视频库中的所有视频根据向量v做最近邻算法,得到top-N的视频作为召回结果。
TDM深度树召回
TDM 模型是阿里巴巴于 2018 年提出的新一代深度召回模型,试图通过结合树结构搜索与深度学习模型来解决召回的高性能需求与降低复杂度;深度树匹配的核心是构造一棵兴趣树,其叶子结点是全量的物品,每一层代表一种细分的兴趣,越往上层兴趣颗粒度越粗。
兴趣树如何学习
通过用户的大量行为,这可以帮助我们建模用户对叶子节点的兴趣,得到叶子层节点的兴趣序关系(倒数2排);通过最大堆模型给出了用户对中间节点的兴趣模型定义,我们可以从叶子层的兴趣序关系根据最大堆性质推导出树结构上每一层节点的兴趣序关系。然后让深度学习模型分别去拟合每一层的兴趣序关系;
使用的深度网络将用户历史行为按时间进行切分,分为多个时间窗口。每个时间窗口内的每一个 item 都与树节点计算关联性权重,得到 attention 分布,然后每个时间窗口内再计算平均权重,接着将多个时间窗口得到的特征拼接起来,通过三层全连接层以及一层 softmax 层得到用户对这个节点感兴趣的概率。
image.png训练过程是首先固定 TDM 树,训练深度网络得到新的节点向量;然后使用新的向量又可以通过聚类等方法重新构建一个 TDM 树;然后再固定 TDM 树重新训练深度网络,如此迭代优化,最终可以得到一个高性能且稳定的模型。
image.png如何召回
根据用户对每层节点的兴趣挑选 topK,将每层 topK 节点的子节点作为下一层挑选的候选集合逐层展开,直到最终的叶子层
排序
排序阶段核心目标是要精准,因为它处理的物品数据量小,所以综合尽可能多的特征,使用比较复杂的模型,按照特定预估目标(如点击导向、互动导向)对候选集统一排序
LR
LR算法是一个二分类模型,输出结果为0与1;生活中有很多现象都是分类任务:判断这个是不是肿瘤啦,判断这个人这次会不会考试通过,计算系统推荐的广告会不会点?
这些个分类问题都会概括为两个特点:
1、每个问题都可能被多个特征所影响,最终结果是多个特征的共同作用 (回归)
2、在特征组合影响下最终输出结果是两个极值,是与否?喜欢与不喜欢? (逻辑)
回归
在处理第一个问题时,我们一般通过回归方程来解决,不同的特征会有不同的权重w,然后再加和
线性回归 矩阵表示为 image.png逻辑
基于第二个特性,我们通过SIGMOD函数来表征
sigmoidy会随着x值发生近跃迁变化,sigmoid函数是一个s形的曲线,它的取值在[0, 1]之间,在远离0的地方函数的值会很快接近0/1
求参数w
那么组合起来,就是在参数W的条件下,输入特征X后,P会根据阈值从而给出预测y的值(0或者1);在CTR的一些场景中P可以作为点击的概率使用
image.png存在大量已经有的数据,需要通过梯度算法得到能够是的预测误差最小的W值
RL在二维特征上是一个一个分类平面,在高维特征上表现为超平面
二维分类 多维分类用LR进行业务时,我们需要人工进行大量的特征工程
FM
LR作为广义线性模型对特征向量与label之间的非线性关系会很苦手;比如使用线性模型来预测各种近似长方形形状的面积,两个特征为长x1与宽x2,那么显然并不能学到一个很好的模型,此时增加一个新的特征x3=x1*x2,便可以得到很好的效果。
FM额外考虑了特征之间的相关性,并将wij按照两个一维向量相乘表示;这就是FM模型;提高了对现实的刻画能力。
对于参数Wij的训练,需要大量和都不为0的样本,然而由于one-hot编码等原因带来的稀疏性使得这个要求无法达成,那么训练样本不足便会导致的不准确,从而影响模型的质量。为解决这个问题将Wij变化为<vi,vj>
w→<vi,vj>FFM
在FM模型的基础上进行细化,引入类别的的概念;进一步解决数据稀疏性问题
FFMGBDT&LR
LR模型中的特征组合很关键,只能依靠人工经验,耗时耗力同时并不一定会带来效果提升。如何自动发现有效的特征、特征组合,弥补人工经验不足,缩短LR特征实验周期,是亟需解决的问题;Facebook 2014年提出GBDT解决LR的特征组合问题
image.png将原本要输入LR的特征向量,先经过GBDT筛选和组合,生成新的特征向量再送到LR中
image.pngDeep模型
所有的深度学习,做CTR的模型时都会有DNN的部分;特征输进去,然后把它转换embedding
NN除过DNN部分,剩下的结构分为两类
1、并行结构
并行用FM或者LR来捕捉低阶特征关系,DNN捕捉高阶特征,最后一起丢入输出层进行预测
2、串行结构
串行前面一样是onehot到embedding特征编码,然后用FM Function做二阶特征组合,上面套两个隐层做多阶特征捕获;
NN模型的作用就是对特征更好得捕捉,本质上是模型对现实的刻画能力强
规则过滤
排序过后,我们得到了内容从高到低的评分;这种情况下头部内容实际上是比较相似的,会导致多样性欠缺的问题比如用户喜欢看动画片(80%)以及综艺(20%),如果只是按照评分高低推荐,就会全都是动画片;因此一般会在多样性做调整,各个内容类别上按比例取;
对于一些已经推荐过用户未点击或者用户已经观看过的内容需要做一定处理:降权或者屏蔽;
将平台比较看重的题材或者作者的内容权重提高;一般基于某些业务或者发展需要,应该允许人为将内容前置的能力;特别是一些突发性的、来不及推荐系统反应的内容,比如汶川地震;