首页软件使用教程Hugging Face Transformers保姆级使用教程

Hugging Face Transformers保姆级使用教程

2025-06-17 252

Hugging Face Transformers是当下非常受欢迎的深度学习库,为NLP提供了丰富预训练的模型。由于这个学习库由Hugging Face公司开发,并与Transformers论文一起发布,因此也被称为Hugging Face Transformers。那么这个深度学习库如何使用?跟随站长百科一起来看下。

一、安装轻量级Transformers

1、基础安装(适合新手快速入门)

打开命令行输入这行代码,就能安装一个小巧的Transformers库:

!pip install transformers

装完后在Python里导入:“import transformers“

2、进阶安装(自带更多实用功能)

如果想解锁更多玩法(比如分词、文本生成),建议装这个版本:

!pip install transformers[sentencepiece]

二、Transformer的作用

1、pipeline功能

Transformers里最神奇的是“pipeline()“函数,把模型、文本处理步骤打包好。第一次用的时候会偷偷下载模型和分词器存到本地,下次就不用等了。

Hugging Face Transformers保姆级使用教程

Hugging Face Transformers保姆级使用教程

目前支持的热门功能包括:

  • feature-extraction 特征提取:把一段文字用一个向量来表示;
  • fill-mask 填词:把一段文字的某些部分mask住,然后让模型填空;
  • ner 命名实体识别:识别文字中出现的人名地名的命名实体;
  • question-answering 问答:给定一段文本以及针对它的一个问题,从文本中抽取答案;
  • sentiment-analysis 情感分析:一段文本是正面还是负面的情感倾向;
  • summarization 摘要:根据一段长文本中生成简短的摘要;
  • text-generation文本生成:给定一段文本,让模型补充后面的内容;
  • translation 翻译:把一种语言的文字翻译成另一种语言。

2、Transformer模型分工

Model Examples Tasks
Encoder
编码器模型
ALBERT, BERT, DistilBERT, ELECTRA, RoBERTa Sentence classification, named entity recognition, extractive question answering
适合需要理解完整句子的任务,例如句子分类、命名实体识别(以及更一般的单词分类)和提取式问答
Decoder
解码器模型
CTRL, GPT, GPT-2, Transformer XL Text generation
解码器模型的预训练通常围绕预测句子中的下一个单词。这些模型最适合涉及文本生成的任务
Encoder-decoder
序列到序列模型
BART, T5, Marian, mBART Summarization, translation, generative question answering
序列到序列模型最适合围绕根据给定输入生成新句子的任务,例如摘要、翻译或生成式问答。

三、Using Transformers使用流程

1、pipeline背后流程

Hugging Face Transformers保姆级使用教程

第一步:切词器(Tokenizer)把文字变数字

Transformer模型看不懂文字,得先切成单词再转成数字。比如用“AutoTokenizer“加载一个模型:

from transformers import AutoTokenizer
checkpoint = “distilbert-base-uncased-finetuned-sst-2-english”tokenizer = AutoTokenizer.from_pretrained(checkpoint)

padding是自动补全长度,truncation是截断过长的句子

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“是单词对应的数字,“attention_mask“标记哪些位置是真实单词(1)哪些是补的空位(0)。

{
‘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, 0, 0, 0, 0, 0, 0, 0, 0, 0]
])}

第二步:模型(Model)处理数字算结果

用“AutoModel“加载模型,把刚才的数字放进去:

from transformers import AutoModel
checkpoint = “distilbert-base-uncased-finetuned-sst-2-english”model = AutoModel.from_pretrained(checkpoint)

输出结果的形状是2句话,每句16个词,每个词768维特征

outputs = model(**inputs)print(outputs.last_hidden_state.shape)

Hugging Face Transformers保姆级使用教程

不同任务有专门的模型,比如“ForSequenceClassification“用于分类,“ForQuestionAnswering“用于问答,按需选择就好。

第三步:结果翻译(Post-Processing)

模型输出的是原始分数,需要用SoftMax转成概率(比如情感分析中“正面”和“负面”的概率):

import torch
predictions = torch.nn.functional.softmax(outputs.logits, dim=-1)print(predictions)

2、模型操作指南:创建、加载、保存一条龙

自己搭一个模型:

from transformers import BertConfig, BertModel
# Building the configconfig = BertConfig()
# Building the model from the configmodel = BertModel(config)

加载预训练模型:

from transformers import BertModel
model = BertModel.from_pretrained(“bert-base-cased”)

保存模型到本地:

model.save_pretrained(“directory_on_my_computer”)

使用Transformer model:

sequences = [“Hello!”, “Cool.”, “Nice!”]encoded_sequences = [
[101, 7592, 999, 102],
[101, 4658, 1012, 102],
[101, 3835, 999, 102],]
import torch
model_inputs = torch.tensor(encoded_sequences)

3、分词器(Tokenizer)的独家技巧

加载和保存:

from transformers import BertTokenizer
tokenizer = BertTokenizer.from_pretrained(“bert-base-cased”)tokenizer(“Using a Transformer network is simple”)
# 输出”'{‘input_ids’: [101, 7993, 170, 11303, 1200, 2443, 1110, 3014, 102], ‘token_type_ids’: [0, 0, 0, 0, 0, 0, 0, 0, 0], ‘attention_mask’: [1, 1, 1, 1, 1, 1, 1, 1, 1]}”’
# 保存tokenizer.save_pretrained(“directory_on_my_computer”)

4、批量处理文本

模型一次能处理一批文本,但需要把句子长度对齐(短的补空位,长的截断):

from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained(“bert-base-cased”)
sequence = “Using a Transformer network is simple”tokens = tokenizer.tokenize(sequence)
print(tokens) # 输出 : [‘Using’, ‘a’, ‘transform’, ‘##er’, ‘network’, ‘is’, ‘simple’]
# 从token 到输入 IDids = tokenizer.convert_tokens_to_ids(tokens)print(ids) # 输出:[7993, 170, 11303, 1200, 2443, 1110, 3014]

5、加载情感分析模型

import torchfrom transformers import AutoTokenizer, AutoModelForSequenceClassification
checkpoint = “distilbert-base-uncased-finetuned-sst-2-english”tokenizer = AutoTokenizer.from_pretrained(checkpoint)model = AutoModelForSequenceClassification.from_pretrained(checkpoint)
sequence = “I’ve been waiting for a HuggingFace course my whole life.”
tokens = tokenizer.tokenize(sequence)ids = tokenizer.convert_tokens_to_ids(tokens)
input_ids = torch.tensor([ids])print(“Input IDs:”, input_ids)
output = model(input_ids)print(“Logits:”, output.logits)
# 输出”’Input IDs: [[ 1045, 1005, 2310, 2042, 3403, 2005, 1037, 17662, 12172, 2607, 2026, 2878, 2166, 1012]]Logits: [[-2.7276, 2.8789]]”’

6、处理单句话

model = AutoModelForSequenceClassification.from_pretrained(checkpoint)
sequence1_ids = [[200, 200, 200]]sequence2_ids = [[200, 200]]batched_ids = [
[200, 200, 200],
[200, 200, tokenizer.pad_token_id],]
print(model(torch.tensor(sequence1_ids)).logits)print(model(torch.tensor(sequence2_ids)).logits)print(model(torch.tensor(batched_ids)).logits)
# 输出”’tensor([[ 1.5694, -1.3895]], grad_fn=<AddmmBackward>)tensor([[ 0.5803, -0.4125]], grad_fn=<AddmmBackward>)tensor([[ 1.5694, -1.3895], [ 1.3373, -1.2163]], grad_fn=<AddmmBackward>)”’

  • 广告合作

  • QQ群号:4114653

温馨提示:
1、本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。邮箱:2942802716#qq.com(#改为@)。 2、本站原创内容未经允许不得转裁,转载请注明出处“站长百科”和原文地址。

相关文章