当前位置: 首页 > news >正文

自然语言处理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
    pip install transformers
    
  2. 安装 PyTorch(或 TensorFlow),我们这里用 PyTorch:
    pip install torch
    
3.2 推理阶段:从文本到结果

下面的代码会演示:

  1. 加载分词器模型
  2. 把一句话变成“模型能看懂的数字”
  3. 得到模型对这句话的情感判断结果
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)

示例输出:

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最常见、最高效的做法。祝你学习愉快!

相关文章:

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

1 什么是预训练模型? 在自然语言处理(NLP)里,训练一个好模型通常需要很多数据和计算资源。为了解决这个难题,就出现了“预训练模型”。 预训练模型 是指我们先在海量文本(比如网络上爬到的大量文章、对话…...

Git GitHub基础

git是什么? Git是一个分布式版本控制系统,用于管理源代码的变更。它允许多个开发者在同一个项目上协作,同时跟踪每个修改的历史记录。 关键词: 分布式版本控制软件 软件 安装到我们电脑上的一个工具 版本控制 例如论文&…...

多平台文章同步工具PostSync 安装介绍

PostSync 是一个开源的用于多平台文章同步的工具 环境安装 安装 Python:PostSync 是基于 Python 开发的,你需要确保系统中已经安装了 Python 环境,建议使用 Python 3.7 及以上版本。你可以从 Python 官方网站 下载并安装适合你操作系统的版…...

PXE批量网络装机与Kickstart自动化安装工具

目录 一、系统装机的原理 1.1、系统装机方式 1.2、系统安装过程 二、PXE批量网络装机 2.1、PXE实现原理 2.2、搭建PXE实际案例 2.2.1、安装必要软件 2.2.2、搭建DHCP服务器 2.2.3、搭建TFTP服务器 2.2.4、挂载镜像并拷贝引导文件到tftp服务启动引导文件夹下 2.2.5、编…...

css的复合选择器

1.1什么是复合选择器 在css中,选择器分为基础选择器和复合选择器,复合选择器是建立在基础选择器之上,对基本选择器进行组合形成。 复合选择器可以更准确、更高效的选择目标元素(标签)由两个或多个基础选择器,通过不同的方式组合…...

Wireshark Lua 插件教程

本⽂主要介绍 Lua 脚本在 Wireshark 中的应⽤, Lua 脚本可以在 Wireshark 中完成如下功能: 从⽹络包中提取数据, 或者统计⼀些数据包(Dumper) 需要解析⼀种 Wireshark 不提供原⽣⽀持的协议(Dissector) ⽰例 协议解析 VREP 协议是 NOGD 框架对于 TRIP 协议的⼀种延伸和扩展…...

mysql怎样优化where like ‘%字符串%‘这种模糊匹配的慢sql

一 问题描述 工作中经常遇到这种模糊匹配的慢sql: select * from 表名 where 字段 like %字符串%; 由于前面有%,导致无法走该字段上的索引。 二 解决办法 ① 给该字段创建一个全文索引 CREATE FULLTEXT INDEX 索引名 ON 表名 (字段名); ② 改写sq…...

Python代码片段-断点任务

使用Python处理一堆长耗时任务的时候,为了防止异常退出程序或者手动退出程序后丢失任务进度,可用使用断点的方式记录任务进度,下次重载任务后,继续运行上次未完成的任务即可。 这里用json文件作为数据持久化的方式,免…...

mapbox基础,使用geojson加载heatmap热力图层

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️heatmap热力图层样式二、🍀使用geojs…...

03.检测 Zabbix agent

TOC 利用 zabbix_get 工具测试 Zabbix Agent 是否正常 # 安装 zabbix-get [rootUbuntu2204 ~]#apt install -y zabbix-get# 使用zabbix_get 工具查看验证 agent 是否正常 返回1表示正常 [rootUbuntu2204 ~]#zabbix_get -s 10.0.0.110 -p 10050 -k "agent.ping"故障…...

Vue 3 + Vite 项目配置访问地址到服务器某个文件夹的解决方案

前言 在开发 Vue 3 Vite 项目时,我们经常需要将项目部署到服务器的某个特定文件夹下。例如,将项目部署到 /my-folder/ 目录下,而不是服务器的根目录。这时,我们需要对 Vite 和 Vue Router 进行一些配置,以确保项目能…...

JavaScript将:;隔开的字符串转换为json格式。使用正则表达式匹配键值对,并构建对象。多用于解析cssText为style Object对象

// 使用正则表达式匹配键值对,并构建对象 let string2Json(s)>{const r {};s.replace(/;/g, ;).replace(/\;/g, \n).replace(/:/g, :).replace(/\n/g, \n)//合并多个换行符.split(\n).forEach(item > {const [k, v] item.split(:);(k…...

MT-Metrics

MT-Metrics 是一类用于评估生成文本质量的指标,最初用于机器翻译任务,后来扩展到生成任务(如对话生成、文本摘要等)。它的核心思想是通过比较生成文本与参考文本之间的相似性(如词汇重叠、句法结构、语义相似性&#x…...

【数据结构第十六节】实现链式结构二叉树(详细递归图解—呕心沥血版!)

必须有为成功付出代价的决心,然后想办法付出这个代价。云边有个稻草人-CSDN博客 这节课挺抽象(苦笑),没事,我会帮你!干就完了! (目录在路上) 正文开始—— 引言 用链表…...

【Python爬虫(100)】从当下到未来:Python爬虫技术的进阶之路

【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取,还涉及数据处理与分析。无论是新手小白还是进阶开发…...

Vue-Flow绘制流程图(Vue3+ElementPlus+TS)简单案例

本文是vue3Elementplusts框架编写的简单可拖拽绘制案例。 1.效果图&#xff1a; 2.Index.vue主代码&#xff1a; <script lang"ts" setup> import { ref, markRaw } from "vue"; import {VueFlow,useVueFlow,MarkerType,type Node,type Edge } fro…...

CNN:卷积网络中设计1×1夹在主要卷积核如3×3前后的作用

话不多说直接上图举例&#xff1a; 像在 ResNet 的 Bottleneck 结构 中&#xff0c;1x1 卷积 被放置在 3x3 卷积 的前后&#xff0c;这种设计有以下几个关键作用和优势&#xff1a; 1. 降低计算复杂度 问题&#xff1a;直接使用 3x3 卷积计算量较大&#xff0c;尤其是当输入和…...

esp8266 rtos sdk开发环境搭建

1. 安装必要的工具 1.1 安装 Git Git 用于从远程仓库克隆代码&#xff0c;你可以从Git 官方网站下载 Windows 版本的安装程序。安装过程中可保持默认设置&#xff0c;安装完成后&#xff0c;在命令提示符&#xff08;CMD&#xff09;或 PowerShell 中输入git --version&#…...

【深度学习】矩阵的核心问题解析

一、基础问题 1. 如何实现两个矩阵的乘法&#xff1f; 问题描述&#xff1a;给定两个矩阵 A A A和 B B B&#xff0c;编写代码实现矩阵乘法。 解法&#xff1a; 使用三重循环实现标准矩阵乘法。 或者使用 NumPy 的 dot 方法进行高效计算。 def matrix_multiply(A, B):m, n …...

DeepSeek模型昇腾部署优秀实践

2024年12月26日&#xff0c;DeepSeek-V3横空出世&#xff0c;以其卓越性能备受瞩目。该模型发布即支持昇腾&#xff0c;用户可在昇腾硬件和MindIE推理引擎上实现高效推理&#xff0c;但在实际操作中&#xff0c;部署流程与常见问题困扰着不少开发者。本文将为你详细阐述昇腾 De…...

Style-Bert-VITS2未来发展方向:从语音克隆到实时语音转换的技术演进路线

Style-Bert-VITS2未来发展方向&#xff1a;从语音克隆到实时语音转换的技术演进路线 【免费下载链接】Style-Bert-VITS2 Style-Bert-VITS2: Bert-VITS2 with more controllable voice styles. 项目地址: https://gitcode.com/gh_mirrors/st/Style-Bert-VITS2 Style-Bert…...

ComfyUI-Manager完全指南:掌握AI工作流管理的核心技术

ComfyUI-Manager完全指南&#xff1a;掌握AI工作流管理的核心技术 【免费下载链接】ComfyUI-Manager ComfyUI-Manager is an extension designed to enhance the usability of ComfyUI. It offers management functions to install, remove, disable, and enable various custo…...

【C++】零基础入门 · 第 5 节:函数基础

前面四节我们写的代码都集中在 main 函数里。随着程序变复杂,所有逻辑堆在一起会越来越难维护。函数就是用来解决这个问题的——它把一段代码「打包」起来,取个名字,需要的时候调用就行。 1. 为什么需要函数 假设你需要在程序的不同地方打印一行分隔线: cout << &…...

你的差异基因结果可靠吗?用MetaVolcanoR给多个GEO数据集做一次‘交叉验证’吧

你的差异基因结果可靠吗&#xff1f;用MetaVolcanoR给多个GEO数据集做一次"交叉验证"当你在GEO数据库中下载了三个肺癌研究的差异表达结果&#xff0c;却发现三个DEG列表的重叠基因不到20%——这种令人沮丧的场景每天都在全球实验室上演。单项研究的差异分析结果就像…...

【国家级攻防演练级建议】:DeepSeek私有化部署中4类隐蔽后门植入路径与实时检测方案

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;DeepSeek私有化部署中隐蔽后门植入的攻防对抗本质 在私有化场景下&#xff0c;DeepSeek模型的部署链路常跨越镜像构建、权重加载、推理服务启动及API网关接入等多个环节。攻击者可利用构建上下文污染、依赖包劫…...

终极Windows键盘重映射解决方案:SharpKeys完全指南

终极Windows键盘重映射解决方案&#xff1a;SharpKeys完全指南 【免费下载链接】sharpkeys SharpKeys is a utility that manages a Registry key that allows Windows to remap one key to any other key. 项目地址: https://gitcode.com/gh_mirrors/sh/sharpkeys 还在…...

【MATLAB】OFDM系统峰均比抑制算法仿真

【MATLAB】OFDM系统峰均比抑制算法仿真 摘要:OFDM(正交频分复用)技术凭借抗多径衰落、频谱利用率高、抗干扰能力强等优势,广泛应用于4G/5G移动通信、WiFi、数字广播电视等无线通信系统。但OFDM系统存在固有缺陷,多子载波叠加导致时域信号出现大幅峰值,产生较高峰值平均功…...

ABS+神经网络:端到端宇宙学参数推断新范式解析

1. 项目概述&#xff1a;当ABS遇上神经网络&#xff0c;一个端到端宇宙学参数推断新范式的诞生 在宇宙学研究的核心地带&#xff0c;有一项任务既令人着迷又充满挑战&#xff1a;如何从宇宙微波背景&#xff08;CMB&#xff09;这张宇宙婴儿时期的“照片”中&#xff0c;精准地…...

Wand-Enhancer:完全免费解锁WeMod专业版功能的终极指南

Wand-Enhancer&#xff1a;完全免费解锁WeMod专业版功能的终极指南 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/gh_mirrors/we/Wand-Enhancer 还在为WeMod专业版的高昂订阅费用而烦…...

如何5分钟搭建暗黑破坏神2存档编辑器:终极可视化解决方案指南

如何5分钟搭建暗黑破坏神2存档编辑器&#xff1a;终极可视化解决方案指南 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 还在为暗黑破坏神2复杂的存档编辑而烦恼吗&#xff1f;想要自由调整角色属性却无从下手&#xff1f;d2s-…...