写在前面:html
翻译这篇文章,是看到后想起以前也试图给SF 优化时间线(已经上线了有好几个月了),相比如今的twitter 确实很简陋。并且也没有把时间线放在醒目位置。事实上,SF 的时间线在我加入以前已经存在好久了,包括上次的优化都在讨论要不要直接提出来做为首页。工具化 or 社交化? 思考了不少以后,仍是只做为了实验项目(选择做为首页or not)保留。
而这篇twiiter关于时间线的排序算法优化则“高级”了不少(想来不止twitter,大多数的社交产品都在时间线上花了不止一次的迭代优化算法尝试,老是众口难调,却也老是在为数据优化不断尝试),引入了机器学习算法,让早期的算法经过训练变得更加精准--结尾给出了很是乐观的总结。
于我而言,文章最有用的地方大概是前文关于时间线改版的迭代总结了,我的以为机器学习那块可能仍是翻译的不够准确--也跟本身对机器学习这块了解不够的缘故吧。但也如文末的总结同样,机器学习的潜力和做用长远来看必定是不可估量的。那么,就用最近在读的《机器之心》做者预言的话做为这段啰嗦的结尾吧:算法
可是到了21世纪,机器将会在这个排他性十足的环境中与人类同行,长久相伴segmentfault
原文地址 : Using Deep Learning at Scale in Twitter’s Timelines 网络
By: Nicolas Koumchatzky and Anton Andryeyev多线程
译文部分:架构
一年多的时间里咱们都不断在优化呈现给用户的时间线,为了给用户提供更相关和精准的时间线内容咱们不断的提升这里面的算法机制。框架
今天咱们将阐述一下如何经过深度神经网络来优化咱们的排序算法,这也得益于 Cortex (Twitter 内部 AI 技术团队之一) 的AI平台和建模能力。简言之:这意味着时间线内容与用户的关联度更紧密了,而在将来,这也敲开了咱们利用深度学习社区的创新和新技术来更好优化产品的大门,尤为是在天然语言处理(NLP),对话理解和传媒领域。运维
在咱们的排序算法以前,用户的时间线内容展现方式其实很简单: 全部的推文都是你关注的用户产生的内容,咱们会把你上次访问后这些关注用户产生的新内容聚合并以最新到最旧的时间顺序展现出来。尽管概念简单,但由于推特的成千上万的用户体量每秒产生的内容也是巨大的,这对咱们的技术架构和运维都是不小的挑战。机器学习
而在引入了排序算法以后,咱们新增长了一个特征。在聚合了全部推文以后,咱们会创建一个相关模型。这个相关模型会给每条推文一个关联分值,用于预测每一个用户对于这条推文的感兴趣和关注程度。关联分值高的一些推文就会出如今你的时间线顶部,其它的推文内容则在这些相关推文的下方。考虑到咱们给你推荐兴趣推文数量以及你两次访问网站的总时间间隔,咱们可能也会向你推送「避免你错过」模型。这个模型仅仅包含一小部分在相关模型中关联分值最高(并也按由高到低)的推文,区别于相关模型中的推荐推文来看,后者都是按时间顺序排序的(对比的,避免错过模型应该不是)。这样作的目的是但愿你能第一眼看到你最感兴趣的最佳推文—毕竟时间线内容是很长很长的。模块化
为了能预测到某个你最感兴趣的推文,咱们在算法模型中考虑了如下的特征值:
推文自己: 发布时间,是否有媒体附件(图片或视频),全部交互(即 转推量和点赞数)
推文做者:你过去和推文做者的互动,你和他们之间的联系以及你关系链的构成
你: 你过去感兴趣的推文,你使用twitter的频次和留存时长
咱们考虑的特征值以及他们之间的关联度都不断的在增加,也提醒了咱们须要考虑到更细微差异的行为模式。
每一次你打开应用或者刷新的你的时间线,咱们都会经过你上次访问的时间来对你关注的用户发布的推文设置关联分值来决定什么推文会展现在你的时间线顶部。这样的打分步骤须要一个更强的计算能力,由于咱们每秒钟要给几千条推文计算分值来知足全部的时间线请求。尽管更丰富的模型已经能知足更匹配的推文质量,但做为一家互联网公司,速度和质量同等重要。这个独特挑战就是须要迅速计算分值并能及时反馈给正在浏览他们时间线的用户。至今咱们已拥有了足够优秀的模型来最大可能的知足内容质量以及将来可能须要的改善。
正如你所能看到的,选择正确的方式来构建和运行预测模型对每一个使用twitter的用户体验是有很是深远的影响的。
就像上文总结提到的,预测模型必需要有如下约束来知足众多推文请求能及时展现给用户的条件:
预测内容的质量和速度
资源利用
可维护性
咱们通常用两天来衡量一个预测模型的质量。首先咱们会在训练模型时用一个强定义精准性的公式来评估模型。它会告诉咱们模型的表现怎样,尤为是在给感兴趣的推文打高分的情景下。尽管通常最后的模型都会做为一个早期预测指向标,但要预测用户看到这些推送的内容后做何反应仅仅靠这一个模型是远远不够的。
因此咱们一般会实施一次或者屡次 A/B 测试来监测用户使用不一样推送算法的 Twitter 后的行为。并对测试结果进行分析。这里咱们一般使用的公式通常直接和使用Twitter 的频次以及感兴趣程度相关的。例如,咱们可能会跟踪每一个用户参与次数,或者单次停留时长。每次A/B 测试以后,咱们不只能够判断是否新上线的预测模型让用户体验更好,并且也能准确衡量此次改版的改善程度。在Twitter ,像时间线排序这样的大系统项目,一个小的模型质量改善都会在用户体验上产生大的影响。
最后,尽管预期的实时速度能在一个模型中被实现,但发布这个(实时发布)模型也和其它新功能同样须要分析结果。咱们会将这个模型的有效做用程度 和 任何可能存在的执行模型时增长的成本
二者之间进行衡量。额外增长的成本可能来自于硬件使用,或者更复杂的执行操做和支持。
除了预测模型自己,一系列请求也会被应用到机器学习框架中— 即,一系列容许用户定义,训练,分析和发布一个预测模型的工具。咱们尤为关注于:
在一个很是大的数据集内训练速度和范围能力
对于新技术的扩展能力
容易训练,调试,评估和部署上线的工具
须要注意到的是,在用机器学习技术最开始,找到最佳模型(暂不考虑它是如何产生的)经常是第一考虑要素。毕竟,咱们想证实,将全部预测模型一块儿使用是最有效的。
然而,随着预测方法更加成熟, ML 框架的易用性,扩展性都变得更加剧要。若是一个复杂的模型只能由少数几个了解的工程师维护和扩展的话并非一个长久之计,即使这个模型只是有一些细微的变化。随着愈来愈多的工做投入到数据挖掘,特征研究以及快速迭代实验,一个系统的核心开发功能特色应该变得相当重要。一个稳定和灵活的框架更有可能带来重复累积收益。随着在 AI 社区逐渐发现的新的优秀的算法和模型框架,找到一个原生支持深度学习的和复杂图表的平台才是这项工做(不断优化模型)的关键。
基于早期的图文识别技术的成熟,深度学习已经成为了现在许多技术公司一个必备的技术点了。一些大的研究团队已经创建,许多利用深度学习技术的前沿项目也在不一样的环境中逐渐发布出来。
因此,已经有许多新的模型框架被创造出来用于解决具体领域的具体问题。人类大脑的处理能力和执行算法之间的差距愈来愈小。一个关键的理由就在于深度学习本质上就是模块化的。深度学习模型能够以各类方式组合(堆叠,串联等等)来建立一个计算图表。这个图表能够被不断学习训练,典型的场景是在批梯度降低(mini-batches)训练中用到的反向传播算法(back-propagation)和随机梯度降低算法(Stochastic gradient descent)。
低级别的模型在这里是每次使用的片断单位,是做为一种将输入和必要梯度 计算为输出内容的执行方式。事实上,在机器学习领域(torch-autograd, PyTorch,TensorFloe)最经常使用的一些库类型已经提供了能够处理大量数据的基本操做,典型的就是让使用者根据偏好的tensor操做包来具像化算法,同时也要依赖生成的计算图表。Torch-autograd 和 PyTorch 则要更近一步:计算图表能够动态生成且能从一个批梯度降低到另外一个。
这些计算图表都有一个很是惊人的建模能力,学习这些的技术听起来格外吸引人,而最值得一提的是这些训练都是可扩展的。由于这些模型都是从批梯度降低训练中的数据集训练得来的,整个数据集的规格也能够是无限大。
让咱们回到手上的问题来。 Tweet 排序算法和大部分研究人员和深度学习算法研究的问题有些不同。最大的因素是由于 Tweet 的数据量级不大,同时也包括获取能力和请求延迟等因素。当前的数据特征并不能保证是模型正在记录的每个数据的特征值。
一般这些问题都会用其余算法来解决,例如决策树,逻辑回归和特征crosing 和discretization等算法。这也是咱们的时间线排序最初用到的算法。
陈述完上述的缘由,咱们有理由相信深度学习会让咱们作得更好。为了将深度学习引入到产品中,咱们必需要肯定引入结果不能比以前差,同时模型和训练过程也须要足够快速。
因此Cortex 团队就作出了以下的一些调整和改善来适应这些约束:
一个全新的模型架构和训练内容: 在一段调研和探索期后,咱们打算使用如下的技术来优化以前的算法:
离散(Discretization): 稀缺特征值和普通的数据记录彻底不一样。咱们发现一个方法来将这些输入的稀缺特征值离散,再将它们放入到主深度训练网络中
一个自定义的稀缺线性层: 和其余稀缺层相比,线性层有两个特殊的地方:一是防止梯度破坏的在线正常化计划,另外一个是 用来区分普通特征或零值特征消失 的每特征偏量
一个带有校验层的样本计划: 当训练数据集包含一堆正反向例子的类似数据的时候,这是深度网络会在寻找解决问题的空间上作得更好。然而,这时人工调试一个训练数据集会致使一个非校订的输出预测。所以咱们增长了一个自定义校验层来重校验从而输出正确的几率。
一个训练计划: 以上的补充准备就绪,整个模型训练过程仍须要好几步:离散器矫正,深度网络训练,预测等压校验以及测试。多亏平台的可塑性,有效并有序的执行这些操做都很顺利。
为了保持甚至减小前一个算法的延迟而执行的优化模型。在某种程度上,这些优化模型就是融合在批量处理,多线程和硬件利用上来下降延迟。
平台的设计优化
易训练性和模型再利用:简单的流程和模型利用会让任务执行和模型收集等等过程更高效和容易
根据资源自动组合最有的交互操做:这些模型须要在推文集群中被训练,研究和测试。平台提供了一个用户透明的相对简单方式来进行这些处理
测试和服务工具: 一旦模型训练完成,就须要大量的实验环节。这就须要在生产环境对模型大量的进行测试—— 而且也须要可以简单部署。全部这些也须要知足可以单行命令就能执行。
全部这些为了构建一个完整的深度学习平台所作的辛苦工做都获得了回报。在时间线排序算法的任务上,深度学习在离线模型的精准预估上取得了巨大的提升。这些增加在常规模型的生命周期上也一直持续着,包括对新功能的介绍环节以及将模型扩展到对新的用户参与度衡量参数。这证实了深度学习方法确实是稳定的,同时它的扩展推广也不错。最重要的是,将它引入到线上的效果显示,在用户参与度和停留时长上都取得了巨大的增加。同时在咱们以前的分享中也提到了,更新的时间线在用户增加和参与度上都取到了不可磨灭的做用。
就像已经提到的,另外一个值得说起的影响就是点对点框架实现。这个框架的终极设想就是一个非统一,可扩展的快速框架。这个框架能够将许多合适的深度学习技术和以 ML 方法创建的模型融合起来。这样的可塑性可以在之后的时间线排序优化上快速实现,同时也能不断优化迭代使用的模型的质量效果。
随着更多的公司团队将深度学习归入他们的模型任务,相信这个框架的效果将会不断的优化和提升。
在咱们的时间线排序模型组件中使用机器学习方法已经带来了显著的提升。同时,Twitter 使用深度学习技术也是想展现咱们对将来新兴技术的开放心态。这几年在机器学习领域,深度学习和 人工智能相关的研究已经产生了空前的(也仍不断在持续的)新创意和算法。咱们深信让咱们的 ML-驱使 的产品融入这项技术会对之后的获益起到关键做用。而这些能够经过搭建一个原生支持机器学习的可扩展平台来实现。
长远来看,这也能帮助咱们更好理解twitter上的每一条推文和每一次互动,并且是实时的。