当前位置:首页 > 财经

answering 横扫各项NLP任务的BERT模型有了PyTorch实现!提供转换脚本

【新智元指南】Google NLP模型的官方TensorFlow实现非常强大。现在,它的PyTorch版本来了!只需简单运行一次转换脚本就可以得到一个PyTorch模型,结果和原版本差不多甚至更好。

上周,谷歌最强的NLP模型BERT开放了官方的TensorFlow代码和预训练模型,引起了很多关注。

现在,PyTorch用户的福利来了:一个叫拥抱脸的团队最近披露了谷歌官方的TensorFlow library of BERT模型的op-for-op PyTorch的重新实现:

https://github.com/huggingface/pytorch-pretrained-BERT

这个实现可以为BERT加载任何预先训练好的TensorFlow检查点(尤其是Google的官方预训练模型),并提供一个转换脚本。

BERT基和BERT大模型的参数分别为110M和340M。为了获得良好的性能,很难在单个GPU上使用推荐的批处理大小来微调它们。为了帮助微调模型,回购还提供了三种可以在微调脚本中激活的技术:梯度累积、多GPU和分布式训练。

结果如下:

在序列级MRPC分类任务上,该实现使用小型BERT-base模型再现了原始实现的84%-88%的准确率。在token级的SQuAD 任务上,该个实现使用小型BERT-base模型再现了原始实现的88.52 F1的结果。

作者指出,他正在努力复制其他任务的结果和一个更大的BERT模型。

BERT模型的PyTorch实现

这个存储库包含了Google BERT模型的官方TensorFlow存储库的op-for-op PyTorch的重新实现。谷歌的官方知识库与Bert的论文《BERT:用于语言理解的深度双向变形金刚的预训练》一起出版,作者是雅各布·德夫林(Jacob Devlin)、张明伟(Ming-Wei Chang)、肯顿·李(Kenton Lee)和克里斯蒂娜·图塔诺娃(Kristina Toutanova)。

这个实现可以为BERT(尤其是Google的预训练模型)加载任何预训练的TensorFlow检查点,并提供一个转换脚本(见下文)。

此外,我们将在本周晚些时候添加模型代码的多语言版本和中文版本。

脚本:加载任何张量流检查点

使用convert _ TF _ check point _ to _ PyTorch . py脚本,可以转换py torch保存文件(尤其是Google发布的官方预训练模型)中BERT的任何TensorFlow检查点。

这个脚本以TensorFlow检查点(三个文件,以bert_model.ckpt开头)和相关的配置文件(bert_config.json)为输入,为这个配置创建PyTorch模型。从PyTorch模型的TensorFlow检查点加载权重,并将生成的模型保存在标准的PyTorch保存文件中,该文件可以通过torch.load()导入(参见extract_features.py、run_classifier.py、run_squad.py中的示例)。

您只需要运行这个转换脚本一次,就可以得到一个PyTorch模型。然后,可以忽略TensorFlow检查点(以bert_model.ckpt开头的三个文件),但是一定要保留配置文件(bert_config.json)和词汇文件(vocab.txt),因为PyTorch模型也需要这些文件。

要运行这个特定的转换脚本,您需要安装TensorFlow和PyTorch。图书馆的其余部分只需要PyTorch。

以下是一个预先训练的BERT-Base未封闭模型的转换过程示例:

export BErt _ BASE _ DIR =/path/to/BERT/uncased _ L-12 _ H-768 _ A-12 Tyson convert _ TF _ check point _ to _ py torch . py-TF _ check point _ path $ BERT _ BASE _ DIR/BERT _ model . ckpt-BERT _ config _ file $ BERT _ BASE _ DIR/BERT _ config . JSON-py torch _ dump _ path $ BERT _ BASE _ DIR/py torch _ model bin。

您可以在此下载谷歌的培训前转型模型:

https://github.com/google-research/bert#pre-trained-models

伯特的PyTorch模型

在这个库中,我们提供了三个PyTorch模型,可以在modeling.py中找到:

BertModel - 基本的BERT Transformer 模型BertForSequenceClassification - 顶部带有sequence classification head的BERT模型BertForQuestionAnswering - 顶部带有token classification head 的BERT模型,

以下是每个模型的一些细节。

1 .BertModel

BertModel是一个基本的BERT Transformer模型,它包括一个求和点、位置和序列嵌入层,然后是一系列相同的自关注块(BERT-base是12块,BERT-large是24块)。

输入和输出与张量流模型相同。

具体来说,这个模型的输入是:

input_ids:一个形状为[batch_size, sequence_length]的torch.LongTensor,在词汇表中包含单词的token索引token_type_ids:形状[batch_size, sequence_length]的可选torch.LongTensor,在[0,1]中选择token类型索引。类型0对应于句子A,类型1对应于句子B。attention_mask:一个可选的torch.LongTensor,形状为[batch_size, sequence_length],索引在[0,1]中选择。

模型的输出是一个元组,包含:

all_encoder_layers:一个大小为[batch_size, sequence_length,hidden_size]的torch.FloatTensor列表,它是每个注意块末端隐藏状态的完整序列列表(即BERT-base的12个完整序列,BERT-large的24个完整序列)pooled_output:一个大小为[batch_size, hidden_size]的torch.FloatTensor,它是在与输入(CLF)的第一个字符相关联的隐藏状态之上预训练的分类器的输出,用于训练Next-Sentence任务(参见BERT的论文)。

extract_features.py脚本提供了一个如何使用这种模型的例子,它可以用来为给定的输入提取模型的隐藏状态。

2 .BertForSequenceClassification

BertforseSequenceClassification是一个微调模型,它包括BertModel和BertModel顶部的序列级分类器。

序列级分类器是一个线性层,它将输入序列中第一个字符的最后一个隐藏状态作为输入(参见BERT论文中的图3a和3b)。

run_classifier.py脚本提供了一个如何使用这种模型的例子,它可以用来使用BERT微调单个序列(或序列对)分类器,例如,对于MRPC任务。

3.问题回答

BertForQuestionAnswering是一个微调模型,包括BertModel,它在最后一个隐藏状态的完整序列上有令牌级分类器。

令牌级分类器将最后一个隐藏状态的完整序列作为输入,并计算每个令牌的分数(参见BERT论文的图3c和3d)。

run _ can . py脚本提供了一个如何使用这个模型的例子,它可以用来使用BERT来微调令牌分类器,例如,对于SCAnD任务。

安装、要求、测试

这段代码已经在Python 3.5+上测试过。先决条件是:

PyTorch (> = 0.4.1)tqdm

要安装依赖项:

pip install -r ./requirements.txt

测试文件夹包含一系列可以使用pytest运行的测试(如有必要,安装pytest: pip安装pytest)。

您可以使用以下命令运行测试:

python -m pytest -sv测试/

大规模训练:梯度积累,多GPU,分布式训练

BERT-base和BERT-large的模型参数分别为110M和340M。为了获得良好的性能(大多数情况下批量为32),很难在单个GPU上对其进行微调。

为了帮助微调这些模型,我们引入了四种可以在微调脚本run_classifier.py和run _ squad中激活的技术:优化CPU、梯度累加、多gpu和分布式训练。

有关如何使用这些技术的更多详细信息,您可以阅读这篇关于PyTorch批处理培训技能的文章:

https://medium . com/huging face/training-big-batters-practical-tips-on-1-GPU-multi-GPU-distributed-setups-EC 88 C3 e 51255

微调BERT:运行示例

我们展示了与原始实现相同的示例:微调MRPC分类语料库上的序列分类器,以及微调问答数据集“小队”上的令牌分类器。

在运行这些示例之前,您应该下载GLUE数据并将其提取到目录$GLUE_DIR中。您还需要下载BERT-Base检查点,将其提取到一个目录$BERT_BASE_DIR,并将其转换为上一节中描述的PyTorch版本。

这个示例代码是基于微软研究自由翻译语料库(MRPC)和优化的BERT-Base。在单个K-80上运行不到10分钟。

exportGLUE _ DIR =/path/to/GLUE python run _ classifier . py-task _ name MRPC-do _ train-do _ eval-do _ lower _ case-data _ DIR $ GLUE _ DIR/MRPC/-vocab _ file $ BERT _ BASE _ DIR/vocab . txt-BERT _ config _ file $ BERT _ BASE _ DIR/BERT _ config . JSON-init _ check point $ BERT _ PYTORCH _ DIR/py TORCH _ model . bin-max _ seq _ length 128-train _ batch _ size 32-learning _ rate-5

基于原始超参数,评价结果达到84%-88%。

第二个例子是基于班长问答任务微调BERT-Base。

export SKBall _ DIR =/path/to/SKBallPYTHON run _ SKBall . py-vocab _ file $ BERT _ BASE _ DIR/vocab . txt-BERT _ config _ file $ BERT _ BASE _ DIR/BERT _ config . JSON-init _ check point $ BERT _ PYTORCH _ DIR/py TORCH _ model . bin-do _ train-do _ predict-do _ lower _ case-train _ file $ FACTB _ DIR/train-v 1 . JSON-TRAIN _ batch _ size../debug _班长/

使用以前的超参数进行训练,可以获得以下结果:

{“f1”:88.52381567990474,“精确匹配”:81.22043519394512}

在图形处理器上调谐BERT-大

上面列出的选项允许BERT-large在GPU上轻松微调,而不是像最初的实现那样使用TPU。

例如,在服务器上使用4 k-80 s,可以在18小时内完成对with任务的BERT-大型模型的微调。我们的结果与张量流的结果相似(实际上略高):

{“精确_匹配”:84.56953642384106,“f1”:91.04028647786927

为了获得这些结果,我们使用了以下组合:

多GPU训练(在多GPU服务器上自动激活),梯度累积在CPU上执行优化步骤,将Adam的平均值存储在RAM中。

以下是我们在本次运行中使用的超参数的完整列表:

python。/run _ SCANDLE . py-VOC ab _ file $ BERT _ LARGE _ DIR/VOC ab . txt-BERT _ config _ file $ BERT _ LARGE _ DIR/BERT _ config . JSON-init _ check point $ BERT _ LARGE _ DIR/py torch _ model . bin-do _ lower _ case-do _ TRAIN-do _ predict-TRAIN _ file $ SCANDLE _ predict _ file $ SCANDLE _ EVAL-learning _ rate 3 e-5-num _ TRAIN _ epochs 2-max _ seq _ length 384-doc _ stride 128-OUTPUT _ DIR

阅读更多:

1.《answering 横扫各项NLP任务的BERT模型有了PyTorch实现!提供转换脚本》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《answering 横扫各项NLP任务的BERT模型有了PyTorch实现!提供转换脚本》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/caijing/1031285.html

上一篇

一个骗子的自白:我是怎么掏空老人钱包

下一篇

李斌当选全国政协秘书长 到底什么情况呢?

mv分镜头脚本范例 编剧|剧本和分镜头剧本的写作方法(附:史上最全电影分镜制作技巧)

双11咋买更优惠 用函数模型帮妈妈做攻略

双11咋买更优惠 用函数模型帮妈妈做攻略

关注店铺领取10元优惠券,与三个朋友分享链接1000元以上减150元,“双11”购物跨店津贴400元以上减50元,红包存钱卡可领取91元...那么问题来了:原价328元的百褶裙最低价是多少?如何以更好的价格购买?在今年“双...

cg模型 【榜单】201807期CG模型网作品展

  • cg模型 【榜单】201807期CG模型网作品展
  • cg模型 【榜单】201807期CG模型网作品展
  • cg模型 【榜单】201807期CG模型网作品展

央企正研发新冠疫苗 已完成基因序列核查

国务院联合防控机制2月18日召开新闻发布会。记者从新闻发布会上了解到,药品相关央企正在北京和武汉开展疫苗研发工作。目前灭活疫苗研发正在进行病毒培养,重组基因工程疫苗研发的基因序列验证已经完成。 此外,国药集团的中国生物已经...

黑龙江省望奎县 望奎县正式脱贫摘帽!退出贫困县序列!

2018年 8月10日 天气:17/27℃小雨 明天:多云17/27℃ 黑龙江省人民政府关于同意甘南县等5县(市)脱贫脱帽的批复...

婴儿的依恋类型 婴儿期的依恋模型的分类

安全附件 安全宝宝似乎有两种同等的能力。当他们感到安全时,他们可以用自己的冲动探索周围,当他们感到不安全时,他们自然可以从联系中寻求安慰。安斯沃斯得出结论,婴儿在团聚期间的反应,而不是在分离期间的反应,可以更好地表明依恋是安全的还是不安全的。安全的宝宝——不管他们分开时有多难过——通过与母亲...

bat脚本 windows定时自动运行R脚本的正确姿势

  • bat脚本 windows定时自动运行R脚本的正确姿势
  • bat脚本 windows定时自动运行R脚本的正确姿势
  • bat脚本 windows定时自动运行R脚本的正确姿势

定时运行 windows定时自动运行R脚本的正确姿势

  • 定时运行 windows定时自动运行R脚本的正确姿势
  • 定时运行 windows定时自动运行R脚本的正确姿势
  • 定时运行 windows定时自动运行R脚本的正确姿势