赞
踩
参考网站
公众号:深度学习视觉
Github:Pytorch-transformers
该工具追求着这样的一个目标,几行代码调用最先进的模型,加载训练好的模型参数,来完成自然语言项目,比如机器翻译、文本摘要、问答系统等。Transformers 同时支持 PyTorch 和TensorFlow2.0,用户可以将这些工具放在一起使用。
transformers目前提供以下NLU / NLG体系结构:
BERT、GPT、GPT-2、Transformer-XL、XLNet、XLM、RoBERTa、DistilBERT、CTRL、CamemBERT、ALBERT、T5、XLM-RoBERTa、MMBT、FlauBERT、其他社区的模型
pip install pytorch-transformers
GPT-2是一种于基于transformer的生成语言模型,其语言生成能力优秀到被讨论禁止开源。该模型是在40GB的文本下进行无监督训练。
# 导入必要的库 import torch from pytorch_transformers import GPT2Tokenizer, GPT2LMHeadModel # 加载预训练模型tokenizer (vocabulary) tokenizer = GPT2Tokenizer.from_pretrained('gpt2') # 对文本输入进行编码 text = "What is the fastest car in the" indexed_tokens = tokenizer.encode(text) # 在PyTorch张量中转换indexed_tokens tokens_tensor = torch.tensor([indexed_tokens]) # 加载预训练模型 (weights) model = GPT2LMHeadModel.from_pretrained('gpt2') #将模型设置为evaluation模式,关闭DropOut模块 model.eval() # 如果你有GPU,把所有东西都放在cuda上 tokens_tensor = tokens_tensor.to('cuda') model.to('cuda') # 预测所有的tokens with torch.no_grad(): outputs = model(tokens_tensor) predictions = outputs[0] # 得到预测的单词 predicted_index = torch.argmax(predictions[0, -1, :]).item() predicted_text = tokenizer.decode(indexed_tokens + [predicted_index]) # 打印预测单词 print(predicted_text)
!git clone https://github.com/huggingface/pytorch-transformers.git
# 启动模型
!python pytorch-transformers/examples/run_generation.py \
--model_type=gpt2 \
--length=100 \
--model_name_or_path=gpt2 \
在一个令人震惊的发现中,科学家发现了一群独角兽,它们生活在安第斯山脉一个偏远的,以前未被开发的山谷中。对于研究人员而言,更令人惊讶的是,独角兽会说完美的英语。
独角兽似乎和普通人一样了解彼此。该研究于5月6日发表在《科学转化医学》上。此外,研究人员发现,百分之五的独角兽彼此之间具有很好的识别性。研究团队认为,这可能会转化为未来,使人类能够与称为超级独角兽的人进行更清晰的交流。如果我们要朝着那个未来前进,我们至少必须做到
除了GPT-2以外,还有诸如XLNet,一个在包括问答、自然语言推理、情感分析和文档排序等18项任务上取得了最先进结果的模型。
!python pytorch-transformers/examples/run_generation.py \
--model_type=xlnet \
--length=50 \
--model_name_or_path=xlnet-base-cased \
还有能够学习长期依赖的Transformer-XL,比标准Transformer快1800倍。
!python pytorch-transformers/examples/run_generation.py \
--model_type=transfo-xl \
--length=100 \
--model_name_or_path=transfo-xl-wt103 \
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/') # 重载
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")
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。