自然语言处理NLP入门 -- 第七节预训练语言模型

1 什么是预训练模型?

在自然语言处理(NLP)里,训练一个好模型通常需要很多数据和计算资源。为了解决这个难题,就出现了"预训练模型"。

  • 预训练模型 是指我们先在海量文本(比如网络上爬到的大量文章、对话等)上训练出一个"懂语言"的大模型。它已经学会了如何理解和使用语言的大部分规律。
  • 之后,你只需要在自己的"小数据"上稍微训练一下(叫"微调"),就能让这个大模型学会完成具体的任务,比如情感分析、文本分类等。

打个比方:

  • 预训练模型就好比一个学生先在"全国语文教材"上学习了超多词汇和语法。
  • 现在,你只需要教他一些更专业的知识,他就能快速上手,不用从零开始。

2 代表性的预训练模型:BERT、GPT、T5

说到预训练模型,就不能不提到三个"明星选手":

  1. BERT

    • 最擅长"理解"文本,因为它可以同时看一个词左右两边的内容,得到上下文信息。
    • 常常用于情感分析、阅读理解、问答、文本分类等。
  2. GPT

    • 最擅长"生成"文本,因为它擅长猜测"下一个词"应该是什么。
    • 对话机器人、文本续写、智能写作等场景,会经常用到它。
  3. T5

    • 强调"把各种NLP任务都当成文本输入和文本输出"的形式。
    • 可以做翻译、摘要、分类、问答等等,一种方法适合很多任务。

3 使用 Hugging Face 加载 BERT 进行文本分类

现在,让我们用一个非常具体的小例子,来看看如何利用Hugging Face这个流行的Python库,去调用"预训练好的BERT模型"做文本分类,比如判断一句评论是"正面"还是"负面"。

3.1 环境准备
  1. 安装 transformers

    bash 复制代码
    pip install transformers
  2. 安装 PyTorch(或 TensorFlow),我们这里用 PyTorch:

    bash 复制代码
    pip install torch
3.2 推理阶段:从文本到结果

下面的代码会演示:

  1. 加载分词器模型
  2. 把一句话变成"模型能看懂的数字"
  3. 得到模型对这句话的情感判断结果
python 复制代码
from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch

# 1. DistilBERT (已经在SST-2情感分析上微调好)
model_name = "distilbert-base-uncased-finetuned-sst-2-english"

# 2. 加载分词器和模型
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name)

# 3. 预测示例
text = "I really love this movie. The acting is wonderful!"
inputs = tokenizer(text, return_tensors="pt")

with torch.no_grad():
    outputs = model(**inputs)

# 4. 返回分类结果
logits = outputs.logits
predicted_class_id = torch.argmax(logits, dim=1).item()
print("Predicted Class ID:", predicted_class_id)

示例输出:

bash 复制代码
Predicted Class ID: 1

下面分别解释一下每一步:

  1. 加载分词器

    • 文字本质上是"字符串",而模型只能理解数字。
    • 分词器会把你的句子,比如"love this movie",变成 [ 101, 2293, 2023, 3185, ... ] 这样的数字列表,然后给出必要的格式信息(attention_mask等)。
  2. 加载模型

    • 这里的模型是已经训练好的"DistilBERT情感分析模型"版本,能直接判断文本的情感倾向。
    • 你不需要自己写BERT网络结构或训练逻辑,Hugging Face直接帮你搞定了。
  3. 输入文本并转换成PyTorch需要的张量

    • inputs 是一个字典,里面包含了 input_idsattention_mask 等,是模型需要的输入格式。
  4. 前向传播(Forward Pass)

    • 就是把输入数据喂给模型,模型内部做一系列计算后,输出结果(outputs)。
    • 因为我们只是想要预测结果,不需要计算梯度,所以用 with torch.no_grad(): 能节省内存和加速。
  5. 得到预测分类

    • 最后,把模型的输出分数 (logits) 里最大的那一个类别当作预测结果。
    • 不同模型会给出不同类别数。

3.3 如果要训练或微调模型?

上面的代码只做了"推理"(预测结果)。要想"训练"或"微调(Fine-tuning)"这个模型,就需要多几个步骤:

  1. 准备好训练数据:比如有几千条电影评论,每条都打上"正面/负面"标签。
  2. 用 DataLoader 逐批读取 :如果你有1万条数据,不可能一次全塞进模型里,那会占用很多内存。
    • PyTorch 提供 DataLoader 帮你分批次读数据,比如每次读32条。
  3. 前向传播 + 计算损失(Loss)
    • 跟推理一样会得到 outputs,但这回你要跟真实标签比对来算损失值,看模型猜的对不对。
  4. 反向传播 + 更新模型参数
    • 通过 optimizer.step() 等操作,根据损失值来调整模型的权重,让它下次预测更准。
    • 如此循环多次,直到训练结束。

总结一下:

  • "推理"只需要前向传播,看结果就好,不用算梯度;
  • "训练"还要加上计算损失值和反向传播的步骤。

4 为什么要用预训练模型?应用场景是啥?

  • 速度更快:不用从头把模型训练到能理解语言的地步,直接用已经"见多识广"的模型做少量微调就能用。
  • 效果更好:模型看过的"大量文本"会帮它学到很多词汇和语法知识,对小数据集很友好。
  • 适用面广 :几乎任何涉及文本的场景都能用上,比如客服聊天机器人舆情分析文本审查问答系统等等。

5 课后练习与思考

  1. 自己尝试微调

    • 找到 IMDb 的电影评论数据,练习用 BERT 做正面/负面分类。
    • 调整学习率、批大小等超参数,看看对准确率有多大影响。
  2. 比较 BERT 和 GPT

    • GPT更擅长"生成文本",BERT更擅长"理解文本"。如果你只想做分类,BERT常常更好;如果你想写文章、做对话,GPT是更好选手。
    • 不妨亲自试试,感受一下它们的差异。
  3. 试试 T5

    • 把分类任务也当成"文本生成":输入:"This is an awesome movie.",让模型输出:"positive"。看看 T5 表现如何。

总结

在这章里,我们了解了预训练模型 的基本概念,认识了BERT、GPT、T5这三位"明星";然后用一个小例子实际演示了如何用Hugging Face的工具快速完成"加载分词器--->转成张量--->前向传播--->预测结果"这四步。我们还提到,如果想"训练"或"微调",需要多加"计算损失"和"反向传播"这两个步骤。

掌握了这些,你就能灵活运用现有的大模型来完成各种NLP任务,再也不用从零写代码、找海量数据、苦哈哈地训练啦!这也是现在NLP最常见、最高效的做法。祝你学习愉快!

相关推荐
threelab3 分钟前
15.three官方示例+编辑器+AI快速学习webgl_buffergeometry_instancing
人工智能·学习·编辑器
李昊哲小课7 分钟前
tensorflow-cpu
大数据·人工智能·python·深度学习·数据分析·tensorflow
qq_189370491 小时前
自然语言处理NLP中的连续词袋(Continuous bag of words,CBOW)方法、优势、作用和程序举例
人工智能·自然语言处理·连续词袋
洁洁!2 小时前
从零开始在亚马逊云科技 EC2上部署DeepSeek R1大语言模型:完整实战指南
服务器·科技·语言模型
threelab4 小时前
07.three官方示例+编辑器+AI快速学习webgl_buffergeometry_attributes_integer
人工智能·学习·编辑器
背太阳的牧羊人5 小时前
tokenizer.encode_plus,BERT类模型 和 Sentence-BERT 他们之间的区别与联系
人工智能·深度学习·bert
学算法的程霖5 小时前
TGRS | FSVLM: 用于遥感农田分割的视觉语言模型
人工智能·深度学习·目标检测·机器学习·计算机视觉·自然语言处理·遥感图像分类
博睿谷IT99_5 小时前
华为HCIP-AI认证考试版本更新通知
人工智能·华为
一点.点6 小时前
SafeDrive:大语言模型实现自动驾驶汽车知识驱动和数据驱动的风险-敏感决策——论文阅读
人工智能·语言模型·自动驾驶
concisedistinct6 小时前
如何评价大语言模型架构 TTT ?模型应不应该永远“固定”在推理阶段?模型是否应当在使用时继续学习?
人工智能·语言模型·大模型