TensorflowAI推荐

今日头条的推荐算法原理分析

2018-08-11  本文已影响5359人  purewater2014

今日头条发布了后台的算法原理,不过用词比较考究、说的比较深奥,让人感觉云里雾里不知何处,本篇尽量用通俗语言进行解析,希望对大家有所帮助。

1、【原文】今日头条算法推荐系统,主要输入三个维度的变量。一是内容特征,图文、视频、UGC小视频、问答、微头条等,每种内容有很多自己的特征,需要分别提取;二是用户特征,包括兴趣标签、职业、年龄、性别、机型等,以及很多模型刻画出的用户隐藏兴趣。三是环境特征,不同的时间不同的地点不同的场景(工作/通勤/旅游等),用户对信息的偏好有所不同。结合这三方面纬度,今日头条的推荐模型做预估,这个内容在这个场景下对这个用户是否合适。

【解析】:(1)内容特征,好理解,既是对各类文章、视频提取关键要素,比如可以通过对文本进行语义识别,识别出文章的主要关键字,视频标题关键字如何,这个工作主要目的是对文章进行画像,方便以后对客户推荐。至于能否做到视频内容的关键字提取,比如虽然标题是周杰伦相关视频,但视频内容全部是方文山的帅气身影,能否将视频中方文山这个关键字提取出来,则暂不可知,这个工作需要耗费巨大服务器资源,估计头条暂时还没有做吧。
(2)用户特征,同上面内容特征一样,提取你的有效数据,比如经常浏览哪种类型文字、你经常搜索的关键字、你注册时登记信息的内容、还有原文提到的用什么手机之类,你是iphone我便显示这个游戏只能iphone玩,你是安卓我便显示这个游戏只能安卓玩、甚至精细的话可以将每个人的留言呀、评论呀等进行关键字提取,比如你经常评论历史内容文章,即使你浏览此类文章比较少,但是也可以作为一个关键指标进行使用,通过以上各类方式最终形成用户画像,方便后面对你进行文章视频推送。举个例子,比如在通信行业,我们经常会受到短信,推荐什么什么套餐、购买流量包之类,这就是通信公司通过客户分群、客户画像来实现的定向推送,以保证推送效果、节省推送成本,通信行业对一个人的画像会多达上千个关键指标,用户特征的提取对推荐的准确度、有效度会起到相当大的作用;
注:画像是指对一篇文章或一个人的关键点分析,通过这些关键点则可大体了解一篇文章或者一个人的具体形象。
(3)环境特征,比如获取你当前所在位置是否在旅游区呀,这个可以通过获取你实时位置来实现,然后与你之前经常出现的所在地进行对比等方式确认当前状态,是在家还是在旅游。如果系统检测到你在泰山游玩,则可能会相应推送泰山的类似文章资料等等,让你感觉:哇,头条好智能!
通过上面三个方面可以作为数据基础,分析当前你处于什么环境下,结合你的用户画像以及文章的画像来推荐,尽量做到推送给你的内容都是你感兴趣的。

2、【原文】点击率、阅读时间、点赞、评论、转发,这些都是可以量化的。但一个大体量的推荐系统,服务用户众多,不能完全由指标评估,引入数据以外的要素,也很重要。有些算法可以完成,有些算法还做不到、做的不好,这就需要内容干预。

【解析】:可以量化的指标可以体现一些具体信息,但是完全靠这个并不全面,比如刷评论、转发等情况,可能就会迷惑后台计算机的分析,纯粹靠这些数据进行推荐是有问题,里面提到的【数据以外的要素】,比如当前社会热点,虽然你的文章很热,但是热点已过,也不会因为文章的点击率大而继续给你推送;还有国家政策形势呀,国家政策如有调整,你的文章内容方向已不符合则也不会再次推荐,例如房产方面文章等;上述这些数据并不存在于推荐算法数据里,所以算法无法自动完成,所以需要人工对这些数据内容进行维护设置,以完善推荐机制。

3、【原文】没有一套通用的模型架构,适用所有的推荐场景。我们需要一个非常灵活的算法实验平台,这个算法不行,马上试另一个算法,实际上是各种算法的一个复杂组合。西瓜视频、火山小视频、抖音短视频、悟空问答,都在用头条这一套推荐系统,但具体到每套系统,架构都不一样,需要不断去试。

【解析】不同推荐场景需要不同的模型架构,这个是比较容易理解的,比如小视频,是短时投入,客户会很少计较时间成本,所以关键的推荐机制可能并不是你的用户画像特征,而是根据视频的点击率进行推荐,点击率越大的视频肯定越容易吸引用户的兴趣;而文章需要投入时间成本较高,精准投送要求会比较高,所以各类内容推荐算法会根据不同的特点进行不一样的推荐机制,需要不断尝试优化。
算法实验平台,好理解,比如第一种算法投入测试,推送10000条信息,实际点击有效率是50%,相当于一条测试数据;后面再对其他多种算法测试,最终选取点击率最高的算法进行应用。

4、【原文】算法推荐要达到不错的效果,需要解决好这四类特征:相关性特征、环境特征、热度特征和协同特征。相关性特征,解决内容和用户的匹配。环境特征,解决基础特征和匹配。热度特征,在冷启动上很有效。协同特征,考虑相似用户的兴趣,在一定程度上解决所谓算法越推越窄的问题。

【解析】相关性特征,即是文章画像与你的用户画像一致性比较高,则进行相应推荐。环境特征,刚才也已经说明。热度特征,在冷启动很有效,冷启动的概念是说系统里面并没有你的相关画像数据,比如游客登录了头条,会怎么推荐呢,可以通过热度特征,即根据当前社会热点呀、文章阅读量高低排名呀等一些能代表普遍群体感受的指标进行推送选择。协同特征,后面解释了,为了解决算法越推越窄的问题,比如通过你的行为、画像、环境等各类指标进行模型分析后,适合推荐给你的文章太少,应该怎么办呢,这时候就可以寻找跟你特征相同的用户,比如跟你同一个年龄段、同一个性别、同一个地区等相似用户的兴趣给你进行推荐,可以作为一个推荐的补充,以实现比较好的推荐效果。

5、【原文】今日头条有一个世界范围内比较大的在线训练推荐模型,包括几百亿特征和几十亿的向量特征。完全依赖模型推荐成本过高,因此有了简化策略的召回模型。基于召回策略,把一个海量、无法把握的内容库,变成一个相对小、可以把握的内容库,再进入推荐模型。这样有效平衡了计算成本和效果。

【解析】:这几百亿特征,大家可能很难想象,主要就是包括上篇所说的文章画像、视频画像、用户画像,所有文章包括普通文章、专业文章,所有关键词集中起来数量是相当可观的,这每一个关键字,在拟合算法中就是一个向量。所以如果每一次的推荐都依赖这个最大的模型,成本确实太高,所以需要简化。
说明后面内容之前,需要介绍一个关键词的含义:召回,说直接点,就是对符合条件的结果进行排序,以决定给你推荐文章的顺序。在业界对推荐算法是否有效进行评价的时候,需要用到召回率这个指标,举例:所有可供推荐的文章库里共有40篇文章与你的用户画像相关,实际通过推荐算法推荐给你了20篇,但实际上有10篇是你真正喜欢的文章,则召回率就是10/40=0.25,精度是10/20=0.5。整句话意思就是根据推荐算法尽量缩小推荐内容库,减少计算推荐成本。

6【原文】在今日头条工作前三年,我收到用户反馈最大的一个问题,就是,“怎么老给我推重复的?” 其实,每个人对重复的定义不一样。有人昨天看到一篇讲巴萨的文章,今天又看到两篇,可能就觉得烦了。但对于一个重度球迷来讲,比如巴萨的球迷,可能恨不得所有的报道都看一遍。解决这个,实际上需要精确抽取文本特征,比如哪些文章说的是一个事儿,哪些文章基本一样等等。文本特征对于推荐的独特价值在于,没有文本特征,推荐引擎无法工作,同时,文本特征颗粒度越细,冷启动能力越强。

【解析】:文本特征提取本身也是一个比较复杂的问题,举个例子,要对”人民生活水平”这句话进行语义解析提取特征,可能会提取出如下一些关键字:人民-民生-生活-活水-水平,至于怎么提取才贴合本篇文章要表达的意思,则需要很复杂的后台逻辑了,比如可以随便摘取人民日报1000篇文章作为语料库,分析各个词语出现的频率,把这个词语频率高低排序作为算法的基础数据来进行本篇文章文本特征的提取,这是一种比较简单的方式。具体的要跟本篇文章如何结合,保证提取的特征是准确的则需要更复杂的算法。
冷启动的意思上篇大体说过,就是在没有用户信息的时候如何进行内容推荐,比如新注册的用户或者游客,比如腾讯公司统一用QQ号作为一个用户主索引,你玩过什么游戏,听过什么歌曲,都可以作为用户画像特征应用到腾讯新闻的对你推荐文章的算法里,头条当然也可以用sina微博账号、微信账号登录时的授权,分析你曾经关注的微博账号、微信公账号信息等,作为冷启动时的用户画像数据。

7【原文】语义标签的效果,是检查一个公司NLP(自然语言处理)的试金石。频道、兴趣表达等重要产品功能,需要一个有明确定义、容易理解的文本标签体系。所以,在隐式语义特征已经可以很好地帮助推荐,且做好语义标签需要投入远大于隐式语义特征的情况下,我们仍然需要做好语义标签。

【解析】:何为隐式语义特征呢?简单说明一下,当两个词或一组词出现在同一个文档中时,这些词之间可以被认为是语义相关的。机器并不知道某个词究竟代表什么,不知道某个词是什么意思,但是通过大量文章的学习,机器就能学习出这些词语是语义相关,比如apple跟苹果、电脑和计算机,通过这些相关性就可以对你搜索的内容、或者对你的用户画像进行匹配来推荐文章,你搜电脑,则文章特征包含计算机的文章也会推荐给你。语义标签则是明确指定词语的语义、相关性作为推荐算法的基础数据来使用,也就是让机器明确明白词语的相关性,当然后面这种算法需要耗费相当大的人力物力,但是这个工作做好之后,就保证了数据的准确性,减少了依赖于机器学习的不可控制性,当然这个功能也是一个公司自然语言处理最能展示实力的一环。

8【原文】除了用户的自然标签,推荐还需要考虑很多复杂的情况: 1)过滤噪声:过滤停留时间短的点击,打击标题党;2)惩罚热点:用户在热门文章上的动作做降权处理;3)时间衰减:随着用户动作的增加,老的特征权重会随时间衰减,新动作贡献的特征权重会更大;4)惩罚展现:如果一篇推荐给用户的文章没有被点击,相关特征(类别、关键词、来源)权重会被惩罚;5)考虑全局背景:考虑给定特征的人均点击比例。

【解析】:里面描述的内容主要是考虑用户的自然标签之外的一些因素,1)过滤噪声,一般在做信号处理的时候,需要对信号进行降噪处理,以平滑信号曲线方便进行下一步处理。此处的过滤停留时间短的点击,也是出于此考虑,因为标题党可能会引入比较大的点击率,但是也会有非常大的概率是进入后直接退出,则这些点击率并不能代表你的文章比较好,所以这部分点击就要过滤掉,所以这个功能如果真正在推荐算法中应用的话,标题党后面将不会再是提高收益的一种有效方式。
惩罚热点,每个人在热点上的表现可能仅仅是因为随大流,并不能代表你真正的用户画像,所以这部分要降低操作的权重,很好理解。
时间衰减,也好理解,比如你一年前喜欢看的文章特征,相对于你前几天喜欢的文章特征,当然是以前几天的特征为准作为推送依据啦。
惩罚展现,这就是为什么文章说不行一直不行,说行就猛地飙升上去的原因了。如果你写的一篇文章推荐给100个人,没有一个人点击,则你的文章特征权重就会降低,以后的推荐数量就会降低了,假设头条仁义的话,可以给你重新进行文章画像,再次进入推荐序列,如果不仁义则可能就直接打入冷宫,永不得翻身了。
考虑全局背景,相当于上面所说的降噪处理,比如你这篇文章一个人又评价又赞又转发,但是其他100个人冷眼旁观,根本不打开看,则人均点击比例也是非常低的,所以考虑这个因素的话你的文章也是不会得到大批量推荐的。

9【原文】比起批量计算用户标签,采用流式计算框架,可以大大节省计算机资源,可以准实时完成用户兴趣模型的更新。几十台机器就可以支撑每天数千万用户的兴趣模型更新,99%的用户可以实现发生动作后10分钟模型更新。

【解析】这个地方了解批量处理跟流式框架即可,一般大数据处理工作,比如这里面说的批量计算用户标签,会选择业务量小的时间点进行批量处理,比如在凌晨,这样可以减少数据处理给业务带来的压力,统一更新用户的标签,但这里存在的一个问题便是无法及时更新用户的标签。
比如你昨天看了很多足球的相关文章,足球这个标签的权重会相当高,今天上午突发奇想对篮球感兴趣,但如果标签更新延迟时间很长的话,可能下午系统才会反应过来给你推荐篮球的内容,你一上午的时间推送的可能全部是昨天关注的足球的内容,这肯定不是用户希望的。
所以头条采用流式框架后,可以基本做到实时数据处理,基本在用户查看文章动作十分钟后就能对你的标签进行更新,提高用户感受。

10【原文】影响推荐效果的因素有很多,我们需要一个完备的评估体系,不能只看单一指标,点击率、留存、收入或是互动,我们需要看很多指标,做综合评估:兼顾短期指标和长期指标,兼顾用户指标和生态指标,注意协同效应的影响,有时候需要做彻底的统计隔离等。有人问,所有的这些指标,能合成唯一的一个公式吗?我们苦苦探索了几年,目前还没有做到。

【解析】这里跟第二条类似,单纯靠具体统计指标来进行推荐效果肯定是不好的,比如单纯看一篇文章的点击量大,就推送给所有用户肯定是不合适的,所以需要进行综合评估。
这个综合评估,就需要对一些因素的有效期限进行分析,比如点击率有效期是比较短的,一篇文章在发布第一天点击率高则系统会疯狂推送,但是第二天可能点击率仍然比较高,但是跟一些热点性的因素相比,或者跟其他人写的新文章这个新鲜因素相比,这个点击率有效性就比较差了,可能就不会再次大批量推送,所以说一个有效的兼容性广的评估是需要进行全面设计的,具体指标的权重应该怎么设置比较好则需要通过不同的实验来判断。

11【原文】很多公司的算法做得不好,不是人的问题,是实验平台的问题。 如果A/B Test,每次数据都是错的,不是这儿错就是那儿错,总上不了线,这个事就废了。而一个强大的实验平台,可以实现每天数百个实验同时在线,高效管理和分配实验流量,降低实验分析成本,提高算法迭代效率。

【解析】算法是需要测试出来的,数学模型里有各种各样的算法,其实每一种算法无所谓好坏,只是说在哪种场景下这个算法表现是比较好那个算法表现一般而已。如果一种算法机制能在概要设计阶段就能完全确定这样就是最好的话,就不存在实验的说法了,正是因为有很多不确定性,一种算法的优劣也是不确定的,所以能够降低试验成本、提高算法更新频率就成了提取有效算法的最主要的工作内容。

12【原文】头条现在拥有健全的内容安全机制。除了人工审核团队,我们还有技术识别。包括风险内容识别技术,构建千万张图片样本集的鉴黄模型,超过百万样本库的低俗模型和谩骂模型等,以及泛低质内容识别技术。

【解析】这个比较容易理解了,随着头条作者数量增加,纯粹靠人工审核,那人力成本就太大了,所以机器智能识别的重要性就凸显出来,随着服务器性能的增加,一些重复性的工作就可以通过机器来实现,比如里面说的鉴黄模型,就是通过图片的相似性判断来让机器自动识别,也就是通过机器进行图像处理;
低俗模型和谩骂模型,主要是需要先建立一些文字模板公式,比如一句话里面含有哪些字符,或者哪些字符组合就定义为低俗模型,然后机器自动对文本进行匹配识别,当匹配上之后就监测出来进行过滤,这里面用到的主要是文本解析技术和语义识别技术,现在业界也都已经基本成熟,只是根据需要的不同进行不同的调整即可。

上一篇下一篇

猜你喜欢

热点阅读