近日,华师大hugailab团队研发了hugnlp框架,这是一个面向研究者和开发者的全面统一的nlp训练框架,可支持包括文本分类、文本匹配、问答、信息抽取、文本生成、小样本学习等多种nlp任务模型搭建和训练。
☞☞☞AI 智能聊天, 问
答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜
开源地址:https://github.com/HugAILab/HugNLP
论文:https://arxiv.org/abs/2302.14286
值得注意的是,HugNLP还集成了大量最新的Prompt技术,例如Prompt-Tuning、In-Context Learning、Instruction-tuning,未来还将引入Chain-of-thought
HugAILab团队还研发了一系列的应用,例如CLUE&GLUE刷榜工具,可支持ChatGPT类模型训练和部署产品HugChat,以及统一信息抽取产品HugIE等。
HugNLP是一个分层式框架,遵循“高内聚低耦合”的开发模式,其核心包括模型层(Models)、处理器层(Processors)、评估器层(Evaluators)和应用层(Applications)四部分。
框架图如下所示:
HugNLP完全基于HuggingFace开发,具有易扩展、易部署能力,同时集成了MLFlow训练追踪器,方便使用者及时追踪实验进度,并进行实验分析。
HugNLP框架之所以称为全面,是因为其集成了大量的NLP任务模型,目前已经实现的包括:
快速部署HugNLP框架,只需要执行代码三行命令即可:
git clone https://github.com/HugAILab/HugNLP.gitcd HugNLPpython3 setup.py install
下面介绍HugNLP的几个核心能力:
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
同样的方法还可以训练一些常用的NLP任务,例如阅读理解、实体识别、以及GLUE英文数据集等。
HugNLP还集成了一系列模型用于刷榜,例如BERT、RoBERTa、DeBERTa、MacBERT、Erlangshen等。
传统的一些预训练模型(例如BERT、GPT2等)是在通用语料上训练的,而对领域事实知识可能不敏感,因此需要显式的在预训练阶段注入事实知识。
HugNLP实现了多个知识增强预训练技术,其中包括DKPLM和KP-PLM。可分解的知识注入方法DKPLM和将结构化知识转化为自然语言形式的注入方法KP-PLM是两种不同的注入方式。由于这些知识注入方法采用的是可插拔式的设计,因此无需改变模型结构,这使得在下游任务上进行微调非常容易。
执行下面命令即可进行Masked Language Modeling和Causal Language Modeling的预训练:
bash applications/pretraining/run_pretrain_mlm.shbash applications/pretraining/run_pretrain_casual_lm.sh
Pre-training和Fine-tuning模式通常被遵循,以基于预训练语言模型的NLP。HugNLP也包含Fine-tuning技术。
3.1 参数有效性学习
HugNLP集成了包括Prefix-tuning、Adapter、BitFit、LoRA等参数有效性训练方法,可以加速模型的训练,降低显存占用量。
在训练脚本中,只需要添加一行参数,即可开启参数有效性训练:
--use_freezing
对于参数有效性方法,HugNLP实现了若干类别的分类模型,如下所示:
CLASSIFICATION_MODEL_CLASSES = { "head_prefix_cls": { "bert": BertPrefixForSequenceClassification, "roberta": RobertaPrefixForSequenceClassification, }, "head_ptuning_cls": { "bert": BertPtuningForSequenceClassification, "roberta": RobertaPtuningForSequenceClassification, }, "head_adapter_cls": { "bert": BertAdapterForSequenceClassification, "roberta": RobertaAdapterForSequenceClassification, }, "masked_prompt_cls": { "bert": PromptBertForSequenceClassification, "roberta": PromptRobertaForSequenceClassification, }, "masked_prompt_prefix_cls": { "bert": PromptBertPrefixForSequenceClassification, "roberta": PromptRobertaPrefixForSequenceClassification, }, "masked_prompt_ptuning_cls": { "bert": PromptBertPtuningForSequenceClassification, "roberta": PromptRobertaPtuningForSequenceClassification, }, "masked_prompt_adapter_cls": { "bert": PromptBertAdapterForSequenceClassification, "roberta": PromptRobertaAdapterForSequenceClassification, }, }只需要指定下面参数即可,例如选择adapter进行分类:
--task_type=head_adapter_cls
3.2 对抗训练:引入对Embedding的扰动,提高模型的鲁棒性
HugNLP框架集成了若干种对抗训练的方法,其中最简单的对抗方法为FGM算法:
在训练时,只需要添加一行参数,即可默认调用FGM算法:
--do_adv
3.3 Prompt-tuning:通过模板来复用预训练目标
传统的Fine-tuning在低资源场景下容易出现过拟合问题,因此复用预训练的目标可以拉近Pre-training和Fine-tuning之间的语义差异。
HugNLP集成了PET、P-tuning、Prefix-tuning等Prompt-Tuning算法,并无缝嵌入在NLP分类任务的模型里。
在训练时,只需要指定下面两个参数,即可以开启Prompt-tuning模式,例如选择p-tuning算法:
--task_type=masked_prompt_ptuning_cls--use_prompt_for_cls
在构建通用人工智能之前,必须将不同类型的自然语言处理任务进行范式统一,尤其是在大模型时代。HugNLP为此定义了三种统一范式的思想:
基于三种不同的范式统一,HugNLP推出两个核心产品,分别是:
4.1 HugChat:基于Causal Language Modeling的生成式对话模型
最近ChatGPT火爆全球,为了让研究者可以训练自己的ChatGPT,HugNLP框架集成了基于生成式Instruction的训练产品——HugChat,其支持各种类型的单向生成式模型的训练,例如GPT-2、GPT-Neo、OPT、GLM、LLaMA等。
在8张V100 32G的条件下,可训练OPT-13B大模型。HugAILab团队公布了大约200万条英文和300万条中文的对话数据,以用于模型训练。例如训练GPT-2(XL),可直接执行脚本:
bash ./application/instruction_prompting/HugChat/supervised_finetuning/run_causal_instruction_gpt2_xl.sh
使用基于HugNLP训练的GPT-2(1.3B)模型可以轻松地完成对话任务。只需要执行如下命令即可玩转HugChat:
python3 applications/instruction_prompting/HugChat/hugchat.py
例如可以写套磁信邮件:
再例如搜索谷歌地球的相关信息:
也可以实现编写简单的代码(1.3B的模型具备此能力已经很惊叹了!):
HugNLP目前正在开发其他类型的Decoder-only大模型,相关信息和开源内容如下表所示:
HugChat后期将推出垂直领域的大模型解决方案,同时将与OpenAI API进行融合,推出大模型服务框架。
4.2 HugIE:基于Global Pointer的统一信息抽取框架
信息抽取(Information Extraction)旨在从非结构化的文本中抽取出结构化信息,是构建知识库的重要步骤之一。通常信息抽取包括两个核心步骤,分别是命名实体识别(Named Entity Recognition)和关系抽取(Relation Extraction)。
我们基于HugNLP研发一款HugIE产品,旨在实现统一信息处理。其主要核心包括如下几个部分:
HugIE目前已经开源了模型:https://huggingface.co/wjn1996/wjn1996-hugnlp-hugie-large-zh 可以基于HugNLP框架使用HugIE抽取模型,如下图所示:
In-Context Learning(ICL) 首次由GPT-3提出,其旨在挑选少量的标注样本作为提示(Prompt),从而在形式上促使大模型生成目标答案。ICL的优势在于无需对参数进行更新,即可实现惊艳的效果。
HugNLP框架集成了ICL,主要涉及到样本的挑选和预测结果的校准两个部分:
目前ICL已经集成在HugNLP里,只需要指定下面参数即可:
--user_defined="data_name=xxx num_incontext_example=4 l=1 use_calibrate=True"--use_prompt_for_cls
半监督旨在同时结合标注数据和无标签数据来训练NLP任务。Self-training是一种简单但有效的迭代式训练方法,其通过Teacher模型先获取伪标签,对伪标签进行去噪后,再训练Student模型。Self-training方法传统上存在着较多噪声,可能会削弱训练结果。
为了提高性能,HugNLP引入成熟的Uncertainty-aware Self-training技术。框架图如下所示:
其采用了来自贝叶斯推断中的MC Dropout技术,即对Teacher模型执行 次推理,每次推理开启Dropout开关,从而得到若干与Teacher模型满足独立同分布的模型预测。
基于这些预测结果,可以通过信息熵的变化量得到Teacher模型对无标签数据的不确定性量化指标(即BALD算法),核心公式如下:
进行多次DC Dropout的代码实现如下(详见hugnlp_trainer.py):
y_T = list()for i in tqdm(range(T)): y_pred = [] for step, inputs in enumerate(unlabeled_dataloader): _, logits, __ = self.prediction_step(model, inputs, prediction_loss_only, ignore_keys=ignore_keys) y_pred.extend(logits.detach().cpu().numpy().tolist()) predict_proba = torch.softmax(torch.Tensor(y_pred).to(logits.device), -1) y_T.append(predict_proba.detach().cpu().numpy().tolist()) y_T = np.array(y_T)#compute mean y_mean = np.mean(y_T, axis=0)BALD算法实现如下:def get_BALD_acquisition(y_T):expected_entropy = - np.mean(np.sum(y_T * np.log(y_T + 1e-10), axis=-1), axis=0)expected_p = np.mean(y_T, axis=0)entropy_expected_p = - np.sum(expected_p * np.log(expected_p + 1e-10), axis=-1)return (entropy_expected_p - expected_entropy)
HugNLP使用半监督模式,只需要做两件事:
(1)执行脚本时添加参数:
--use_semi
(2)在指定的数据集目录下,存放unlabeled data文件。
HugNLP has developed numerous applications as listed below, and there are many more exciting applications currently under development.。HugNLP欢迎有志之士加入HugAILab参与开源开发工作。
# llama
# 阅读理解
# 一键
# 是在
# 几个
# 的是
# 开源
# 自然语言
# 所示
# 集成了
# 只需要
# word
# embedding
# prompt
# ai
# gpt
# https
# gpt-3
# nlp
# bert
# 人工智能
# 算法
# github
# pointer
# Token
# batch
# chatgpt
# 工具
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
网络优化91478 】
【
技术知识72672 】
【
云计算0 】
【
GEO优化84317 】
【
优选文章0 】
【
营销推广36048 】
【
网络运营41350 】
【
案例网站102563 】
【
AI智能45237 】
相关推荐:
Gemini怎样连接Google账号_Gemini账号连接方法【方法】
探索贝奥武夫:英雄史诗的起源、故事与文化意义
AI视频制作教程:从图像到病毒式Vlog全攻略
稿定设计AI抠图怎样处理复杂边缘_稿定设计AI复杂边缘细化技巧【技巧】
播客数据深度分析:用户地域分布及增长策略探讨
tofai免费网页版入口 tofai官网手机版网站
软件工程师必备的AI工具:提升效率的六款利器
教你用AI快速制作思维导图,3步理清所有工作思路
AI Notebooks: 知识工作者的未来?赋能理解与洞察的工具
ChatGPT怎样一键生成PPT_ChatGPT生成PPT方法【步骤】
实测效率提升超35%!科大讯飞星火AIPC开启AI办公新纪元
SEO已死?重塑品牌线上可见性的新策略
文心一言辅助进行中文播客脚本起草教程
ChatGPT怎么生成短视频脚本_ChatGPT脚本生成方法【指南】
斑马AI怎样设置专注模式_斑马AI专注时段与干扰屏蔽【指南】
利用AI在五分钟内高效生成潜在客户:UpLead深度教程
文心一言解读法律条文教程 文心一言专业领域应用
LeetCode问题解析:移除回文子序列,掌握字符串技巧
旅游营销AI:ChatGPT邮件营销策略,提升旅游业务转化率
百度输入法蓝色图标怎么关 百度输入法ai图标消除
ASUS Armoury Crate深度评测:最新功能与个性化定制
AI内容检测与优化:免费工具助你提升内容质量
AI图片生成教程:轻松打造你的专属文化艺术照
AISIA O1皮肤检测仪操作指南:安装、使用、疑难解答
DeepSeek 辅助进行硬件描述语言 Verilog 调试
使用ChatGPT快速生成专辑封面:AI艺术创作指南
Google AI 在教育领域个性化学习路径的构建
怎么用ai进行用户画像分析 AI消费行为与兴趣标签提炼【详解】
Wrike:AI赋能的项目管理平台,提升电商效率与团队协作
如何用AI帮你快速理解API文档?开发者必备高效技巧
暖心“小艺通话”:让语障人士告别沟通困境,拥抱平等生活
智行ai抢票怎么设置抢票截止时间_智行ai抢票截止时间设置与确认【步骤】
豆包AI能否用提示词调整回答深度_豆包AI深度控制提示词技巧【方法】
如何用AI设计一个Logo?5个步骤教你打造专属品牌标志
豆包AI怎么评价回答的好坏_点赞与反馈功能使用教程
AI绘图工具测评:告别复杂流程,高效创作流程图
京东旅行AI能否抢返程票_京东AI返程票预约与自动抢购【技巧】
Spin Rewriter AI:终极内容创作与SEO优化指南
智谱清言分析数据怎么用_智谱清言分析数据使用方法详细指南【教程】
利用AI模板高效创建产品需求文档 (PRD)
2025年冷邮件营销:技巧、工具和成功案例分享
智行ai抢票怎么选优先车次_智行ai抢票车次优先级设置技巧【指南】
Feelin聊天网页版地址 Feelin AI官方网站首页
Tamilnad Mercantile Bank TMB:如何在线下载账户报表
Semrush AI标题生成器:免费提升SEO和内容创作效率
Claude官网在线对话地址 Claude官方网站直接使用
播客剪辑软件选择指南:新手到专业,总有一款适合你
批改网ai检测工具怎么设置检测严格度_批改网ai检测工具严格度调整【技巧】
艺龙旅行AI怎样筛选最优车次_艺龙AI车次筛选与耗时最短推荐【攻略】
Depseek能否生成领导汇报版总结_Depseek汇报版结构调整与精简技巧【教程】
2023-05-29
南京市珐之弘网络技术有限公司专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。