预培训NLP变压器模型库:Bert&Roberta、GPT&GPT-2、Transformer XL、XLnet和XLM
pytorch-transformers-pvt-nightl的Python项目详细描述
Pythorch变压器
Pythorch Transformers(以前称为Pythorch Pretrained Bert
)是一个用于自然语言处理(NLP)的最先进的预训练模型库。
库当前包含以下模型的pytorch实现、预先训练的模型权重、使用脚本和转换实用程序:
- bert(来自google)与论文一起发布的bert:jacob devlin,ming-w的《深度双向变压器语言理解的预培训》。张爱玲、李肯顿和克里斯蒂娜·图坦诺娃。
- gpt(来自openai)与alec radford,kart的论文一起发布Hik Narasimhan、Tim Salimans和Ilya Sutskever。
- gpt-2(来自openai)与alec radford*,jeffrey wu*的论文语言模型是无监督的多任务学习者*,Rewon Child,David Luan,Dario Amodei**和Ilya Sutskever**。
- transformer xl(来自google/cmu)发表了一篇文章,作者是zihang dai*,杨志林*,杨一鸣,卡博内尔(Jaime Carbonell),曲克诉勒(Quoc v.le),拉斯兰·萨拉胡蒂诺夫(Ruslan Salakhutdinov)。
- xlnet(来自google/cmu)随论文发布.xlnet:语言理解的广义自回归预训练*,杨一鸣,卡博内尔,萨拉胡迪诺夫,库奥克诉勒。
- xlm(来自Facebook)与Guillaume Lample和Alexis Conneau的跨语言语言模型预培训论文一起发布。
- roberta(来自facebook),与论文a一起发布,作者Yinhan Liu,Myl奥特、纳曼·戈亚尔、杜敬飞、曼达·乔希、陈丹琪、奥马尔·利维、迈克·刘易斯、卢克·泽特莱莫耶、维塞林·斯托亚诺夫。
- distilbert(来自huggingface),与blogpost一起发布,更小、更快,更便宜、更轻:推出了蒸馏版的"伯特",作者是Victor Sanh、Lysande处女作和Thomas Wolf。
这些实现已经在几个数据集上进行了测试(参见示例脚本),并且应该与原始实现的性能相匹配(例如,bert全字屏蔽的squad上大约93 f1,openai gpt的rocstories上大约88 f1,transformer xl的wikitext上大约18.3 fuzzity,大约0.916 PE用于xlnet的sts-b上的ason r系数)。有关性能的更多详细信息,请参见文档的"示例"部分。
<表><广告> 此repo在python 2.7和3.5+上测试(示例仅在python 3.5+和pytorch 1.0.0+上测试) Pythorch变压器可由PIP安装,如下所示: 克隆存储库并运行: 库和示例脚本包含一系列测试。库测试可以在测试文件夹中找到,测试示例可以在示例中找到文件夹 这些测试可以使用 您可以使用以下命令从克隆存储库的根目录运行测试: 您应该查看我们的 它包含了一个从pytorch训练的transformer模型(这里, 在将来的某个时候,您将能够无缝地从pytorch中的预培训或微调模型过渡到coreml中的产品化模型,
或者在coreml中创建一个模型或应用程序的原型,然后从pytorch中研究其超参数或架构。超级刺激! 让我们快速浏览一下pytorch变形金刚。每个模型架构的详细示例(bert、gpt、gpt-2、transformer xl、xlnet和xlm)可以在完整文档中找到。
该库包含几个示例脚本,这些脚本对nlu和nlg任务具有sota性能: 下面是这些脚本的三个快速使用示例: 通用语言理解评估(glue)基准是评估和分析自然语言理解系统的九个句子或句子对语言理解任务的部分。 在运行这些粘合任务之前,您应该下载
通过运行
此脚本
并将其解压到某个目录 您还应该安装示例所需的附加软件包: 任务名称可以是cola、sst-2、mrpc、sts-b、qqp、mnli、qnli、rte、wnli之一。 开发集结果将出现在指定输出目录的文本文件'eval_results.txt'中。对于mnli,由于有两个独立的dev集,匹配和不匹配,除了"/tmp/mnli/",还有一个单独的输出文件夹,名为"/tmp/mnli-mm/"。 此示例代码使用4 v100 gpu服务器上的并行训练在sts-b语料库上微调xlnet。
并行训练是一种使用多个GPU的简单方法(但比分布式训练慢且灵活性低,请参见下文)。 因此,在这台机器上,我们的批量大小为32,如果您的机器较小,请增加梯度累积步骤以达到相同的批量大小。这些超参数将导致开发集上的皮尔逊相关系数 此示例代码使用8 v100 gpu上的分布式训练,对microsoft research repraphase corpus(mrpc)语料库上的bert全词屏蔽模型进行微调,以达到f1>;92。 使用这些超参数进行训练可获得以下结果: 此示例代码使用8 v100 gpu上的分布式训练和bert全词掩蔽无基础模型,对班数据集上的bert进行微调,以达到班上的f1>;93: 使用这些超参数进行训练可获得以下结果: 这是作为 还包括一个条件生成脚本,用于从提示生成文本。
生成脚本包括Aman Rusia提出的技巧,用于使用Transformer XL和xlnet之类的内存模型获得高质量的生成(包括预定义的文本以使短输入更长)。 下面是如何使用小版本的openai gpt-2模型运行脚本: 以下是从 当从 每个模型的元组的确切内容在模型的docstrings和文档中有详细说明。
在几乎所有情况下,您都可以将输出的第一个元素作为您以前在 下面是一个 中断对 当用from_pretrained() 从pretrained()方法提供给 此外,虽然不是一个突破性的改变,但是序列化方法已经标准化,如果以前使用过任何其他序列化方法,您可能应该切换到新方法 下面是一个示例: 以前包括的两个优化器, 新的优化器 这些时间表现在是标准的,不再是优化器的一部分。 下面是一个从 目前,还没有与Pythorch变压器相关的文件,但我们正在准备一个。同时,如果您在已发布或开源项目中使用此工作,请包括对库的说明和指向当前存储库的链接。 < /广告><正文>节
说明
安装 如何安装软件包 快速游览:用法 标记器和模型使用:bert和gpt-2 快速教程:微调/使用脚本 使用提供的脚本:Glue、Squad和文本生成 从Pythorch Pretrained Bert迁移到Pythorch Transformers" rel="nofollow">从Pythorch Pretrained Bert迁移到Pythorch Transformers 将代码从pytorch pretrained bert迁移到pytorch transformers
文档 完整的API文档及更多内容 安装
具有PIP
pip install pytorch-transformers
来源
pip install [--editable] .
测试
pytest运行(如果需要,请使用
pip install pytest安装pytest)。
python -m pytest -sv ./pytorch_transformers/tests/
python -m pytest -sv ./examples/
是否要在移动设备上运行变压器模型?
swift-coreml transformers
repo。gpt-2
)到运行在ios设备上的coreml模型的转换脚本示例。快速游览
importtorchfrompytorch_transformersimport*# PyTorch-Transformers has a unified API# for 7 transformer architectures and 30 pretrained weights.# Model | Tokenizer | Pretrained weights shortcutMODELS=[(BertModel,BertTokenizer,'bert-base-uncased'),(OpenAIGPTModel,OpenAIGPTTokenizer,'openai-gpt'),(GPT2Model,GPT2Tokenizer,'gpt2'),(TransfoXLModel,TransfoXLTokenizer,'transfo-xl-wt103'),(XLNetModel,XLNetTokenizer,'xlnet-base-cased'),(XLMModel,XLMTokenizer,'xlm-mlm-enfr-1024'),(RobertaModel,RobertaTokenizer,'roberta-base')]# Let's encode some text in a sequence of hidden-states using each model:formodel_class,tokenizer_class,pretrained_weightsinMODELS:# Load pretrained model/tokenizertokenizer=tokenizer_class.from_pretrained(pretrained_weights)model=model_class.from_pretrained(pretrained_weights)# Encode textinput_ids=torch.tensor([tokenizer.encode("Here is some text to encode",add_special_tokens=True)])# Add special tokens takes care of adding [CLS], [SEP], <s>... tokens in the right way for each model.withtorch.no_grad():last_hidden_states=model(input_ids)[0]# Models outputs are now tuples# Each architecture is provided with several class for fine-tuning on down-stream tasks, e.g.BERT_MODEL_CLASSES=[BertModel,BertForPreTraining,BertForMaskedLM,BertForNextSentencePrediction,BertForSequenceClassification,BertForMultipleChoice,BertForTokenClassification,BertForQuestionAnswering]# All the classes for an architecture can be initiated from pretrained weights for this architecture# Note that additional weights added for fine-tuning are only initialized# and need to be trained on the down-stream tasktokenizer=BertTokenizer.from_pretrained('bert-base-uncased')formodel_classinBERT_MODEL_CLASSES:# Load pretrained model/tokenizermodel=model_class.from_pretrained('bert-base-uncased')# Models can return full list of hidden-states & attentions weights at each layermodel=model_class.from_pretrained(pretrained_weights,output_hidden_states=True,output_attentions=True)input_ids=torch.tensor([tokenizer.encode("Let's see all hidden-states and attentions on this text")])all_hidden_states,all_attentions=model(input_ids)[-2:]# Models are compatible with Torchscriptmodel=model_class.from_pretrained(pretrained_weights,torchscript=True)traced_model=torch.jit.trace(model,(input_ids,))# Simple serialization for models and tokenizersmodel.save_pretrained('./directory/to/save/')# savemodel=model_class.from_pretrained('./directory/to/save/')# re-loadtokenizer.save_pretrained('./directory/to/save/')# savetokenizer=tokenizer_class.from_pretrained('./directory/to/save/')# re-load# SOTA examples for GLUE, SQUAD, text generation...
快速浏览微调/使用脚本
运行glue.py
:在九个不同的glue任务上微调bert、xlnet和xlm的示例(序列级分类)运行squad.py
:在问答数据集squad 2.0上微调bert、xlnet和xlm的示例(令牌级别分类)run_generation.py
:使用gpt、gpt-2、transformer xl和xlnet生成条件语言的示例
运行glue.py
:微调序列分类的glue任务
$glue-dir
pip install -r ./examples/requirements.txt
exportGLUE_DIR=/path/to/glue
exportTASK_NAME=MRPC
python ./examples/run_glue.py \
--model_type bert \
--model_name_or_path bert-base-uncased \
--task_name $TASK_NAME\
--do_train \
--do_eval \
--do_lower_case \
--data_dir $GLUE_DIR/$TASK_NAME\
--max_seq_length 128\
--per_gpu_eval_batch_size=8\
--per_gpu_train_batch_size=8\
--learning_rate 2e-5 \
--num_train_epochs 3.0 \
--output_dir /tmp/$TASK_NAME/
在sts-b回归任务中微调xlnet模型
exportGLUE_DIR=/path/to/glue
python ./examples/run_glue.py \
--model_type xlnet \
--model_name_or_path xlnet-large-cased \
--do_train \
--do_eval \
--task_name=sts-b \
--data_dir=${GLUE_DIR}/STS-B \
--output_dir=./proc_data/sts-b-110 \
--max_seq_length=128\
--per_gpu_eval_batch_size=8\
--per_gpu_train_batch_size=8\
--gradient_accumulation_steps=1\
--max_steps=1200\
--model_name=xlnet-large-cased \
--overwrite_output_dir \
--overwrite_cache \
--warmup_steps=120
+0.917
。在mrpc分类任务中微调bert模型
python -m torch.distributed.launch --nproc_per_node 8 ./examples/run_glue.py \
--model_type bert \
--model_name_or_path bert-large-uncased-whole-word-masking \
--task_name MRPC \
--do_train \
--do_eval \
--do_lower_case \
--data_dir $GLUE_DIR/MRPC/ \
--max_seq_length 128\
--per_gpu_eval_batch_size=8\
--per_gpu_train_batch_size=8\
--learning_rate 2e-5 \
--num_train_epochs 3.0 \
--output_dir /tmp/mrpc_output/ \
--overwrite_output_dir \
--overwrite_cache \
acc=0.8823529411764706
acc_and_f1=0.901702786377709
eval_loss=0.3418912578906332
f1=0.9210526315789473
global_step=174loss=0.07231863956341798
运行squad.py
:微调squad以回答问题
pip install pytorch-transformers
0
pip install pytorch-transformers
1
bert大的未加保护的全词屏蔽精细化的小队提供的模型
运行生成.py
:使用gpt、gpt-2、transformer xl和xlnet生成文本
pip install pytorch-transformers
2
从pytorch pretrained bert迁移到pytorch transformers
pytorch pretrained bert迁移到
pytorch transformers时应注意的事项的快速摘要
方法实例化时,模型现在默认设置为求值模式。要训练他们,不要忘记将他们设置回训练模式(模型总是输出元组
pytorch pretrained bert
迁移到pytorch transformers
时,主要的中断变化是models forward方法总是输出一个tuple
和各种元素,具体取决于模型和配置参数。pytorch pretrained bert
中使用的输出。
pytorch pretrained bert
到pytorch transformers的转换示例,用于
bertforsequenceclassification
分类模型:pip install pytorch-transformers
3
序列化
from_pretrained()
方法的更改:model.train()
)以激活退出模块。的附加
*输入和
**kwargs
参数过去直接传递给基础模型的类\uu init\uu()
方法。它们现在用于更新模型配置属性,而该属性可以中断基于前面的bertforsequenceclassification
示例构建的派生模型类。我们正在研究一种方法,通过转发模型\uu init()
方法(i)提供的位置参数和(ii)与任何配置类属性不匹配的关键字参数,来减轻\866中的这种突破性变化。save_pretrained(save_directory)
。pip install pytorch-transformers
4
优化器:bertaam&openaiadam现在是adamw,计划是标准pytorch计划
bertadam
和openaiadam
已经被一个单独的adamw
优化器所取代,它有一些不同:adamw
与pytorchadam
优化器api匹配,并允许您使用标准pytorch或apex方法进行调度和剪裁。bertadam
到adamw
的线性预热和衰减计划以及相同计划的转换示例:pip install pytorch-transformers
5
引文
推荐PyPI第三方库