作者|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体系结构:

  1. BERT
  2. GPT
  3. GPT-2
  4. Transformer-XL
  5. XLNet
  6. XLM
  7. RoBERTa
  8. DistilBERT
  9. CTRL
  10. CamemBERT
  11. ALBERT
  12. T5
  13. XLM-RoBERTa
  14. MMBT
  15. FlauBERT
  16. 其他社区的模型
  17. 想要贡献一个新的模型吗?我们已经添加了详细的教程和模板来指导你添加新模型的过程。你可以在存储库的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 简介(上)的更多相关文章

  1. Android系统简介(上):历史渊源

    上个月,看到微信的一系列文章,讲到Linux的鼻祖-李纳斯的传记<Just for Fun>, 其人神乎其能, 其人生过程非常有趣,值得每个程序员细细品味. 而实际上,对我而已,虽然做软件 ...

  2. Transformers 简介(下)

    作者|huggingface 编译|VK 来源|Github Transformers是TensorFlow 2.0和PyTorch的最新自然语言处理库 Transformers(以前称为pytorc ...

  3. redis 第二篇 系统命令简介 上

    一.系统级命令(不归属任何一个数据结构) 从keys命令说起 1.  可以模式匹配  也就是可以用正则表达式的方式来匹配 格式为KEYS pattern glob风格通配符规则 ?   匹配一个字符 ...

  4. Identity Server 4 原理和实战(完结)_----选看 OAuth 2.0 简介(上)

    https://www.yuque.com/yuejiangliu/dotnet/cg95ni 代表资源所有者的凭据 授权 Authorization Grant 授权是一个代表着资源所有者权限的凭据 ...

  5. 上海华魏光纤传感科技有限公司 招聘 《.NET研发工程师》

    代友招聘 <.NET研发工程师> **** 公司简介 **** 上海华魏光纤传感技术有限公司成立于2001年,注册资金1458.16万人民币,专业从事光纤传感技术的研究开发,为交通.市政等 ...

  6. Volley(三)—— ImageRequest & Request简介

    Volley(三)—— ImageRequest & Request简介 上 篇文章我们讲 到了如何用volley进行简单的网络请求,我们可以很容易的接受到string.JsonObjec类型 ...

  7. Android系统简介(中):系统架构

    Android的系统架构栈分为4层,从上往下分别是Applications.Application framework.Libraries  & Android Runtime.Linux  ...

  8. c#委托和事件(上)

    C# 中的委托和事件 引言 委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真 ...

  9. Linux内核分析(四)----进程管理|网络子系统|虚拟文件系统|驱动简介

    原文:Linux内核分析(四)----进程管理|网络子系统|虚拟文件系统|驱动简介 Linux内核分析(四) 两天没有更新了,上次博文我们分析了linux的内存管理子系统,本来我不想对接下来的进程管理 ...

随机推荐

  1. 安卓权威编程指南-笔记(第21章 XML drawable)

    在Andorid的世界里,凡事要在屏幕上绘制的东西都可以叫drawable,比如抽象图形,Drawable的子类,位图图形等,我们之前用来封装图片的BitmapDrawable就是一种drawable ...

  2. Ta说:2016微软亚洲研究院第二届博士生论坛

    ​ "聚合多元人才创造无尽可能,让每一位优秀博士生得到发声成长机会"可以说是这次微软亚洲研究院博士生论坛最好的归纳了.自去年首次举办以来,这项旨在助力青年研究者成长的项目迅速得到了 ...

  3. C++走向远洋——33(静态成员的应用)

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:time.cpp * 作者:常轩 * 微信公众号:Worldhe ...

  4. C++走向远洋——47(第十二周、运算符重载基础程序、阅读)

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...

  5. MySQL基础篇(05):逻辑架构图解和InnoDB存储引擎详解

    本文源码:GitHub·点这里 || GitEE·点这里 一.MySQL逻辑架构 1.逻辑架构图 基于下面的逻辑架构图,可以大致熟悉MySQL各个架构组件之间的协同工作关系. 很经典的C/S架构风格, ...

  6. Java设计模式二

    今天谈的是工厂模式,该模式用于封装和对对象的创建,万物皆对象,那么万物又是产品类,如一个水果厂生产三种水果罐头,我们就可以将这三种水果作为产品类,再定义一个接口用来设定对水果罐头的生成方法,在工厂类中 ...

  7. Redis(十一):哨兵模式架构设计分析

    业务最初的应用场景中,我们也许使用单机redis就可以应付业务要求,但并非一直可行. 比如单机的读写能力问题,单机的可用性问题,单机的数据安全性问题.这些都是许多互联网应用经常会遇到的问题,也基本上都 ...

  8. Mac结合Docker开发

    Mac结合Docker开发 前几天在看Java并发实战时,在Mac上写了一个示例,结果运行后无法按照书本上运行.主要是有些命令,在Mac和Linux是有区别的,比如top, Mac上是不支持-Hp,意 ...

  9. 日常破解--XCTF easy_apk

    一.题目来源     来源:XCTF社区安卓题目easy_apk 二.破解思路     1.首先运行一下给的apk,发现就一个输入框和一个按钮,随便点击一下,发现弹出Toast验证失败.如下图所示: ...

  10. opt目录

    在linux环境测试时,会部署到/opt目录下,这是为何呢? 下面来详解Linux的/opt目录: /opt:用户级的程序目录 这里主要存放那些可选的程序. 比如,你想部署firefox测试版,那就装 ...