本节代码将使用 transformers
库加载预训练的BERT模型和分词器(Tokenizer),并处理文本输入。
1. 加载预训练模型和分词器
from transformers import BertTokenizer, BertModel
model_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, BertModel
model_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, BertTokenizer
from transformers import Bert
model_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