一、内容平台业务的核心
1、内容平台的体验上限由内容池决定,推荐帮助逼近这个上限。
不同业务依赖程度不同,不同内容在时效性、分散性、头部聚集度上的表现不同、分布不同,对推荐的要求和依赖也不同。
2、推荐服务的准确度上限由数据决定,算法帮助逼近这个上限。
所以需要从源头梳理,保证数据质量,例如服务端log、前端埋点log、用户画像、物品元数据等。
二、pm在推荐业务中的职责是团队其他成员的补集
除了毋庸置疑的基础职责,产品需要根据自己团队的实际情况,调整边界区域职责划分,把其他角色无法cover的部分cover起来。
这也反映出对算法和技术的要求:
1、模型选择
2、特征迭代
3、策略方案
4、数据流程
第一部分:系统概览
一、内容平台用户需求满足方式
推荐重点解决的问题:
用户潜在若干内容兴趣的情况下,如何满足快速捕获用户兴趣并给予满足,形成消费转化。
满足方式主要有以下几种:
1、重推:延续性、周期性的行为。跟业务强相关,例如电商复购、视频追剧,都可以体现出用户强周期性行为。
2、利用:利用用户表达出的信息进行推荐,也是本次讨论的重点。
3、探索:拓展用户新兴趣进行推荐。
利用和探索问题就是推荐系统中典型的e&e问题。
二、推荐架构:召回+排序+策略三部曲
推荐架构大同小异,主要包含召回、排序、策略三部分。
召回:通过各种业务抓手粗选出用户可能感兴趣的东西。
排序:结合用户已有信息、场景信息、推荐内容信息,使用模型算法排序,满足核心业务目标。
策略:对推荐结果进行微调,如过滤、融合、强插、打散等,以兼顾其他特定业务目标。
三、业务流程概览
第二部分:召回详解
一、召回业务基本思路
1、用户内容哪些信息可以被利用
1)用户固有属性:基于用户画像的基本属性
2)内容固有属性:标题、标签类元数据,nlp计算挖掘的内容本身属性等
3)历史行为:点击、收藏等用户对内容的正反馈行为,不点击、不喜欢等用户对内容的负反馈行为。行为将用户和内容联系起来
2、内容推荐的3条路线
1)用户-用户:推荐“相似”用户喜欢的内容
2)用户-内容:推荐用户喜欢内容“相似”的内容
3)直接计算用户-内容:推荐与用户“相似”的内容
3、重点问题,如何定义相似度
1)基于行为的:观察用户对内容的行为,例如读过同一本书
2)基于属性的:通过人口属性等,例如同一性别
二、 思路解析
三条路线,两种相似度定义方法,组合出6种方法。
整体来说:
行为判断相似的方法好于用属性判断相似的方法,所以user-cf、item-cf、矩阵分解效果很好。
其他方法作用也很重要,例如利用标签可以做一些拓展等。
三、item-cf
item-cf是非常经典的推荐手段。本质上,利用用户的行为计算item与item的相似度,再推荐给相似用户。
1、item-cf的主要流程
第一步:获取用户历史行为:给定用户ui,获取其历史行为,构建其喜爱用户池ii;
第二步:计算全局内容相似度:给定人意内容ia和ib,计算其两两相似度sia,ib。
第三步:根据用户消费的内容,拉出内容相似内容,从而计算用户喜欢的相似内容:计算ii中每个内容最相似的topk内容,剔除用户ui消费过的内容,合并为候选集ic;
第四步:计算ic中每个内容,同ii中每个内容相似度的均值;
第五步:按照相似度倒排:ic中每个内容按照上述相似度均值倒序排列,成为item-cf召回内容。
2、计算相似度的方法
共现率:若两个内容被很多用户同时喜欢,那么它们是相似的。
说明:根号的作用——归一化处理,去掉热门内容带来的影响。
3、item-cf的具体流程
第一步:构建user-item行为矩阵
每个单元格代表每一个用户对每一个用内容的一次行为。
1 和 0 代表行为,问号表示需要计算预测的内容。
实际线上数据会非常大,非常稀疏。
同时实际业务未必是一个 0,1 矩阵,例如还有评分矩阵,譬如电影喜好可以分为 0 - 5 分。
第二步:计算全局相似度
通过矩阵进行进一步计算相似度。
这里需要思考问题,User2对比User1同时喜欢ItemA,ItemA与ItemB相似度很高,为Uesr2推荐ItemB是没有问题的;但同样要考虑User2并不喜欢ItemD,而ItemD与ItemB相似度非常高,所以不能推荐B。这就是正负反馈都要利用。
四、矩阵分解
以上user对item的偏好,是由两步完成,那么能否避开中间的环节,直接预测问号部分呢,即根据已填充的值预测未填充的值。答案是可以的,这就是矩阵分解的方法。
1、如何理解“分解“
传统方式:用户画像的前提是物品需要分类体系,根据用户行为将物品画像作为自己的特征。
整体来说:需要预置一套分类标签体系,让用户和内容在同一套标签体系下量化。
矩阵分解:本质上相同,但体系并非预先定义,这些维度是无法解释的内容,而且不需要知道,只需要知道需要多少因素完成映射。
也就是说矩阵分解的本质如下:
传统方式显性的,人为的定义分类与tag,设计维度,再计算相似度。
矩阵分解是隐性的,不主动设计维度,而是通过行为,再反推相似。
2、矩阵分解的基本流程
第一步:构建user-item行为矩阵;跟item-cf的行为矩阵构建方法完全相同。
第二步:确定潜在因素数量k,也就是我们要做“投影”的空间维度k, k的值不是固定的,可以是8,32,64,128, 256……都可以,区别在于256个的空间对内容的精细度划分要优于8个空间对内容的精细度划分。
总之,k值越小,计算量越小;k值越大,计算量越到精细度越细,对内容的区分度越好,但同时计算量就越大。
实际需要根据具体情况设置,刚开始可以从小的k值开始,例如8,16,32,慢慢增加,测试k值的增大带来的提升。
第三步:user和item的特征向量化
这部分主要是研发的工作,只要矩阵足够稠密,结果便能输出,具体内部黑盒部分可以交给算法主导。
第四步:对空元素进行计算
使用对应用户和内容的特征向量的内积作为预测分,最终输出矩阵分解的召回。
3、特征向量在很多其他场景可以灵活应用,不仅仅是做推荐
1)user向量化应用举例:
对用户使用特征向量进行聚类,查看用户群体是否明显的有聚集性效应,这不同的群体内容消费倾向应该有些差异,如男性用户群、女性用户群等。
2)item向量化应用举例:
计算item相似度,给出item最相似的内容,利用item的特征向量来做计算,相似的计算常用的有余弦定理等。详情页相关内容的相似推荐常常使用这种方法。
第三部分:排序详解
一、模型简介
1、什么是模型?
模型就是对业务逻辑的数学抽象。
f:一个函数,给定输入和参数可以求出输出
y:因变量,我们需要使用模型输出的结果
例如语音识别:待输出项识别出来的文本;
例如图片分类:待输出项是图片类型;
例如推荐:用户会不会点,0,1;
模型的数据结果需要根据具体业务场景来设定,在推荐的传统场景中y通常是“用户会不会点”,但仅靠点击、ctr为目标,并不是一种非常健康的指标,对于标题党、垃圾内容,无法有效规避。因此点击目标是起点,而非终点。
x:输入给模型的自变量,处理后的特征值。在特征这里便可以体现出产品岗位的价值,pm对业务的理解要优于rd。
w:f的参数,有无穷种组合,需要确定最优的一组。
2、 构建模型
模型构建的过程,就是根据业务领域经验梳理业务逻辑的过程,需要研发和产品共同参与,而且产品的经验是非常宝贵的,产品需要清楚准确传达需要的y值输出是什么,影响业务的核心因素,即x输入是什么。
3、几种常用模型简介
第一类:lr,即逻辑回归,非常简单非常朴素的模型。
解释性强,可以比较明确特征对结果的影响,包括是否有影响以及影响有多大,容易理解,对于新增特征是否生效,可以马上体现出来,但同时也存在劣势很多特征需要人工做交叉,所以在初期,对特征把握不全,不清楚其影响的时候,lr是入门首选。
第二类:决策树dt及gbdt,xgboost
基本上都是树类模型,其中gbdt和xgboost不仅仅是一种模型,也是一种集成学习方式,是非nn类模型里最好的一种。
尤其是xgboost,在实际业务应用中检验,效果优秀。
第三类:深度学习网络dnn(以及其它*nn)
一线大厂基本上已经进入这个阶段。
整体来说:
从lr到*nn效果确实有明显提升,但并没有想象中那么巨大,也意味这单靠模型算法的提升对整个推荐带来的收益是有限的,需要正视模型对业务中的价值,无需过度迷信。
推荐效果整体的提升仍然需要从内容池,到数据质量,到模型,到策略设计整个环节的综合发力。
二、训练模型=炼金的过程
模型训练主要是研发主导的过程。
1、模型训练的核心从大量的已有业务数据挖掘出有效数据,寻求最优参数。
什么是最优:理想情况下模型训练结果上线后,可以对未来的预测最好。
什么是次优:实际上是拿历史数据做训练,输出结果对过去的数据拟合最好。
整个人工智能领域都会面临同样的问题:对过去的事情总结优于对未发生事情的预测。因为模型只是对过去的数据做最好的拟合,对于环境稳定的情况,效果比较好;但业务环境波动较大,模型效果就会打折扣,这就是模型的局限性,可以通过缩短模型训练与线上应用的时间gap进行优化。
2、从中体现大数据的价值
如果数据规模大,数据稠密,模型便能学习到所有结果;如果数据规模小,数据稀疏,模型也无能为力。
整体来说:数据决定推荐上线,模型负责逼近这个上线。
三、case讲解:用lr做视频推荐
第一步:确定y值输出,是否点击某个推荐内容,这是典型的ctr模型。
第二步:总结业务特征,确定影响因素,这里从三个维度简单列举三个例子。
1、内容侧:这个推荐内容是否优质。
2、用户侧:用户是否喜欢看该品类的视频。
3、环境侧:当前网络环境是否支持用户观看视频。
第三步:构建模型。
模型输出y:用户是否会点击推荐内容,0或1;
模型输入特征即量化方式:
x1:用户喜好评分,这里的评分是全站数据的均值,即该影片当前用户评分是否》4.0,是为1否为0;
x2:用户类型喜好评分,即该用户是否看过同分类的影片,是为1否为0;
x3:环境特征,即当前用户是否连有wifi,是为1否为0;
使用lr模型将输入与输出联系起来:
lr:y=f(w1*x1+w2*x2+w3*x3+b)
w就是需要需要后续训练来确定的参数,f是sigmod函数,b偏置量。
第四步:开始训练。
1、收集历史数据,构建训练集。
2、训练模型,确定参数。
第五步:根据模型计算单用户推荐列表。
例如用户访问首页。
1、获取用户信息:看过爱情、动作影片,使用wifi方式连接。
2、获取用户候选集:假设召回5个影片。
3、将用户信息+影片信息输入给模型:拼接出每个影片预测输入。
4、获得输出值:计算预估值。
5、按照得分倒排,获得推荐内容排序。(这里我们只计算线性部分,由于sigmod函数是一个增函数,因此不影响最终排序结果)
6、业务规则重排:打散、重排、强插等。
这里涉及问题主要是冷启动问题,当用户无历史行为时便无法高效的预测结果。
整体来说:不同模型本质流程差别不会特别大,差别体现在特征的差别、策略的差别,需要基于对业务的理解来做设计。
四、其他问题
1、用户b只看过伦理片,4g连接,同样是这5个片子,结果会不会一样?
答:不一样,用户是否看过同分类的特征,是用户特征与物品特征的交叉特征,用户历史行为和当前内容的交叉特征很重要,不同历史行为的用户被激活的具体特征不同,进而实现了完全的个性化。
2、3.9和4.0只有0.1的差别,是否是两个等级的差别?
答:实际线上对于某个连续型数据特征值的划分并非是粗暴二分类的划分,而是要看具体分布情况,做离散化。
离散化策略:
离散化之前先看具体数据分布,如中位数、均值、方差、是否符合正态分布等;进而确定分段的粒度,比如是以1分划分还是0.1分划分。
3、网络环境这个特征有用吗?
答:要根据业务与模型的选取确定,例如lr这种线性模型,加这种非交叉特征,影响不大,但在其他业务里例如广告,非内容侧的单特征可能也会有价值。
如何改进单特征,需要尽量将单特征改进为交叉特征,从业务角度思考,即4g环境下,短视频可能会被点击,但如果4g环境下,推出2个小时的电影,则大概率不会被点击;这样网络环境*视频大小的交叉特征便可利用。
以上行为是场景细分,即场景个性化。
一、目标导向
先定目标,往既定目标前进,以业务目标或者老板目标做自己的目标。
二、闭环成长
模型比策略更有效,是因为模型本质上一个以终为始,自我修正的过程。
自己做项目的时候,也需要定目标,反向修正自己方法。
Q&A
1、交叉特征的设计,是将用户*内容*环境全部组合,还是靠人的设计,是否越多越好?
答:
item属性自交叉是内容分类细分;
用户、内容属性交叉是用户喜好个性化;
环境、内容属性交叉是场景细分;
具体根据模型来定,例如lr可以按照人的设计,根据业务需要确定重要交叉特征,dnn模型中,自带全交叉特征,对于模型本身自带全交叉特征的情况,则可以把工作重心放到增补输入项,而减少人工处理交叉特征的工作内容。
实际全部交叉属于暴力交叉,可以全部暴力组合,再做筛选,问题是会引入很多无用特征,干扰最终结果。
同时也要考虑业务情况,如果本身数据较少,交叉太多,反而过细,不利于计算输出有效结果。可以尝试从0-1,从最重要的特征开始测试,慢慢增加,便于观察效果。
答:
召回内容只做简单排序,便于粗截断,进入精排。
3、召回TOPN:是多个召回源分别算相似度,再召回TOPN;还是多个召回源一起算相似度,然后召回TOPN?
答:
不同召回源分别排序,选取topn,生成候选集,再进入rank层统一排序。
答:
1、根据召回源效果,确定不同召回源的性能,确定召回的数量分配。例如矩阵分解召回效果很好,可以多考虑,热度源表现较差,可以减少。
2、同时要考虑探索问题,有泛化能力的召回源,例如热点和分类,必须召回,保证推荐结果的新颖丰富。
CIO之家 www.ciozj.com 公众号:imciow