transformers -- pipeline

参考:[NLP] transformers 使用指南_文森特没有眼泪的博客-CSDN博客_transformers使用

做记录方便自己看,希望大家去看原作者的,更简单易懂!!!

transformers 内置了 17 种以 transformer 结构为基础的神经网络:

  • T5 model
  • DistilBERT model
  • ALBERT model
  • CamemBERT model
  • XLM-RoBERTa model
  • Longformer model
  • RoBERTa model
  • Reformer model
  • Bert model
  • OpenAI GPT model
  • OpenAI GPT-2 model
  • Transformer-XL model
  • XLNet model
  • XLM model
  • CTRL model
  • Flaubert model
  • ELECTRA model

这些模型的参数、用法大同小异。默认框架为 PyTorch,使用 TensorFlow 框架在类的前面加上 'TF" 即可。

每种模型都有至少一个预训练模型

使用 transformers 库有三种方法:

  1. 使用 pipeline
  2. 指定预训练模型;
  3. 使用 AutoModels 加载预训练模型。

1. transformers.pipeline

这个管线函数包含三个部分:

  1. Tokenizer;
  2. 一个模型实例;
  3. 其它增强模型输出的功能。

它只有一个必需参数 task,接受如下变量之一:

  • ”feature-extraction”
  • ”sentiment-analysis”
  • ”ner”
  • ”question-answering”
  • ”fill-mask”
  • ”summarization”
  • ”translation_xx_to_yy”
  • ”text-generation”
>>> from transformers import pipeline

>>> nlp = pipeline("sentiment-analysis")

>>> print(nlp("I hate you"))
[{'label': 'NEGATIVE', 'score': 0.9991129040718079}]

>>> print(nlp("I love you"))
[{'label': 'POSITIVE', 'score': 0.9998656511306763}]

2. 指定预训练模型

2.1 配置 Bert 模型(可选,推荐不使用)transformers.BertConfig

transformers.BertConfig 可以自定义 Bert 模型的结构,以下参数都是可选的:

  • vocab_size:词汇数,默认 30522;
  • hidden_size:编码器内隐藏层神经元数量,默认 768;
  • num_hidden_layers:编码器内隐藏层层数,默认 12;
  • num_attention_heads:编码器内注意力头数,默认 12;
  • intermediate_size:编码器内全连接层的输入维度,默认 3072;
  • hidden_act:编码器内激活函数,默认 ‘gelu’,还可为 ‘relu’、‘swish’ 或 ‘gelu_new’
  • hidden_dropout_prob:词嵌入层或编码器的 dropout,默认为 0.1;
  • attention_probs_dropout_prob:注意力的 dropout,默认为 0.1;
  • max_position_embeddings:模型使用的最大序列长度,默认为 512;
  • type_vocab_size:词汇表类别,默认为 2;
  • initializer_range:神经元权重的标准差,默认为 0.02;
  • layer_norm_eps:layer normalization 的 epsilon 值,默认为 1e-12.
configuration = BertConfig() # 进行模型的配置,变量为空即使用默认参数

model = BertModel(configuration) # 使用自定义配置实例化 Bert 模型

configuration = model.config # 查看模型参数

2.2 分词 transformers.BertTokenizer

        所有的 tokenizer 都继承自 transformers.PreTrainedTokenizer 基类,因此有共同的参数和方法实例化的参数有:

  • model_max_length:可选参数,最大输入长度,默认为 1e30;
  • padding_side:可选参数,填充的方向,应为 ‘left’ 或 ‘right’;
  • bos_token:可选参数,每句话的起始标记,默认为 ‘’;
  • eos_token:可选参数,每句话的结束标记,默认为 ‘’;
  • unk_token:可选参数,未知的标记,默认为 ‘’;
  • sep_token:可选参数,分隔标记,默认为 ‘’;
  • pad_token:可选参数,填充标记,默认为 ‘’;
  • cls_token:可选参数,分类标记,默认为 ‘’;
  • mask_token:可选参数,遮盖标记,默认为 ‘

        

tokenizer = BertTokenizer.from_pretrained('bert-base-cased')
#from_pretrained(model):载入预训练词汇表;

>>> tokenizer.tokenize('Hello word!')
['Hello', 'word', '!']
#tokenizer.tokenize(str):分词;

>>> tokenizer.encode('Hello word!')
[101, 8667, 1937, 106, 102]

#encode(text, ...):将文本分词后编码为包含对应 id 的列表;

tokenizer.encode_plus('Hello world!')
{'input_ids': [101, 8667, 1937, 106, 102], 'token_type_ids': [0, 0, 0, 0, 0], 'attention_mask': [1, 1, 1, 1, 1]}
#encode_plus(text, ...):将文本分词后创建一个包含对应 id,token 类型及是否遮盖的词典

>>> tokenizer.convert_ids_to_tokens(tokens)
['[CLS]', 'Hello', 'word', '!', '[SEP]']
#convert_ids_to_tokens(ids, skip_special_tokens):将 id 映射为 token;

>>> tokenizer.decode(tokens)
'[CLS] Hello word! [SEP]'
#decode(token_ids):将 id 解码;

>>> tokenizer.convert_tokens_to_ids(['[CLS]', 'Hello', 'word', '!', '[SEP]'])
[101, 8667, 1937, 106, 102]
#convert_tokens_to_ids(tokens):将 token 映射为 id

3. 使用 AutoModels

使用 AutoModels 与上面的指定模型进行预训练大同小异,只不过是另一种方式加载模型而已。

3.1 加载自动配置 transformers.AutoConfig

使用类方法 from_pretrained 加载模型配置,参数既可以为模型名称,也可以为具体文件

config = AutoConfig.from_pretrained('bert-base-uncased')
# 或者直接加载模型文件
config = AutoConfig.from_pretrained('./test/bert_saved_model/')

3.2 加载分词器 transformers.AutoTokenizer

与上面的 BertTokenizer 非常相似,也是使用 from_pretrained 类方法加载预训练模型

tokenizer = AutoTokenizer.from_pretrained('bert-base-uncased')
# 或者直接加载模型文件
tokenizer = AutoTokenizer.from_pretrained('./test/bert_saved_model/')

你可能感兴趣的:(编程,自然语言处理,机器学习,深度学习)