丁海峰:今日头条的个性化推荐

个人简介 丁海峰,今日头条数据部资深工程师。毕业于北京航空航天大学,先前在百度网页搜索部任职,从事网页搜索检索端架构相关的工作。目前在今日头条负责推荐系统架构与基础设施,解决海量数据规模下个性化推荐系统面临的计算、存储、实时性等各方面技术挑战。关注大数据基础设施、大规模机器学习系统、可伸缩服务架构设计、站点可用性、DevOps 等领域。

QCon是由InfoQ主办的全球顶级技术盛会,每年在伦敦、北京、东京、纽约、圣保罗、杭州、旧金山召开。自2007年3月份首次举办以来,已经有包括传统制造、金融、电信、互联网、航空航天等领域的近万名架构师、项目经理、团队领导者和高级开发人员参加过QCon大会。

   

1. 各位InfoQ的网友大家好,现在我们在QCon北京的现场,这次专访的是今日头条的丁海峰先生。我们想问丁海峰先生的第一个问题是,你之前在百度从事搜索引擎的工作,这个工作的经历对您现在做内容推荐、个性推荐有哪些帮助?

丁海峰:搜索引擎其实和个性化系统的整体架构、算法上有很多类似的地方。比如,大部分情况需要先从一个非常大的集合里面去召回小的文档候选集合,然后再把这个小的候选集合做精细排序,找到用户最感兴趣的。对搜索来说,就是找到与用户Query最相关的,然后去推荐的一个库。从整体系统大的角度上来看,是非常相似的。算法上也会有很多相似的地方。比如说都需要对文本做精细分析,对文本有比较深入的理解。做搜索可能需要分析Query,我们叫做Query Understanding。个性化推荐就需要理解用户,这个就是我今天要讲的主题,即User Profile的构建。

   

2. 第二个问题,现在今日头条已经有海量的用户和数据,在做个性化推荐时,数据采样是怎么做的?

丁海峰:我们会尽可能记录用户在客户端上的各种用户行为。搜索用户可以用Query来明确表达他的意图,但是对于今日头条这样一个新闻资讯客户端来讲,我们只能通过用户过去的历史行为去理解他,他是一个怎么样的人,他的兴趣偏好是怎样的,这种理解只能体现用户之前做了什么,比如说他点了哪篇文章,他把什么文章分享给他的朋友;他评论了哪篇文章,评论是什么,类似于这样的用户行为,我们都会把它积累下来,然后通过这些行为去推断用户的偏好。

   

3. 今日头条在数据采样完之后,算法建模有哪些特点或者哪些地方你们做得跟别人不同?

丁海峰:最基本的推荐算法很多都是教科书上的经典算法,比如说基于协同过滤的推荐,基于文本内容的推荐等。我们会把不同推荐算法选出来的候选集,再做一个精细的排序,然后选出用户当前可能最感兴趣的文章推荐给他。

   

4. 在做完采样和建模后,后续的机器学习过程是怎么做的?

丁海峰:很多阶段都用到了机器学习。比如对于User Profile的分析,一些协同特征的挖掘,一些基础的用户特征的挖掘。在最后推荐的排序阶段,我们有一个大规模的CTR用户的模型,这个用户模型也是通过一个大规模的机器学习系统训练出来的。

   

5. 机器学习一般周期是多久?比如用户的特征挖掘,这个周期大概是多久?

丁海峰:这个也是看不同的场景,有些不是那么敏感的,对反馈周期要求不是那么强的场景,一天一次挖掘。对反馈周期要求高的,我们使用online的学习,这种方式效果非常好。

   

6. 在个性化推荐优化的过程中,你们遇到的比较有代表性问题有哪些?

丁海峰:有趣的问题还是很多的。做新闻个性化推荐,可维护点越多,推荐效果就越好。但实际上有很多案例是不能覆盖的,举个例子,有一段时间我们经常收到用户反馈,说用了一段时间后,今日头条推荐的文章越来越相似,越来越狭窄了。比如用户是一个互联网从业者,一天到晚推荐的全是科技的,互联网投资的新闻。对他来说,这些他确实感兴趣,但是他会觉得推荐的内容过于单调,不能够满足探索更多兴趣的需求。所以对于推荐系统来说,感兴趣是一方面,但这不是唯一的优化目标。对于今日头条来说,我们的推荐就是一个多目标的优化过程。

   

7. 多目标推荐问题你们怎么解决的呢?效果怎么样?

丁海峰:这是一个最基本的尝试,我们不再只关注用户的点击率,而是会牺牲一部分点击率,去尝试推给他一些之前不在他的兴趣点之内但有可能会感兴趣的文章,然后去观察用户的行为。如果用户点了,就说明完成了一次兴趣探索,之后可以再尝试给他推类似的文章;如果用户没有点,就把这个先放一放,再去尝试探索用户其他的兴趣点。

   

8. 内容推荐跟以前其他的推荐,比如广告推荐、商品推荐,有哪些相同的地方和不同的地方?

丁海峰:内容推荐,尤其是新闻推荐,和商品推荐一个最大的区别就是,新闻的生命周期非常短的.比如Netflix推荐一部电影,一部电影的生命周期可以长达几年甚至数十年,在这个过程中,可以积累非常多的用户反馈。MDB里面会有非常多用户的评分,这个都可以在推荐的时候作为一个基本的特征。但在新闻推荐里,新闻的生命周期非常短,今天的新闻过了今天,明天可能就不会再有人去关注它,所以我们只能在非常有限的时间里找到有价值的新闻,然后完成对它的分析,推荐给可能对这篇新闻感兴趣的读者,这样才算成功。

   

9. 推荐过程中,肯定还会遇到排序的问题,你们的排序怎么做的?

丁海峰:排序过程我们实际上有一个CTR的预估模型,通过这种方式预估这篇文章推荐给用户之后他有可能点击的概率。当然前面也讲了,我们并不是把CTR作为唯一的优化目标,所以说在这个过程中,我们也会引入其他一些优化目标,做多目标优化。

   

10. 今日头条的架构有没有经过一些调整或者重构?

丁海峰:我们也经过了很多次的重构和调整。在早期,我们可能会更多关注产品的快速迭代,还有尝试试错,那个时候我们希望架构简单、粗暴、有效,能解决问题就可以了。到现在这个规模,在架构上面就需要越来越多地考虑可伸缩性、稳定性和可靠性。在这个过程里面,我们会不断地对在线的服务,离线数据流的pipeline,排序的模型和算法,进行迭代和改进。

   

11. 在推荐和CDN加速方面是常规的做法还是做了一些优化?

丁海峰:对于静态的内容,比如文本内容就是缓存在CDN里的,这也是一个比较普遍的做法。但对于动态内容,需要流到我们自己的IDC里面,到我们的服务器上处理。比如用户刷新,然后决定推荐给他哪些新闻,这是一个完全动态的过程,每个用户看到的都是不一样的,这个只能由我们自己的服务器来处理。

你可能感兴趣的:(丁海峰:今日头条的个性化推荐)