【天天播资讯】HugNLP开源!统一的NLP框架,支持训练ChatGPT类模型

来源:商业新知网   2023-05-08 10:31:28

【导读】 华师大HugAILab团队研发了全面统一的NLP训练框架—— HugNLP ,支持包括文本分类、匹配、问答、信息抽取、文本生成等多种NLP任务模型搭建和训练,且已集成大量最新的Prompt技术;基于HugNLP框架,团队还研发了可支持ChatGPT类模型训练和部署产品HugChat,以及统一信息抽取产品HugIE。

HugNLP——全面统一的NLP框架开源了!

开源地址 :https://github.com/HugAILab/HugNLP


(相关资料图)

论文 :https://arxiv.org/abs/2302.14286

NLP研究者们的福音到啦!经过半年的努力, 华师大 HugAILab 团队 基于Huggingface开发了面向NLP研究和应用的开源框架—— HugNLP ,框架内已经集成实现了多种类别NLP任务、数据和模型的训练和部署,下图是HugNLP的框架总览:

HugNLP是基于Huggingface开发的NLP框架,其底层的实现完全基于Transformers,从而具备 易部署 和 易扩展 特性。另外,HugNLP集成了 MLFlow 的追踪服务,方便使用者实时追踪任务训练的进程。

一、HugNLP框架介绍

HugNLP是一个分层式框架,遵循“高内聚低耦合”的开发模式,其核心包括模型层(Models)、处理器层(Processors)、评估器层(Evaluators)和应用层(Applications)四部分。

在Models层,已经实现了多种类型的NLP任务模型,下面是目前已经支持的NLP模型任务列表:

预训练 :Masked LM、Causal LM、知识增强预训练;

Instruction-Tuning :支持自回归生成式、区间抽取式、NLI等统一范式训练;

文本分类/匹配 :传统Fine-tuning、Prompt-tuning、In-Context Learning;

序列标注: 支持NER等序列标注任务;

元学习 :基于序列的元学习(SentenceProto)、基于区间的元学习(SpanProto)、基于token的元学习(TokenProto,NNShot);

问答 :支持抽取式问答、多项选择式问答、开放生成式问答;

文本生成 :支持文本摘要、机器翻译(正在开发中);

代码智能 :目前集成了代码克隆检测(Clone)、代码缺陷检测(Defact)等Code任务;

在Processors层,HugNLP框架为一些常用的数据集提供了处理器,使用者只需要指定Processor的名称即可直接获取并处理相应的数据。Evaluators层旨在对不同类型NLP模型任务的进行评估,主要包括常用的ACC、Precision、F1值等,对于生成式任务,也包含BLEU等。

Applications层开发了大量的NLP现有的产品或解决方案,其主要建立在Models、Processors和Evaluators层之上。例如,如果使用者指定一个模型(例如BertForSequenceClassification)、处理器(CLUE Processors)和评估器(Sequence Classification Evaluator),那么即可对应一个“基于BERT的CLUE分类”的应用。HugNLP框架目前实现了多种Applications,包括:

Benchmark刷榜工具 :面向中文CLUE、英文GLUE榜单;

HugIE信息抽取 :基于抽取式Instruction-tuning的统一信息抽取框架,同时支持实体识别和关系抽取;

HugChat对话大模型 :支持多种ChatGPT类模型的训练,V100即可训练130亿大模型;

Code :包括代码克隆检测和缺陷检测等;

HugNLP还集成了一些可插拔式的配件,包括如下:

Parameter Freezing :选择性冻结模型部分参数,用于参数有效性训练;

Uncertainty Estimation :评估模型的不确定性,用于半监督;

Calibration :对预测结果进行校准;

对抗训练 :用于提高模型鲁棒性;

二、HugNLP核心能力

HugNLP和市面上的一些NLP框架很像,都可以快速搭建和部署NLP任务模型,那么除了这些能力外, HugNLP到底具备哪些核心竞争力呢? 下面简单介绍HugNLP的一些核心能力。

2.1 知识增强预训练

传统的一些预训练模型(例如BERT、GPT2等)是在通用语料上训练的,而对领域事实知识可能不敏感,因此需要显式的在预训练阶段注入事实知识。在HugNLP中,主要实现了两个知识增强预训练,包括DKPLM和KP-PLM。DKPLM是一种可分解的知识注入方法;KP-PLM则是将结构化知识转化为自然语言描述的形式进行注入。

执行下面命令即可进行Masked Language Modeling和Causal Language Modeling的预训练:

bash applications/pretraining/run_pretrain_mlm.sh

bash applications/pretraining/run_pretrain_casual_lm.sh

2.2 Prompt-Tuning & Instruction-Tuning

传统的Fine-tuning在低资源场景下容易出现过拟合问题,因此复用预训练的目标可以拉近Pre-training和Fine-tuning之间的语义差异。HugNLP集成了PET、P-tuning、Prefix-tuning等Prompt-Tuning算法,并无缝嵌入在NLP分类任务的模型里。使用者只需要指定

use_prompt_for_cls

参数即可使用Prompt-Tuning。

在大模型时代,如何将不同类型的NLP任务进行范式统一,是构造通用人工智能的核心要素。HugNLP为此定义了三种统一范式的思想:

万物皆可生成 :将所有NLP任务建模为单向自回归生成,例如GPT-3、ChatGPT等;

万物皆可抽取 :将所有NLP任务建模为抽取式机器阅读理解;

万物皆可推断 :将所有NLP任务建模为自然语言推断;

基于三种不同的范式统一,HugNLP推出两个核心产品,分别是:

HugIE :基于抽取式Instruction的统一信息抽取框架;

HugChat :基于生成式Instruction的中小型ChatGPT类模型;

2.3 In-Context Learning

In-Context Learning(ICL) 首次由GPT-3提出,其旨在挑选少量的标注样本作为提示(Prompt),从而在形式上促使大模型生成目标答案。总的来说,ICL具备如下性质:

只需要少量标注样本作为提示;

无需训练模型,直接通过模型生成获得结果;

In-Context Learning可以完成分类和生成两种任务。HugNLP为此实现基于Decoder-only类模型的In-Context Learning的Application并分别用于分类和生成任务上。使用时,只需要指定下面参数即可:

--user_defined="data_name=xxx num_incontext_example=4 l=1 use_calibrate=True"

--use_prompt_for_cls

2.4 Self-training

半监督旨在同时结合标注数据和无标签数据来训练NLP任务。Self-training是一种简单但有效的迭代式训练方法,其通过Teacher模型先获取伪标签,对伪标签进行去噪后,再训练Student模型。HugNLP集成了面向不确定性评估的半监督训练方法,提高了自训练中的噪声处理有效性。理论上,所有的NLP任务都可以通过HugNLP框架实现半监督训练。

HugNLP使用半监督模式,只需要做两件事:

(1)执行脚本时添加参数:

--use_semi

(2)在指定的数据集目录下,存放unlabeled data文件。

2.5 Code代码智能

代码智能是一种特殊的NLP任务领域,旨在训练一个模型能够更好地理解和表征代码语言,现有的一些代表模型有CodeBERT、PLBART等。

"code_cls": {

"roberta": RobertaForCodeClassification,"codebert": CodeBERTForCodeClassification,"graphcodebert": GraphCodeBERTForCodeClassification,"codet5": CodeT5ForCodeClassification,"plbart": PLBARTForCodeClassification,},

HugNLP框架也集成了code方面的一些任务,下面列出已经实现的任务和使用方式:(1)代码克隆检测(code clone detection)添加参数:

--task_name=code_clone

--task_type=code_cls

(2)代码修复(code defect)添加参数:

--task_name=code_defect

--task_type=code_cls

三、HugNLP核心产品——HugChat

最近ChatGPT火爆全球,为了让研究者可以训练自己的ChatGPT,HugNLP框架集成了基于生成式Instruction的训练产品——HugChat,其支持 各种类型的单向生成式模型的训练 ,例如GPT-2、GPT-Neo、OPT、GLM等。为了支持较大规模模型(例如OPT-13B)使得其在8张V100 32G的条件下可训练,HugNLP集成了大量的训练优化技术,包括:

混合精度训练FP16;

DeepSpeed+ZeRO技术;

参数有效性训练,例如LoRA、PEFT等;

INT8模型量化;

数据方面,HugAILab团队开源了约200万条英文、300万条中文对话数据,用于训练模型。例如训练GPT-2(XL),可直接执行脚本:

bash ./application/instruction_prompting/HugChat/supervised_finetuning/run_causal_instruction_gpt2_xl.sh

基于HugNLP,训练的GPT-2(1.3B)模型,即可实现很简单的对话任务。只需要执行如下命令即可:

python3 applications/instruction_prompting/HugChat/hugchat.py

例如可以写套磁信邮件: 再例如搜索谷歌地球的相关信息: 也可以实现编写简单的代码(1.3B的模型具备此能力已经很惊叹了!): HugNLP目前正在开发其他类型的Decoder-only大模型,相关信息和开源内容如下表所示: HugChat后期将推出垂直领域的大模型解决方案,同时将与OpenAI API进行融合,推出大模型服务框架。

四、HugNLP核心产品——HugIE

信息抽取(Information Extraction) 旨在从非结构化的文本中抽取出结构化信息,是构建知识库的重要步骤之一。通常信息抽取包括两个核心步骤,分别是 命名实体识别(Named Entity Recognition) 和 关系抽取(Relation Extraction) 。

我们基于HugNLP研发一款HugIE产品,旨在实现统一信息处理。其主要核心包括如下几个部分:

将实体识别和关系抽取,统一为新的范式——基于抽取式阅读理解的方法。HugIE采用Global Pointer模型实现信息抽取;

定义Instruction Prompt,指导模型生成需要抽取的内容;

采用多任务训练的方法训练;

HugIE目前已经开源了模型:https://huggingface.co/wjn1996/wjn1996-hugnlp-hugie-large-zh可以基于HugNLP框架使用HugIE抽取模型,如下图所示:

>>> from applications.information_extraction. HugIE.api_test import HugIEAPI

>>> model_type = "bert">>> hugie_model_name_or_path = "wjn1996/wjn1996-hugnlp-hugie-large-zh">>> hugie = HugIEAPI(model_type, hugie_model_name_or_path)>>> text = "北京在2008年和2022年分别举办了夏季奥运会和冬季奥运会">>> # Beijing has posted the Summer and Winter Olympics in 2008 and 2022, respectively.>>> entity = "2008年奥运会" # 2008 Olympics Games>>> relation = "举办地" # host place>>> predictions, = hugie.request(text, entity, relation)>>> print(predictions){0: ["北京"]}>>> # {0: ["Beijing"]}

五、Benchmark一键刷榜

HugNLP最先开发了面向一些常用榜单的刷榜工具,例如GLUE、CLUE等。用户只需要配置相应的数据集名称,即可实现一键刷榜。为了验证框架的有效性,在22年9月提交了CLUE榜单的刷榜结果,选择一系列中文小模型(RoBERTa、MacBERT、P-BERT等)并结合了logits集成方法,至今依然维持在第15名位置,曾一度超越了部分企业。 例如如果训练CLUE榜单的AFQMC数据集,可编辑文件

applications/benchmark/clue/clue_finetune_dev.sh

修改参数:

--user_defined="data_name=afqmc"

执行下列命令即可:

bash applications/benchmark/clue/clue_finetune_dev.sh

HugNLP框架集成了若干种对抗训练的方法,其中最简单的对抗方法为FGM算法:

在训练时,只需要添加一行参数,即可默认调用FGM算法:

--do_adv

同样的方法还可以训练一些常用的NLP任务,例如阅读理解、实体识别、以及GLUE英文数据集等。

HugNLP还集成了一系列模型用于刷榜,例如BERT、RoBERTa、DeBERTa、MacBERT、Erlangshen等。

六、HugNLP的使用指南

下面简单介绍如何使用HugNLP框架

1、下载HugNLP仓库代码至本地或服务器:

git clone https://github.com/HugAILab/HugNLP.gitcd HugNLP

2、安装HugNLP:

python3 setup.py install

3、基于BERT训练一个GLUE榜单数据集RTE,可直接执行:

bash ./applications/benchmark/glue/run_glue.sh

4、基于GPT-2的In-Context Learning队RTE进行分类,可执行:

bash ./applications/benchmark/glue/run_causal_incontext_glue.sh

5、训练自己的ChatGPT模型,仅需要8张V100,即可以训练基于OPT-13B的对话大模型:

bash ./applications/instruction_prompting/HugChat/supervised_finetuning/run_causal_instruction_opt_lora.sh

目前HugNLP已支持的应用如下表所示: 还有更多丰富的应用正在开发中。HugNLP也欢迎有志之士加入HugAILab参与开源开发工作 ? 。

相关新闻

猜你喜欢

【天天播资讯】HugNLP开源!统一的NLP框架,支持训练ChatGPT类模型

2023-05-08

热点聚焦:电网侧储能并网服务流程

2023-05-08

A股:新股世纪恒通发行申购,发行价适中,股民中签会破发吗?

2023-05-08

唐朝历史发展顺序(上)

2023-05-08

通许一高:举行教职工趣味运动会 世界播报

2023-05-08

环球今日讯!加快建立房地产业发展新模式

2023-05-08

党建信息网登录入口_12371党建信息平台 世界头条

2023-05-08

四川新闻联播丨“中国美好生活城市”揭晓 我省四地上榜 今日聚焦

2023-05-08

怎么设置取消QQ群加群验证消息 qq加群怎么关闭短信验证

2023-05-08

企业出实招化解毕业生安居之忧自如“海燕计划”累计减免租房押金近12亿_环球报道

2023-05-08

孩子上一年级后才知道,幼小衔接在“数学启蒙”上踩坑,有多焦虑|全球报道

2023-05-07

21寸显示器最佳分辨率_19寸显示器最佳分辨率是多少 世界通讯

2023-05-07

【快播报】如何美白祛斑的小妙招_如何美白

2023-05-07

关于司机醉驾撞进餐厅顾客抱紧女友及司机醉驾撞进餐厅顾客抱紧女友详情 天天快资讯

2023-05-07

春苗网注册的步骤_春苗网注册

2023-05-07

天天快报!Failed to connect to zw.gozuowen.com port 80: Timed out

2023-05-07

当前快看:小新开刀动手术_小新开超市

2023-05-07

蔚蓝生物: 青岛蔚蓝生物股份有限公司关于2022年年度股东大会增加临时提案的公告

2023-05-07

机制科技双创助推肉羊商业化育种:本土种羊拍出28万 奥群牧业春拍创新高

2023-05-07

中小企业生产经营持续恢复

2023-05-07

当前速看:青岛最深!地铁9号线正阳中路站首幅地连墙吊装完成

2023-05-07

上穷碧落下黄泉碧落指什么_上穷碧落下黄泉中的碧落是什么意思-全球焦点

2023-05-07

创全进行时丨他们是文明城市“啄木鸟”,也是文明交通“领航员”

2023-05-07

dnf怎么打公会地下城_dnf公会地下城怎么进 通讯

2023-05-07

张靓颖疑复阳声音沙哑飙高音,清澈海豚音消失,曾主动感染被嘲讽

2023-05-07

精彩图集