教年轻 AIoT 创业者如何从 0 到 1 实现AIoT 创业项目 了解详情
写点什么

Facebook 开源核心 NLP 建模框架 PyText,模型训练时间可缩短 5 倍

  • 2018-12-18
  • 本文字数:3204 字

    阅读完需:约 11 分钟

Facebook开源核心NLP建模框架PyText,模型训练时间可缩短5倍

Facebook 近日开源了核心 NLP 建模框架 PyText,据了解,该框架是 Facebook 新的 Portal 智能显示器以及 Facebook Messenger 智能助手 M 的语音控制背后的框架。


官方博客介绍,这是一个模拟实验和大规模部署之间界限的建模框架。PyText 是一个基于 PyTorch 的库,是统一的开源深度学习框架。它为 NLP 开发提供了多种帮助:


  • 简化工作流程,实现速度更快。

  • 访问丰富的预构建模型体系结构和实用程序,用于文本处理和词汇管理,以促进大规模部署。

  • 利用 PyTorch 生态系统的能力,包括由 NLP 社区的研究人员和工程师创建的预构建模型和工具。



AI 研究人员和工程师现在可以使用 PyText 更快速、更轻松地试验和部署系统,以执行文档分类、序列标记、语义分析、多任务建模和其他任务。在 Facebook 内部,这个框架在几天内(而不是几周或几个月)就可以将 NLP 模型从构思转变为完全实现,并部署依赖于多任务学习的复杂模型。据介绍,在 Facebook 内部,PyText 每天用于超过 10 亿次的预测,以证明它可以在生产规模上运行,同时仍能满足严格的延迟要求。


从事神经网络工作的工程师历来在实验优化框架和生产优化框架之间进行权衡。对于 NLP 系统尤其如此,NLP 系统可能需要创建、训练和测试数十种模型,并且使用固有的动态结构。面向研究的框架可以提供简单,快速执行的接口,从而加快编写高级和动态模型的过程,但是它们也会受到生产中延迟和内存使用增加的影响。为生产而优化的框架可能通过将模型表示为静态图来促进部署,但是这种方法使创建文本序列的动态表示变得困难。PyTorch 1.0 通过提供一个统一的框架加速了从研究到生产的过程,PyText 在此基础上解决了 NLP 建模的具体需求。

对优质 NLP 的需求

人工智能研究人员和工程师对可以理解人类语言的系统有广泛而且不断增长的应用。在 Facebook,NLP 用于向人们提供更多相关内容,提供强大的辅助功能,标记违反政策的帖子,执行翻译等。会话式人工智能技术发展迅速,PyText 正在帮助 Facebook 更快地推进这些新进展,以提高产品质量。PyText 现在在 Facebook 的新视频通话设备 Portal 和 Facebook Messenger 智能助理 M 的建议功能中实现。官方表示,正在探索在会话 AI 中使用 PyText 的其他方法。


使用 PyText,Portal 支持“Hey Portal”语音命令中的组合和嵌套调用查询。此功能允许用户使用语音命令,例如“打电话给我爸爸”,这需要系统了解呼叫者与他或她呼叫的人之间的关系。它利用了本文中首次共享的语义解析工作,开发者能够使用 PyText 将该技术快速应用到生产中。


Facebook 使用 PyText 快速迭代门户的 NLP 模型的增量改进,例如集成、条件随机字段和用于所有领域的合并模型。这使 Facebook 核心领域模型的准确性提高了 5%到 10%。此外,研发人员还使用了 PyText 对分布式训练的支持,为 Portal 减少了 3-5 训练时间。


快速迭代 PyText 还可以帮助提高 NLP 模型的效率和可扩展性。使用 Portal,Messenger 和许多其他用例时,需要实时运行模型以提供快速响应,还需要能够大规模高效运行的 NLP 系统。PyText 使 Facebook 工程师更容易在数十亿人讲多种语言的系统中部署高级实时 NLP。


PyText 以 Facebook 的其他 NLP 系统为基础并对其进行补充。例如,它可以与 fastText 库一起使用。研究人员和工程师可以在 fastText 中训练单词嵌入,然后在 PyText 中使用它们。


PyText 在 DeepText 上也有重要的改进,例如,DeepText 无法实现动态图形。由于模型中的条件执行和自定义数据结构,PyText 中的一些语义分析和多任务学习模型无法使用 DeepText 构建。PyText 还加速了训练,因为它可以利用 GPU 并更轻松地实施分布式训练。未来,研发人员计划将 PyText 作为主要 NLP 平台。

灵活的模块化设计

PyText 构建在 PyTorch 上,它可以连接到 ONNX 和 Caffe2。通过 PyText,AI 研究人员和工程师可以将 PyTorch 模型转换为 ONNX,然后将其作为 Caffe2 导出,以进行大规模的生产部署。


PyText 提供灵活的模块化工作流程,具有可配置的层和可扩展的模型组件接口。PyText 可以作为端到端平台,开发人员可以开箱即用,创建完整的 NLP 管道,其模块化结构还允许工程师将各个组件整合到现有系统中。


每个组件的角色及其与其他模块的交互取决于具体任务。例如,数据处理程序组件与训练器、丢失以及优化程序组件一起使用来训练模型。但是数据处理程序也与预测器和推理模型交互(在实时流量上运行训练模型)。这种模块化方法增强了 PyText 的多功能性 ,该平台几乎可以在研究到生产过程中的任何一点上使用,可以从头开始​​构建整个 NLP 系统或对现有系统进行修改。


PyText 包含其他一些功能,可以改进 NLP 的工作流程。该框架支持分布式训练,可以大大加快需要多次运行的 NLP 实验。它还支持多任务学习,可同时训练多个模型。其他优化包括:


  • 可移植性。PyText 模型构建在 PyTorch 之上,可以在 AI 社区的不同组织之间轻松共享。

  • 预建模型。使用集中于常见 NLP 任务(如文本分类、单词标记、语义解析和语言建模)的 model zoo, PyText 可以轻松地在新数据上使用预先构建的模型,而无需额外的工作。

  • 上下文模型。为了提高各种 NLP 任务中的会话理解,可以使用 PyText 来利用上下文信息,例如会话线程的早期部分。PyText 中已经构建了两个上下文模型:用于意图标记任务的 SeqNN 模型和用于两个任务的联合训练的 Contextual Intent Slot 模型。在官方的测试中,引入上下文信息在 Messenger 中使用 M 智能助理在几个数据集上产生了显着的性能提升。


为了优化生产中的推理,PyText 使用 PyTorch 1.0 的功能通过优化的 Caffe2 执行引擎导出模型以进行推理。原生 PyTorch 模型需要 Python 运行时,由于 Python 的全局解释器锁的多线程限制,它不具有足够的可伸缩性。导出到 Caffe2 提供了高性能、高效的多线程 C ++后端,可以高吞吐量并高效地提供大量流量。其他 PyText 功能还可以轻松地将模型移动到生产并进行部署,包括:


  • 适用于研究和面向生产的 NLP 工作的统一资源,例如用于训练和推理的简单 API,以及与训练和推理一致的文本预处理。

  • 词汇管理,PyText 可以在将词汇表导出到 Caffe2 后将其附加到模型中。

  • 添加了对字符串张量的支持,以便在训练和推理中有效地处理文本。

更方便地从研究转向生产


从一个新的 NLP 模型的想法开始,PyText 提供了必要的抽象,可以轻松地创建新模型或编辑现有模型。训练和评估很简单,可以执行参数扫描以确定最佳模型。PyText 旨在让 AI 开发人员专注于他们想要更改的特定组件或模型,并为系统的其余部分使用开箱即用的组件。


这会生成一个可以在 Python 环境中运行的 PyTorch 模型。借助 PyText 的 Python 服务,AI 开发人员可以通过部署模型并从使用该产品的一小部分人接收流量来快速获得在线指标。



一旦工程师对模型的性能感到满意,他就可以使用 PyText 中的导出器模块通过 ONNX 将模型转换为 Caffe2,然后可以在可以处理生产流量的 C ++推理服务中评估和部署 Caffe2 模型。


图片: https://code.fb.com/wp-content/uploads/2018/12/03_PyText_Code_Block.png



此代码示例演示如何使用 ONNX 将模型导出到 Caffe2,预先添加运算符(如 string2id),然后执行任何必要的后处理。

PyText 的未来计划

在 Facebook 内部地部署已经证明,PyText 允许工程师更快地迭代新的 NLP 建模思想,并快速将其扩展到生产中。NLP 领域规模庞大且发展迅速,因此官方表示将继续改进 PyText 的功能,以测试新的最先进模型并大规模有效地进行部署。


因为在移动设备上放置复杂的 NLP 模型仍然具有挑战性,Facebook 正在努力为设备上的模型构建端到端的工作流程。具体计划包括:支持多语言建模和其他建模功能,使模型更易于调试,并为分布式训练添加进一步优化。


有关 PyText 的更多详细信息,可以参考此链接:


https://research.fb.com/publications/pytext-a-seamless-path-from-nlp-research-to-production/


阅读原文:


https://code.fb.com/ai-research/pytext-open-source-nlp-framework/


活动推荐:

2023年9月3-5日,「QCon全球软件开发大会·北京站」 将在北京•富力万丽酒店举办。此次大会以「启航·AIGC软件工程变革」为主题,策划了大前端融合提效、大模型应用落地、面向 AI 的存储、AIGC 浪潮下的研发效能提升、LLMOps、异构算力、微服务架构治理、业务安全技术、构建未来软件的编程语言、FinOps 等近30个精彩专题。咨询购票可联系票务经理 18514549229(微信同手机号)。

2018-12-18 08:001413
用户头像
陈思 InfoQ编辑

发布了 576 篇内容, 共 251.3 次阅读, 收获喜欢 1283 次。

关注

评论 3 条评论

发布
用户头像
沙发
2018-12-31 13:05
回复
用户头像
都没人评论 怎么回事?
2018-12-31 13:01
回复
没有更多了
发现更多内容

翻译:《实用的Python编程》07_01_Variable_arguments

codists

Python

十步输出设计文档

Arvin

设计实践

配置引起事故复盘

风翱

3月日更

多队列网卡简介

依旧廖凯

28天写作 3月日更

最近的一点思考「Day 28」

道伟

28天写作

Python 分通道读取图像数据,取经之路第 4 天

梦想橡皮擦

28天写作 3月日更

打通Jira与钉钉和企业微信不再难

跟YY哥学Jira

钉钉 Jira 企业微信 automation

数据库备份真的很重要!很重要!很重要!

xiezhr

oracle sql MySQL 运维 数据备份

《Redis 核心技术与实战》学习笔记 04

escray

redis 学习 28天写作 3月日更 Redis 核心技术与实战

基于SpringCloud,支持安卓、IOS、包含前后端等等完整网约车项目

Java架构追梦

Java 架构 面试 SpringCloud 网约车项目

【LeetCode】逆波兰表达式求值Java题解

Albert

算法 LeetCode 28天写作 3月日更

MySQL如何选择主键

架构精进之路

MySQL 3月日更

我在阿里实习做开源

apache/dubbo-go

微服务 程序人生 云原生 dubbo dubbogo

有利可图的NFT,NA公链(Nirvana Chain)NAC公链怎么面对高额Gas费的?

区块链第一资讯

区块链 公链 挖矿

老板要我开发一个简单的工作流引擎

Java小咖秀

架构 工作流 开发 工作流调度 工作流引擎

这些面试题你会吗?6年菜鸟开发面试字节跳动安卓研发岗,复习指南

欢喜学安卓

android 程序员 面试 移动开发

28天

ES_her0

28天写作 3月日更

Python 随机字符串

HoneyMoose

国内可用镜像站整理

弘毅

2021年Java春招高级面试指南(1到5年Java面试者必备)

比伯

Java 编程 架构 面试 程序人生

蚂蚁二面:MQ消费端遇到瓶颈除了横向扩容外还有其他解决办法?

中间件兴趣圈

面试 RocketMQ 消息中间件

永动金融EGG公链去中心化社交平台与通证EFTalk全球正式亮相

币圈那点事

区块链

TCP 三次握手与四次挥手

insight

TCP 3月日更

寻找被遗忘的勇气(二十)

Changing Lin

3月日更

Wireshark数据包分析学习笔记Day16

穿过生命散发芬芳

Wireshark 数据包分析 3月日更

思考需要大声,写下便是永恒——未完待续

Justin

总结 28天写作

Python 随机数函数 choices

HoneyMoose

2020年张小龙非公开课的一点思考

lenka

3月日更

C++线程池ThreadPoolExecutor实现原理

Linux服务器开发

c++ 后端 线程池 Linux服务器开发 Linux后台开发

Go语言学习笔记:数组

worry

数组 Go 语言

这份1307页Android面试全套真题解析,源码+原理+手写框架

欢喜学安卓

android 程序员 面试 移动开发

  • 扫码添加小助手
    领取最新资料包
Facebook开源核心NLP建模框架PyText,模型训练时间可缩短5倍_AI_Christopher Dewan_InfoQ精选文章