扒一扒头条系的推荐系统 | 整理
Posted 道比伯尔DaoBBoy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了扒一扒头条系的推荐系统 | 整理相关的知识,希望对你有一定的参考价值。
全文近5000字,阅读时长需要多久我也不知道,有可能要反复阅读。
对推荐系统的误解
有些人认为算法推荐让用户的兴趣窄化,这是一个常见的误解,包括我个人之前也是如此认为。这背后的逻辑是,算法推荐很懂你,根据你的兴趣推荐,只推荐用户感兴趣的东西,这个用户看的内容始终在一个有限的范围内。长久以后,用几年推荐系统,你的见识、知识、见解得不到提高。
然后事实是,这是一个短期利益和长期目标如何相互平衡的议题。聪明的企业都不希望自己的用户兴趣窄化,就像没有一个零售卖场的经理希望顾客每一次来到商场都只关注同一类别的商品。商场经理都希望顾客关注尽可能多的产品品类,所以在建设推荐系统的时候也希望从长期来看用户可以尽可能的拓展自己的兴趣。
推荐系统都需要依靠三个方面的特征:内容特征、用户特征、环境特征,系统需要结合这三方面的信息做决策。
用户特征,是指用户的标签,包括用户注册时提交的基本信息,比如性别、年龄,还有用户在平台上的动作,比如用户历史点击的作品列表、作品的关键词分布、文章的作者分布等信息。
内容特征,如果它是个商品,要有分类、标签,包括历史购买评论,这些都很重要。对于内容来讲,就是它的文本、主题、关键词等信息。
环境特征,就是环境信息,对于用户来讲,他的兴趣很多时候会变化,有的会周期性变化。比如一个资讯APP用户,上班期间和上班路上、下班休息的时候,兴趣是有变化的。
这些特征信息推荐系统是要考虑到的。但是在不同领域、不同的推荐系统考虑的侧重点有所区别。总体来讲,所有的推荐系统都必须基于这三方面的信息来决策。
长期目标:保持用户的长期黏性。运营一个业务,希望用户用了应用之后,能一直用下去,成为我们的忠实用户。长期目标对于算法、模型来讲是非常难学的。越是长期目标,机器学习难度越大。
中期目标:提升中期(周/月)的用户黏性。这也很难,但是业内也有一些探索,比如强化学习的学习范式,而不用监督学习。但是也比较难,目前还不是特别成熟。
短期目标:保证用户短时间内对内容的反馈。给用户推了一个作品,用户有没有没有播放、点赞、分享。这些短期目标模型是非常容易学习,容易建立起用户行为。
给内容贴标签,给人物贴标,按照标签智能个性化推送。
内容标签是层次型的,有多少大类,每个大类中有多少小类。例如第一分类是体育运动,第二分类是球类、田径类、电子竞技类,第三分类是足球、篮球、乒乓球等,最后可能细化到的颗粒是NBA、CBA,LOL、吃鸡等。
平台会根据用户在使用App的习惯进行分析行为路径,再进行贴标签,再继续优化标签。这个采集的方法就是个人资料的填写,关键词搜索的记录,浏览的比较多的类目视频,点赞视频数据,评论数据,通讯录的圈子关系等。
以抖音的推荐系统为例,整个环节简化拆解为几个步骤:
流量分桶:先把你的作品检测标签,如果作品被机器贴上标签那么就会分桶到对应标签的流量洼地。如果标签模糊无法贴标签,那么就会零散推荐,无法进行精准推送。
-
-
-
抖音会对实时在线用户进行流量分桶,每桶按照总用户量10%分配进行实验推送
-
分配的视频流量再进行分配实验组,每个实验组按照5%比例分配,并为用户贴上相近标签
-
把作品送量测试给首个实验组用户,根据用户反馈(CPA)“转、评、赞、完播率” 计算作品基数
-
达到通过推荐基数,继续把作品推送下一个分配实验组进行测试
-
通过首个实验组的基数测试后,作品将进入人为审核是否继续送量测试
-
完播率:不仅仅是视频的播放完成率,还有用户多次播放的数据,重复播放次数也会加入基数分值
-
点赞率:用户的点赞数量,和播放数的占比,影响推荐,点赞是源自用户对内容的认可,犒赏,收藏的表达方式
-
评论率:不仅包含用户评论数量,还包含用户查看评论数量,评论点赞数量
-
-
粉丝量:包含现有粉丝量,新增关注粉丝量及去关粉丝量,几种分值算法
-
进入主页:通过作品进入用户主页也有加分,预览其他作品数量及次数,还额外关系账号权重
-
查看音乐:通过作品查看音乐也会有基数,以及背景音乐是否原生
模型的训练上,头条系大部分推荐产品采用实时训练。实时训练省资源并且反馈快,这对信息流产品非常重要。用户需要行为信息可以被模型快速捕捉并反馈至下一刷的推荐效果。线上目前基于storm集群实时处理样本数据,包括点击、展现、收藏、分享等动作类型。
模型参数服务器是内部开发的一套高性能的系统,目前头条的推荐算法模型在世界范围内也是比较大的,包含几百亿原始特征和数十亿向量特征。
整体的训练过程是线上服务器记录实时特征,导入到Kafka中,然后进一步导入Storm集群消费Kafka数据,客户端回传推荐的标签构造训练样本,随后根据最新样本进行在线训练更新模型参数,最终线上模型得到更新。
推荐系统不可能所有内容全部由模型预估。所以需要设计一些召回策略,每次推荐时从海量内容中筛选出千级别的内容库。召回策略最重要的要求是性能要极致,一般超时不能超过50毫秒。召回策略种类有很多,主要用的是倒排的思路。离线维护一个倒排,这个倒排的key可以是分类,topic,实体,来源等。
排序考虑热度、新鲜度、动作等。线上召回可以迅速从倒排中根据用户兴趣标签对内容做截断,高效的从很大的内容库中筛选比较靠谱的一小部分内容。
内容分析包括文本分析,图片分析和视频分析。其中文本分析是头条做资讯的时候一开始就做的。头条系的推荐系统主要抽取的文本特征包括以下几类。首先是语义标签类特征,显式为文章打上语义标签。这部分标签是由人定义的特征,每个标签有明确的意义,标签体系是预定义的。此外还有隐式语义特征,主要是topic特征和关键词特征,其中topic特征是对于词概率分布的描述,无明确意义;而关键词特征会基于一些统一特征描述,无明确集合。
这里要注意的是并非没有文本特征,推荐系统就不能工作,直接协同过滤推荐也是可以。但对资讯类、信息流类产品而言,大部分是消费当天内容,没有文本特征新内容冷启动非常困难,协同类特征无法解决文章、短视频的冷启动问题。
内容分析和用户标签是推荐系统的两大基石。内容分析涉及到机器学习的内容多一些,相比而言,用户标签工程挑战更大。
头条系常用的用户标签包括用户感兴趣的类别和主题、关键词、来源、基于兴趣的用户聚类以及各种垂直兴趣特征(车型,体育球队,股票等)。还有性别、年龄、地点等信息。
性别信息通过用户第三方社交账号登录得到。年龄信息通常由模型预测,通过机型、阅读时间分布等预估。
常驻地点来自用户授权访问位置信息,在位置信息的基础上通过传统聚类的方法拿到常驻点。常驻点结合其他信息,可以推测用户的工作地点、出差地点、旅游地点。这些用户标签非常有助于推荐。
用户标签最简单的做法是基于用户浏览过的内容标签,这里涉及到一些数据处理策略,主要包括:
一、过滤噪声。通过停留时间短的点击,过滤标题党。
二、热点惩罚。对用户在一些热门作品上的动作做降权处理。理论上,传播范围较大的内容,置信度会下降。
三、时间衰减。用户兴趣会发生偏移,因此策略更偏向新的用户行为。因此,随着用户动作的增加,老的特征权重会随时间衰减,新动作贡献的特征权重会更大。
四、惩罚展现。如果一篇推荐给用户的文章没有被点击,相关特征(类别,关键词,来源)权重会被惩罚。当然同时,也要考虑全局背景,是不是相关内容推送比较多,以及相关的关闭和dislike信号等。
2014年底头条上线了用户标签Storm集群流式计算系统,从以前的Hadoop批量标签计算改成流式之后,只要有用户动作更新就更新标签,CPU代价比较小,据说大大降低了计算资源开销。并且特征更新速度非常快,基本可以做到准实时。这套系统号称从上线一直使用至今。
当然也并非所有用户标签都需要流式系统。像用户的性别、年龄、常驻地点这些信息,不需要实时重复计算,就仍然保留每日更新。
一个优秀的工业级推荐系统需要非常灵活的算法实验平台,可以支持多种算法组合,包括模型结构调整。因为很难有一套通用的模型架构适用于所有的推荐场景。
现在很流行将LR和DNN结合,前几年Facebook也将LR和GBDT算法做结合。目前看起来头条系旗下几款产品都在沿用同一套算法推荐系统,但根据业务场景不同,模型架构会有所调整。
看一下典型的推荐特征,主要有四类特征会对推荐起到比较重要的作用。
第一类是相关性特征,就是评估内容的属性和与用户是否匹配。显性的匹配包括关键词匹配、分类匹配、来源匹配、主题匹配等。像FM模型中也有一些隐性匹配,从用户向量与内容向量的距离可以得出。
第二类是环境特征,包括地理位置、时间。这些既是bias特征,也能以此构建一些匹配特征。
第三类是热度特征。包括全局热度、分类热度,主题热度,以及关键词热度等。内容热度信息在大的推荐系统特别在用户冷启动的时候非常有效。
第四类是协同特征,它可以在部分程度上帮助解决所谓算法越推越窄的问题。协同过滤这是十几年前的老一代技术,做法也非常简单、直观,推荐系统会考虑你跟哪个用户比较像,你们都点了什么,你们喜欢同一类的电影,然后把那个人看过的,但你还没看过的内容推荐给你,通过相似用户的手段实现了兴趣的探索。
协同特征并非考虑用户已有历史。而是通过用户行为分析不同用户间相似性,比如点击相似、兴趣分类相似、主题相似、兴趣词相似,甚至向量相似,从而扩展模型的探索能力。
现在还有很多高端技术也在探索用户兴趣,推动内容多样性。现在主流的技术是用深度学习做推荐,在深度学习里面有很多方法,包括网络可以做一些特殊的设置,让它学一些新东西。
深度学习还是比较容易做的,因为所有用户、所有内容都是高维空间的向量,可以有意识引导模型,让它学习一些可能感兴趣的内容,虽然它的兴趣标签和你不一样。但是在这个空间里面,映射到很近的点,让模型容易推出去,这里面有很多高端的做法。
所有的内容在推荐之前,会进行各种层次的相似性分析,会识别哪两篇文章或者视频是非常类似的。比如可能两篇文章,虽然遣词造句不一样,但是讲的内容是一样的。推荐系统能够分析哪些文章讲的是同一个事情,或者涉及到同一个人,或者涉及到某一个公司,基于他们各种各样的特征进行分析。
然后,推荐的时候,系统会根据不同的相似性对这些相关的文章进行不同的处理。对于相似的文章,如果给用户推荐了文章A,跟文章A相似的其他文章就不会被推荐了,这个就是消重的策略。
那么还有一种情况,就是同一个方向或同一类主题的文章,比如都是足球的文章,推荐系统就需要打散策略,来保证推荐的频率不会太高,避免用户在前端感觉内容的同质化,保证内容多样性,这些都是有算法保证的。
除了消重和打散策略,系统还会留一部分比例流量,探索用户的兴趣。比如每几刷就有一刷的位置就是探索用户的兴趣,推荐一些模型不确认用户是不是感兴趣,但是模型想探索一下,会有一些这样的流量。
全面的评估推荐系统,需要完备的评估体系、强大的实验平台以及易用的经验分析工具。所谓完备的体系就是并非单一指标衡量,不能只看点击率或者停留时长等,需要综合评估。
一个良好的评估体系建立需要遵循几个原则,首先是兼顾短期指标与长期指标。其次,要兼顾用户指标和生态指标。既要为内容创作者提供价值,让他更有尊严的创作,也有义务满足用户,这两者要平衡。还有广告主利益也要考虑,这是多方博弈和平衡的过程。另外,要注意协同效应的影响。实验中严格的流量隔离很难做到,要注意外部效应。
这里的技术资料比较少,无法做过多的评论。
以上是关于扒一扒头条系的推荐系统 | 整理的主要内容,如果未能解决你的问题,请参考以下文章
揭秘:扒一扒国产Linux操作系统的架构是怎么设计的?
扒一扒Oracle数据库迁移中的各种坑
资源 | 最新黑马头条推荐系统(内含项目)
为什么会触发ANR,从源码中扒一扒
为什么会触发ANR,从源码中扒一扒
揭秘今日头条推荐算法与系统架构