一、基本流程
1. Tokenization(分词)
分词:将句子拆分成一个个单词或子词。
映射到ID:将这些单词或子词映射到预定义的词汇表中的唯一标识符(Token IDs)。
代码示例:
from transformers import BertTokenizer
# 初始化BERT的Tokenizer
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
# 输入句子
sentence = "This course is amazing!"
# 使用Tokenizer进行分词和映射到Token IDs
input_ids = tokenizer.encode(sentence, add_special_tokens=True)
print(f"Token IDs: {input_ids}")
在这个示例中,我们使用BERT的Tokenizer对句子进行处理,得到的Token IDs如下:
Token IDs:
2. Model Inference(模型推理)
代码示例:
import torch
from transformers import BertModel
# 初始化BERT模型
model = BertModel.from_pretrained('bert-base-uncased')
# 将Token IDs转化为Tensor
input_ids = torch.tensor([input_ids])
# 模型推理,得到输出
with torch.no_grad():
outputs = model(input_ids)
# 获取最后一层的隐状态
last_hidden_states = outputs.last_hidden_state
print(f"Last Hidden States: {last_hidden_states}")
3. Post-Processing(后处理)
代码示例:
from torch.nn.functional import softmax
# 假设模型的输出是logits
logits = torch.tensor([-4.3630, 4.6859])
# 对logits进行Softmax处理
probabilities = softmax(logits, dim=-1)
print(f"Probabilities: {probabilities}")
4. Prediction(生成结果)
POSITIVE: 99.89%
NEGATIVE: 0.11%
代码示例:
from torch.nn.functional import softmax
# 假设模型的输出是logits
logits = torch.tensor([-4.3630, 4.6859])
# 对logits进行Softmax处理
probabilities = softmax(logits, dim=-1)
print(f"Probabilities: {probabilities}")
二、具体示例
输入句子:"This course is amazing!"
经过Tokenizer处理,得到Token IDs [101, 2023, 2607, 2003, 6429, 999, 102]。
将Token IDs输入模型,得到Logits [-4.3630, 4.6859]。
通过后处理,将Logits转化为概率值。
最终预测结果:POSITIVE 99.89%,NEGATIVE 0.11%。
完整代码示例:
from transformers import BertTokenizer, BertForSequenceClassification
import torch
from torch.nn.functional import softmax
# 初始化BERT的Tokenizer和模型
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertForSequenceClassification.from_pretrained('bert-base-uncased', num_labels=2)
# 输入句子
sentence = "This course is amazing!"
# 分词和映射到Token IDs
input_ids = tokenizer.encode(sentence, add_special_tokens=True)
input_ids = torch.tensor([input_ids])
# 模型推理,得到logits
with torch.no_grad():
outputs = model(input_ids)
logits = outputs.logits
# 对logits进行Softmax处理
probabilities = softmax(logits, dim=-1)
# 定义类别
labels = ["NEGATIVE", "POSITIVE"]
# 获取概率最高的类别
predicted_label = labels[torch.argmax(probabilities)]
print(f"Prediction: {predicted_label}")