transformers总结

安装没啥好说的,如下

1
2
pip install transformers
pip install tensorflow

常用pipelines

  • feature-extraction (获得文本的向量化表示)
  • fill-mask (填充被遮盖的词、片段)
  • ner(命名实体识别)
  • question-answering (自动问答)
  • sentiment-analysis (情感分析)
  • summarization (自动摘要)
  • text-generation (文本生成)
  • translation (机器翻译)
  • zero-shot-classification (零训练样本分类)

pipeline背后逻辑

  1. 预处理 ,将原始文本转换为模型可以接受的输入格式。(Tokenizer分词器)
  2. 将处理好的输入送入模型。(Model)
  3. 对模型的输出进行后处理 ,将其转换为人类方便阅读的格式。(Post-Processing)

模型和分词器

  • 加载保存模型或分词器
1
2
3
4
5
6
7
8
9
10
from transformers import AutoModel
from transformers import AutoTokenizer
# 加载模型
model = AutoModel.from_pretrained("bert-base-cased")
# 保存模型 之后可以断网使用模型
model.save_pretrained("./models/bert-base-cased/")
# 加载分词器
tokenizer = AutoTokenizer.from_pretrained("bert-base-cased")
# 保存分词器
tokenizer.save_pretrained("./models/bert-base-cased/")
  • Tokenizer
1
2
3
4
5
6
7
8
9
# 按词切分  当分词结果不在词表内会出现unknown结果,需要尽量避免
tokenized_text = "Jim Henson was a puppeteer".split()
=======> ['Jim', 'Henson', 'was', 'a', 'puppeteer']

# 按字符切分
'hello!' =====> ['h','e','l','l','o','!']

# 按子词切分 最常用,高频词直接保留,低频词被切分为更有意义的子词,可以有效避免unknown,大大减少词汇表的大小降低模型复杂性
'Let’s do tokenization!' =======> ['Let’s','do','token','ization','!']
  • 直接使用分词器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from transformers import AutoTokenizer, AutoModelForSequenceClassification

checkpoint = "distilbert-base-uncased-finetuned-sst-2-english"
tokenizer = AutoTokenizer.from_pretrained(checkpoint)
model = AutoModelForSequenceClassification.from_pretrained(checkpoint)

sequences = [
"I've been waiting for a HuggingFace course my whole life.",
"So have I!"
]
# padding=True 对输入序列进行填充,以使它们具有相同的长度
# truncation=True 截断超过最大长度的序列
# return_tensors="pt" 返回PyTorch张量
tokens = tokenizer(sequences, padding=True, truncation=True, return_tensors="pt")
print(tokens)
output = model(**tokens)
print(output.logits)

解惑

问:为什么需要输入模型的文本有相同的长度?

答:为模型的输入通常是一个固定形状的张量,1.填充(padding)可以将所有输入序列扩展到相同的长度,从而使它们适合批处理,2.统一的输入序列长度能够让模型在处理数据时更快更高效,3.可以确保较短的序列不会被截断,从而避免丢失信息

问:什么是token?

答:token是用于处理和生成文本的基本单位,经过分词器将文本分割成模型易于处理的小单元,可以更有效地进行训练和预测。

问:如何添加新token?

答:添加普通 tokenadd_tokens(),添加特殊 tokenadd_special_tokens(),特殊token一般用于标记句子的开始[CLS]、结束[SEP] 、填充[PAD]、掩码[MASK]

  • embedding矩阵

embedding(嵌入或向量化表示)是将高维的离散数据(如单词、句子或图像)转换为低维的连续向量的过程

赏个🍗吧
0%