号外!号外!号外!从模型拉取到执行预测,只需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 赋能,实现产业智能化升级。