Hugging Face NLP课程学习记录 - 2. 使用 Hugging Face Transformers
说明:
- 首次发表日期:2024-09-19
- 官网: https://huggingface.co/learn/nlp-course/zh-CN/chapter2
- 关于: 阅读并记录一下,只保留重点部分,大多从原文摘录,润色一下原文
2. 使用 Hugging Face Transformers
管道的内部(Behind the pipeline)
从例子开始:
from transformers import pipeline
classifier = pipeline("sentiment-analysis")
classifier(
[
"I've been waiting for a HuggingFace course my whole life.",
"I hate this so much!",
]
)
原始文本(Raw text) --> 分词器(Tokenizer) --> 模型(Model)--> 后处理/预测(Predictions)
使用分词器进行预处理(Preprocessing with a tokenizer)
与其他神经网络一样,Transformer模型无法直接处理原始文本, 因此我们管道的第一步是将文本输入转换为模型能够理解的数字。 为此,我们使用tokenizer,负责:
- 将输入拆分为单词、子单词或符号(如标点符号),称为token
- 将每个token映射到一个整数
- 添加可能对模型有用的其他输入
我们使用AutoTokenizer
类及其from_pretrained()
方法获取与训练时相同的tokenizer。
from transformers import AutoTokenizer
checkpoint = "distilbert-base-uncased-finetuned-sst-2-english"
tokenizer = AutoTokenizer.from_pretrained(checkpoint)
一旦我们有了分词器(tokenizer),我们可以直接将句子传递给它,我们会得到一个字典(dictionary),这个字典已经准备好输入到我们的模型中了!唯一剩下要做的就是将输入ID的列表转换成张量。
Transformers的后端可能是Pytorch,Tensorflow或者Flax。
Transformers模型只接受张量作为输入。
要指定要返回的张量类型(PyTorch、TensorFlow或plain NumPy),我们使用return_tensors
参数:
raw_inputs = [
"I've been waiting for a HuggingFace course my whole life.",
"I hate this so much!",
]
inputs = tokenizer(raw_inputs, padding=True, truncation=True, return_tensors="pt")
print(inputs)
{
'input_ids': tensor([
[ 101, 1045, 1005, 2310, 2042, 3403, 2005, 1037, 17662, 12172, 2607, 2026, 2878, 2166, 1012, 102],
[ 101, 1045, 5223, 2023, 2061, 2172, 999, 102, 0, 0, 0, 0, 0, 0, 0, 0]
]),
'attention_mask': tensor([
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0]
])
}
输出本身是一个包含两个键的字典,分别是input_ids和attention_mask。input_ids包含两行整数(每句话一行),这些整数是每句话中词元(token)的唯一标识符。我们稍后会在本章解释attention_mask是什么。
了解模型(Go through the model)
我们可以像下载分词器(tokenizer)一样下载我们的预训练模型。
from transformers import AutoModel
checkpoint = "distilbert-base-uncased-finetuned-sst-2-english"
model = AutoModel.from_pretrained(checkpoint)
This architecture contains only the base Transformer module: given some inputs, it outputs what we’ll call hidden states, also known as features. For each model input, we’ll retrieve a high-dimensional vector representing the contextual understanding of that input by the Transformer model.
高维向量(A high-dimensional vector?)
Transformer输出的向量一般很大。通常有3个维度:
- Batch size: 一次处理的序列数(在我们的示例中为2)。
- Sequence length: 序列的数值表示的长度(在我们的示例中为16)。
- Hidden size: 每个模型输入的向量维度。
之所以被称为高维,是因为Hidden size. Hidden size可能非常大(768通常用于较小的型号,而在较大的型号中,这可能达到3072或更大)。
如果我们将预处理的输入输入到模型中,我们可以看到这一点:
outputs = model(**inputs)
print(outputs.last_hidden_state.shape)
torch.Size([2, 16, 768])
注意
标签:NLP,tokenizer,模型,ids,Hugging,Face,分词器,input,model From: https://www.cnblogs.com/shizidushu/p/18420098