内容简介:作者|huggingface编译|VK来源|Github
本文是全系列中第1 / 1篇:Transformers
- 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")
原创文章,作者:磐石,如若转载,请注明出处:https://panchuang.net/2020/03/12/transformers-%e7%ae%80%e4%bb%8b%ef%bc%88%e4%b8%8a%ef%bc%89/
以上所述就是小编给大家介绍的《Transformers 简介(上)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。