本节代码将使用 transformers
库加载预训练的BERT模型和分词器(Tokenizer),并处理文本输入。
1. 加载预训练模型和分词器
from transformers import BertTokenizer, BertModelmodel_path = "/Users/azen/Desktop/llm/models/bert-base-chinese"tokenizer = BertTokenizer.from_pretrained(model_path)
model = BertModel.from_pretrained(model_path)
-
BertTokenizer.from_pretrained(model_path)
:-
加载预训练的BERT分词器。
model_path
是预训练模型的路径或名称。分词器会将文本分割成BERT模型可以理解的标记(tokens)。
-
-
BertModel.from_pretrained(model_path)
:-
加载预训练的BERT模型。
model_path
是预训练模型的路径或名称。BERT模型可以用于多种自然语言处理任务,如文本分类、问答系统等。
-
2. 处理文本输入
text = "my dog is cute, he likes playing"
inputs = tokenizer(text)
-
tokenizer(text)
:-
将输入文本
text
转换为BERT模型可以处理的格式。具体来说,tokenizer
会执行以下操作:-
分词:将文本分割成标记(tokens)。
-
添加特殊标记:在文本的开头添加
[CLS]
标记,在结尾添加[SEP]
标记。 -
转换为ID:将每个标记转换为对应的ID(索引)。
-
生成注意力掩码:生成一个掩码,用于标记哪些位置是有效的输入(非填充部分)。
-
-
-
如果不想添加
[CLS]
和[SEP]
标记,可以在调用tokenizer
时设置add_special_tokens=False
。
text = "my dog is cute, he likes playing"
inputs = tokenizer(text, add_special_tokens=False, return_tensors="pt")
输出inputs
是一个字典,包含以下内容:
-
input_ids
:输入标记的ID列表。 -
token_type_ids
:段嵌入索引列表。 -
attention_mask
:注意力掩码。
3. 完整示例
以下是一个完整的示例,展示如何将文本输入传递给BERT模型,并获取模型的输出:
from transformers import BertTokenizer, BertModelmodel_path = "/Users/azen/Desktop/llm/models/bert-base-chinese"tokenizer = BertTokenizer.from_pretrained(model_path)
model = BertModel.from_pretrained(model_path)text = "my dog is cute, he likes playing"
inputs = tokenizer(text, return_tensors="pt") # 返回PyTorch张量# 获取输入张量
input_ids = inputs["input_ids"]
attention_mask = inputs["attention_mask"]# 将输入传递给BERT模型
outputs = model(input_ids, attention_mask=attention_mask)# 获取模型的输出
last_hidden_state = outputs.last_hidden_state # 最后一层的隐藏状态
pooler_output = outputs.pooler_output # [CLS]标记的输出print(last_hidden_state.shape) # 输出形状:(batch_size, seq_len, hidden_size)
print(pooler_output.shape) # 输出形状:(batch_size, hidden_size)
需复现完整代码
from transformers import AutoModel, AutoTokenizer
from transformers import BertModel, BertTokenizerfrom transformers import Bertmodel_path = "/Users/azen/Desktop/llm/models/bert-base-chinese"tokenizer = BertTokenizer.from_pretrained(model_path)
model = BertModel.from_pretrained(model_path)text = "my dog is cute, he likes playing"
inputs = tokenizer(text)pass