pytorch版本的google-ai-bert模型,带有加载google预先训练的模型的脚本
pytorch-pretrained-bert的Python项目详细描述
Pythorch Pretrained Bert:预培训变压器的大型扩展存储库
此存储库包含Op Pythorch重新实现的操作、预先培训的模型和微调示例:
这些实现已经在几个数据集上进行了测试(参见示例),并且应该与相关的TensorFlow实现的性能相匹配(例如,Bert的Squad上约91 F1,OpenAI GPT的Rocstories上约88 F1,Transformer XL的WikiText 103上约18.3困惑)。您可以在下面的示例部分中找到更多详细信息。
以下是这些型号的一些信息:
伯特与雅各布·德夫林、张明伟、李肯顿和克里斯蒂娜·图塔诺娃的论文《伯特:深层双向变形金刚语言理解预培训》一起发布。 Bert的Pythorch实现提供了Google的预训练模型、示例、笔记本和命令行界面,用于加载Bert的任何预训练TensorFlow检查点。
openai gpt与alec radford、karthik narasimhan、tim salimans和ilya sutskever的论文一起发布。 openai gpt的pytorch实现是对huggingface的pytorch实现的一个改编,它与openai的预先训练的模型和用于转换pytorch中预先训练的numpy检查点的命令行界面。
google/cmu的transformer xl与论文《transformer xl:attentive language models beyond a fixed length context》一起发布拉克胡迪诺夫。 transformer xl的pytorch实现是对原来的pytorch实现的一个改编,pytorch实现经过了轻微的修改以匹配tensorflow实现的性能并允许重新使用pretrainED砝码。提供了一个命令行界面,用于转换pytorch模型中的tensorflow检查点。
OpenAI GPT-2与论文一起发布,该论文由Alec Radford*、Jeffrey Wu*、Rewon Child、David Luan、Dario Amodei**和Ilya Sutskever*撰写,作者是:语言模型是无监督的多任务学习者。 openai gpt-2的pytorch实现是对openai实现的一个改编,它提供了openai的预先训练模型和一个命令。-用于转换pytorch中tensorflow检查点的行接口。
内容
<表><广告>安装
此repo在python 2.7和3.5+上进行了测试(示例仅在python 3.5+和pytorch 0.4.1/1.0.0上进行测试
具有PIP
Pythorch预培训的BERT可由PIP安装,如下所示:
pip install pytorch-pretrained-bert
如果您想重现openai gpt
文件的原始标记化过程,则需要安装ftfy
(如果您使用的是python 2,则限制为4.4.3版)和spacy
:
pip install spacy ftfy==4.4.3 python -m spacy download en
如果不安装ftfy
和spacy
,则openai gpt
标记器将默认使用bert的basictokenizer
和字节对编码进行标记(这对大多数使用来说应该很好,不用担心)。
来源
克隆存储库并运行:
pip install [--editable] .
此外,如果您想重现openai gpt
模型的原始标记化过程,则需要安装ftfy
(如果您使用的是python 2,则限制为4.4.3版)和spacy
:
pip install spacy ftfy==4.4.3 python -m spacy download en
同样,如果您不安装ftfy
和spacy
,则openai gpt
标记器将默认使用bert的basictokenizer
和字节对编码(这对大多数使用来说应该很好)进行标记化。
一系列测试包含在测试文件夹中,可以使用pytest
运行(如果需要,请安装pytest:pip install pytest
)。
您可以使用以下命令运行测试:
python -m pytest -sv tests/
概述
此软件包包含以下类,这些类可以用python导入,并在本自述文件的doc部分中详细说明:
八个带有预先训练重量的Pythorch模型(
torch.nn.module
)(在modeling.py
文件中):bert model
-原始bert变压器模型(完全预先培训的),bertformaskedlm
-bert transformer带有预先训练的蒙面语言建模头(完全预先训练的),bertfornextsentencepredition
-bert transformer,上面有预先训练的下一个句子预测分类器(完全预先训练的),bertforpretraining
-带屏蔽语言建模头和下一个句子预测分类器的bert transformer(完全预先训练>)bertforsequenceclassification
-顶部有序列分类头的bert transformer(bert transformer是预先训练的,序列分类头仅初始化,必须训练),bertformultiplechoice
-顶部有多选头的bert transformer(用于swag之类的任务)(bert transformer是预先训练的,多选分类头仅初始化且必须训练,bertfortokenclassification
-顶部带有令牌分类头的bert transformer(bert transformer是预先训练的,令牌分类头仅初始化,必须训练),bertforquestionanswering
-顶部有令牌分类头的bert transformer(bert transformer是预先训练的,令牌分类头仅初始化,必须训练)。
三个带预先训练重量的Pythorch模型(
torch.nn.module
)(在modeling\u openai.py
文件中):openai gpt model
-原始openai gpt transformer模型(完全预先训练的),openaigptlmheadmodel
-openai gpt transformer,顶部是绑定语言建模头(完全预先训练的),openai gpt doubleheadsmodel
-openai gpt transformer具有绑定的语言建模头和顶部的多项选择分类头(openai gpt transformer是预先训练的,多项选择分类头仅为ini已初始化,必须接受培训),
两个带有预先训练重量的Pythorch模型(
torch.nn.module
)(在modeling_transfo_xl.py
文件中):transfo xl model
-transformer xl model,输出最后一个隐藏的状态和存储单元(完全预先训练的),transfoxllmheadmodel
-transformer xl顶部带有绑定的自适应SoftMax头,用于语言建模,输出登录/丢失和存储单元(完全预先训练的),
三个带预先训练重量的Pythorch模型(
torch.nn.module
)(在modeling\u gpt2.py
文件中):gpt2模型
-原始openai gpt-2变压器模型(完全预先培训的),gpt2lmheadmodel
-openai gpt-2 transformer,顶部是绑定语言建模头(完全预先训练的),gpt2doubleheadsmodel
-openai gpt-2变压器h绑定语言建模头和顶部的多项选择分类头(openai gpt-2 transformer是预先训练的,多项选择分类头只初始化,必须训练),
用于bert(使用词条)的标记器(在
标记化.py
文件中):basictokenizer
-基本标记化(标点符号拆分、小写等),wordpiecetokener
-wordpiece标记化,bertokenizer
-执行端到端的标记化,即基本标记化,然后是字块标记化。
用于openai gpt的标记赋予器(使用字节对编码)(在
标记化_openai.py
文件中):openaigptokenizer
-执行字节对编码(bpe)标记化。
用于transformer xl的标记赋予器(自适应softmax按频率排序的单词标记)(在
标记化_transfo_xl.py
文件中):openaigptokenizer
-执行单词标记化,并可以按频率在语料库中对单词进行排序,以便在自适应softmax中使用。
用于openai gpt-2的标记化器(使用字节级字节对编码)(在
tokenization\u gpt2.py
文件中):gpt2tokenizer
-执行字节级字节对编码(bpe)标记化。
用于bert的优化器(在
optimization.py
文件中):bert adam
-adam算法的bert版本,具有权值衰减修正、预热和学习率的线性衰减。
用于openai gpt的优化器(在
optimization_openai.py
文件中):openai adam
-openai gpt版本的adam算法,具有权值衰减修正、预热和学习率线性衰减。
bert、openai gpt和transformer xl的配置类(分别位于
modeling.py
,modeling_openai.py
,modeling_transfo_xl.py
文件:bertconfig
-用于存储bertmodel配置的配置类,以及用于从json配置文件读取和写入的实用程序。openaigptconfig
-用于存储openaigptmodel的配置的配置类,以及用于读取和写入json配置文件的实用程序。gpt2config
-用于存储gpt2模型配置的配置类,以及用于从json配置文件读取和写入的实用程序。transforxlconfig
-配置类,用于存储transforxlmodel的配置,以及用于从json配置文件读取和写入的实用程序。
存储库还包括:
关于如何使用bert的五个例子(在
examples
文件夹中):extract_features.py
-演示如何从bertmodel的实例中提取隐藏状态,
run_classifier.py
-演示如何在Glue的MRPC任务上微调BertforSequenceClassification的实例,
run_squad.py
-演示如何在Squad v1.0和Squad v2.0任务上微调BertforQuestionAnswing的实例。
run_swag.py
-演示如何微调swag任务上的bertformultiplechoice
实例。simple_lm_fineting.py
-演示如何在目标文本语料库上微调bertforpretraining
的实例。
一个关于如何使用openai gpt的示例(在
示例
文件夹中):run_openai_gpt.py
-演示如何微调rocstories任务中的opengptdoubleheadsmodel
实例。
一个关于如何使用transformer xl的示例(在
示例
文件夹中):run_transfo_xl.py
-演示如何在WikiText 103上加载和评估预先训练的transfoxllmHeadModel
模型。
一个关于如何在无条件和交互模式下使用openai gpt-2的示例(在
示例
文件夹):run_gpt2.py
-演示如何使用OpenAI GPT-2生成文本的实例(与原始OpenAI GPT-2示例相同)。
这些示例在本自述文件的示例部分中有详细说明。
用于检查TensorFlow和Pythorch型号行为是否相同的三个笔记本(在
笔记本
文件夹中):比较tf和pt models.ipynb
-比较由bertmodel
预测的隐藏状态,比较tf和pt models squad.ipynb
-比较由BertforQuestionAnswering
实例预测的跨度,比较tf和pt models mlm nsp.ipynb
-比较bertforpretraining
实例的预测。
这些笔记本在本自述文件的"笔记本"部分中有详细说明。
一个命令行接口,用于转换关联pytorch模型的pytorch保存中的tensorflow检查点(bert,transformer xl)或numpy检查点(openai):
此cli在本自述文件的命令行界面部分中有详细说明。
用法
伯特
下面是一个使用bertokenizer
,bert model
和bertformaskedlm
类和google ai的预先训练的bert base uncased
模型的快速开始示例。有关这些类的所有详细信息,请参见下面的文档部分。
首先,让我们使用bertokenizer
importtorchfrompytorch_pretrained_bertimportBertTokenizer,BertModel,BertForMaskedLM# OPTIONAL: if you want to have more information on what's happening, activate the logger as followsimportlogginglogging.basicConfig(level=logging.INFO)# Load pre-trained model tokenizer (vocabulary)tokenizer=BertTokenizer.from_pretrained('bert-base-uncased')# Tokenized inputtext="[CLS] Who was Jim Henson ? [SEP] Jim Henson was a puppeteer [SEP]"tokenized_text=tokenizer.tokenize(text)# Mask a token that we will try to predict back with `BertForMaskedLM`masked_index=8tokenized_text[masked_index]='[MASK]'asserttokenized_text==['[CLS]','who','was','jim','henson','?','[SEP]','jim','[MASK]','was','a','puppet','##eer','[SEP]']# Convert token to vocabulary indicesindexed_tokens=tokenizer.convert_tokens_to_ids(tokenized_text)# Define sentence A and B indices associated to 1st and 2nd sentences (see paper)segments_ids=[0,0,0,0,0,0,0,1,1,1,1,1,1,1]# Convert inputs to PyTorch tensorstokens_tensor=torch.tensor([indexed_tokens])segments_tensors=torch.tensor([segments_ids])
让我们看看如何使用bertmodel
获取隐藏状态
# Load pre-trained model (weights)model=BertModel.from_pretrained('bert-base-uncased')model.eval()# If you have a GPU, put everything on cudatokens_tensor=tokens_tensor.to('cuda')segments_tensors=segments_tensors.to('cuda')model.to('cuda')# Predict hidden states features for each layerwithtorch.no_grad():encoded_layers,_=model(tokens_tensor,segments_tensors)# We have a hidden states for each of the 12 layers in model bert-base-uncasedassertlen(encoded_layers)==12
以及如何使用bertformaskedlm
# Load pre-trained model (weights)model=BertForMaskedLM.from_pretrained('bert-base-uncased')model.eval()# If you have a GPU, put everything on cudatokens_tensor=tokens_tensor.to('cuda')segments_tensors=segments_tensors.to('cuda')model.to('cuda')# Predict all tokenswithtorch.no_grad():predictions=model(tokens_tensor,segments_tensors)# confirm we were able to predict 'henson'predicted_index=torch.argmax(predictions[0,masked_index]).item()predicted_token=tokenizer.convert_ids_to_tokens([predicted_index])[0]assertpredicted_token=='henson'
openai gpt
下面是一个使用openaigptto的快速入门示例kenizer
,openaigptmodel
和openaigptmheadmodel
使用openai的预训练模型初始化。有关这些类的所有详细信息,请参见下面的文档部分。
首先,让我们使用openaigptokenizer
importtorchfrompytorch_pretrained_bertimportOpenAIGPTTokenizer,OpenAIGPTModel,OpenAIGPTLMHeadModel# OPTIONAL: if you want to have more information on what's happening, activate the logger as followsimportlogginglogging.basicConfig(level=logging.INFO)# Load pre-trained model tokenizer (vocabulary)tokenizer=OpenAIGPTTokenizer.from_pretrained('openai-gpt')# Tokenized inputtext="Who was Jim Henson ? Jim Henson was a puppeteer"tokenized_text=tokenizer.tokenize(text)# Convert token to vocabulary indicesindexed_tokens=tokenizer.convert_tokens_to_ids(tokenized_text)# Convert inputs to PyTorch tensorstokens_tensor=torch.tensor([indexed_tokens])
让我们看看如何使用openaigptmodel获取隐藏状态
pip install pytorch-pretrained-bert0
以及如何使用openaigptlmheadmodel
pip install pytorch-pretrained-bert1
变压器XL
下面是一个使用transforxltokenizer
,transforxlmodel
和transforxlmodellmheadmodel
类的快速启动示例,其中transformer xl模型已在wikitext-103上预训练。有关这些类的所有详细信息,请参见下面的文档部分。
首先,让我们准备一个带标记的输入
pip install pytorch-pretrained-bert2
让我们看看如何使用transfoxlmodel获取隐藏状态
pip install pytorch-pretrained-bert3
以及如何使用transforxllmheadmodel
pip install pytorch-pretrained-bert4
OpenAI GPT-2
下面是一个使用gpt2tokenizer
,gpt2model
和gpt2lmheadmodel
类和openai的预训练模型的快速启动示例。有关这些类的所有详细信息,请参见下面的文档部分。
首先,让我们准备一个带有 让我们看看如何使用 以及如何使用gpt2lmheadmodel
下面是包中类的详细文档,以及如何使用它们: 要加载google ai、openai的预训练模型或pytorch保存的模型(使用 < < /P> 列表中选择的google ai或openai的预先训练模型的快捷方式名称: 指向预训练模型存档的路径或url,其中包含: 如果 在使用无基础模型时,请确保将 示例: 本节解释如何保存和重新加载微调模型(bert、gpt、gpt-2和transformer xl)。
要重新加载经过微调的模型,需要保存三种类型的文件: 下面是将模型、配置和词汇表保存到 如果要为每种类型的文件使用特定路径,可以使用另一种方法保存和重新加载模型: 模型(bert、gpt、gpt-2和transformer xl)是根据配置类定义和构建的,配置类包含模型的参数(层数、维度…)和一些从json配置文件读写的实用程序。相应的配置类别为: 这些配置类包含一些用于加载和保存配置的实用程序: 输入和输出与tensorflow模型的输入和输出相同。
我们在这里详述。该模型采用输入:
该模型输出一个元组,元组由: 有关如何使用此类的示例,请参见可用于提取给定输入的模型隐藏状态的脚本。
<H4>2。 输入包括 输出: 如果 如果 关于如何使用这个类的一个例子,请参见可以用于在特定的不同文本语料库上微调bert语言模型的脚本。如果语言风格与原始的bert训练语料库(wiki+bookcorpus)不同,这将提高模型性能。 输入包括输入
输出: 输入包括输入 输出: 序列级分类器是一个线性层,它将输入序列中第一个字符的最后一个隐藏状态作为输入(参见bert论文中的图3a和3b)。 有关如何使用此类的示例,请参见 线性层为多项选择问题的每一个选择输出一个值,然后与实例对应的所有输出都通过一个softmax来获得模型选择。 这个实现很大程度上受到了openai的启发,它通过生成性的预训练来提高语言理解能力。t/issues/38" rel="nofollow">问题 关于如何使用这个类的示例,请参见 令牌级分类器是一个线性层,它接收序列的最后一个隐藏状态作为输入。 令牌级分类器将最后一个隐藏状态的完整序列作为输入,并为每个令牌计算几个(例如两个)分数,这些分数可以分别是给定令牌是一个 有关如何使用此类的示例,请参见 openai gpt使用一个嵌入矩阵来存储单词和特殊的嵌入。
特殊令牌嵌入是未预先训练的附加令牌: 嵌入在令牌嵌入矩阵中的顺序如下: 其中嵌入了Total_令牌dings可以作为config.total_tokens_embeddings获得,它是:
输入和输出与tensorflow模型的输入和输出相同。
我们在这里详述。该模型采用输入:
此模型输出: 输入与输入的 输出: 输入值与输入值相同
输出: transformer xl模型在"transformer xl:attentive language models beyond a fixed length context"中进行了描述。
变压器XL使用正弦模式和自适应SoftMax输入的相对定位,这意味着: 该模型采用输入:
这个模型输出一个元组(上一个隐藏状态,新的mems) 新的mems包含所有的隐藏状态和嵌入的输出( 新mems和上一个隐藏状态的形状有两个不同之处:新mems已经转换了第一个维度并且更长(大小为self.config.mem len)。下面是如何从模型输出中提取隐藏状态的完整列表: 输入值与输入值相同
输出一个元组(上一个隐藏状态,新的mems) 输入和输出与tensorflow模型的输入和输出相同。
我们在这里详述。该模型采用输入:
此模型输出: 输入与 输出: 输入与输入的 输出: 这个类有五个参数: 以及三种方法: 有关 这个类有四个参数: 以及五种方法: 有关 该api类似于 有关 这个类有三个参数: 还有两种方法: 有关 优化器接受以下参数: bert-base和bert-large分别是110m和340m参数模型,很难在单个gpu上对它们进行微调,以获得良好的性能(在大多数情况下,批量大小为32)。 为了帮助对这些模型进行微调,我们在微调脚本中包含了一些可以激活的技术。ref="./examples/run_squad.py" rel="nofollow"> 以下是如何在脚本中使用这些技术: 要使用16位培训和分布式培训,您需要安装nvidia的apex extension如这里所述。您将在文档和相关存储库中找到关于 注意:要使用分布式培训,您需要在每台计算机上运行一个培训脚本。例如,可以在每台服务器上运行以下命令(有关详细信息,请参见上述博客文章): 其中, 我们展示了几个基于(和扩展自)原始实现的微调示例
我们在带有无基础bert基的glue基准开发集上得到以下结果
模型。所有实验都在一个批量大小为32的p100 gpu上运行。 其中一些结果与测试集上报告的结果明显不同
在网站上的胶水基准。对于QQP和WNLI,请参阅网站上的常见问题解答12。 在运行这些粘合任务之前,您应该下载
通过运行
此脚本
并将其解压到某个目录 任务名称可以是cola、sst-2、mrpc、sts-b、qqp、mnli、qnli、rte、wnli之一。 开发集结果将出现在指定输出目录的文本文件'eval_results.txt'中。对于mnli,由于有两个独立的dev集,匹配和不匹配,除了"/tmp/mnli/",还有一个单独的输出文件夹,名为"/tmp/mnli-mm/"。 除mrpc、mnli、cola、sst-2外,apex在任何胶接任务中都没有进行过半精确训练。以下部分提供了如何使用mrpc运行半精确训练的详细信息。尽管如此,使用剩余的粘合任务运行半精确训练也不应该有任何问题,因为每个任务的数据处理器都继承自基类数据处理器。 这个示例代码微调了bert对微软研究的解释。
Corpus(MRPC)Corpus,在单个K-80上运行不到10分钟,在27秒内(!)在安装了Apex的单个特斯拉V100 16GB上。 在运行此示例之前,您应该下载
通过运行
此脚本
并将其解压到某个目录 我们的测试在几个种子上运行,原始实现超参数的句子和句子对分类任务rel="nofollow" 使用Apex和16位精度快速运行:在27秒内在MRPC上进行微调!< /强>
首先按此处所示安装apex。
然后运行< /P> 这个例子代码微调班数据集上的伯特。它在一台特斯拉V100 16GB上运行24分钟(以伯特为基础)或68分钟(以伯特为大型)。 Squad的数据可以通过以下链接下载,并应保存在 使用先前的超参数进行训练,得到了以下结果: swag的数据可以通过克隆以下存储库来下载
在单个GPU上使用先前的超参数进行训练,得到以下结果: 数据应该是一个文本文件,格式与样本文本文本文件格式相同(每行一句话,文档用空行分隔)。
您可以下载一个由维基百科文章生成的示范性训练语料库,并分成大约500个带有空格的句子。
在这个语料库上训练一个epoch大约需要1:20小时,在4个nvidia tesla p100上进行,其中 感谢@rocketknight1和@tholor的工作,现在有几个脚本可用于使用预训练目标(屏蔽语言建模和下一句预测损失的组合)微调bert。这些脚本在 我们提供了openai gpt、transformer xl和openai gpt-2的三个脚本示例,它们基于(并扩展自)各自的原始实现: 此示例代码微调rocstories数据集上的openai gpt。 在运行此示例之前,您应该下载
rocstories数据集并将其解压到某个目录
该命令在单个K-80上运行约10分钟,评估精度约为87.7%(作者报告的TensorFlow代码的中位精度为85.8%,OpenAI GPT报告的最佳单次运行精度为86.5%)。 此示例代码评估wikitext 103数据集上的预先训练的transformer xl。
此命令将下载已计算词汇表的预处理版本的WikiText 103数据集。 该命令在v100上运行约1分钟,在wikitext-103上的计算复杂度为18.22(作者用tensorflow代码报告了该数据集上的复杂度约为18.3)。 此示例代码与原始的无条件和有条件生成代码相同。 条件生成: 无条件生成: 提供了与原始脚本中相同的选项,请参考示例代码和openai的原始存储库。 我们上面列出的选项允许在GPU(而不是原始实现使用的TPU)上非常容易地微调Bert Large。 例如,可以在一台服务器上用4k-80(现在已经很老了)在18小时内对bert large进行微调。我们的结果与tensorflow实现结果相似(实际上略高): 为了得到这些结果,我们使用了以下组合: 以下是此运行的超参数的完整列表: 如果您有最新的GPU(从nvidia volta系列开始),您应该尝试16位微调(fp16)。 下面是我们尝试的fp16运行的超参数示例: 结果与上述FP32结果相似(实际略高): 我们包括三个Jupyter笔记本,用于检查Pythorch模型的预测是否与原始TensorFlow模型的预测相同。 第一个笔记本(比较tf和pt模型.ipynb rel="nofollow">比较tf和pt模型.ipynb)提取tensorflow和pytorch模型的每一层上完整序列的隐藏状态,并计算它们之间的标准差。在给定的例子中,我们得到模型的各种隐藏状态的标准偏差为1.5e-7到9e-7。 第二个笔记本(比较tf和pt models squad.ipynb rel="nofollow">tf和pt models squad.ipynb)比较tensorflow和pytorch模型计算的损耗,以便对bertforquestionswe的微调层进行相同的初始化。环gpt2tokenizer的标记化输入
并计算它们之间的标准偏差。在给定的示例中,模型之间的标准偏差为2.5e-7。pip install pytorch-pretrained-bert
5
gpt2model
获取隐藏状态pip install pytorch-pretrained-bert
6
pip install pytorch-pretrained-bert
7
DOC
< /广告><正文>小节
说明
加载预先训练的权重 如何加载google ai/openai的预先训练权重或pytorch保存的实例 序列化最佳实践 如何保存和重新加载经过微调的模型 配置 bert、gpt、gpt-2和transformer xl的配置类的api 型号 bert、gpt、gpt-2和transformer xl的pytorch模型类的api
标记器
bert、gpt、gpt-2和transformer xl的tokenizers类的api 优化程序
优化器的api 加载google ai或openai预先训练的权重或pytorch转储
torch.save()
保存的bertforpretraining
实例),pytorch模型类和标记器可以实例化为pip install pytorch-pretrained-bert
8
bert_class
是加载词汇表的标记器(bertokenizer
或openaigptokenizer
类)或八个bert或三个openai gpt pytorch模型类之一(加载预先训练的权重):bert model
,bertformaskedlm
,bertfornextsentencepredition
,bertforpretraining
,bertforsequenceclassification
,bertfortokenclassification
,bertformultiplechoice
,bertforquestionanswering
,openaigptmodel
,openaigptlmheadmodel
或openaigptdubleheadsmodel
,和
预先培训的型号或路径是:
bert base uncased
:12层,768隐藏,12个磁头,110m参数伯特大UNCASED
:24层,1024隐藏,16头,340M参数bert基本大小写
:12层,768隐藏,12个磁头,110m参数bert大箱
:24层,1024隐藏,16头,340m参数bert-base多语言无基础
:(orig,不推荐)102种语言,12层,768隐藏,12个磁头,110m参数bert-base多语言大小写
:(新建,推荐)104种语言,12层,768隐藏,12个磁头,110m参数伯特基础中文
:简体中文和繁体中文,12层,768隐藏,12头,110m参数openai gpt
:openai英文模型,12层,768隐藏,12个磁头,110m参数transfo-xl-wt103
:transformer xl英文模型,在wikitext-103上训练,18层,1024个隐藏,16个头部,257M个参数gpt2
:openai gpt-2英文模型,12层,768隐藏,12头,117m参数bert_config.json
或openai_gpt_config.json
模型的配置文件,以及
pytorch_model.bin
bertforpretraining的预训练实例的pytorch转储,openaigptmodel
,transforxlmodel
,gpt2lmheadmodel
(用通常的torch.save()
保存)预先训练的模型名称或路径是快捷方式名称,则预先训练的权重将从AWS S3下载(请参见此处的链接)并存储在缓存文件夹中,以避免以后下载(缓存文件夹位于
~/.pytorch_pretrained_bert/
)。缓存目录
可以是指向特定目录的可选路径,用于下载和缓存预先训练的模型权重。此选项在使用分布式训练时特别有用:为了避免同时访问相同的权重,可以设置例如cache\u dir='./pretrained\u model{}.format(args.local\u rank)
(有关详细信息,请参阅分布式训练部分)。uncased
表示文本在字块标记化之前已被小写,例如,john smith
变为john smith
。无基础模型也会去掉任何重音标记。大小写
表示保留真正的大小写和重音标记。通常,无基础模型更好,除非您知道案例信息对您的任务很重要(例如,命名实体识别或词性标记)。有关多语言和中文模型的信息,请参阅多语言自述文件或原始TensorFlow存储库。--do庠lower庠case
传递给示例训练脚本(或者如果使用自己的脚本并加载标记器,则将do庠lower庠case=true
传递给fulltokenizer)。pip install pytorch-pretrained-bert
9
序列化最佳实践
output目录并重新加载e模型和之后的标记器:
pip install spacy ftfy==4.4.3
python -m spacy download en
0
pip install spacy ftfy==4.4.3
python -m spacy download en
1
配置
bertconfig
用于bertmodel
和bert类实例。openaigptconfig
foropenaigptmodel
和openai gpt类实例。gpt2config
用于gpt2model
和openai gpt-2类实例。transfoxlconfig
用于transfoxlmodel
和transformer xl类实例。from_dict(cls,json_object)
:从python参数字典构造配置的类方法。返回配置类的实例。from_json_file(cls,json_file)
:一个类方法,用于从参数的json文件构造配置。返回配置类的实例。to_dict()
:将实例序列化到python字典。返回字典。to_json_string()
:将实例序列化为json字符串。返回字符串。到json文件(json文件路径)
:将实例保存到json文件。型号
<H4>1。bertmodel
bert model
是基本的bert变换器模型,它有一层加总的令牌、位置和序列嵌入,然后是一系列相同的自关注块(bert base为12,bert large为24)。建模.py
输入id
:torch.longtensor,形状为[batch_size,sequence_length],词汇表中有单词标记索引(请参阅脚本中的标记预处理逻辑extract_features.py
,运行_classifier.py
和运行_ad.py
),以及
令牌类型id
:可选的torch.longtensor形状[批量大小,序列长度],令牌类型索引在[0,1]中选定。类型0对应于a句子a
而类型1对应于a句子b
标记(有关更多详细信息,请参阅bert论文)。注意遮罩
:可选的torch.longtensor形状[批量大小,序列长度],索引在[0,1]中选定。如果某些输入序列长度小于当前批的最大输入序列长度,则使用此掩码。当一个批次有不同长度的句子时,我们通常用它来吸引注意力。output_all_encoded_layers
:控制encoded_layers
输出内容的布尔值,如下所述。默认值:true
编码层
:由输出编码层的值控制
参数:output_all_encoded撸u layers=true
:输出每个注意块末尾的编码隐藏状态列表(即12个完整序列用于bert base,24个用于bert large),每个编码隐藏状态是大小为[批量大小,序列长度,隐藏大小]的torch.floattensor,输出所有编码层=FALse
:只输出与最后一个注意块对应的编码隐藏状态,即单个大小为[批量大小,序列长度,隐藏大小]的torch.floattensor,池输出
:一个大小为[批处理大小,隐藏大小]的torch.floattensor,它是在与输入的第一个字符相关联的隐藏状态(clf
)上预先训练的分类器的输出,用于训练下一个句子任务(参见bert的论文)。bertforpretraining
bertforpretraining
包括bertmodel
变压器,然后是两个预培训主管:bertmodel
类的输入和两个可选标签:蒙版lmu标签
:蒙版语言建模标签:torch.longtensor of shape[批量大小,序列长度],索引选择在[-1,0,…,声音大小]。所有设置为-1的标签都将被忽略(屏蔽),仅计算在[0,…,vocab_size]中设置的标签的损失。下一个句子标签
:下一个句子分类丢失:torch.longtensor形状[批量大小],索引在[0,1]中选定。0=>;下一句是续句,1=>;下一句是随机句。蒙面语言标签
和下一个句子标签
不是无
:输出总损失,即蒙面语言建模损失和下一个句子分类损失之和。屏蔽lmu标签
或下一个句子标签
是无
:输出包含bertformaskedlm
bertformaskedlm
包括bertmodel
转换器和(可能的)经过预培训的蒙面语言建模主管。蒙版lmu标签
:蒙版语言建模标签:torch.longtensor of shape[批量大小,序列长度],索引选择在[-1,0,…,声音大小]。所有设置为-1的标签都将被忽略(屏蔽),仅计算在[0,…,vocab_size]中设置的标签的损失。
<H4>4。屏蔽语言标签
不是无
:输出屏蔽语言建模丢失。为
无:则输出屏蔽语言建模登录。
bertfornextsentencepredition
bertfornextsentencepredition
包括bertmodel
转换器,后跟下一个句子分类标题。bertmodel
类和可选标签:下一个句子标签
:下一个句子分类丢失:torch.longtensor的形状[批量大小]在[0,1]中选择的索引。0=>;下一句是续句,1=>;下一句是随机句。
<H4>5。下一个句子标签
不是无
:输出下一个句子分类丢失。下一个句子标签
是无
:输出下一个句子分类登录。bertforsequenceclassification
bertforsequenceclassification
是一个微调模型,它包括bertmodel
和位于bertmodel
之上的序列级(序列或序列对)分类器。
run_classifier.py
脚本,该脚本可用于使用bert微调单个序列(或序列对)分类器,例如用于mrpc任务。bertformultiplechoice
bertformultiplechoice
是一个微调模型,它包括bertmodel
和bertmodel
上的线性层。
run_swag.py
脚本,该脚本可用于使用bert微调多项选择分类器,例如用于swag任务。Bertfortokenclassification
bertfortokenclassification
是一个微调模型,它包括bertmodel
和位于bertmodel
之上的令牌级分类器
bertforquestionanswering
bertforquestionanswering
是一个微调模型,它包括bertmodel
和一个令牌级别的分类器,它们位于最后隐藏状态的完整序列之上。开始/code>和一个
结束/code>令牌的分数(参见伯特纸)。
run戋squad.py
脚本,该脚本可用于使用bert微调令牌分类器,例如,对于squad任务。openaigptmodel
openai gpt model
是一个基本的openai gpt转换器模型,它有一层总和标记和位置嵌入,然后是一系列12个相同的自我注意块。[sep]
,[cls]
。
如果使用特殊令牌,则在微调期间需要对其进行培训。
特殊嵌入的数量可以使用set num_special_tokens(num_special_tokens)
函数来控制。pip install spacy ftfy==4.4.3
python -m spacy download en
2
total_tokens_embeddings=config.vocab_size+config.n_special
您应该使用关联索引来索引嵌入项。建模/u openai.py
输入id
:形状为[批量大小,序列长度](或更一般的[d_1,…,d_n,序列长度]的torch.longtensor是d_1…d_n是任意维度),单词bpe令牌索引的选择范围为[0,total_tokens_embeddings[位置id
:可选的torch.longtensor,其形状与输入id相同
位置索引(在[0,config.n_positions-1]范围内选择
令牌类型ID
:可选的torch.longtensor,其形状与输入ID相同
您可以使用它向序列中的每个输入令牌添加第三种类型的嵌入
(前两个是单词和位置嵌入)。输入、位置和标记类型的嵌入在第一个自关注块之前在变压器内求和。
<H4>10。隐藏状态
:模型顶部的编码隐藏状态是torch.floattensor,大小为[批量大小,序列长度,隐藏大小](或者更一般地说是[d_1,…,d_n,隐藏大小]…d_n是输入id的维数)openaigptlmheadmodel
openaigptlmheadmodel
包括openaigptmodel
转换器,后面是一个语言建模头,其权重与输入嵌入绑定(无附加参数)。openaigptmodel
类加可选标签:lm_labels
:可选语言建模标签:torch.longtensor of shape[批量大小,序列长度],索引选择在[-1,0,…,词汇大小]。所有设置为-1的标签都将被忽略(屏蔽),仅计算[0,…,vocab_size]中设置的标签的损失。
<H4>11。lm_labels
不是none
:
输出语言建模损失。lm_logits
:语言将logits建模为大小为[batch_size,sequence_length,total_tokens_embeddings]的torch.floattensor(或更一般地说[d_1,…,d_n,total_tokens_embeddings])的d_1…d_n是输入id的维数)openaigptdubleheadsmodel
openaigptmdoubleheadmodel
包括openaigptmodel
变压器,后面跟着两个磁头:多选标记id
:形状为[batch_size,num_choices]的torch.longtensor,具有标记的索引,该标记的隐藏状态应用作多选分类器的输入(通常为每个选择的[cls]标记)。lm_labels
:可选语言建模标签:torch.longtensor of shape[批量大小,序列长度],索引选择在[-1,0,…,词汇大小]。所有设置为-1的标签都将被忽略(屏蔽),仅计算[0,…,vocab_size]中设置的标签的损失。多选标签
:可选多选标签:torch.longtensor of shape[批量大小],在[0,…,num_选项]中选择索引。
<H4>12。lm_labels
和multiple_choice_labels
不是none
:
输出一个损失元组,包括语言建模损失和多项选择损失。lm_logits
:语言将logits建模为torch.floattensor大小[批量大小,数量选择,序列长度,总令牌嵌入量]多项选择登录
:多项选择登录为torch.floattensor大小[批量大小,数值选择]transfoxlmodel
建模_transfo_xl.py
输入id
:形状为[批量大小,序列长度]的torch.longtensor,令牌索引选择范围为[0,self.config.n_token[mems
:以前转发的隐藏状态的可选存储器作为每个层入口的隐藏状态列表(num层)传递。每个隐藏状态都有shape[self.config.mem_len,bsz,self.config.d_model]。请注意,前两个维度在mems
中与input\u ids
最后隐藏状态
:模型顶部的编码隐藏状态,大小为torch.floattensor[批量大小,序列长度,self.config.d\u模型]new_mems
:在每个层的入口列出(num层)更新的mem状态每个mem状态是一个大小为[self.config.mem_len,batch_size,self.config.d_model]的torch.floattensor。请注意,前两个维度在mems
中与input\u ids
从
上一个隐藏状态
和新mems中提取变压器xl各层的隐藏状态列表:
新的mems[0]
)。new_mems[-1]
是最后一层下面的层的隐藏状态的输出,而最后一层的隐藏状态的输出(即,当我们有一个语言建模头在上面时,softmax的输入)。
pip install spacy ftfy==4.4.3
python -m spacy download en
3
<H4>13。transforxllmheadmodel
transfoxllmheadmodel
包括transfoxlmodel
变压器,然后是一个(自适应)软最大磁头,其重量与输入嵌入件相关联。目标
:可选的torch.longtensor形状[批量大小,序列长度],目标标记索引选择范围为[0,self.config.n_token[
<H4>14。softmax_输出
:输出(自适应)softmax:
new_mems
:在每个层的入口列出(num层)更新的mem状态每个mem状态是一个大小为[self.config.mem_len,batch_size,self.config.d_model]的torch.floattensor。请注意,前两个维度在mems
中与input\u ids
gpt2型号
gpt2model
是一个openai gpt-2转换器模型,它有一层加总的令牌和位置嵌入,然后是一系列12个相同的自我注意块。建模/u gpt2.py
输入id
:形状为[批量大小,序列长度](或更一般的[d_1,…,d_n,序列长度]的torch.longtensor是d_1…d_n是任意维度),单词bpe标记索引选择在[0,vocab_size[位置id
:可选的torch.longtensor,其形状与输入id相同
位置索引(在[0,config.n_positions-1]范围内选择
令牌类型ID
:可选的torch.longtensor,其形状与输入ID相同
您可以使用它向序列中的每个输入令牌添加第三种类型的嵌入
(前两个是单词和位置嵌入)。输入、位置和标记类型的嵌入在第一个自关注块之前在变压器内求和。过去
:torch.longtensor的可选列表,其中包含预先计算的隐藏状态(注意块中的键和值),以加快顺序解码(这是显示模型输出的,参见下文)。
<H4>15。隐藏状态
:模型顶部的编码隐藏状态是torch.floattensor,大小为[批量大小,序列长度,隐藏大小](或者更一般地说是[d_1,…,d_n,隐藏大小]…d_n是输入id的维数)以torch.floattensors的形式显示预先计算的隐藏状态列表(每个注意块中的键和值)。它们可以重复使用以加快顺序解码(参见
run-gpt2.py
示例)。gpt2lmheadmodel
gpt2lmheadmodel
包括gpt2model
转换器,然后是一个语言建模头,其权重与输入嵌入绑定(无附加参数)。gpt2model
类加可选标签的输入相同:lm_labels
:可选语言建模标签:torch.longtensor of shape[批量大小,序列长度],索引选择在[-1,0,…,词汇大小]。所有设置为-1的标签都将被忽略(屏蔽),仅计算[0,…,vocab_size]中设置的标签的损失。
<H4>16。lm_labels
不是none
:
输出语言建模损失。lm_logits
:语言将logits建模为torch.floattensor,大小为[批量大小,序列长度,总令牌嵌入](或者更一般地说是[d_1,…,d_n,总令牌嵌入]…d_n是输入id的维数)以torch.floattensors的形式显示预先计算的隐藏状态列表(每个注意块中的键和值)。它们可以重复使用以加快顺序解码(参见
run-gpt2.py
示例)。gpt2doubleheadsmodel
gpt2doubleheadsmodel
包括gpt2model
变压器和两个磁头:<李>一种语言建模头,其权重与输入嵌入(无附加参数)和:
gpt2model
类加上一个分类掩码和两个可选标签:多选标记id
:形状为[batch_size,num_choices]的torch.longtensor,具有标记的索引,该标记的隐藏状态应用作多选分类器的输入(通常为每个选择的[cls]标记)。lm_labels
:可选语言建模标签:torch.longtensor of shape[批量大小,序列长度],索引选择在[-1,0,…,词汇大小]。所有设置为-1的标签都将被忽略(屏蔽),仅计算[0,…,vocab_size]中设置的标签的损失。多选标签
:可选多选标签:torch.longtensor of shape[批量大小],索引在[0,…,数值选项]中选定。lm_labels
和multiple_choice_labels
不是none
:
输出一个损失元组,包括语言建模损失和多项选择损失。lm_logits
:语言将logits建模为torch.floattensor大小[批量大小,数量选择,序列长度,总令牌嵌入量]多项选择登录
:多项选择登录为torch.floattensor大小[批量大小,数值选择]以torch.floattensors的形式显示预先计算的隐藏状态列表(每个注意块中的键和值)。它们可以重复使用以加快顺序解码(参见
run-gpt2.py
示例)。标记器
bertokenizer
bertokenizer
执行端到端的标记化,即基本标记化,然后是字块标记化。词汇文件
:词汇文件的路径。使用小写
:标记时将文本转换为小写。默认值=真max_len
:过滤变压器输入的最大长度。如果none
,则默认为模型的预训练值。默认值=无执行基本标记化
:在wordpice标记化之前执行基本标记化。如果文本已预标记,则设置为false。默认值=真从不拆分:在标记化期间不应拆分的标记列表。默认值=
["[unk]"、"[sep]"、"[pad]"、"[cls]"、"[mask]"]
标记化(文本)
:通过(1)执行基本标记化和(2)字块标记化,转换str
标记列表中的astr
。convert_tokens_to_id(tokens)
:在词汇表中的索引列表中转换int
个标记的列表。将id转换为令牌(令牌)
:在词汇表中的str
令牌列表中转换int
索引列表。保存词汇表(目录路径)
:将词汇表文件保存到目录路径。返回保存的词汇文件的路径:vocab_file_path
。词汇表可以用bertokenizer.from廑pretrained('vocab_file廑u path')
或bertokenizer.from廑pretrained('directory廑u path')
重新加载
BasicTokenizer
和WordPiecetTokenizer
类的详细信息,请参阅tokenization.py
中的文档字符串和代码。. 一般情况下,建议使用bertokenizer
除非您知道自己在做什么。打开aigptTokenizer
openaigptokenizer
执行字节对编码(bpe)标记化。词汇文件
:词汇文件的路径。合并文件
:包含BPE合并的文件的路径。max_len
:过滤变压器输入的最大长度。如果none
,则默认为模型的预训练值。默认值=无特殊标记
:要添加到词汇表中进行微调的标记列表。如果没有安装spacy,并且使用bert的basictokenizer
作为bpe前的标记器,则这些标记不会被拆分。默认值=无标记化(文本)
:通过执行bpe标记化来转换str
标记列表中的astr
。convert_tokens_to_id(tokens)
:在词汇表中的索引列表中转换int
个标记的列表。将id转换为令牌(令牌)
:在词汇表中的str
令牌列表中转换int
索引列表。设置特殊令牌(自身,特殊令牌)
:更新特殊令牌列表(请参阅以上参数)编码(文本)
:通过执行bpe编码,在int
标记列表中转换astr
。解码(id,skip_special_tokens=false,clean_up_tokenization_spaces=false)
:解码字符串中int
索引的列表,并在需要时执行一些后处理:(i)从输出中删除特殊标记,以及(ii)清理标记化空间。保存词汇表(目录路径)
:将词汇表、合并和特殊标记文件保存到目录路径
。返回三个文件的路径:vocab_file_path
,merge_file_path
,special_tokens_file_path
。词汇表可以用openaigptokenizer.from_pretrained('directory_path')
重新加载
openaigptokenizer
的详细信息,请参阅tokenization_openai.py
中的文档字符串和代码。
转换生成器
transfoxltokenizer
执行单词标记化。此标记赋予器可用于自适应softmax,并具有用于计算语料库中的标记的实用程序,以创建按toekn频率排序的词汇表(用于自适应softmax)。有关更多详细信息,请参阅Adaptive Softmax论文(GPU的有效Softmax近似值。bertokenizer
的api(见上文)。transforxltokenizer
中这些附加方法的详细信息,请参阅tokenization_transfo_xl.py
中的文档字符串和代码。
gpt2tokenizer
gpt2tokenizer
执行字节级字节对编码(bpe)标记化。词汇文件
:词汇文件的路径。合并文件
:包含BPE合并的文件的路径。错误
:如何处理Unicode解码错误。默认值=替换
标记化(文本)
:通过执行字节级bpe,在str
标记列表中转换astr
。convert_tokens_to_id(tokens)
:在词汇表中的索引列表中转换int
个标记的列表。将id转换为令牌(令牌)
:转换词汇表中str
标记列表中的int
索引列表。设置特殊令牌(自身,特殊令牌)
:更新特殊令牌列表(请参阅以上参数)编码(文本)
:通过执行字节级bpe,在int
标记列表中转换astr
。解码(令牌)
:在astr
中转换回int
令牌的列表
保存词汇表(目录路径)
:将词汇表、合并和特殊标记文件保存到目录路径
。返回三个文件的路径:vocab_file_path
,merge_file_path
,special_tokens_file_path
。词汇表可以用openaigptokenizer.from_pretrained('directory_path')
重新加载
gpt2tokenizer
的详细信息,请参阅tokenization_gpt2.py
。
优化器
伯塔姆
bertadam
是一个torch.optimizer
优化器,适用于更接近于bert的tensorflow实现中使用的优化器。与pytorch adam优化器的区别如下:lr
:学习率预热
:预热的t_total
部分,-1
表示无预热。默认值:-1
t_total
:学习的培训步骤总数
速率表,-1
表示恒定的学习速率。默认值:-1
时间表
:用于热身的时间表(见上文)。
可以是'warmup_linear'
,'warmup_constant'
,'warmup_cosine'
,'none'
,none
或'u lrschedule
对象(见下文)。
如果none
或'none'
,则学习速率始终保持恒定。
默认值:'warmup_linear'
b1
:亚当斯b1。默认值:0.9
b2
:亚当斯b2。默认值:0.999
e
:亚当斯·爱普西隆。默认值:1e-6
重量衰减:
重量衰减。默认值:0.01
max_grad_norm
:渐变的最大norm(-1
表示没有剪辑)。默认值:1.0
openaiadam
openaiadam
类似于bertadam
。
与bertadam
的区别在于openaiadam
补偿了常规adam优化器中的偏差。openaiadam
接受与bertaam
相同的参数
学习率表
.optimization
模块还以继承\u lrschedule
的schedule对象的形式提供附加的计划。
所有lrschedule子类在构造时都接受warmup
和t_total
参数。
当\u lrschedule
对象被传递到bertadam
或openaiadam
时,
忽略优化器上的warmup
和t_total
参数,并使用lrschedule
对象中的参数。
已实施计划的概述:constantlr
:始终返回学习速率1。warmupconstantschedule
:在warmup
训练步骤的分数上,学习率从0线性增加到1。
保持学习率等于1。热身后。
warmuplinearschedule
:在训练步骤的分数上,学习率从0线性增加到1。
线性降低学习率从1。0。剩余的1-预热步骤。
warmupcosineschedule
:在warmup
训练步骤的分数上,学习率从0线性增加到1。
将学习率从1降低。0。余弦曲线后的剩余1-预热步骤。
如果
周期
(默认值=0.5)与默认值不同,则预热后的学习率遵循余弦函数。
warmupcosinewithhardrestsschedule
:在训练步骤的分数上,学习率从0线性增加到1。
如果周期
(默认值=1.)与默认值不同,则学习速率遵循周期
乘以余弦衰减学习速率(硬重启)。
WarmupCosinewhiwarmUprestartschedule
:所有训练进度分成等长的个周期
(默认值=1.)部分。
每个部分都遵循一个时间表,第一个热身阶段的分数从0线性增加。到1。
接着学习率从1下降。0。沿着余弦曲线。
注意,所有循环中所有预热步骤的总数等于预热
*循环
示例
<表><广告> < /广告><正文>小节
说明
培训大型模型:介绍、工具和示例 如何利用梯度累积、多gpu训练、分布式训练、cpu优化和16位训练训练bert模型 使用bert进行微调:运行示例 在中运行示例:extract戋classif.py、 run戋classifier.py
、run戋classifier.py
、run戋squad.py
和run戋lm戋finetning.py
使用openai-gpt、transformer xl和gpt-2进行微调 在中运行示例: /examples
:运行openai-gpt.py
,运行transfo-xl.py
和运行gpt2.py
微调GPU上的Bert Large 如何微调 bert large
培训大型模型:简介、工具和示例
run_squad.py
:梯度累积、多GPU训练、分布式训练和16位训练。有关如何使用这些技术的更多详细信息,请阅读我本月早些时候发布的关于在Pythorch中训练大批量的提示。--gradient_accumulation_steps
参数提供大于1的整数来使用。每一步的批数将除以这个整数,梯度将累加在梯度累加步骤
步骤上。
--local_rank
参数(见下文)提供大于或等于0的整数,可以激活分布式训练。--fp16
标志激活此选项,并且可以使用--loss_scale
标志播放损耗缩放(有关损耗缩放的详细信息,请参阅前面链接的文档)。在动态调整刻度的情况下,损耗刻度可以为零;在静态调整的情况下,损耗刻度可以为2的正幂。apex
内部以及如何使用apex
的更多信息。nvidia团队在pytorch bert上进行的测试结果(以及我在复制这些测试时的测试结果)可以在当前存储库的相关pr中查阅pip install spacy ftfy==4.4.3
python -m spacy download en
4
$this_machine_index
是分配给您的每台机器(0,1,2…)的顺序索引,排名为0的机器具有IP地址192.168.1.1
和开放端口1234
使用bert进行微调:运行示例
在dev set上粘合结果
< /广告><正文>任务 公制
结果 可乐 马修的更正 57.29 SST-2 准确度 93.00 MRPC f1/精度 88.85/83.82 STS-B 皮尔逊/斯皮尔曼更正 89.70/89.37 qqp 精度/f1 90.72/87.41 mnli 匹配的科目/不匹配的科目 83.95/84.39 qnli 准确度 89.04 < RTE > 准确度 61.01 WNLI 准确度 53.52 $glue-dir
pip install spacy ftfy==4.4.3
python -m spacy download en
5
mrpc
$glue-dir
pip install spacy ftfy==4.4.3
python -m spacy download en
6
pip install spacy ftfy==4.4.3
python -m spacy download en
7
小队
$squad\u dir
目录中。pip install spacy ftfy==4.4.3
python -m spacy download en
8
pip install spacy ftfy==4.4.3
python -m spacy download en
9
抽汲
pip install [--editable] .
0
pip install [--editable] .
1
lm微调
训练批大小=200
和最大长度=128
:readme
文件夹的examples/lm廑finetning/
中有详细说明。openai gpt、transformer xl和gpt-2:运行示例
在rocstories数据集上微调openai gpt
pip install [--editable] .
2
在WikiText 103数据集上评估预先训练的Transformer XL
pip install [--editable] .
3
从openai的gpt-2模型无条件和有条件地生成
pip install [--editable] .
4
pip install [--editable] .
5
在gpu上微调bert large
pip install [--editable] .
6
pip install [--editable] .
7
pip install [--editable] .
8
pip install [--editable] .
9
笔记本
第三个笔记本(比较tf和pt型号mlm nsp.ipynb" rel="nofollow">比较tf和pt型号mlm nsp.ipynb)比较了tensorflow和pytorch模型计算的使用预先训练的屏蔽语言模式的屏蔽令牌语言建模预测。ling型号。
请按照笔记本中的说明运行和修改它们。
命令行界面
提供了一个命令行接口,用于转换bertforpretraining
类的pytorch转储中的tensorflow检查点(对于bert)或openaigptmodel
类的pytorch转储中的numpy检查点(对于openai gpt)。
伯特
您可以在pytorch保存文件中使用由google发布的pretrained models)转换为pytorch.py" rel="nofollow">将检查点转换为pytorch.py
脚本。
此cli将tensorflow检查点(三个文件以bert_model.ckpt
开头)和相关的配置文件(bert_config.json
)作为输入,并为此配置创建pytorch模型,以pytorch模式从tensorflow检查点加载权重。l并将生成的模型保存到标准py torch保存文件中,该文件可以使用torch.load()
导入(请参阅extract\u features.py
中的示例,run\u classifier.py
和run戋squad.py
)。
只需运行此转换脚本一次即可获得pytorch模型。然后,您可以忽略tensorflow检查点(以bert_model.ckpt
开头的三个文件),但请确保保留配置文件(bert_config.json
)和词汇文件(vocab.txt
),因为它们也是pytorch模型所需的。
要运行这个特定的转换脚本,需要安装tensorflow和pytorch(pip install tensorflow
). 存储库的其余部分只需要pytorch。
下面是一个预先训练的bert base uncased
模型的转换过程示例:
pip install spacy ftfy==4.4.3 python -m spacy download en0
openai gpt
下面是一个经过预先训练的openai gpt模型的转换过程示例,假设您的numpy检查点保存为与openai预训练模型相同的格式(请参见此处)
pip install spacy ftfy==4.4.3 python -m spacy download en1
变压器XL
下面是一个预先训练的Transformer XL模型的转换过程示例(请参见此处)
pip install spacy ftfy==4.4.3 python -m spacy download en2
GPT-2
下面是一个经过预先训练的openai的gpt-2模型的转换过程示例。
pip install spacy ftfy==4.4.3 python -m spacy download en3
TPU
TPU支持和预培训脚本
Pythorch(0.4.1)的当前稳定版本不支持TPU。不过,Pythorch(v1.0)的下一版本应该支持TPU培训,预计很快就会发布(请参阅最近的官方公告)。
下一版本发布时,我们将添加TPU支持。
最初的tensorflow代码还包含两个用于训练前bert的脚本:create_pretraining_data.py和run_pretraining.py
因为,预培训bert是一个特别昂贵的操作,基本上需要在合理的时间内完成一个或多个tpu(请参见此处的详细信息SE培训前脚本。