抖音技术能力大揭密!钜惠大礼、深度体验,尽在火山引擎增长沙龙,就等你来! 立即报名>> 了解详情
写点什么

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

2017 年 6 月 04 日

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

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

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

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

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

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

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

  • 推文本身:鲜活度(recency)、是否包含媒体卡(图像或视频)、互动情况(如转发或点赞次数)。
  • 推文的作者:你过去与作者的互动情况、你与作者之间关系的紧密程度、你与作者之间的关系是如何建立的。
  • 你自己:你参与过互动的推文、你使用 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 做出了以下的调整和改进来满足我们的要求。

  • 新的模型架构和训练方法:经过一段时间的研究和探索,通过如下技术超越了之前的算法:
    • 离散化:数据记录间的稀疏特征值会有很大的不同。我们找到了一种方式,对输入的稀疏特征进行离散化,然后再让它们进入到深度学习网络。
    • 一个自定义的稀疏线性层:相比其他稀疏层,这个自定义的稀疏层具有两个额外的特点:它提供了在线的归一化(online normalization)方法,可以防止梯度暴增,以及特征偏差(bias),用于区分特征的丢失和零值特征。
    • 与校准(calibration)层相关的取样方法:当用于训练的数据集包含了相近数量的正值样本和负值样本,深度学习网络可以获得更好的结果。不过,如果是通过手动来调整样本数量,会导致非标定的预测结果。所以,我们增加了一个自定义的等分校准层进行二次校准,让输出的结果更加准确。
    • 训练计划:除了上述几点之外,我们现在的模型训练过程包含了几个步骤:离散器校准、深度网络训练、预测的等分校准(isotonic calibration)和测试。得益于我们平台的灵活性,我们可以很轻松地定义上述这些步骤,然后按顺序执行它们。
  • 更好地实现和优化模块,以更小的延迟超越之前的算法。这些模块很好地结合了批次、多线程和硬件资源来达到更低的延迟。
  • 更好的平台设计:
    • 模块的训练和重用变得更加容易:简单易用的训练流程设计过程简化了任务的串行化和模型的建立。
    • 自动捆绑集群资源,支持更优的交互:这些模型需要在 Twitter 的集群上重新进行训练、探索和测试。平台为用户提供了一种简单的方式来完整这些工作。
    • 通用的测试和服务工具:训练过的模型需要进行大规模的实验,需要在生产环境里进行大量的测试,同时要求部署过程尽量简单。基本上,这些工作都可以通过一行命令来完成。

影响

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

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

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

未来

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

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

2017 年 6 月 04 日 19:001173
用户头像

发布了 321 篇内容, 共 113.4 次阅读, 收获喜欢 114 次。

关注

评论

发布
暂无评论
发现更多内容

Java应用性能优化!Java-进阶:集合框架1

程序猿一枚

Java 程序员 后端

SpringBoot实战基于异常日志的邮件报警

普普通通程序员

【“互联网+”大赛华为云赛道】API命题攻略:厘清三步解题思路,用好开发工具

华为云开发者社区

API 华为云 modelarts 互联网+ API Explorer

香港服务器弹性是企业数字化转型的一个关键方面

九河云安全

GitHub标星过万!10592字,475行

程序猿一枚

Java 程序员 后端

IBM大面积辞退40岁+的员工,【Spring Boot 1

程序猿一枚

Java 程序员 后端

Java大厂技术面试题汇总!美团阿里Java程序员晒工资被围观,总结

程序猿一枚

Java 程序员 后端

全民K歌跨端体系建设

Edwiin

跨端 hippy 全民K歌

太为难我了,阿里面试了7轮(5年经验,拿下P7岗offer)

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

Java基础72问:不搞定HR这3个问题,建议不要轻易跳槽(1)

程序猿一枚

Java 程序员 后端

单元测试:GTest之事件机制(一)

正向成长

测试 测试 单元测试 GTest

ELK原来这么简单!《零基础(1)

程序猿一枚

Java 程序员 后端

IM之Qunar实现

Qunar技术沙龙

架构 IM 办公 客服 消息

使用 PolarDB 和 ECS 搭建门户网站

若尘

阿里云 Polar 八月日更

价值连城 神经网络- 吴恩达Andrew Ng Coursera Neural Networks and Deep Learning John 易筋 ARTS 打卡 Week 58

John(易筋)

ARTS 打卡计划

太可惜了,四面字节跳动,我的offer竟被一道“算法题”给拦截了

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

亚信科技AIDB数据库与中科可控、海光公司完成产品兼容认证

AISWare AIDB

服务器 国产化 国产芯片 国产数据库 产品兼容性互认

现成FIL分币系统介绍|FIL分币平台搭建

橙子区块链l53o56oloo3

Filecoin fil挖矿 FIL挖矿分币系统

GitHub标星8k!Java虚拟机5大核心知识点

程序猿一枚

Java 程序员 后端

AI应用说 | 百度专家&行业大咖畅谈AI技术与落地应用

百度大脑

人工智能 开发者 开发

FastApi-02-路径参数

Python测试和开发

FastApi 8月日更

Java开发6年了,BAT面试文档:ActiveMQ(1)

策划Java工程师

Java 程序员 后端

真正决定你成败的,是时间管理!

博文视点Broadview

入职字节跳动那一天,我哭了(蘑菇街被裁,奋战7个月拿下offer)

公众号_愿天堂没有BUG

【“互联网+”大赛华为云赛道】CloudIDE命题攻略:明确业务场景,快速开发插件

华为云开发者社区

ide 开发 插件 华为云 CloudIDE

GitHub标星过万!亦直问JVM(1)

程序猿一枚

Java 程序员 后端

香港云服务器的性能提升对行业服务带来显著动力

九河云安全

资深开发竟然不清楚int(1)和int(10)的区别

普普通通程序员

Java入门你值得拥有!【Spring Boot 26

程序猿一枚

Java 程序员 后端

唯品会三年,我只做了5件事,如今跳槽天猫拿下offer(Java岗)

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

Java体系化进阶学习图谱:所有帖子的 分类 总结

程序猿一枚

Java 程序员 后端

Study Go: From Zero to Hero

Study Go: From Zero to Hero

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