Fork me on GitHub

飞桨PaddleNLP 设计理念与产业实践

以下文章来源于 https://zhuanlan.zhihu.com/p/609536355

导读: 本次分享的主题为 PaddleNLP 设计理念与产业实践。

主要分为三个部分:

  1. NLP 开源产品发展趋势
  2. PaddleNLP 设计理念与目标
  3. PaddleNLP 产业案例与总结

分享嘉宾|陈泽裕 百度 资深研发工程师

编辑整理|刁震 西北师范大学

出品社区|DataFun


01/NLP 开源产品发展趋势


1. 从应用视角看开源 NLP 产品的类别



上图是最近梳理的一个目前开源 NLP 产品的综合情况,可以看到目前的开源项目大体分为三种形态:

第一种形态:**以任务为中心。**这种形态是 NLP 开源产品中最为常见的,最为主流的一些特定领域的任务。例如大家比较熟悉的 Jieba、LAC、LTP 等等。这些任务的开源在过去几年非常的火,适用面也非常多,因为它们是解决传统 NLP 任务必备的基础组件。

第二种形态:**以模型为中心。**典型的模型库的形态有 Hugging Face 的 Transformers,Meta 的 FairSeq,AllenNLP 等等。这些模型库将大量的模型汇总在一起,比如我们比较熟悉的 Hugging Face 汇总了数万个模型,这种形态就是典型的以模型为中心设计的,通常以学术前沿为驱动。

第三种形态:**以解决方案为中心。**这种形态是真正面向产业真实解决方案设计的。例如面向检索问答的 Haystack;面向对话任务的 Dialogflow,RASA 等。

从整个开源 NLP 市场格局来看,这三种形态代表了 NLP 产品的主流分类。他们各自有各自的设计动机和目的。


2. 三类设计理想的对比分析

接下来看一张图,是这三种设计理念的对比。



第一种以任务为中心的设计,其优势 在于开箱即用,易学易用,使用成本低;不足是与特定任务深度绑定,迁移成本高。

第二种以模型为中心的设计理念,优势 也是比较简单,通用性相对比较好,更多的是以一种基础任务去做的,对单模型可解的任务非常友好;它的不足之处是当需要解决实际问题的时候,开发者可能需要多个不同的模型拼凑和串联起来才能完整解决一个实际产业问题。

第三种,以解决方案为中心的设计,优势 是面对特定的应用场景可端到端的解决;不足之处在于学习成本和使用成本相对较高。


3. 模块化:NLP 任务编程界面日趋统一和易用

在这三种设计理念之下我们也观察到 NLP 开源技术发展的三个趋势。

首先是模块化趋势,NLP 任务的编程界面已经日趋统一和易用,在编程界面统一的前提下,有三种不同设计。



第一类是以模型为中心的设计,典型的代表比如 TensorFlow,Hugging Face,以及飞桨的 PaddleHub。这些都是 Hub 类产品,通过托管大量的预训练模型参数,用极少的 API 即可快速把模型调用起来。

第二类是以框架为中心的设计,主要是通过标准化、模块化的 API,降低深度学习框架的开发成本。典型的如 PyTorch Lightning,PyText,AllenNLP 等等。

第三类是以数据为中心的设计,是最近吴恩达提及比较多的一类,通过一些更简单的代码、命令行或者配置化驱动,聚焦核心的成熟模型,更多侧重于数据的优化与迭代,进而迭代提升模型效果。


4. 生态化:预训练时代带来的繁荣模型生态

第二个趋势是生态化,随着 BERT 开启了 NLP 的预训练时代后,模型生态繁荣的趋势显现。



最典型的就是 Transformers,它已经是 GitHub 史上增长最快的项目。从 2018 年至 2022 年间,模型数量也是呈爆炸式增长,从一个学术开源的 repo 成长为现在的 AI 平台。同时,他的发展也历经了多个大版本的迭代,从一开始的学术开源,专门针对 NLP 预训练领域,逐渐扩大到视觉领域,语音领域,包括现在的定位为做机器学习领域的 GitHub,从单点的模型技术,到逐渐呈现社区生态化的趋势。这个趋势是在早期做单点 NLP 工具时代最大的区别,也是预训练时代给 NLP 开发领域带来的关键变化。


5. 产线化:多模型多任务串联系统级能力

第三个趋势是产线化。NLP 任务相比 CV 任务而言,其落地的复杂性和平均成本更高,所需的技术组合方案和链条更长。随着预训练模型的问世,相比传统 LSTM 时代的 NLP 技术落地,产业化落地的端到端特性逐渐增强,技术方案的链条显著缩短了,因此成本降低了也更加可规模化推广。



在这样一个背景下,就衍生出了产线化的趋势,也就是我们现在在大多数开源产品中能看到的 Pipeline 模式。目前很多的开源产品都会应用 Pipeline 的设计理念,但大家对 Pipeline 的组成单元又会有一些区别。

这里举几个例子。Hugging Face 的 Pipeline 更多的是面向模型级别的,通过对单个模型增加模型前后处理组合成 Pipeline 来完成更复杂的任务。而 spaCy 则是免洗那个任务级别的,解决某一个特定任务,串联了多个模型,也有一些传统的方案,组合串联好后给开发者一个非常方便的体验,并且也支持灵活的配置。

还有一种 Pipeline,是面向产业系统级别的 Pipeline,典型的代表就是 haystack,这是德国一家 AI 创业公司的产品。它对于 Pipeline 的定义就包含了数据存储、标注工具、前段展示等更为复杂的产品形态,更加贴近一个完整的 NLP 核心系统。

--

02/PaddleNLP 设计理念与目标


接下来我们再来看一下 PaddleNLP 的设计理念与目标。



飞桨的 Slogan 是源于产业实践的开源深度学习平台。经过近几年的发展,飞桨已成长为国内首个开源且完备的深度学习平台。这几年在飞桨双飞轮设计理念的驱动下,我们国内的市场份额也有了一个很大的提升。这个理念循环是首先飞桨的需求源于产业实践,通过不断打磨持续提升性能优化,部署能力等,随后将其推广给更多的开发者使用。随着越来越多的开发者加入也就要求我们对编程范式做的更灵活且兼顾效率,API 体系也会越来越完备,进而实现我们的使命:"让深度学习技术的创新与应用更简单"。

在这样一个"双飞轮"理念驱动下,我们的飞桨开源开放深度学习平台也日趋完善。

同样 PaddleNLP 的发展与整体设计背后也是与"双飞轮理念"相匹配的。



最早的 PaddleNLP 发展是从一些预置的 NLP 工具集开始,主要解决一些特定任务,包括句法分析、词法分析等等。随着预训练模型的到来,百度提出了基于持续学习框架的 ERNIE 知识增强预训练大模型,逐渐将产业级的模型库建设起来。而随着产品推广过程中,我们发现一个模型是很难满足国内众多企业的需求,需要有一个能以模型为中心形成解决方案的便捷方式,于是我们打造了一系列 NLP 产业解决方案,包括语义检索系统、智能问答系统、情感分析系统等等。在这个迭代过程中也驱动我们去研发一个端到端 NLP 的流水线,来更好的将数据存储、模型串联、部署、前端展示等各个环节,完整地串联出来,降低 NLP 系统搭建门槛,加速技术落地。



从整个全景图可以看到,PaddleNLP 是基于飞桨核心框架去建设的,使得我们可以更端到端的将分布式训练、压缩推理以及全场景部署的体验和性能做得更加极致,可以更好的对 NLP 任务进行降本增效。

核心框架之上是模型库,得益于百度 NLP 十余年技术底蕴,我们开源了完备的 NLP 技术栈,包括基础技术、系统技术以及扩展应用。依托文心大模型我们对一系列下游任务进行了升级改造,使得中文特色显著,效果领先。此外为了更好地加速企业落地,我们联合许多飞桨合作伙伴还打造了源于产业实践的精品产业范例库,融合开源与开放平台能力,并且支持开发者可以更灵活地扩展来解决特定领域的问题。

综上所述,PaddleNLP 的设计理念主要有以下三方面:

① 简单易用、功能强大;

② 生态兼容、极致高效;

③ 产业实践、灵活扩展。


1. 简单易用、功能强大



首先我们在简单易用特性上方面设计了 Taskflow,聚合了主流 NLP 技术的工具集。



通过一行 Taskflow API 就可以便捷获取基础模型,譬如分词工具 LAC、句法分析 DDParser、情感分析 Senta 等,并且底层依托飞桨推理引擎实现了性能优化,使开发者虽然调用的是 Python 的 API,但底层的加速可以使开发者得到媲美 C++ 性能的体验。



再举多个例子,以 PaddleNLP 最新发布的一个跨模态文档抽取问答 DocPrompt 为例,开发者只需要一行代码就可加载模型,它也是基于 ERNIE-Layout 跨模态文档理解大模型开发的,三行代码就可以快速搞定跨模态文档深度理解与分析。



近年来预训练模型叠加上大算力与大数据,开源模型的能力得到了极大的提升。从最早期的语言理解到语言生成都取得了很好的突破,并具备更强的多任务能力,并且逐渐过渡到跨模态的融合创新。通过 Taskflow 一个简单易用 API,可以很大程度满足 POC 等需求,如果需要完整解决的产业问题,其实就离不开第二层模型库来满足更深层次的二次开发需求。

这也是我们第二个设计理念与目标:极致高效、生态兼容。


2. 生态兼容、极致高效



模型库中现在最热门的就是大模型,大模型是现在提升效果的一个非常可靠的途径,随着大模型参数量的快速增长,从 2020 年到 2022 年,参数量从一亿飙升到一万亿,发展是非常迅猛的。而且可以看到在 SuperGLUE 上超越人类效果的模型基本上都是十亿级别以上的,参数量越来越大,效果也越来越好。



但是随着大模型规模的发展,它的推理速度是在迅速下降的,虽然实际的落地价值很大,但整个工程落地的挑战也非常大。对于这个问题,飞桨做了大量的前沿探索,针对大模型轻量化这里提供几个思路。

首先 ERNIE 3.0 大模型采用了"一师多徒"的多学生蒸馏方案。在训练整个大模型的过程中,复用了其预训练时候的算力,同时将很多的不同尺寸的小模型蒸馏出来。



我们在预训练过程中同时蒸馏出来了从 3 层到 24 层的轻量级版本的模型。



上图介绍了 ERNIE 3.0 轻量化模型精度和推理时延的关系。我们在 PaddleNLP 中对很多开源模型都做了详细的测评对比。可以看到,ERNIE 3.0 综合实力是全面领先的。

如果我们只是单纯的把模型尺寸降低,并不能达到产业落地的要求,所以还做了一些动态裁剪的轻量化方案。



动态裁剪 是基于 DynaBERT 改进的一个方案。整体思想是,裁剪维度分为宽度裁剪和深度裁剪,裁剪时根据梯度情况保留比较重要的参数,裁剪掉不重要的参数。我们在实践过程中对 ERNIE 3.0 进行裁剪 30% 的参数后可在 CLUE 数据集上达到近乎无损的效果。如果是单任务,可以达到裁剪 50% 的参数量通用做到近乎无损。

除裁剪这种改变模型结构的策略外,我们还可以在模型推理方面做很多的工作。一个更大的提升方案是模型量化。



量化又分为两个路线,一个是离线量化 ,一个是量化感知训练。如果你只能拿到训练后模型,且获取不到训练模型的数据,推荐使用离线量化的方式,仅需少量无标签数据做一些精度的校准,通过较小的精度损失即可得到推理速度的提升。

如果你既有数据,又拥有训练流程,那推荐做量化感知训练,只需要通过有监督数据来对量化模型做一个调整。这种做法可以做到精度几乎无差,但成本会略为高于离线量化。

在 PaddleNLP 中,我们对两种模型压缩方式都做了 API 封装, 基于 PaddleSlim 模型压缩工具开发者只要调用 trainer.compress API 就会自动完成压缩自动化模型,精度无损的情况下缩小 75% 模型体积,推理速度翻倍。



概括一下,在整个 PaddleNLP 中相对便捷的模型提速方式有两种:更换轻量级模型和裁剪量化压缩。我们先选择一个大模型去跑一下看看效果如何,如果可以但很慢那可以选择更换轻量级模型,如果还不够再去选择裁剪量化压缩的方式。

当模型在策略层面做好压缩放到推理引擎上或者说端到端的推理工程上还有很多的工作要做。这里将其概括为以下两点。



首先在 Tokenizer 环节,轻量化模型其实还有很大的优化空间。如果是一个24层大模型你会发现模型推理的90%的时间都被深度学习模型计算占满了,如果我们将模型缩小到 6 层以下结构时,你就会发现传统的 Python 预处理的占比会高达 30%~50%。这个时候如果我们将 Tokenizer 做一个 C++ 实现、结合中文特点与多线程并发的极致优化,性能的提升是非常明显的。

在推理引擎方面软硬协同非常重要,对于量化模型,如果没有底层引擎与硬件的适配是很难发挥极致效果的。Paddle Inference 服务器推理引擎基于 OneDNN 和 TensorRT 做了很多极致的融合,推理的性能可以在 CPU 和 GPU 上发挥到极致。



最后,总结一下 PaddleNLP 的建设理念,首先飞桨核心框架提供了扎实的工程底座,文心大模型提供了优秀的算法与中文特色,同时与 Hugging Face 社区的生态兼容与模型体验共建是开源生态共赢的有力保障。


3. 产业实践、灵活扩展



第三个设计理念是产业实践、灵活扩展。



上面是一个语义检索系统,从中可以看出智能文本产线演进过程。一个语义检索系统会有 Query 理解,其中包括很多基础技术,可能还需要做一些离线建库,包括字符识别、中文分词等等。



从一个语义检索系统做到智能问答系统,只要加上一个答案定位便可以完成升级。如果继续扩展需求,做一个语音的智能问答,这时候需要一个 ASR 模型,找到答案后再通过语音合成模型播放声音等,这些都以模型串联的方式再逐渐演进。

因此从产业实践视角看 AI 系统建设可以分解为一下三大块。



从开源模型视角去看,NLP 单模型与真实产业系统存在巨大的鸿沟,纯开源模型难以完全满足产业需求。但开源模型有个很大的特点是可以很好的二次开发,拿到数据之后持续的迭代,使其更好的解决问题。

另外一个视角是开放平台,开放平台 NLP 能力大多只有基础能力,通常提供了很好的商用效果,但平台 API 有个短板,难以定制化迭代二次开发。

于是我们将开源模型和开放平台做一个很好的融合和联动,这样可以让开发者更好的将产业系统搭建起来。同时有了产业系统之后可以更高效的反馈数据促进模型持续升级,将开源模型进行更好的二次迭代,形成一个正向的反馈。

在这样的思考下我们设计了 PaddleNLP 智能文本流水线系统。



这个系统将数据标注、存储,服务化部署、开源与开放的能力、前端呈现等环节都串联起来,使 PaddleNLP 可以围绕产业需求持续 "转起来"。

接下来举几个实际例子展示下 PaddleNLP Pipelines 的作用。



有了 Pipeline 这层框架后,搭建一个真实 NLP 系统变得十分简单。通过预置的 Pipeline,几行代码便可以启动一个系统。通过 Docker 拉下来一个镜像,就可以快速启动一个前端可展示的页面。有了这样的效果之后,这个系统就可以快速运转起来了。

第二例子是基于 ERNIE-Layout 的文档智能系统。



这个系统相对复杂一点儿,但有了 Pipeline 后,也可以是几行代码快速完成系统搭建,并快速通过 gradio 的 Demo 实时体验模型效果。



--

03/PaddleNLP 产业案例与总结


最后分享一下 PaddleNLP 产业案例与总结。



首先是针对飞桨框架的一个案例。PaddleNLP 的模型内置了 Fleet 大规模分布式预训练的能力,包括推理、加速的能力等等。aiXcoder 是国内比较领先的做智能 IDE 辅助工具的创企,它们采用 PaddleNLP 结合 PaddleFleetX 能力,结合自己的业务数据与策略,研发了一套商业化的代码辅助产品。开发者借助飞桨框架端到端的能力,可以非常低成本的建设一个完整的系统,这是飞桨平台源与产业实践的一个特色体现。



第二个案例是 UIE 助力金仕达。金仕达是一家国内领先的金融服务提供商,他们通过飞桨的开源能力,基于 PaddleOCR 和 PaddleNLP 的 UIE 模型,快速地搭建起一个信息抽取平台来满足企业需求。



第三个案例是"寻规"工程规范搜索引擎,是一位建筑设计研究院的工程师开发的,基于 Pipeline 结合自己的数据和业务理解,快速地搭建了一个完整系统并融入到自己的业务系统中。同时得益于轻量化的 ERNIE 3.0 模型与 RocketQA 检索问答模型,快速搭建起可高效运行在 CPU 上的建筑规范语义检索系统,大幅缩短了整个工程规范验收施工周期,对企业产生了巨大的经济价值。



最后进行一下总结:

(1)NLP 开源产品模块化、生态化、产线化趋势越来越明显;

(2)开放平台与开源模型的深度联动,进一步降低 NLP 系统工程落地门槛;

(3)深度学习底座将持续降本增效,促使大模型更快发挥产业价值。

今天的分享就到这里,谢谢大家。


分享嘉宾


**


本文地址:https://www.6aiq.com/article/1677420000614
本文版权归作者和AIQ共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出