用 TensorFlow Extended 实现可扩展、快速且高效的 BERT 部署(二)

本文介绍了如何利用 TensorFlow Extended (TFX) 简化可扩展、快速且高效的 BERT 部署。通过 TensorFlow Transform 执行预处理,结合 tf.text 处理自然语言,将预处理步骤与深度学习模型集成,实现了单一系统的部署方案。文章详细展示了如何使用 TensorFlow Transform 创建预处理图,以及如何在模型训练和导出中应用预处理步骤,确保预处理一致性。
摘要由CSDN通过智能技术生成

特邀作者 / SAP Concur Labs 高级数据科学家 Hannes Hapke,

由 Robert Crowe 代表 TFX 团队编辑

图片

自然语言处理中的 Transformer 模型和迁移学习概念为情感分析、实体提取和问题解答等任务带来了新的机遇。

BERT 模型让数据科学家得以站在巨人的肩膀上。在大型语料库上对 Transformer 模型进行预训练后,数据科学家便可利用这些经过训练的多用途模型来执行迁移学习,并在特定领域问题中找到最佳解决方案。

稍早的一篇文章中,我们讨论了为何当前 BERT 模型的部署会令人感到过于复杂和麻烦,以及如何通过 TensorFlow 生态系统的库和扩展程序来简化部署。如果您还未查阅此文,我们建议您将其作为本文中所讨论的部署实现的背景知识进行了解。

在 SAP Concur Labs,我们研究了如何简化 BERT 部署,并发现 TensorFlow 生态系统提供了可以简单的对 Transformer 进行部署的完美工具。在本文中,我们希望带您深入了解我们的部署实现方案,以及我们如何使用 TensorFlow 生态系统组件来实现可扩展、高效和快速的 BERT 部署。

想要直接查看代码?

如果您想跳转至完整示例,请查看 Colab notebook,其中有我们用于生成可部署 BERT 模型的完整 TensorFlow Extended (TFX) 流水线的相关展示,且模型图中还包含预处理步骤。如果您想尝试进行演示部署,请查看 SAP Concur Labs 的演示页面,其中有我们情感分类项目的相关展示。

为何使用 TensorFlow Transform 执行预处理?

在回答这个问题之前,让我们先快速了解一下 BERT Transformer 的工作原理及 BERT 的当前部署方式

BERT 需要哪些预处理?

BERT 等 Transformer 在初始训练时需要完成两个主要任务:经掩码处理的语言模型和下一句预测 (NSP)。除原始输入文本外,完成这些任务还需要有一个输入数据结构。因此,除了标记化的输入文本以外,BERT 模型还需要一个张量input_type_ids来区分不同的语句。第二个张量input_mask 则用于记录 input_word_ids 张量内的相关标记。这是必要操作,因为我们需要使用填充标记扩展我们的input_word_ids张量以达到最大序列长度。扩展之后,所有input_word_ids张量都将具有相同的长度,但 Transformer 可以区分相关标记(来自我们输入语句的标记)与不相关的填充(填充标记)。

图片

图 1:BERT 标记化

目前,在大多数 Transformer 模型部署中,根据实际模型预测以外的预处理步骤要求,如输入文本的标记化和转换会在客户端或服务器端进行处理。

这样的处理造成了一定的复杂性:如果预处理在客户端完成,那么如果标记和 ID 之间的映射发生改变(例如,我们想要添加新标记),则需要更新所有客户端。在服务器端完成预处理的大多数部署均使用基于 Flask 的网页应用来接受客户端的模型预测请求、标记化和转换输入语句,然后将数据结构提交给深度学习模型。但维护两个“系统”(一个用于预处理,一个用于实际模型推断)不仅麻烦且容易出错,同时还难以扩展。

图片

图 2:当前 BERT 部署

理想状态是将两个解决方案的优势相结合:即扩展轻松和升级简单。借助 TensorFlow Transform (TFT),我们可以通过将预处理步骤构建为图,将其与深度学习模型一起导出,最后仅需部署一个“系统”(深度学习模型与集成的预处理功能相结合)便可同时满足扩展和升级方面的要求。需指出的是,当我们希望针对特定领域的任务对 BERT 的 tf.hub 模块进行微调时,无法将所有 BERT 迁入预处理。

图片

图 3:使用 TFX 的 BERT

使用 tf.text 处理自然语言

2019 年,TensorFlow 团队发布了新张量类型:RaggedTensors,支持在张量中存储不同长度的数组。RaggedTensors 的实现在 NLP 应用中尤为实用。例如,在将语句的一维数组标记化为具有不同数组长度的二维 RaggedTensor 时,该张量类型便能发挥用处。

标记化之前:

[
 “Clara is playing the piano.”
 “Maria likes to play soccer.’”
 “Hi Tom!”
]

标记化之后:

[
   [[b'clara'], [b'is'], [b'playing'], [b'the'], [b'piano'], [b'.']],
   [[b'maria'], [b'likes'], [b'to'], [b'play'], [b'soccer'], [b'.']],
   [[b'hi'], [b'tom'], [b'!']]
]

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值