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