文章来源:36氪html
本次分享将主要介绍今日头条推荐系统概览以及内容分析、用户标签、评估分析,内容安全等原理。算法
现在,算法分发已经逐步成为信息平台、搜索引擎、浏览器、社交软件等几乎全部软件的标配,但同时也开始面临各类不一样的质疑、挑战与误解。数据库
2018年1月,今日头条资深算法架构师曹欢欢博士,首次公开今日头条的算法原理,以期推进整个行业问诊算法、建言算法。经过让算法透明,来消除各界对算法的误解。后端
据悉,今日头条的信息推荐算法自2012年9月初版开发运行至今,已经通过四次大调整和修改。目前服务全球亿万用户。浏览器
如下为曹欢欢关于《今日头条算法原理》的分享内容(已受权): 安全
本次分享将主要介绍今日头条推荐系统概览以及内容分析、用户标签、评估分析,内容安全等原理。服务器
推荐系统,若是用形式化的方式去描述其实是拟合一个用户对内容满意度的函数,这个函数须要输入三个维度的变量。架构
第一个维度是内容。头条如今已是一个综合内容平台,图文、视频、UGC小视频、问答、微头条,每种内容有不少本身的特征,须要考虑怎样提取不一样内容类型的特征作好推荐。第二个维度是用户特征。包括各类兴趣标签,职业、年龄、性别等,还有不少模型刻划出的隐式用户兴趣等。第三个维度是环境特征。这是移动互联网时代推荐的特色,用户随时随地移动,在工做场合、通勤、旅游等不一样的场景,信息偏好有所偏移。框架
结合三方面的维度,模型会给出一个预估,即推测推荐内容在这一场景下对这一用户是否合适。运维
这里还有一个问题,如何引入没法直接衡量的目标?
推荐模型中,点击率、阅读时间、点赞、评论、转发包括点赞都是能够量化的目标,可以用模型直接拟合作预估,看线上提高状况能够知道作的好很差。但一个大致量的推荐系统,服务用户众多,不能彻底由指标评估,引入数据指标之外的要素也很重要。
好比广告和特型内容频控。像问答卡片就是比较特殊的内容形式,其推荐的目标不彻底是让用户浏览,还要考虑吸引用户回答为社区贡献内容。这些内容和普通内容如何混排,怎样控制频控都须要考虑。
此外,平台出于内容生态和社会责任的考量,像低俗内容的打压,标题党、低质内容的打压,重要新闻的置顶、加权、强插,低级别帐号内容降权都是算法自己没法完成,须要进一步对内容进行干预。
下面我将简单介绍在上述算法目标的基础上如何对其实现。
前面提到的公式y = F(Xi ,Xu ,Xc),是一个很经典的监督学习问题。可实现的方法有不少,好比传统的协同过滤模型,监督学习算法Logistic Regression模型,基于深度学习的模型,Factorization Machine和GBDT等。
一个优秀的工业级推荐系统须要很是灵活的算法实验平台,能够支持多种算法组合,包括模型结构调整。由于很难有一套通用的模型架构适用于全部的推荐场景。如今很流行将LR和DNN结合,前几年Facebook也将LR和GBDT算法作结合。今日头条旗下几款产品都在沿用同一套强大的算法推荐系统,但根据业务场景不一样,模型架构会有所调整。
模型以后再看一下典型的推荐特征,主要有四类特征会对推荐起到比较重要的做用。
第一类是相关性特征,就是评估内容的属性和与用户是否匹配。显性的匹配包括关键词匹配、分类匹配、来源匹配、主题匹配等。像FM模型中也有一些隐性匹配,从用户向量与内容向量的距离能够得出。
第二类是环境特征,包括地理位置、时间。这些既是bias特征,也能以此构建一些匹配特征。
第三类是热度特征。包括全局热度、分类热度,主题热度,以及关键词热度等。内容热度信息在大的推荐系统特别在用户冷启动的时候很是有效。
第四类是协同特征,它能够在部分程度上帮助解决所谓算法越推越窄的问题。协同特征并不是考虑用户已有历史。而是经过用户行为分析不一样用户间类似性,好比点击类似、兴趣分类类似、主题类似、兴趣词类似,甚至向量类似,从而扩展模型的探索能力。
模型的训练上,头条系大部分推荐产品采用实时训练。实时训练省资源而且反馈快,这对信息流产品很是重要。用户须要行为信息能够被模型快速捕捉并反馈至下一刷的推荐效果。咱们线上目前基于storm集群实时处理样本数据,包括点击、展示、收藏、分享等动做类型。模型参数服务器是内部开发的一套高性能的系统,由于头条数据规模增加太快,相似的开源系统稳定性和性能没法知足,而咱们自研的系统底层作了不少针对性的优化,提供了完善运维工具,更适配现有的业务场景。
目前,头条的推荐算法模型在世界范围内也是比较大的,包含几百亿原始特征和数十亿向量特征。总体的训练过程是线上服务器记录实时特征,导入到Kafka文件队列中,而后进一步导入Storm集群消费Kafka数据,客户端回传推荐的label构造训练样本,随后根据最新样本进行在线训练更新模型参数,最终线上模型获得更新。这个过程当中主要的延迟在用户的动做反馈延时,由于文章推荐后用户不必定立刻看,不考虑这部分时间,整个系统是几乎实时的。
但由于头条目前的内容量很是大,加上小视频内容有千万级别,推荐系统不可能全部内容所有由模型预估。因此须要设计一些召回策略,每次推荐时从海量内容中筛选出千级别的内容库。召回策略最重要的要求是性能要极致,通常超时不能超过50毫秒。
召回策略种类有不少,咱们主要用的是倒排的思路。离线维护一个倒排,这个倒排的key能够是分类,topic,实体,来源等,排序考虑热度、新鲜度、动做等。线上召回能够迅速从倒排中根据用户兴趣标签对内容作截断,高效的从很大的内容库中筛选比较靠谱的一小部份内容。
内容分析包括文本分析,图片分析和视频分析。头条一开始主要作资讯,今天咱们主要讲一下文本分析。文本分析在推荐系统中一个很重要的做用是用户兴趣建模。没有内容及文本标签,没法获得用户兴趣标签。举个例子,只有知道文章标签是互联网,用户看了互联网标签的文章,才能知道用户有互联网标签,其余关键词也同样。
另外一方面,文本内容的标签能够直接帮助推荐特征,好比魅族的内容能够推荐给关注魅族的用户,这是用户标签的匹配。若是某段时间推荐主频道效果不理想,出现推荐窄化,用户会发现到具体的频道推荐(如科技、体育、娱乐、军事等)中阅读后,再回主feed,推荐效果会更好。由于整个模型是打通的,子频道探索空间较小,更容易知足用户需求。只经过单一信道反馈提升推荐准确率难度会比较大,子频道作的好很重要。而这也须要好的内容分析。
上图是今日头条的一个实际文本case。能够看到,这篇文章有分类、关键词、topic、实体词等文本特征。固然不是没有文本特征,推荐系统就不能工做,推荐系统最先期应用在Amazon,甚至沃尔玛时代就有,包括Netfilx作视频推荐也没有文本特征直接协同过滤推荐。但对资讯类产品而言,大部分是消费当天内容,没有文本特征新内容冷启动很是困难,协同类特征没法解决文章冷启动问题。
今日头条推荐系统主要抽取的文本特征包括如下几类。首先是语义标签类特征,显式为文章打上语义标签。这部分标签是由人定义的特征,每一个标签有明确的意义,标签体系是预约义的。此外还有隐式语义特征,主要是topic特征和关键词特征,其中topic特征是对于词几率分布的描述,无明确意义;而关键词特征会基于一些统一特征描述,无明确集合。
另外文本类似度特征也很是重要。在头条,曾经用户反馈最大的问题之一就是为何总推荐重复的内容。这个问题的难点在于,每一个人对重复的定义不同。举个例子,有人以为这篇讲皇马和巴萨的文章,昨天已经看过相似内容,今天还说这两个队那就是重复。但对于一个重度球迷而言,尤为是巴萨的球迷,巴不得全部报道都看一遍。解决这一问题须要根据判断类似文章的主题、行文、主体等内容,根据这些特征作线上策略。
一样,还有时空特征,分析内容的发生地点以及时效性。好比武汉限行的事情推给北京用户可能就没有意义。最后还要考虑质量相关特征,判断内容是否低俗,色情,是不是软文,鸡汤?
上图是头条语义标签的特征和使用场景。他们之间层级不一样,要求不一样。
分类的目标是覆盖全面,但愿每篇内容每段视频都有分类;而实体体系要求精准,相同名字或内容要能明确区分究竟指代哪个人或物,但不用覆盖很全。概念体系则负责解决比较精确又属于抽象概念的语义。这是咱们最初的分类,实践中发现分类和概念在技术上能互用,后来统一用了一套技术架构。
目前,隐式语义特征已经能够很好的帮助推荐,而语义标签须要持续标注,新名词新概念不断出现,标注也要不断迭代。其作好的难度和资源投入要远大于隐式语义特征,那为何还须要语义标签?有一些产品上的须要,好比频道须要有明肯定义的分类内容和容易理解的文本标签体系。语义标签的效果是检查一个公司NLP技术水平的试金石。
今日头条推荐系统的线上分类采用典型的层次化文本分类算法。最上面Root,下面第一层的分类是像科技、体育、财经、娱乐,体育这样的大类,再下面细分足球、篮球、乒乓球、网球、田径、游泳...,足球再细分国际足球、中国足球,中国足球又细分中甲、中超、国家队...,相比单独的分类器,利用层次化文本分类算法能更好地解决数据倾斜的问题。有一些例外是,若是要提升召回,能够看到咱们链接了一些飞线。这套架构通用,但根据不一样的问题难度,每一个元分类器能够异构,像有些分类SVM效果很好,有些要结合CNN,有些要结合RNN再处理一下。
上图是一个实体词识别算法的case。基于分词结果和词性标注选取候选,期间可能须要根据知识库作一些拼接,有些实体是几个词的组合,要肯定哪几个词结合在一块儿能映射实体的描述。若是结果映射多个实体还要经过词向量、topic分布甚至词频自己等去歧,最后计算一个相关性模型。
内容分析和用户标签是推荐系统的两大基石。内容分析涉及到机器学习的内容多一些,相比而言,用户标签工程挑战更大。
今日头条经常使用的用户标签包括用户感兴趣的类别和主题、关键词、来源、基于兴趣的用户聚类以及各类垂直兴趣特征(车型,体育球队,股票等)。还有性别、年龄、地点等信息。性别信息经过用户第三方社交帐号登陆获得。年龄信息一般由模型预测,经过机型、阅读时间分布等预估。常驻地点来自用户受权访问位置信息,在位置信息的基础上经过传统聚类的方法拿到常驻点。常驻点结合其余信息,能够推测用户的工做地点、出差地点、旅游地点。这些用户标签很是有助于推荐
固然最简单的用户标签是浏览过的内容标签。但这里涉及到一些数据处理策略。主要包括:1、过滤噪声。经过停留时间短的点击,过滤标题党。2、热点惩罚。对用户在一些热门文章(如前段时间PG One的新闻)上的动做作降权处理。理论上,传播范围较大的内容,置信度会降低。3、时间衰减。用户兴趣会发生偏移,所以策略更偏向新的用户行为。所以,随着用户动做的增长,老的特征权重会随时间衰减,新动做贡献的特征权重会更大。4、惩罚展示。若是一篇推荐给用户的文章没有被点击,相关特征(类别,关键词,来源)权重会被惩罚。固然同时,也要考虑全局背景,是否是相关内容推送比较多,以及相关的关闭和dislike信号等。
用户标签挖掘整体比较简单,主要仍是刚刚提到的工程挑战。头条用户标签初版是批量计算框架,流程比较简单,天天抽取昨天的日活用户过去两个月的动做数据,在Hadoop集群上批量计算结果。
但问题在于,随着用户高速增加,兴趣模型种类和其余批量处理任务都在增长,涉及到的计算量太大。2014年,批量处理任务几百万用户标签更新的Hadoop任务,当天完成已经开始勉强。集群计算资源紧张很容易影响其它工做,集中写入分布式存储系统的压力也开始增大,而且用户兴趣标签更新延迟愈来愈高。
面对这些挑战。2014年末今日头条上线了用户标签Storm集群流式计算系统。改为流式以后,只要有用户动做更新就更新标签,CPU代价比较小,能够节省80%的CPU时间,大大下降了计算资源开销。同时,只需几十台机器就能够支撑天天数千万用户的兴趣模型更新,而且特征更新速度很是快,基本能够作到准实时。这套系统从上线一直使用至今。
固然,咱们也发现并不是全部用户标签都须要流式系统。像用户的性别、年龄、常驻地点这些信息,不须要实时重复计算,就仍然保留daily更新。
上面介绍了推荐系统的总体架构,那么如何评估推荐效果好很差?
有一句我认为很是有智慧的话,“一个事情无法评估就无法优化”。对推荐系统也是同样。
事实上,不少因素都会影响推荐效果。好比侯选集合变化,召回模块的改进或增长,推荐特征的增长,模型架构的改进在,算法参数的优化等等,不一一举例。评估的意义就在于,不少优化最终多是负向效果,并非优化上线后效果就会改进。
全面的评估推荐系统,须要完备的评估体系、强大的实验平台以及易用的经验分析工具。所谓完备的体系就是并不是单一指标衡量,不能只看点击率或者停留时长等,须要综合评估。过去几年咱们一直在尝试,能不能综合尽量多的指标合成惟一的评估指标,但仍在探索中。目前,咱们上线仍是要由各业务比较资深的同窗组成评审委员会深刻讨论后决定。
不少公司算法作的很差,并不是是工程师能力不够,而是须要一个强大的实验平台,还有便捷的实验分析工具,能够智能分析数据指标的置信度。
一个良好的评估体系创建须要遵循几个原则,首先是兼顾短时间指标与长期指标。我在以前公司负责电商方向的时候观察到,不少策略调整短时间内用户以为新鲜,可是长期看其实没有任何助益。
其次,要兼顾用户指标和生态指标。今日头条做为内容分创做平台,既要为内容创做者提供价值,让他更有尊严的创做,也有义务知足用户,这二者要平衡。还有广告主利益也要考虑,这是多方博弈和平衡的过程。
另外,要注意协同效应的影响。实验中严格的流量隔离很难作到,要注意外部效应。
强大的实验平台很是直接的优势是,当同时在线的实验比较多时,能够由平台自动分配流量,无需人工沟通,而且实验结束流量当即回收,提升管理效率。这能帮助公司下降分析成本,加快算法迭代效应,使整个系统的算法优化工做可以快速往前推动。
这是头条A/B Test实验系统的基本原理。首先咱们会作在离线状态下作好用户分桶,而后线上分配实验流量,将桶里用户打上标签,分给实验组。举个例子,开一个10%流量的实验,两个实验组各5%,一个5%是基线,策略和线上大盘同样,另一个是新的策略。
实验过程当中用户动做会被搜集,基本上是准实时,每小时均可以看到。但由于小时数据有波动,一般是以天为时间节点来看。动做搜集后会有日志处理、分布式统计、写入数据库,很是便捷。
在这个系统下工程师只须要设置流量需求、实验时间、定义特殊过滤条件,自定义实验组ID。系统能够自动生成:实验数据对比、实验数据置信度、实验结论总结以及实验优化建议。
固然,只有实验平台是远远不够的。线上实验平台只能经过数据指标变化推测用户体验的变化,但数据指标和用户体验存在差别,不少指标不能彻底量化。不少改进仍然要经过人工分析,重大改进须要人工评估二次确认。
最后要介绍今日头条在内容安全上的一些举措。头条如今已是国内最大的内容创做与分发凭条,必须愈来愈重视社会责任和行业领导者的责任。若是1%的推荐内容出现问题,就会产生较大的影响。
所以头条从创立伊始就把内容安全放在公司最高优先级队列。成立之初,已经专门设有审核团队负责内容安全。当时研发全部客户端、后端、算法的同窗一共才不到40人,头条很是重视内容审核。
如今,今日头条的内容主要来源于两部分,一是具备成熟内容生产能力的PGC平台
一是UGC用户内容,如问答、用户评论、微头条。这两部份内容须要经过统一的审核机制。若是是数量相对少的PGC内容,会直接进行风险审核,没有问题会大范围推荐。UGC内容须要通过一个风险模型的过滤,有问题的会进入二次风险审核。审核经过后,内容会被真正进行推荐。这时若是收到必定量以上的评论或者举报负向反馈,还会再回到复审环节,有问题直接下架。整个机制相对而言比较健全,做为行业领先者,在内容安全上,今日头条一直用最高的标准要求本身。
分享内容识别技术主要鉴黄模型,谩骂模型以及低俗模型。今日头条的低俗模型经过深度学习算法训练,样本库很是大,图片、文本同时分析。这部分模型更注重召回率,准确率甚至能够牺牲一些。谩骂模型的样本库一样超过百万,召回率高达95%+,准确率80%+。若是用户常常出言不讳或者不当的评论,咱们有一些惩罚机制。
泛低质识别涉及的状况很是多,像假新闻、黑稿、题文不符、标题党、内容质量低等等,这部份内容由机器理解是很是难的,须要大量反馈信息,包括其余样本信息比对。目前低质模型的准确率和召回率都不是特别高,还须要结合人工复审,将阈值提升。目前最终的召回已达到95%,这部分其实还有很是多的工做能够作。头条人工智能实验室李航老师目前也在和密歇根大学共建科研项目,设立谣言识别平台。
以上是头条推荐系统的原理分享,但愿将来获得更多的建议,帮助咱们更好改进工做。
文章来源:http://36kr.com/p/5114077.html