Top
首页 > 正文

百度ERNIE语义理解开源套件: 动静合一新升级,高效易用好debug

例如在“万事不决问ERNIE”中,通过一小段代码,展示了ERNIE做阅读理解任务的过程:   又例如,在“从0开始学ERNIE”中,整个训练循环被浓缩成下面几行:   除此之外,新ERNIE套件动态执行的代码可以很方便地配合Python的debuger或者第三方IDE的调...
发布时间:2020-06-02 19:47        来源:美通社        作者:

号外!号外!号外!从模型拉取到执行预测,只需7行代码,ERNIE开源套件就能用起来!话不多说直接上才艺:

  如此简洁易用,得益于本次ERNIE语义理解开源开发套件的全新升级。借助国产深度学习框架飞桨动态图优势,本次升级实现了“动态图”与“静态图”的完美结合,即“一套代码,两种运行方式”,使得开发者更加高效、方便的使用ERNIE解决工业生产中的各类NLP问题,达到简单几行代码即可实现基于ERNIE的文本分类、情感分析等经典NLP任务。

  ERNIE开源套件:https://github.com/PaddlePaddle/ERNIE

  动态图vs静态图

  当前,主流深度学习框架的编程方式主要包含“声明式编程”和“命令式编程”两种。通俗来说,前者称为“静态图”,是指用户需要事先把神经网络计算流程定义好,再通过执行器执行;而后者则称为“动态图”,是指用户可以在Python解释器中逐行输入计算指令,而框架在后台同步完成运算。两种方式各有优势,动态图“所见即所得”的特性可以快速实现最新的idea;而静态化的运算流程可以在脱离Python的生产环境中部署上线。

  为了兼顾两种优势,ERNIE开源套件进行了全新升级,推出了动静合一的ERNIE语义理解开发套件。

  动静合一的ERNIE开源套件

  新版ERNIE开源套件突显了模型易取易用性,简单几行代码就可以把ERNIE跑起来。整套核心代码简单、清晰,使得开发者,尤其是刚入门NLP的新手玩家,可以学习各类NLP任务的finetune,加载旧版本checkpoint、C++ inference API、ERNIE-server等每一个重要功能的细节。同时,新版ERNIE开源套件还为广大初学者提供了丰富的AI Studio教程,用户无需自己提供GPU,即可运行ERNIE来完成各类NLP任务,做到了“人人有AI学”。 除此以外,新版ERNIE的环境配置也很简单,大部分的依赖都可以通过pip安装。

  1. pip install paddle-ernie

  新版ERNIE套件最大程度地保证了逻辑的简洁,整体模型结构核心代码量较原来减少了41%,并采用了大家熟悉的面向对象设计。几乎所有的网络运算逻辑集中在ernie/modeling_ernie.py文件中,在这里你可以看到ERNIE所支持的全部NLP任务的源代码。各个对象及其对应的NLP任务可见下表:

  一行一行学NLP

  对于初学NLP的玩家而言,最好的学习方式莫过于亲自上手调试,把模型拆开后,一步一步调试检查其中的结果以及神经网络流程的走向。为此,新ERNIE套件内置了丰富的教程(https://github.com/PaddlePaddle/ERNIE#%E6%95%99%E7%A8%8B):你无需提供运算资源,在网页端即可运行教程代码。目前官方提供的示例教程包括:

  从0开始学ERNIE

  情感识别

  完形填空

  知识蒸馏

  万事不决问ERNIE

  这些教程既含有ERNIE原理解释,也涵盖了ERNIE的训练和预测过程。例如在“万事不决问ERNIE”中,通过一小段代码,展示了ERNIE做阅读理解任务的过程:

  又例如,在“从0开始学ERNIE”中,整个训练循环被浓缩成下面几行:

  除此之外,新ERNIE套件动态执行的代码可以很方便地配合Python的debuger或者第三方IDE的调试模式(如PyCharm),进行逐行debug。例如,你可以在教程中任意地方插入ipdb的debug语句:

  Python解释器运行到插入的语句时会自动暂停,你可以在debugger的交互环境中输入相应的指令来观察程序的状态,如:

  1. p featuer.numpy()

  则debugger 返回feature tensor中的所有内容:

  简单易用的分布式Finetune功能

  为了提升ERNIE的Finetune速度,最新ERNIE套件全新支持了分布式Finetune功能。依托飞桨动态分布式API优势,开发者仅需一个封装:model = FD.parallel.DataParallel(model, ctx) ,模型便具备了分布式训练的能力。当你在Python程序中显式调用apply_collective_grads 时,系统会进行一次全局通信来平均所有运算进程中产生的loss 梯度。你需要做的是,在运行环境中使用启动器:paddle.distributed.launch 来在参与训练的每一张GPU卡上启动训练进程。由启动器拉起来的进程会自动发现对方并开始多机通信。

  动态编程,静态部署

  为了保证动态图模型部署的性能,兼容针对静态图做的部署代码性能优化。开发者可选择通过TracedLayer.trace API将动态模型序列化成为静态模型使用:

  在调用TracedLayer.trace API时,开发者可动态传入两个虚拟构造出来的tensor;分别代表即将输入的 token id 和 sentence type id ,paddle后台会自动追踪ERNIE的forward 过程并把中间运行的op序列化下来,成为静态图模型。随后便可调用静态图 save_inference_model API将模型保存下来。如此保存下来的模型与旧版本模型并无二致。

  得益于本次动静合一的全新升级,开发者可以更方便地获取ERNIE强大的语义理解能力,赋能各行各业智能化转型,助燃智能经济腾飞。

  百度在自然语言处理领域已有二十年的积累与沉淀,具备最前沿、最全面、最领先的技术布局,不仅专注于前瞻技术探索,更致力通过技术应用解决实际问题。飞桨是中国首个开源开放、功能完备的产业级深度学习平台,集深度学习核心框架、基础模型库、端到端开发套件、工具组件和服务平台于一体。目前,飞桨累计开发者数量194万,服务企业数量8.4万家,基于飞桨平台产生了23.3万模型。飞桨助力开发者快速实现AI想法、快速上线AI业务,帮助越来越多的行业完成AI 赋能,实现产业智能化升级。

每日必读

专题访谈

合作站点