Transformers 简介(上)
作者|huggingface
编译|VK
来源|Github
Transformers是TensorFlow 2.0和PyTorch的最新自然语言处理库
Transformers(以前称为pytorch-transformers和pytorch-pretrained-bert)提供用于自然语言理解(NLU)和自然语言生成(NLG)的最先进的模型(BERT,GPT-2,RoBERTa,XLM,DistilBert,XLNet,CTRL ...) ,拥有超过32种预训练模型,支持100多种语言,并且在TensorFlow 2.0和PyTorch之间具有深厚的互操作性。
特性
- 与pytorch-transformers一样易于使用
- 像Keras一样强大而简洁
- 在NLU和NLG任务上具有高性能
- 教育者和从业者进入的门槛低
面向所有人的最新NLP架构
- 深度学习研究人员
- 练习实践学习人员
- AI/ML/NLP教师和教育者
降低计算成本
- 研究人员可以共享训练好的模型,而不必总是再训练
- 从业人员可以减少计算时间和生产成本
- 具有30多种预训练模型的10种架构,其中一些采用100多种语言
为模型生命周期的每个部分选择合适的框架
- 3行代码训练最先进的模型
- TensorFlow 2.0和PyTorch模型之间的深层互操作性
- 在TF2.0/PyTorch框架之间随意迁移模型
- 无缝选择合适的框架进行训练,评估和生产
章节 | 描述 |
---|---|
安装 | 如何安装套件 |
模型架构 | 体系结构(带预训练权重) |
在线演示 | 试用文本生成功能 |
用法 | 分词和模型使用:Bert和GPT-2 |
TF2.0和PyTorch | 用10行代码训练TF2.0模型,并将其加载到PyTorch中 |
管道 | 使用管道:使用管道进行分词和微调 |
微调与使用脚本 | 使用提供的脚本:GLUE,SQuAD和文本生成 |
分享你的模型 | 上传和与社区共享你的微调模型 |
从pytorch-transformers到 transformers | 将代码从pytorch-transformers迁移到transformers |
从pytorch-pretrained-bert迁移到pytorch-transformers | 将代码从pytorch-pretrained-bert迁移到transformers |
安装
此仓库已在Python 3.5 +,PyTorch 1.0.0+和TensorFlow 2.0.0-rc1上进行了测试
你应该安装虚拟环境中的transformers。如果你不熟悉Python虚拟环境,请查看用户指南。
使用你要使用的Python版本创建一个虚拟环境并激活它。
现在,如果你想使用transformers,你可以使用pip进行安装。如果你想使用这些示例,则必须从源代码安装它。
pip安装
首先,你需要安装TensorFlow 2.0或PyTorch。有关适用于你平台的特定安装命令,请参阅TensorFlow安装页面和/或PyTorch安装页面。
安装TensorFlow 2.0或PyTorch后,可以使用pip如下安装transformers:
pip install transformers
获取源码
同样在这里,你首先需要安装TensorFlow 2.0或PyTorch中。有关适用于你平台的特定安装命令,请参阅TensorFlow安装页面和/或PyTorch安装页面。
在安装TensorFlow 2.0或PyTorch之后,你可以通过克隆存储库并运行以下命令从源代码进行安装:
git clone https://github.com/huggingface/transformers
cd transformers
pip install .
更新存储库时,应按以下方式升级transformers及其依赖项:
git pull
pip install --upgrade .
运行示例
示例包含在存储库中,但未随库一起提供。
因此,为了运行示例的最新版本,你需要如上所述从源代码安装。
查看自述文件,了解如何运行示例。
测试
该库和一些示例脚本包括一系列测试。可以在tests文件夹中找到库测试,而在examples文件夹中可以找到示例测试。
根据安装的框架(TensorFlow 2.0或PyTorch),不相关的测试将被跳过。如果要执行所有测试,请确保两个框架都已安装。
这是为库运行测试的最简单方法:
pip install -e ".[testing]"
make test
对于示例:
pip install -e ".[testing]"
pip install -r examples/requirements.txt
make test-examples
有关详细信息,请参阅提供指南。
你要在移动设备上运行Transformer模型吗?
你应该查看我们的swift-coreml-transformers仓库。
https://github.com/huggingface/swift-coreml-transformers
它包含了一套工具来转换PyTorch或TensorFlow 2.0训练的transformers模型(目前包含GPT-2,DistilGPT-2,BERT和DistilBERT)以CoreML模型运行在iOS设备上。
在将来的某个时候,你将能够从预训练或微调模型无缝过渡到在CoreML中进行生产,或者在CoreML中对模型或应用进行原型设计,然后从TensorFlow 2.0和研究其超参数或体系结构!
模型架构
transformers目前提供以下NLU / NLG体系结构:
- BERT
- GPT
- GPT-2
- Transformer-XL
- XLNet
- XLM
- RoBERTa
- DistilBERT
- CTRL
- CamemBERT
- ALBERT
- T5
- XLM-RoBERTa
- MMBT
- FlauBERT
- 其他社区的模型
- 想要贡献一个新的模型吗?我们已经添加了详细的教程和模板来指导你添加新模型的过程。你可以在存储库的templates文件夹中找到它们。
在线演示
由Transformer.huggingface.co的Hugging Face团队构建的 Write With Transformer是此仓库的文本生成功能的正式演示。你可以用它完成GPT2Model,TransfoXLModel和XLNetModel一些实验。
快速浏览
让我们做一个快速浏览。每个模型架构的详细示例(Bert、GPT、GPT-2、Transformer-XL、XLNet和XLM)可以在完整文档中找到
(https://huggingface.co/transformers/)。
import torch
from transformers import *
# transformer有一个统一的API
# 有10个Transformer结构和30个预训练权重模型。
#模型|分词|预训练权重
MODELS = [(BertModel, BertTokenizer, 'bert-base-uncased'),
(OpenAIGPTModel, OpenAIGPTTokenizer, 'openai-gpt'),
(GPT2Model, GPT2Tokenizer, 'gpt2'),
(CTRLModel, CTRLTokenizer, 'ctrl'),
(TransfoXLModel, TransfoXLTokenizer, 'transfo-xl-wt103'),
(XLNetModel, XLNetTokenizer, 'xlnet-base-cased'),
(XLMModel, XLMTokenizer, 'xlm-mlm-enfr-1024'),
(DistilBertModel, DistilBertTokenizer, 'distilbert-base-cased'),
(RobertaModel, RobertaTokenizer, 'roberta-base'),
(XLMRobertaModel, XLMRobertaTokenizer, 'xlm-roberta-base'),
]
# 要使用TensorFlow 2.0版本的模型,只需在类名前面加上“TF”,例如。“TFRobertaModel”是TF2.0版本的PyTorch模型“RobertaModel”
# 让我们用每个模型将一些文本编码成隐藏状态序列:
for model_class, tokenizer_class, pretrained_weights in MODELS:
# 加载pretrained模型/分词器
tokenizer = tokenizer_class.from_pretrained(pretrained_weights)
model = model_class.from_pretrained(pretrained_weights)
# 编码文本
input_ids = torch.tensor([tokenizer.encode("Here is some text to encode", add_special_tokens=True)]) # 添加特殊标记
with torch.no_grad():
last_hidden_states = model(input_ids)[0] # 模型输出是元组
# 每个架构都提供了几个类,用于对下游任务进行调优,例如。
BERT_MODEL_CLASSES = [BertModel, BertForPreTraining, BertForMaskedLM, BertForNextSentencePrediction,
BertForSequenceClassification, BertForTokenClassification, BertForQuestionAnswering]
# 体系结构的所有类都可以从该体系结构的预训练权重开始
#注意,为微调添加的额外权重只在需要接受下游任务的训练时初始化
pretrained_weights = 'bert-base-uncased'
tokenizer = BertTokenizer.from_pretrained(pretrained_weights)
for model_class in BERT_MODEL_CLASSES:
# 载入模型/分词器
model = model_class.from_pretrained(pretrained_weights)
# 模型可以在每一层返回隐藏状态和带有注意力机制的权值
model = 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:]
#模型与Torchscript兼容
model = model_class.from_pretrained(pretrained_weights, torchscript=True)
traced_model = torch.jit.trace(model, (input_ids,))
# 模型和分词的简单序列化
model.save_pretrained('./directory/to/save/') # 保存
model = model_class.from_pretrained('./directory/to/save/') # 重载
tokenizer.save_pretrained('./directory/to/save/') # 保存
tokenizer = BertTokenizer.from_pretrained('./directory/to/save/') # 重载
快速游览TF2.0的训练和与PyTorch的互操作性
让我们做一个快速的例子如何用12行代码训练TensorFlow 2.0模型,然后加载在PyTorch快速检验/测试。
import tensorflow as tf
import tensorflow_datasets
from transformers import *
# 从预训练模型/词汇表中加载数据集、分词器、模型
tokenizer = BertTokenizer.from_pretrained('bert-base-cased')
model = TFBertForSequenceClassification.from_pretrained('bert-base-cased')
data = tensorflow_datasets.load('glue/mrpc')
# 准备数据集作为tf.data.Dataset的实例
train_dataset = glue_convert_examples_to_features(data['train'], tokenizer, max_length=128, task='mrpc')
valid_dataset = glue_convert_examples_to_features(data['validation'], tokenizer, max_length=128, task='mrpc')
train_dataset = train_dataset.shuffle(100).batch(32).repeat(2)
valid_dataset = valid_dataset.batch(64)
# 准备训练:编写tf.keras模型与优化,损失和学习率调度
optimizer = tf.keras.optimizers.Adam(learning_rate=3e-5, epsilon=1e-08, clipnorm=1.0)
loss = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)
metric = tf.keras.metrics.SparseCategoricalAccuracy('accuracy')
model.compile(optimizer=optimizer, loss=loss, metrics=[metric])
# 用tf.keras.Model.fit进行测试和评估
history = model.fit(train_dataset, epochs=2, steps_per_epoch=115,
validation_data=valid_dataset, validation_steps=7)
# 在PyTorch中加载TensorFlow模型进行检查
model.save_pretrained('./save/')
pytorch_model = BertForSequenceClassification.from_pretrained('./save/', from_tf=True)
#让我们看看我们的模型是否学会了这个任务
sentence_0 = "This research was consistent with his findings."
sentence_1 = "His findings were compatible with this research."
sentence_2 = "His findings were not compatible with this research."
inputs_1 = tokenizer.encode_plus(sentence_0, sentence_1, add_special_tokens=True, return_tensors='pt')
inputs_2 = tokenizer.encode_plus(sentence_0, sentence_2, add_special_tokens=True, return_tensors='pt')
pred_1 = pytorch_model(inputs_1['input_ids'], token_type_ids=inputs_1['token_type_ids'])[0].argmax().item()
pred_2 = pytorch_model(inputs_2['input_ids'], token_type_ids=inputs_2['token_type_ids'])[0].argmax().item()
print("sentence_1 is", "a paraphrase" if pred_1 else "not a paraphrase", "of sentence_0")
print("sentence_2 is", "a paraphrase" if pred_2 else "not a paraphrase", "of sentence_0")
欢迎关注磐创博客资源汇总站:
http://docs.panchuang.net/
欢迎关注PyTorch官方中文教程站:
http://pytorch.panchuang.net/
OpenCV中文官方文档:
http://woshicver.com/
Transformers 简介(上)的更多相关文章
- Android系统简介(上):历史渊源
上个月,看到微信的一系列文章,讲到Linux的鼻祖-李纳斯的传记<Just for Fun>, 其人神乎其能, 其人生过程非常有趣,值得每个程序员细细品味. 而实际上,对我而已,虽然做软件 ...
- Transformers 简介(下)
作者|huggingface 编译|VK 来源|Github Transformers是TensorFlow 2.0和PyTorch的最新自然语言处理库 Transformers(以前称为pytorc ...
- redis 第二篇 系统命令简介 上
一.系统级命令(不归属任何一个数据结构) 从keys命令说起 1. 可以模式匹配 也就是可以用正则表达式的方式来匹配 格式为KEYS pattern glob风格通配符规则 ? 匹配一个字符 ...
- Identity Server 4 原理和实战(完结)_----选看 OAuth 2.0 简介(上)
https://www.yuque.com/yuejiangliu/dotnet/cg95ni 代表资源所有者的凭据 授权 Authorization Grant 授权是一个代表着资源所有者权限的凭据 ...
- 上海华魏光纤传感科技有限公司 招聘 《.NET研发工程师》
代友招聘 <.NET研发工程师> **** 公司简介 **** 上海华魏光纤传感技术有限公司成立于2001年,注册资金1458.16万人民币,专业从事光纤传感技术的研究开发,为交通.市政等 ...
- Volley(三)—— ImageRequest & Request简介
Volley(三)—— ImageRequest & Request简介 上 篇文章我们讲 到了如何用volley进行简单的网络请求,我们可以很容易的接受到string.JsonObjec类型 ...
- Android系统简介(中):系统架构
Android的系统架构栈分为4层,从上往下分别是Applications.Application framework.Libraries & Android Runtime.Linux ...
- c#委托和事件(上)
C# 中的委托和事件 引言 委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真 ...
- Linux内核分析(四)----进程管理|网络子系统|虚拟文件系统|驱动简介
原文:Linux内核分析(四)----进程管理|网络子系统|虚拟文件系统|驱动简介 Linux内核分析(四) 两天没有更新了,上次博文我们分析了linux的内存管理子系统,本来我不想对接下来的进程管理 ...
随机推荐
- IDEA Java 类注释、方法注释模板(可实现自动参数使用生成)
JAVA 类文件注释设置 设置地方: 模板 /** * <p> * $description * </p> * * @author Tophua * @since ${DATE ...
- git指令-撤销修改
git指令-撤销修改 如果在文件中添加了错误的内容,可以撤销修改 eg: 解决: 可以删掉最后一行,手动把文件恢复到上一个版本的状态: 使用git status 你可以发现,Git会告诉你,git c ...
- python 写入 execl 文件 之 xlwt 模块
1. xlwt 安装 pip install xlwt 2. xlwt 操作, 代码 #!/usr/bin/env python3 import xlwt # 只能创建 新的 excel 文件 # 1 ...
- dns原理介绍及实践问题总结
1 问题引入: a) 域名劫持: dns过程中某个环节被攻击/篡改,导致dns结果为劫持者的服务器.例如竞争对手将你方的app下载地址篡改为他方的app下载地址. b) 对现网用户进行监控时,发现个别 ...
- qt creator源码全方面分析(3-2)
目录 qtcreator.pri 判断重复包含 定义版本信息 VERSION 定义IDE名称 启用C++14 CONFIG 自定义函数 Replace Functions Test Functions ...
- SPA中前端路由基本原理与实现方式
SPA 前端路由原理与实现方式 通常 SPA 中前端路由有2中实现方式,本文会简单快速总结这两种方法及其实现: 修改 url 中 Hash 利用 H5 中的 history Hash 我们都知道 ur ...
- ionic监听android返回键(实现“再按一次退出”功能)
在android平台上的app,在主页面时经常会遇到"再按一次退出app"的功能,避免只按一下返回键就退出app提升体验优化. 1.这个功能需要我们用到ionic提供的regist ...
- 运维介绍以及虚拟机,centos安装
运维的职责 1.企业的数据安全 2.网站7*24小时运行 3.企业服务好 服务器 服务器尺寸: 高度为单位:U(unit)1U=1.75英寸=4.45cm 服务器的分类: 机架式服务器 刀片式服务器 ...
- js中(event)事件对象
事件对象 • 什么是事件对象? • 就是当你触发了一个事件以后,对该事件的一些描述信息 • 例如: ° 你触发一个点击事件的时候,你点在哪个位置了,坐标是多少 ° 你触发一个键盘事件的时候,你按的是哪 ...
- mysql 学习日记 悲观和乐观锁
理解 悲观锁就是什么事情都是需要小心翼翼,生怕弄错了出大问题, 一般情况下 "增删改" 都是有事务在进行操作的,但是 "查" 是不需要事务操作的, 但是凡事没 ...