自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

可直訓(xùn)ChatGPT類模型!華師大、NUS開源HugNLP框架:一鍵刷榜,全面統(tǒng)一NLP訓(xùn)練

人工智能 新聞
一站式NLP工具箱,你想要的全都有!

近日,華師大HugAILab團(tuán)隊(duì)研發(fā)了HugNLP框架,這是一個(gè)面向研究者和開發(fā)者的全面統(tǒng)一的NLP訓(xùn)練框架,可支持包括文本分類、文本匹配、問答、信息抽取、文本生成、小樣本學(xué)習(xí)等多種NLP任務(wù)模型搭建和訓(xùn)練。

圖片

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

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

值得注意的是,HugNLP還集成了大量最新的Prompt技術(shù),例如Prompt-Tuning、In-Context Learning、Instruction-tuning,未來還將引入Chain-of-thought

HugAILab團(tuán)隊(duì)還研發(fā)了一系列的應(yīng)用,例如CLUE&GLUE刷榜工具,可支持ChatGPT類模型訓(xùn)練和部署產(chǎn)品HugChat,以及統(tǒng)一信息抽取產(chǎn)品HugIE等。

HugNLP是一個(gè)分層式框架,遵循“高內(nèi)聚低耦合”的開發(fā)模式,其核心包括模型層(Models)、處理器層(Processors)、評(píng)估器層(Evaluators)和應(yīng)用層(Applications)四部分。

框架圖如下所示:

圖片

  • 模型層:包含模型部分,主要按照任務(wù)類型進(jìn)行劃分;
  • 處理器層:對(duì)數(shù)據(jù)進(jìn)行加載、緩存、分詞等處理,并轉(zhuǎn)換為模型輸入的Tensor;
  • 評(píng)估器層:根據(jù)不同類型的任務(wù)(分類或生成),指定不同的評(píng)估流程和評(píng)價(jià)指標(biāo);
  • 應(yīng)用層:對(duì)應(yīng)的應(yīng)用執(zhí)行腳本。理論上來說,選定一個(gè)模型、一個(gè)數(shù)據(jù)處理器以及一個(gè)評(píng)估器,即可對(duì)應(yīng)一個(gè)應(yīng)用。

HugNLP完全基于HuggingFace開發(fā),具有易擴(kuò)展、易部署能力,同時(shí)集成了MLFlow訓(xùn)練追蹤器,方便使用者及時(shí)追蹤實(shí)驗(yàn)進(jìn)度,并進(jìn)行實(shí)驗(yàn)分析。

HugNLP框架之所以稱為全面,是因?yàn)槠浼闪舜罅康腘LP任務(wù)模型,目前已經(jīng)實(shí)現(xiàn)的包括:

  • 預(yù)訓(xùn)練:Masked LM、Causal LM、知識(shí)增強(qiáng)預(yù)訓(xùn)練;
  • Instruction-Tuning:支持自回歸生成式、區(qū)間抽取式、NLI等統(tǒng)一范式訓(xùn)練;
  • 文本分類/匹配:傳統(tǒng)Fine-tuning、Prompt-tuning、In-Context Learning;
  • 序列標(biāo)注: 支持NER等序列標(biāo)注任務(wù);
  • 元學(xué)習(xí): 基于序列的元學(xué)習(xí)(SentenceProto)、基于區(qū)間的元學(xué)習(xí)(SpanProto)、基于token的元學(xué)習(xí)(TokenProto,NNShot);
  • 問答:支持抽取式問答、多項(xiàng)選擇式問答、開放生成式問答;
  • 文本生成:支持文本摘要、機(jī)器翻譯(正在開發(fā)中);
  • 代碼智能:目前集成了代碼克隆檢測(cè)(Clone)、代碼缺陷檢測(cè)(Defact)等Code任務(wù);

快速部署HugNLP框架,只需要執(zhí)行代碼三行命令即可:

git clone https://github.com/HugAILab/HugNLP.git
cd HugNLP
python3 setup.py install

下面介紹HugNLP的幾個(gè)核心能力:

  • Benchmark一鍵刷榜;
  • 預(yù)訓(xùn)練和知識(shí)注入;
  • Fine-tuning & Prompt-tuning;
  • Instruction-tuning;
  • In-Context Learning;
  • 半監(jiān)督Self-training;
  • Code代碼智能;

一、Benchmark一鍵刷榜

HugNLP最先開發(fā)了面向一些常用榜單的刷榜工具,例如GLUE、CLUE等。用戶只需要配置相應(yīng)的數(shù)據(jù)集名稱,即可實(shí)現(xiàn)一鍵刷榜。

為了驗(yàn)證框架的有效性,在22年9月提交了CLUE榜單的刷榜結(jié)果,選擇一系列中文小模型(RoBERTa、MacBERT、P-BERT等)并結(jié)合了logits集成方法,至今依然維持在第15名位置,曾一度超越了部分企業(yè)。

圖片

例如如果訓(xùn)練CLUE榜單的AFQMC數(shù)據(jù)集,可編輯文件

applications/benchmark/clue/clue_finetune_dev.sh

修改參數(shù):

--user_defined="data_name=afqmc"

執(zhí)行下列命令即可:

bash applications/benchmark/clue/clue_finetune_dev.sh

同樣的方法還可以訓(xùn)練一些常用的NLP任務(wù),例如閱讀理解、實(shí)體識(shí)別、以及GLUE英文數(shù)據(jù)集等。

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

二、預(yù)訓(xùn)練與知識(shí)注入

傳統(tǒng)的一些預(yù)訓(xùn)練模型(例如BERT、GPT2等)是在通用語料上訓(xùn)練的,而對(duì)領(lǐng)域事實(shí)知識(shí)可能不敏感,因此需要顯式的在預(yù)訓(xùn)練階段注入事實(shí)知識(shí)。

在HugNLP中,主要實(shí)現(xiàn)了幾個(gè)知識(shí)增強(qiáng)預(yù)訓(xùn)練,包括DKPLM和KP-PLM。DKPLM是一種可分解的知識(shí)注入方法;KP-PLM則是將結(jié)構(gòu)化知識(shí)轉(zhuǎn)化為自然語言描述的形式進(jìn)行注入。這些知識(shí)注入的方法是可插拔式的,因此無需修改模型結(jié)構(gòu),很容易用于下游任務(wù)的微調(diào)。

執(zhí)行下面命令即可進(jìn)行Masked Language Modeling和Causal Language Modeling的預(yù)訓(xùn)練:

bash applications/pretraining/run_pretrain_mlm.sh
bash applications/pretraining/run_pretrain_casual_lm.sh

三、 Fine-tuning & Prompt-Tuning

基于預(yù)訓(xùn)練語言模型的NLP,通常遵循Pre-training和Fine-tuning范式。HugNLP也包含F(xiàn)ine-tuning技術(shù)。

3.1 參數(shù)有效性學(xué)習(xí)

HugNLP集成了包括Prefix-tuning、Adapter、BitFit、LoRA等參數(shù)有效性訓(xùn)練方法,可以加速模型的訓(xùn)練,降低顯存占用量。

圖片

在訓(xùn)練腳本中,只需要添加一行參數(shù),即可開啟參數(shù)有效性訓(xùn)練:

--use_freezing

對(duì)于參數(shù)有效性方法,HugNLP實(shí)現(xiàn)了若干類別的分類模型,如下所示:

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,
     },
 }

只需要指定下面參數(shù)即可,例如選擇adapter進(jìn)行分類:

--task_type=head_adapter_cls

3.2 對(duì)抗訓(xùn)練:引入對(duì)Embedding的擾動(dòng),提高模型的魯棒性

HugNLP框架集成了若干種對(duì)抗訓(xùn)練的方法,其中最簡(jiǎn)單的對(duì)抗方法為FGM算法:

  • 首先計(jì)算輸入樣本(通常為word embedding)的損失函數(shù)以及在處的梯度:;
  • 計(jì)算在輸入樣本的擾動(dòng)量:,其中為超參數(shù),默認(rèn)取1.0;
  • 得到對(duì)抗樣本:;
  • 根據(jù)得到的對(duì)抗樣本,再次喂入模型中,計(jì)算損失,并累積梯度;
  • 恢復(fù)原始的word embedding,接著下一個(gè)batch。

在訓(xùn)練時(shí),只需要添加一行參數(shù),即可默認(rèn)調(diào)用FGM算法:

--do_adv

3.3 Prompt-tuning:通過模板來復(fù)用預(yù)訓(xùn)練目標(biāo)

傳統(tǒng)的Fine-tuning在低資源場(chǎng)景下容易出現(xiàn)過擬合問題,因此復(fù)用預(yù)訓(xùn)練的目標(biāo)可以拉近Pre-training和Fine-tuning之間的語義差異。

HugNLP集成了PET、P-tuning、Prefix-tuning等Prompt-Tuning算法,并無縫嵌入在NLP分類任務(wù)的模型里。

圖片

在訓(xùn)練時(shí),只需要指定下面兩個(gè)參數(shù),即可以開啟Prompt-tuning模式,例如選擇p-tuning算法:

--task_type=masked_prompt_ptuning_cls
--use_prompt_for_cls

四、Instruction-tuning

在大模型時(shí)代,如何將不同類型的NLP任務(wù)進(jìn)行范式統(tǒng)一,是構(gòu)造通用人工智能的核心要素。HugNLP為此定義了三種統(tǒng)一范式的思想:

  • 萬物皆可生成:將所有NLP任務(wù)建模為單向自回歸生成,例如GPT-3、ChatGPT等;
  • 萬物皆可抽?。簩⑺蠳LP任務(wù)建模為抽取式機(jī)器閱讀理解;
  • 萬物皆可推斷:將所有NLP任務(wù)建模為自然語言推斷;

基于三種不同的范式統(tǒng)一,HugNLP推出兩個(gè)核心產(chǎn)品,分別是:

  • HugChat:基于生成式Instruction的中小型ChatGPT類模型;
  • HugIE:基于抽取式Instruction的統(tǒng)一信息抽取框架;

4.1 HugChat:基于Causal Language Modeling的生成式對(duì)話模型

最近ChatGPT火爆全球,為了讓研究者可以訓(xùn)練自己的ChatGPT,HugNLP框架集成了基于生成式Instruction的訓(xùn)練產(chǎn)品——HugChat,其支持各種類型的單向生成式模型的訓(xùn)練,例如GPT-2、GPT-Neo、OPT、GLM、LLaMA等。

在8張V100 32G的條件下,可訓(xùn)練OPT-13B大模型。HugAILab團(tuán)隊(duì)開源了約200萬條英文、300萬條中文對(duì)話數(shù)據(jù),用于訓(xùn)練模型。例如訓(xùn)練GPT-2(XL),可直接執(zhí)行腳本:

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

基于HugNLP,訓(xùn)練的GPT-2(1.3B)模型,即可實(shí)現(xiàn)很簡(jiǎn)單的對(duì)話任務(wù)。只需要執(zhí)行如下命令即可玩轉(zhuǎn)HugChat:

python3 applications/instruction_prompting/HugChat/hugchat.py

例如可以寫套磁信郵件:

圖片

再例如搜索谷歌地球的相關(guān)信息:

圖片

也可以實(shí)現(xiàn)編寫簡(jiǎn)單的代碼(1.3B的模型具備此能力已經(jīng)很驚嘆了?。?/span>

圖片

HugNLP目前正在開發(fā)其他類型的Decoder-only大模型,相關(guān)信息和開源內(nèi)容如下表所示:

圖片

HugChat后期將推出垂直領(lǐng)域的大模型解決方案,同時(shí)將與OpenAI API進(jìn)行融合,推出大模型服務(wù)框架。

4.2 HugIE:基于Global Pointer的統(tǒng)一信息抽取框架

信息抽取(Information Extraction)旨在從非結(jié)構(gòu)化的文本中抽取出結(jié)構(gòu)化信息,是構(gòu)建知識(shí)庫(kù)的重要步驟之一。通常信息抽取包括兩個(gè)核心步驟,分別是命名實(shí)體識(shí)別(Named Entity Recognition)和關(guān)系抽?。≧elation Extraction)。

圖片

我們基于HugNLP研發(fā)一款HugIE產(chǎn)品,旨在實(shí)現(xiàn)統(tǒng)一信息處理。其主要核心包括如下幾個(gè)部分:

  • 將實(shí)體識(shí)別和關(guān)系抽取,統(tǒng)一為新的范式——基于抽取式閱讀理解的方法。HugIE采用Global Pointer模型實(shí)現(xiàn)信息抽?。?/span>
  • 定義Instruction Prompt,指導(dǎo)模型生成需要抽取的內(nèi)容;
  • 采用多任務(wù)訓(xùn)練的方法訓(xùn)練;

HugIE目前已經(jīng)開源了模型:https://huggingface.co/wjn1996/wjn1996-hugnlp-hugie-large-zh 可以基于HugNLP框架使用HugIE抽取模型,如下圖所示:

圖片

五、In-Context Learning

In-Context Learning(ICL) 首次由GPT-3提出,其旨在挑選少量的標(biāo)注樣本作為提示(Prompt),從而在形式上促使大模型生成目標(biāo)答案。ICL的優(yōu)勢(shì)在于無需對(duì)參數(shù)進(jìn)行更新,即可實(shí)現(xiàn)驚艷的效果。

圖片

HugNLP框架集成了ICL,主要涉及到樣本的挑選和預(yù)測(cè)結(jié)果的校準(zhǔn)兩個(gè)部分:

  • 樣本挑選:默認(rèn)為從訓(xùn)練集中隨機(jī)挑選樣本,后期將會(huì)開發(fā)一系列樣本挑選的算法,例如聚類、K近鄰、余弦相似度等;
  • 預(yù)測(cè)校準(zhǔn):由于所挑選標(biāo)注樣本與待預(yù)測(cè)樣本存在分布差異,需要對(duì)預(yù)測(cè)的概率分布進(jìn)行校準(zhǔn),這里采用Calibrate Before Use方法,如下圖,可以對(duì)預(yù)測(cè)分布進(jìn)行校準(zhǔn),提高預(yù)測(cè)效果。

圖片

目前ICL已經(jīng)集成在HugNLP里,只需要指定下面參數(shù)即可:

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

六、半監(jiān)督Self-training

半監(jiān)督旨在同時(shí)結(jié)合標(biāo)注數(shù)據(jù)和無標(biāo)簽數(shù)據(jù)來訓(xùn)練NLP任務(wù)。Self-training是一種簡(jiǎn)單但有效的迭代式訓(xùn)練方法,其通過Teacher模型先獲取偽標(biāo)簽,對(duì)偽標(biāo)簽進(jìn)行去噪后,再訓(xùn)練Student模型。傳統(tǒng)的Self-training會(huì)引入大量噪聲,從而降低訓(xùn)練的效果。

為了提高性能,HugNLP引入成熟的Uncertainty-aware Self-training技術(shù)??蚣軋D如下所示:

圖片

其采用了來自貝葉斯推斷中的MC Dropout技術(shù),即對(duì)Teacher模型執(zhí)行 次推理,每次推理開啟Dropout開關(guān),從而得到若干與Teacher模型滿足獨(dú)立同分布的模型預(yù)測(cè)。

基于這些預(yù)測(cè)結(jié)果,可以通過信息熵的變化量得到Teacher模型對(duì)無標(biāo)簽數(shù)據(jù)的不確定性量化指標(biāo)(即BALD算法),核心公式如下:

圖片

進(jìn)行多次DC Dropout的代碼實(shí)現(xiàn)如下(詳見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算法實(shí)現(xiàn)如下:
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使用半監(jiān)督模式,只需要做兩件事:

(1)執(zhí)行腳本時(shí)添加參數(shù):

--use_semi

(2)在指定的數(shù)據(jù)集目錄下,存放unlabeled data文件。

七、其他更豐富的應(yīng)用

目前HugNLP還開發(fā)了很多應(yīng)用如下所示:還有更多豐富的應(yīng)用正在開發(fā)中。HugNLP也歡迎有志之士加入HugAILab參與開源開發(fā)工作。

圖片

圖片

圖片

圖片


責(zé)任編輯:張燕妮 來源: 新智元
相關(guān)推薦

2023-04-12 16:16:53

微軟開源

2023-04-24 09:32:33

AIGPT

2024-04-08 14:07:51

Animagine開源

2013-12-09 18:08:30

華為教育信息化

2024-07-15 12:27:08

2020-03-04 09:35:55

開源技術(shù) 軟件

2015-02-09 15:25:52

換膚

2022-08-02 14:27:01

HDF驅(qū)動(dòng)框架驅(qū)動(dòng)開發(fā)

2024-04-08 13:59:03

大模型Replicate

2023-11-16 12:36:00

AI數(shù)據(jù)

2012-10-18 14:41:31

2019-01-29 10:06:31

開源技術(shù) 趨勢(shì)

2011-01-10 17:54:54

360黑屏木馬

2014-04-01 15:31:14

2021-12-09 15:27:46

模型人工智能深度學(xué)習(xí)

2020-03-17 09:42:00

谷歌開源機(jī)器學(xué)習(xí)

2022-03-01 20:29:02

微軟Windows 11

2021-02-22 11:07:49

Windows 10微軟數(shù)據(jù)傳輸

2022-03-14 09:33:56

神經(jīng)網(wǎng)絡(luò)模型人工智能

2023-04-04 19:09:20

ChatGPT開源
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)