当前位置:   article > 正文

最新自然语言处理库transformers

python 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之后,你可以通过克隆存储库并运行以下命令从源代码进行安装:

  1. git clone https://github.com/huggingface/transformers
  2. cd transformers
  3. pip install .

更新存储库时,应按以下方式升级transformers及其依赖项:

  1. git pull
  2. pip install --upgrade .
运行示例

示例包含在存储库中,但未随库一起提供。

因此,为了运行示例的最新版本,你需要如上所述从源代码安装。

查看自述文件,了解如何运行示例。

测试

该库和一些示例脚本包括一系列测试。可以在tests文件夹中找到库测试,而在examples文件夹中可以找到示例测试。

根据安装的框架(TensorFlow 2.0或PyTorch),不相关的测试将被跳过。如果要执行所有测试,请确保两个框架都已安装。

这是为库运行测试的最简单方法:

  1. pip install -e ".[testing]"
  2. make test

对于示例:

  1. pip install -e ".[testing]"
  2. pip install -r examples/requirements.txt
  3. 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/)。

  1. import torch
  2. from transformers import *
  3. # transformer有一个统一的API
  4. # 有10个Transformer结构和30个预训练权重模型。
  5. #模型|分词|预训练权重
  6. MODELS = [(BertModel, BertTokenizer, 'bert-base-uncased'),
  7. (OpenAIGPTModel, OpenAIGPTTokenizer, 'openai-gpt'),
  8. (GPT2Model, GPT2Tokenizer, 'gpt2'),
  9. (CTRLModel, CTRLTokenizer, 'ctrl'),
  10. (TransfoXLModel, TransfoXLTokenizer, 'transfo-xl-wt103'),
  11. (XLNetModel, XLNetTokenizer, 'xlnet-base-cased'),
  12. (XLMModel, XLMTokenizer, 'xlm-mlm-enfr-1024'),
  13. (DistilBertModel, DistilBertTokenizer, 'distilbert-base-cased'),
  14. (RobertaModel, RobertaTokenizer, 'roberta-base'),
  15. (XLMRobertaModel, XLMRobertaTokenizer, 'xlm-roberta-base'),
  16. ]
  17. # 要使用TensorFlow 2.0版本的模型,只需在类名前面加上“TF”,例如。“TFRobertaModel”是TF2.0版本的PyTorch模型“RobertaModel”
  18. # 让我们用每个模型将一些文本编码成隐藏状态序列:
  19. for model_class, tokenizer_class, pretrained_weights in MODELS:
  20. # 加载pretrained模型/分词器
  21. tokenizer = tokenizer_class.from_pretrained(pretrained_weights)
  22. model = model_class.from_pretrained(pretrained_weights)
  23. # 编码文本
  24. input_ids = torch.tensor([tokenizer.encode("Here is some text to encode", add_special_tokens=True)]) # 添加特殊标记
  25. with torch.no_grad():
  26. last_hidden_states = model(input_ids)[0] # 模型输出是元组
  27. # 每个架构都提供了几个类,用于对下游任务进行调优,例如。
  28. BERT_MODEL_CLASSES = [BertModel, BertForPreTraining, BertForMaskedLM, BertForNextSentencePrediction,
  29. BertForSequenceClassification, BertForTokenClassification, BertForQuestionAnswering]
  30. # 体系结构的所有类都可以从该体系结构的预训练权重开始
  31. #注意,为微调添加的额外权重只在需要接受下游任务的训练时初始化
  32. pretrained_weights = 'bert-base-uncased'
  33. tokenizer = BertTokenizer.from_pretrained(pretrained_weights)
  34. for model_class in BERT_MODEL_CLASSES:
  35. # 载入模型/分词器
  36. model = model_class.from_pretrained(pretrained_weights)
  37. # 模型可以在每一层返回隐藏状态和带有注意力机制的权值
  38. model = model_class.from_pretrained(pretrained_weights,
  39. output_hidden_states=True,
  40. output_attentions=True)
  41. input_ids = torch.tensor([tokenizer.encode("Let's see all hidden-states and attentions on this text")])
  42. all_hidden_states, all_attentions = model(input_ids)[-2:]
  43. #模型与Torchscript兼容
  44. model = model_class.from_pretrained(pretrained_weights, torchscript=True)
  45. traced_model = torch.jit.trace(model, (input_ids,))
  46. # 模型和分词的简单序列化
  47. model.save_pretrained('./directory/to/save/') # 保存
  48. model = model_class.from_pretrained('./directory/to/save/') # 重载
  49. tokenizer.save_pretrained('./directory/to/save/') # 保存
  50. tokenizer = BertTokenizer.from_pretrained('./directory/to/save/') # 重载


快速游览TF2.0的训练和与PyTorch的互操作性

让我们做一个快速的例子如何用12行代码训练TensorFlow 2.0模型,然后加载在PyTorch快速检验/测试。

  1. import tensorflow as tf
  2. import tensorflow_datasets
  3. from transformers import *
  4. # 从预训练模型/词汇表中加载数据集、分词器、模型
  5. tokenizer = BertTokenizer.from_pretrained('bert-base-cased')
  6. model = TFBertForSequenceClassification.from_pretrained('bert-base-cased')
  7. data = tensorflow_datasets.load('glue/mrpc')
  8. # 准备数据集作为tf.data.Dataset的实例
  9. train_dataset = glue_convert_examples_to_features(data['train'], tokenizer, max_length=128, task='mrpc')
  10. valid_dataset = glue_convert_examples_to_features(data['validation'], tokenizer, max_length=128, task='mrpc')
  11. train_dataset = train_dataset.shuffle(100).batch(32).repeat(2)
  12. valid_dataset = valid_dataset.batch(64)
  13. # 准备训练:编写tf.keras模型与优化,损失和学习率调度
  14. optimizer = tf.keras.optimizers.Adam(learning_rate=3e-5, epsilon=1e-08, clipnorm=1.0)
  15. loss = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)
  16. metric = tf.keras.metrics.SparseCategoricalAccuracy('accuracy')
  17. model.compile(optimizer=optimizer, loss=loss, metrics=[metric])
  18. # 用tf.keras.Model.fit进行测试和评估
  19. history = model.fit(train_dataset, epochs=2, steps_per_epoch=115,
  20. validation_data=valid_dataset, validation_steps=7)
  21. # 在PyTorch中加载TensorFlow模型进行检查
  22. model.save_pretrained('./save/')
  23. pytorch_model = BertForSequenceClassification.from_pretrained('./save/', from_tf=True)
  24. #让我们看看我们的模型是否学会了这个任务
  25. sentence_0 = "This research was consistent with his findings."
  26. sentence_1 = "His findings were compatible with this research."
  27. sentence_2 = "His findings were not compatible with this research."
  28. inputs_1 = tokenizer.encode_plus(sentence_0, sentence_1, add_special_tokens=True, return_tensors='pt')
  29. inputs_2 = tokenizer.encode_plus(sentence_0, sentence_2, add_special_tokens=True, return_tensors='pt')
  30. pred_1 = pytorch_model(inputs_1['input_ids'], token_type_ids=inputs_1['token_type_ids'])[0].argmax().item()
  31. pred_2 = pytorch_model(inputs_2['input_ids'], token_type_ids=inputs_2['token_type_ids'])[0].argmax().item()
  32. print("sentence_1 is", "a paraphrase" if pred_1 else "not a paraphrase", "of sentence_0")
  33. print("sentence_2 is", "a paraphrase" if pred_2 else "not a paraphrase", "of sentence_0")
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/350968
推荐阅读
相关标签
  

闽ICP备14008679号