BERT 是 Google 在 2018 年推出的 NLP(自然语言处理)模型,全称 Bidirectional Encoder Representations from Transformers(双向编码器表示)。
BERT 采用 Transformer 结构,并使用 双向(Bidirectional)学习方式,与传统的单向语言模型(如 GPT)不同,它能同时利用 上下文信息,提升 NLP 任务的理解能力。
Masked Language Model(MLM,掩码语言模型)
I love [MASK] movies.
[MASK]
词应该是 "watching"
。Next Sentence Prediction(NSP,下一句预测)
I went to the store.
I bought some apples.
BERT 采用 Transformer 的 Encoder 部分,具有多个 Self-Attention 层,可以学习 上下文关系。
BERT 主要有两种版本:
BERT 在各种 NLP 任务中表现优异,包括:
from transformers import BertTokenizer, BertModel
# 加载 BERT 预训练模型和分词器
tokenizer = BertTokenizer.from_pretrained("bert-base-uncased")
model = BertModel.from_pretrained("bert-base-uncased")
# 输入文本
text = "BERT is a powerful NLP model."
# 设置return_tensors参数为"pt",表示返回的结果是PyTorch张量格式。
inputs = tokenizer(text, return_tensors="pt")
# 运行 BERT
# inputs = {'param1': value1, 'param2': value2}
# model(**inputs) 等价于 model(param1=value1, param2=value2)
outputs = model(**inputs)
# 打印outputs.last_hidden_state的形状,输出格式为 (batch_size, sequence_length, hidden_size),分别表示批次大小、序列长度和隐藏层维度。
print(outputs.last_hidden_state.shape) # (batch_size, sequence_length, hidden_size)
运行结果
torch.Size([1, 10, 768])
输出:形状为 (1, 10, 768)
,表示 1 个句子,10 个 token,每个 token 由 768 维向量表示。
from transformers import BertForSequenceClassification
from transformers import BertTokenizer
import torch
# 加载 BERT 分词器(预训练)
tokenizer = BertTokenizer.from_pretrained("bert-base-uncased")
# 加载 BERT 分类模型(预训练)
model = BertForSequenceClassification.from_pretrained("bert-base-uncased", num_labels=2)
# 文本输入
text = "This movie is great!"
inputs = tokenizer(text, return_tensors="pt")
# 预测类别
outputs = model(**inputs)
# 每个类别的预测得分,logits 是模型输出的未经归一化的预测值,表示每个类别的原始得分。这些得分还没有经过激活函数(如softmax)处理,因此不是概率值。
logits = outputs.logits
# 使用 torch.argmax 找到logits中最大值的索引,即预测的类别。
predicted_class = torch.argmax(logits).item()
print("Predicted class:", predicted_class) # 0 或 1(根据分类任务定义)
运行结果
Predicted class: 1
这个例子:加载 BERT 用于 二分类任务(如情感分析)。
模型 | 架构 | 训练方式 | 主要用途 |
---|---|---|---|
BERT | Transformer Encoder | 双向学习(MLM + NSP) | 适用于 NLP 任务(分类、问答、NER) |
GPT | Transformer Decoder | 单向学习(从左到右) | 主要用于 文本生成(如 ChatGPT) |
BERT 使 NLP 进入了新时代,被广泛用于各种任务,如情感分析、问答、翻译等!