简介:EasyNLP背后的技术框架如何设计?未来有哪些规划?今天一起来深入了解。

作者 | 临在、岑鸣、熊兮

来源 | 阿里开发者公众号

一 导读

随着BERT、Megatron、GPT-3等预训练模型在NLP领域取得瞩目的成果,越来越多团队投身到超大规模训练中,这使得训练模型的规模从亿级别发展到了千亿甚至万亿的规模。然而,这类超大规模的模型运用于实际场景中仍然有一些挑战。首先,模型参数量过大使得训练和推理速度过慢且部署成本极高;其次在很多实际场景中数据量不足的问题仍然制约着大模型在小样本场景中的应用,提高预训练模型在小样本场景的泛化性依然存在挑战。为了应对以上问题,PAI团队推出了EasyNLP中文NLP算法框架,助力大模型快速且高效的落地。

EasyNLP背后的技术框架如何设计?未来有哪些规划?今天一起来深入了解。

二 EasyNLP简介

EasyNLP是PAI算法团队基于PyTorch开发的易用且丰富的中文NLP算法框架,支持常用的中文预训练模型和大模型落地技术,并且提供了从训练到部署的一站式NLP开发体验。EasyNLP提供了简洁的接口供用户开发NLP模型,包括NLP应用AppZoo和预训练ModelZoo,同时提供技术帮助用户高效的落地超大预训练模型到业务。除此之外EasyNLP框架借助PAI团队在通信优化、资源调度方面的深厚积累,可以为用户提供大规模、鲁棒的训练能力,同时可以无缝对接PAI系列产品,例如PAI-DLC、PAI-DSW、PAI-Designer和PAI-EAS,给用户带来高效的从训练到落地的完整体验。

EasyNLP已经在阿里巴巴内部支持10多个BU的业务,同时在阿里云上提供了NLP解决方案和ModelHub模型帮助用户解决业务问题,也提供用户自定义模型服务方便用户打造自研模型。在经过内部业务打磨之后,我们将EasyNLP推向开源社区,希望能够服务更多的NLP算法开发者和研究者,也希望和社区一起推动NLP技术特别是中文NLP的快速发展和业务落地。

EasyNLP is a Comprehensive and Easy-to-use NLP Toolkit[1]

EasyNLP主要特性如下:

  • 易用且兼容开源:EasyNLP支持常用的中文NLP数据和模型,方便用户评测中文NLP技术。除了提供易用简洁的PAI命令形式对前沿NLP算法进行调用以外,EasyNLP还抽象了一定的自定义模块如AppZoo和ModelZoo,降低NLP应用的门槛,同时ModelZoo里面常见的预训练模型和PAI自研的模型,包括知识预训练模型等。EasyNLP可以无缝接入huggingface/ transformers的模型,也兼容EasyTransfer模型,并且可以借助框架自带的分布式训练框架(基于Torch-Accelerator)提升训练效率。
  • 大模型小样本落地技术:EasyNLP框架集成了多种经典的小样本学习算法,例如PET、P-Tuning等,实现基于大模型的小样本数据调优,从而解决大模型与小训练集不相匹配的问题。此外,PAI团队结合经典小样本学习算法和对比学习的思路,提出了一种不增添任何新的参数与任何人工设置模版与标签词的方案Contrastive Prompt Tuning,在FewCLUE小样本学习榜单取得第一名,相比Finetune有超过10%的提升。
  • 大模型知识蒸馏技术:鉴于大模型参数大难以落地的问题,EasyNLP提供知识蒸馏功能帮助蒸馏大模型从而得到高效的小模型来满足线上部署服务的需求。同时EasyNLP提供MetaKD算法,支持元知识蒸馏,提升学生模型的效果,在很多领域上甚至可以跟教师模型的效果持平。同时,EasyNLP支持数据增强,通过预训练模型来增强目标领域的数据,可以有效的提升知识蒸馏的效果。

三 EasyNLP框架特点

1 整体架构

如图所示,EasyNLP架构主要有如下几个核心模块:

  • 基础模块:提供了预训练模型库ModelZoo,支持常用的中文预训练模型,包括BERT,MacBERT,WOBERT等;也提供常用的NN模块,方便用户自定义模型;
  • 应用层:AppZoo支持常见的NLP应用比方说文本分类,文本匹配等;EasyNLP支持预训练模型落地工具,包括小样本学习和知识蒸馏,助力大模型快速落地,这里也集成了多个PAI团队自研的算法;
  • NLP应用和解决方案:提供了多个NLP解决方案和ModelHub模型帮助用户解决业务问题;
  • 工具层:可以支持本地拉起服务,也可以在阿里云产品上部署和调用,比方说PAI-DLC、PAI-DSW、PAI-Designer和PAI-EAS,给用户带来高效的从训练到落地的完整体验。

2 大模型知识蒸馏技术

随着BERT等预训练语言模型在各项任务上都取得SOTA效果,大规模预训练模型已经成为 NLP学习管道中的重要组成部分,但是这类模型的参数量太大,而且训练和推理速度慢,严重影响到了需要较高QPS的线上场景,部署成本非常高。EasyNLP框架集成了经典的数据增强和知识蒸馏算法,使得训练出的小模型在相应任务行为上能够逼近大模型的效果。

由于现有大部分的知识蒸馏工作都聚焦在同领域模型的蒸馏,而忽略了跨领域模型对目标蒸馏任务效果的提升。PAI团队进一步提出了元知识蒸馏算法MetaKD(Meta Knowledge Distillation),将跨领域的可迁移知识学出,在蒸馏阶段额外对可迁移的知识进行蒸馏。MetaKD算法使得学习到的学生模型在相应的领域的效果显著提升,逼近教师模型的效果。这一算法的核心框架图如下所示:

其中,MetaKD算法包括两个阶段。第一个阶段为元教师模型学习(Meta-teacher Learning)阶段,算法从多个领域的训练数据协同学习元教师模型,它对每个领域的样本都计算其典型得分(Prototype Score),使更具有跨领域典型性的样本在学习阶段有更大的权重。第二个阶段为元蒸馏(Meta-distillation)阶段,将元教师模型选择性地蒸馏到特定领域的学习任务上。由于元教师模型可能无法做到在所有领域上都有精确的预测效果,我们额外引入了领域专业性权重(Domain-expertise Weight),使元教师模型只将置信度最高的知识迁移到学生模型,避免学生模型对元教师模型的过拟合。

下图展示了MetaKD算法在MNLI的5个领域数据集的跨任务蒸馏效果。由结果可见,MetaKD蒸馏出的BERT-Small模型的和原始BERT模型相比,在保持模型精度值平均只下降1.5%的前提下参数减少了87%,大大减少了部署的压力。

目前,MetaKD算法也已经集成到EasyNLP框架中开源。

知识蒸馏实践详见[2]。

3 大模型小样本学习技术

预训练语言模型规模的扩大,使得这一类模型在自然语言理解等相关任务效果不断提升。然而,这些模型的参数空间比较大,如果在下游任务上直接对这些模型进行微调,为了达到较好的模型泛化性,需要较多的训练数据。在实际业务场景中,特别是垂直领域、特定行业中,训练样本数量不足的问题广泛存在,极大地影响这些模型在下游任务的准确度。为了解决这一问题,EasyNLP框架集成了多种经典的小样本学习算法,例如PET、P-Tuning等,实现基于预训练语言模型的小样本数据调优,从而解决大模型与小训练集不相匹配的问题。

此外,PAI团队结合经典小样本学习算法和对比学习的思路,提出了一种不增添任何新的参数与任何人工设置模版与标签词的方案Contrastive Prompt Tuning (CP-Tuning)。这一算法的核心框架图如下所示:

如上图,CP-Tuning算法放弃了经典算法中以“[MASK]”字符对应预训练模型MLM Head的预测输出作为分类依据,而是参考对比学习的思路,将句子通过预训练模型后,以“[MASK]”字符通过预训练模型后的连续化表征作为features。在小样本任务的训练阶段,训练目标为最小化同类样本features的组内距离,最大化非同类样本的组间距离。在上图中,[OMSK]即为我们所用于分类的“[MASK]”字符,其优化的features表示为[EMB]。因此,CP-Tuning算法不需要定义分类的标签词。在输入侧,除了输入文本和[OMSK],我们还加入了模版的字符[PRO]。与经典算法不同,由于CP-Tuning不需要学习模版和标签词之间的对应,我们直接将[PRO]初始化为任务无关的模版,例如“it is”。在模型训练过程中,[PRO]的表示可以在反向传播过程中自动更新。除此之外,CP-Tuning还引入了输入文本的Mask,表示为[TMSK],用于同时优化辅助的MLM任务,提升模型在小样本学习场景下的泛化性。CP-Tuning算法的损失函数由两部分组成:

如上所示,两个部分分别为Pair-wise Cost-sensitive Contrastive Loss(PCCL)和辅助的MLM损失。我们在多个GLUE小样本数据集上进行了验证,其中训练集中每个类别限制只有16个标注样本。从下述结果可以看出,CP-Tuning的精确度超越了经典的小样本学习算法,也比标准Fine-tuning算法的精确度高10%以上。

目前,除了我们自研的CP-Tuning算法之外,EasyNLP框架中集成了多种经典小样本学习算法例如PET、P-tuning等。

小样本学习实践详见[3]。

4 大模型落地实践

下面我们给出一个示例,将一个大的预训练模型(hfl/macbert-large-zh)在小样本场景上落地,并且蒸馏到仅有1/100参数的小模型上。如下图所示,一个大模型(3亿参数)在一个小样本场景上原始的Accuracy为83.8%,通过小样本学习可以提升7%,达到90.6%。同时,如果用一个小模型(3百万参数)跑这个场景的话,效果仅有54.4%,可以把效果提升到71%(提升约17%),inference的时间相比大模型提升了10倍,模型参数仅为原来的1/100。

代码详见[4]。

四 应用案例

EasyNLP支撑了阿里巴巴集团内10个BU20多个业务,同时过PAI的产品例如PAI-DLC、PAI-DSW、PAI Designer和PAI-EAS,给集团用户带来高效的从训练到落地的完整体验,同时也支持了云上客户自定定制化模型和解决业务问题的需求。针对公有云用户,对于入门级用户PAI-Designer组件来通过简单调参就可以完成NLP模型训练,对于高级开发者,可以使用AppZoo训练NLP模型,或者使用预置的预训练模型ModelZoo进行finetune,对于资深开发者,提供丰富的API接口,支持用户使用框架进行定制化算法开发,可以使用我们自带的Trainer来提升训练效率,也可以自定义新的Trainer。

下面列举几个典型的案例:

  • PAI团队和达摩院NLP团队[5]合作共建落地超大预训练模型(百亿参数),推出自研小样本学习算法CP-Tuning和模型稀疏化算法CAP。其中,这一自研CP-Tuning算法与AliceMind平台集成, 实现了超大预训练模型的小样本学习,在在小样本场景下,比标准Fine-tune精准度提升10%以上;
  • PAI团队和达摩院合作在FewCLUE小样本学习榜单上获得冠军,甚至一个小样本学习任务上的精准度超过了人类。同时,阿里巴巴某BU使用ToB客户服务场景下的业务数据在EasyNLP框架下进行小样本学习算法学习,在业务数据上相比Baseline,提升实体识别的准确度2%以上,提升属性识别的准确度5%以上;
  • 针对公有云客户对文本分类功能的小模型、高QPS需求,基于EasyNLP框架的知识蒸馏功能,采用某预训练模型作为教师模型(参数量3亿)、PAI-BERT中文小预训练模型作为学生模型(参数量4百万),蒸馏得到这一小模型上线,参数量约为原有模型的百分之一,精度损失在10%以内;基于此,我们集成了知识蒸馏功能,助力大模型在实际业务场景下落地;
  • 在风控场景,我们收集了约一亿的中文预训练数据,基于EasyNLP预训练了一个PAI-BERT中文模型,在风控数据上取得了非常不错的效果,提升了10%以上的准确率和召回率;基于此,我们在公有云上也推出了文本风控解决方案[6],在多个客户场景里落地并取得不错的效果;
  • 随着UGC等用户生成内容不断涌现,对从文本提取标签用于细粒度分析的需求不断涌现;采用基于EasyNLP预训练中文模型,在新闻数据的超过300个类别的文本标签预测准确率超过80%;基于此,我们集成了文本标签预测,关键词抽取,和实体词提取等功能,在公有云上推出了通用文本打标解决方案[7],并且在多个典型客户场景里成功落地,服务于智能推荐等应用场景。

五 RoadMap

  • 基于EasyNLP的中文CLUE/FewCLUE等的Benchmark
  • 知识预训练技术: 发布一系列知识预训练模型,致力于提升预训练模型的常识性和知识性
  • 中文预训练模型:发布针对中文的SOTA的预训练模型,降低中文预训练技术门槛
  • 多模态预训练:发布针对中文的多模态预训练模型
  • 中文数据的收集和API接口:收集常用的中文数据,提供预处理和训练接口
  • 垂直场景的SOTA中文模型整合:针对垂直业务场景,整合效果最好的中文模型
  • 发布解决方案和PAI组件

项目开源地址:https://github.com/alibaba/EasyNLP

参考文献

[1]https://github.com/alibaba/EasyNLP

[2]https://github.com/alibaba/EasyNLP/tree/master/examples/knowledge_distillation

[3]https://github.com/alibaba/EasyNLP/tree/master/examples/fewshot_learning

[4]https://github.com/alibaba/EasyNLP/tree/master/examples/landing_large_ptms

[5]达摩院NLP团队:https://github.com/alibaba/AliceMind

[6]文本风控解决方案:文本内容风控解决方案 - 机器学习PAI - 阿里云

[7]通用文本打标解决方案:通用文本打标解决方案 - 机器学习PAI - 阿里云

原文链接

本文为阿里云原创内容,未经允许不得转载。

EasyNLP开源|中文NLP+大模型落地,EasyNLP is all you need的更多相关文章

  1. 百度开源其NLP主题模型工具包,文本分类等场景可直接使用L——LDA进行主题选择本质就是降维,然后用于推荐或者分类

    2017年7月4日,百度开源了一款主题模型项目,名曰:Familia. InfoQ记者第一时间联系到百度Familia项目负责人姜迪并对他进行采访,在本文中,他将为我们解析Familia项目的技术细节 ...

  2. 华为高级研究员谢凌曦:下一代AI将走向何方?盘古大模型探路之旅

    摘要:为了更深入理解千亿参数的盘古大模型,华为云社区采访到了华为云EI盘古团队高级研究员谢凌曦.谢博士以非常通俗的方式为我们娓娓道来了盘古大模型研发的"前世今生",以及它背后的艰难 ...

  3. 11大Java开源中文分词器的使用方法和分词效果对比,当前几个主要的Lucene中文分词器的比较

    本文的目标有两个: 1.学会使用11大Java开源中文分词器 2.对比分析11大Java开源中文分词器的分词效果 本文给出了11大Java开源中文分词的使用方法以及分词结果对比代码,至于效果哪个好,那 ...

  4. 11大Java开源中文分词器的使用方法和分词效果对比

    本文的目标有两个: 1.学会使用11大Java开源中文分词器 2.对比分析11大Java开源中文分词器的分词效果 本文给出了11大Java开源中文分词的使用方法以及分词结果对比代码,至于效果哪个好,那 ...

  5. 千亿参数开源大模型 BLOOM 背后的技术

    假设你现在有了数据,也搞到了预算,一切就绪,准备开始训练一个大模型,一显身手了,"一朝看尽长安花"似乎近在眼前 -- 且慢!训练可不仅仅像这两个字的发音那么简单,看看 BLOOM ...

  6. 最强中文NLP预训练模型艾尼ERNIE官方揭秘【附视频】

    “最近刚好在用ERNIE写毕业论文” “感觉还挺厉害的” “为什么叫ERNIE啊,这名字有什么深意吗?” “我想让艾尼帮我写作业” 看了上面火热的讨论,你一定很好奇“艾尼”.“ERNIE”到底是个啥? ...

  7. 开源中文分词工具探析(五):Stanford CoreNLP

    CoreNLP是由斯坦福大学开源的一套Java NLP工具,提供诸如:词性标注(part-of-speech (POS) tagger).命名实体识别(named entity recognizer ...

  8. 开源中文分词工具探析(六):Stanford CoreNLP

    CoreNLP是由斯坦福大学开源的一套Java NLP工具,提供诸如:词性标注(part-of-speech (POS) tagger).命名实体识别(named entity recognizer ...

  9. Hanlp等七种优秀的开源中文分词库推荐

    Hanlp等七种优秀的开源中文分词库推荐 中文分词是中文文本处理的基础步骤,也是中文人机自然语言交互的基础模块.由于中文句子中没有词的界限,因此在进行中文自然语言处理时,通常需要先进行分词. 纵观整个 ...

  10. 推荐十款java开源中文分词组件

    1:Elasticsearch的开源中文分词器 IK Analysis(Star:2471) IK中文分词器在Elasticsearch上的使用.原生IK中文分词是从文件系统中读取词典,es-ik本身 ...

随机推荐

  1. pip 安装requirements.txt 的问题

    用新环境 在进行pip 安装的时候, 如果出现不进行安装 ,但是不报错就是满足条件,这个时候重新起一个shell,然后进行pip的安装.

  2. Android组件化开发实践和案例分享

    目录介绍 1.为什么要组件化 1.1 为什么要组件化 1.2 现阶段遇到的问题 2.组件化的概念 2.1 什么是组件化 2.2 区分模块化与组件化 2.3 组件化优势好处 2.4 区分组件化和插件化 ...

  3. 如何理解UDP 和 TCP? 区别? 应用场景?

    一.UDP UDP(User Datagram Protocol),用户数据包协议,是一个简单的面向数据报的通信协议,即对应用层交下来的报文,不合并,不拆分,只是在其上面加上首部后就交给了下面的网络层 ...

  4. 探寻UUID的起源与奥秘:从时间戳到唯一标识

    1. UUID起源与原理 UUID(Universally Unique Identifier)是一种唯一标识符,最初由Apollo计算机公司的软件工程师Roedy Green在1987年提出.其原理 ...

  5. KingbaseES sys_bulkload数据加载工具错误处理

    一.关于sys_bulkload数据加载工具 sys_bulkload是KingbaseES提供的快速加载数据的命令行工具.用户使用sys_bulkload工具能够把一定格式的文本数据简单.快速的加载 ...

  6. #费马小定理#JZOJ 4015 数列

    题目 给出\(x_n=(ax_{n-1}^2+bx_{n-1}+c)\bmod m\) 给出\(x_0.a,b,c,n,m\),求\(x_n\) \(\text{Subtask 1:}n\leq 10 ...

  7. #莫比乌斯反演,整除分块#洛谷 6222 「P6156 简单题」加强版

    题目 多组询问,给出\(n,k\) 求 \[\sum_{i=1}^n\sum_{j=1}^n(i+j)^kgcd(i,j)\mu^2(gcd(i,j)) \] 对\(\text{unsigned}\) ...

  8. #树状数组,dp#洛谷 3506 [POI2010]MOT-Monotonicity 2

    题目 给出\(N\)个正整数\(a[1..N]\),再给出\(K\)个关系符号(>.<或=)\(s[1..k]\). 选出一个长度为\(L\)的子序列(不要求连续),要求这个子序列的第\( ...

  9. #线段树,倒序#CF356A Knight Tournament

    题目 分析 要求覆盖必须是第一个覆盖的, 考虑最后一个覆盖的很简单做线段树区间赋值, 那么倒序区间赋值就可以了 代码 #include <cstdio> #include <ccty ...

  10. #floyd,斜率#洛谷 1354 房间最短路问题

    题目 在一个长宽均为10,入口出口分别为(0,5),(10,5)的房间里有几堵墙, 每堵墙上有两个缺口,求入口到出口的最短路径. 分析 暴力建图,判断两个点是否有墙堵住, 可以求斜率然后判断所交点不能 ...