36氪首发 | 今日头条推荐算法原理全文详解
2018-01-16 13:45:03     [查看原文]

原标题:36氪首发 | 今日头条推荐算法原理全文详解

如今,算法分发已经逐步成为信息平台、搜索引擎、浏览器、社交软件等几乎所有软件的标配,但同时也开始面临各种不同的质疑、挑战与误解。

2018年1月,今日头条资深算法架构师曹欢欢博士,首次公开今日头条的算法原理,以期推动整个行业问诊算法、建言算法。通过让算法透明,来消除各界对算法的误解。

据悉,今日头条的信息推荐算法自2012年9月第一版开发运行至今,已经经过四次大调整和修改。目前服务全球亿万用户。

以下为曹欢欢关于《今日头条算法原理》的分享内容(已授权):

本次分享将主要介绍今日头条推荐系统概览以及内容分析、用户标签、评估分析,内容安全等原理。

一、系统概览

推荐系统,如果用形式化的方式去描述实际上是拟合一个用户对内容满意度的函数,这个函数需要输入三个维度的变量。

第一个维度是内容。头条现在已经是一个综合内容平台,图文、视频、UGC小视频、问答、微头条,每种内容有很多自己的特征,需要考虑怎样提取不同内容类型的特征做好推荐。第二个维度是用户特征。包括各种兴趣标签,职业、年龄、性别等,还有很多模型刻划出的隐式用户兴趣等。第三个维度是环境特征。这是移动互联网时代推荐的特点,用户随时随地移动,在工作场合、通勤、旅游等不同的场景,信息偏好有所偏移。

结合三方面的维度,模型会给出一个预估,即推测推荐内容在这一场景下对这一用户是否合适。

这里还有一个问题,如何引入无法直接衡量的目标?

推荐模型中,点击率、阅读时间、点赞、评论、转发包括点赞都是可以量化的目标,能够用模型直接拟合做预估,看线上提升情况可以知道做的好不好。但一个大体量的推荐系统,服务用户众多,不能完全由指标评估,引入数据指标以外的要素也很重要。

比如广告和特型内容频控。像问答卡片就是比较特殊的内容形式,其推荐的目标不完全是让用户浏览,还要考虑吸引用户回答为社区贡献内容。这些内容和普通内容如何混排,怎样控制频控都需要考虑。

此外,平台出于内容生态和社会责任的考量,像低俗内容的打压,标题党、低质内容的打压,重要新闻的置顶、加权、强插,低级别账号内容降权都是算法本身无法完成,需要进一步对内容进行干预。

下面我将简单介绍在上述算法目标的基础上如何对其实现。

前面提到的公式y = F(Xi ,Xu ,Xc),是一个很经典的监督学习问题。可实现的方法有很多,比如传统的协同过滤模型,监督学习算法Logistic Regression模型,基于深度学习的模型,Factorization Machine和GBDT等。

一个优秀的工业级推荐系统需要非常灵活的算法实验平台,可以支持多种算法组合,包括模型结构调整。因为很难有一套通用的模型架构适用于所有的推荐场景。现在很流行将LR和DNN结合,前几年Facebook也将LR和GBDT算法做结合。今日头条旗下几款产品都在沿用同一套强大的算法推荐系统,但根据业务场景不同,模型架构会有所调整。

模型之后再看一下典型的推荐特征,主要有四类特征会对推荐起到比较重要的作用。

第一类是相关性特征,就是评估内容的属性和与用户是否匹配。显性的匹配包括关键词匹配、分类匹配、来源匹配、主题匹配等。像FM模型中也有一些隐性匹配,从用户向量与内容向量的距离可以得出。

第二类是环境特征,包括地理位置、时间。这些既是bias特征,也能以此构建一些匹配特征。

第三类是热度特征。包括全局热度、分类热度,主题热度,以及关键词热度等。内容热度信息在大的推荐系统特别在用户冷启动的时候非常有效。

第四类是协同特征,它可以在部分程度上帮助解决所谓算法越推越窄的问题。协同特征并非考虑用户已有历史。而是通过用户行为分析不同用户间相似性,比如点击相似、兴趣分类相似、主题相似、兴趣词相似,甚至向量相似,从而扩展模型的探索能力。

模型的训练上,头条系大部分推荐产品采用实时训练。实时训练省资源并且反馈快,这对信息流产品非常重要。用户需要行为信息可以被模型快速捕捉并反馈至下一刷的推荐效果。我们线上目前基于storm集群实时处理样本数据,包括点击、展现、收藏、分享等动作类型。模型参数服务器是内部开发的一套高性能的系统,因为头条数据规模增长太快,类似的开源系统稳定性和性能无法满足,而我们自研的系统底层做了很多针对性的优化,提供了完善运维工具,更适配现有的业务场景。

本栏目中的所有页面均系自动生成,自动分类排列,采用联索网络信息采集、网页信息提取、语义计算等智能搜索技术。内容源于公开的媒体报道,包括但不限于新闻网站、电子报刊、行业门户、客户网站等。使用本栏目前必读