[关闭]
@xuemingdeng 2017-06-01T21:20:43.000000Z 字数 4328 阅读 560

在Twitter信息流中大规模应用深度学习

机器学习


这篇文章由来自Twitter的Nicolas KoumchatzkyAnton Andryeyev共同撰写,最初发表在Twitter的博客上。以下内容已经获得Twitter的翻译授权,并已通过Twitter的审校,查看英文原文Using Deep Learning at Scale in Twitter's Timelines

从我们开始对信息流进行改进到现在已经有一年多时间了,我们进一步改进了底层的算法,从而为用户呈现具有更高相关度的内容。

我们将会在这篇文章里介绍我们基于深度神经网络的信息流排序算法,以及由Twitter内部AI团队Cortex构建的AI平台和它提供的建模功能。简而言之,现在和未来的Twitter信息流将具有更高的相关度。这为我们打开了一扇大门,我们可以使用由深度学习社区提供的各种新颖的技术,特别是在NLP(自然语言处理)、对话理解和媒体领域。

我们如何对信息流进行排序?

在引入排序算法之前,信息流的组成非常简单:收集所有由你的关注对象在你最后一次登录Twitter之后发送的推文,再将它们按照时间倒序显示出来。这个看起来很简单,但要为数以亿计的Twitter用户提供这种稳定的体验对我们来说是一个巨大的挑战,它对我们的基础设施和运维能力提出了很高的要求。

在引入排序算法之后,信息流的组成变得更加丰富。在收集推文之后,我们使用相关度模型对它们打分。这个分数是针对每个用户对推文感兴趣程度的预测。具有较高分数的推文被展示在信息流的最上面,其他推文紧随其后显示。根据你的信息流中已有的推文数量以及从你最后一次登录Twitter至今的时间长短,我们还可能专门为你提供一个“你可能错过的推文”模块。这个模块只包含少量具有最高相关度的推文。这样做的目的是希望你能够先看到重要的推文,然后再进一步查看按照时间排序的部分。

为了预测推文的相关度,我们的模型考虑到了以下几个特征。

我们使用的特征和各种特征之间的关系在不断增长,我们的模型因此能够识别出更为精确的行为模式。

每次在你打开手机或刷新信息流的时候,我们都会对推文进行打分,以便确定哪些推文可以被展示在信息流的最上面。打分这一举动对我们的信息流服务基础设施提出了很高的计算要求,因为我们现在每秒钟要对数千条推文进行打分。虽然更丰富的模型可以提高推文排序的质量,但对于像Twitter这样的实时社交公司来说,速度与质量同样重要。Twitter独特的挑战在于如何为查看信息流的用户进行快速实时的打分,并且拥有足够强大的模型来保证排序质量以及后续的改进。

选择正确的方式来构建和运行预测模型深切影响着每一个用户使用Twitter的体验。

信息流排序对机器学习平台的要求

在上一个小节中,我们已经得出这样的结论:要在Twitter的生产环境运行这些模型,它们必须满足很多要求。

我们通过两种方式来衡量模型的质量。首先,在进行模型训练过程中,我们使用定义明确的准确率度量指标。这些指标可以告诉我们任务的执行情况,并为相关度高的推文打较高的分数。最终模型的准确率虽然可以作为早期指标,但并不能可靠的预测Twitter用户会如何与推文互动。

我们通过运行AB测试和比较实验结果来衡量Twitter用户的受影响程度。我们所使用的一系列度量指标与Twitter的使用情况和受欢迎程度有关。例如,我们跟踪每个用户的参与次数,或者他们在Twitter上所花费的时间。在结束一次AB测试后,我们不仅能判断新模型是否能够为用户带来更愉悦的体验,还能衡量出模型改进的程度。在像Twitter这么大规模的信息流排序系统里,模型的一个很小改进就可以对用户体验带来重大的影响。

最后,即使我们能够达到模型质量和速度方面的要求,要启用一个新模型还会受到一些其他的限制,这个与发布其他功能特性是一样的。我们需要知道模型将会带来什么样的影响,并将它与这个模型可能增加的成本进行对比,在两者之间做出权衡。增加的成本可能来自硬件或者更复杂的运维和支持。

除了预测模型之外,信息流对机器学习框架也提出了类似的要求。我们可以基于这些框架定义、训练、计算和运行预测模型。我们着重关注以下几个问题。

在使用机器学习的开始阶段,选择好的模型(不管它是如何生成的)是最重要的。毕竟,我们是想要验证预测模型的可行性。

不过,随着预测流水线的日渐成熟,机器学习框架的易用性、伸缩性和可扩展性变得越来越重要。一个脆弱复杂且只能被少数几个工程师理解或扩展的框架是不会长久的,就算它有性能方面的优势。随着数据挖掘、特性工程和快速实验等方面工作的不断深入,系统的核心工程特征变得越来越重要。一个稳定灵活的框架可以带来可重复的性能收益。AI社区提供了大量的新算法和模型,一个支持深度学习和复杂图的平台正是我们利用这些新算法和模型的关键。

在信息流排序算法中引入深度学习

因为早期在图像和语言理解方面的成果,深度学习成为很多科技公司必备的技术。大型的研究团队被组建起来,很多野心勃勃的项目基于各种原因开始使用深度学习。

直接的结果就是,很多新的模型被发明出来,用于解决领域问题。人类的大脑与算法之间的能力差距在缩小。这种繁荣和多样化主要归因于深度学习固有的模块化特性。深度学习模块可以以任意的方式进行组合(堆叠、连接,等等),然后形成计算图。图的参数可以通过学习获得,一般使用反向传播(back-propagation)或mini batch的随机梯度下降(SGD)。

“低阶”模块可以是任何东西,只要它们能够根据输入数据计算出输出数据和必要的梯度。实际上,这个领域最近的一些框架(torch-autograd、PyTorch、TensorFlow)针对基本的算符,甚至提供了全自动的输出和梯度计算,并让框架自己生成计算图。Torch-autograd和PyTorch则更进一步,它们支持动态的计算图,允许计算图在不同的mini batch之间变化。

这些计算图的吸引力,不仅源于它们非常强大的建模能力,还因为它们的训练具有可伸缩性。这些模型是基于数据的mini batch展开学习的,因此总的数据集可以非常大。

回到推文排序的问题。推文排序与大多数研究人员和深度学习算法专注的领域是不一样的,因为Twitter的数据特征是稀疏的。因为各种原因,比如可用性和延迟方面的要求,并不能保证每一个特征都能被可靠的保留或记录下来。

一般情况下,可以使用其他一些算法来解决这些问题,比如决策树、逻辑回归、特征交叉和离散化。实际上,在一开始我们在信息流排序上也应用了这些技术。

基于上述的各种原因,我们认为深度学习是更好的方案。不过,为了能够将深度学习应用到生产环境,我们至少要确保它能够为我们带来与传统机器学习方法一样或更好的结果,并且具备更快的建模和训练速度。

负责Twitter深度学习平台的团队Cortex做出了以下的调整和改进来满足我们的要求。

影响

我们在搭建一个完整的深度学习平台上所做的努力已经初显成效。在信息流排序方面,深度学习模型在准确度方面获得了显著的成果。这些成果在模型的整个生命周期内保持稳定,从新特性的引入到扩展模型用于预测新类型的参与度。这说明深度学习是稳定的,可以推广使用。更重要的是,从度量指标(如推文的参与度和花费在Twitter上的时间)上看,在线体验也得到了显著改进。我们在之前分享的业绩报告中已经提到过,最新的信息流促进了用户增长和Twitter参与度的提升。

端到端的框架体验是影响深度学习的另一个重要方面。我们的终极目标是构建一个统一、灵活、快速的框架,简化深度学习技术和模块的组装以及机器学习技术的采用。这种灵活性为信息流排序任务的快速实验和获得更高质量的模型提供了良好的支持。

我们的愿景在进一步显化,越来越多的Twitter团队在他们的模型栈中使用了深度学习。

未来

将深度学习作为信息流排序最主要的建模组件已经在生产环境为我们带来了非常好的成效。不过,更重要的是,Twitter希望借此打开一扇通向未来的大门。在机器学习领域,深度学习和AI相关的工作在这些年得到了空前的发展,出现了大量新的技术和算法。我们相信,让基于机器学习的产品从这些技术中获益是至关重要的。我们可以在原生支持深度学习的平台上达成我们的目的。

从长期来看,我们因此能够更好地理解每一条推文和Twitter上的交互模式,从而实时地为用户推荐具有更高相关度的推文。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注