LLM 中 token 简介与 bert 实操解读

一、什么是 LLM?

LLM,全称为 Large Language Model(大语言模型),是一种基于神经网络(主要是 Transformer 结构)的大规模自然语言处理(NLP)模型。其核心能力在于理解、生成、翻译和总结自然语言,已广泛应用于问答系统、机器翻译、对话机器人、代码生成、文本创作等场景中。

LLM 的基本任务:给定一段文本,预测接下来的 token(语言片段),也可以理解为:LLM 是一种基于上下文预测下一个 token 的概率分布的模型。

一个典型的 LLM“7B 模型”表示拥有 70 亿参数(billion),使用 float32 存储时,模型大小约为 28GB(7B × 4 字节)。模型规模常见有 0.5B、1B、7B、13B、33B、65B,甚至超过 100B。

二、LLM 模型结构

总体看,LLM 结构有以下几种:

  • Decoder-only 架构(主流 LLM,如 GPT-4、LLaMA、PaLM):骨干结构由多个 Decoder 层堆叠而成,且每个 Decoder 层包含自注意力机制和前馈网络,用于从左到右生成文本。
  • Encoder-only 架构(如 BERT):这类模型仅使用 Transformer 的 Encoder,用于理解文本而非生成。
  • Encoder-Decoder 架构(如 T5、BART):这类 LLM 同时使用了 Transformer 的 Encoder 和 Decoder,Encoder 处理输入(如源文本),Decoder 生成输出(如翻译结果)

当前 GPT、LLaMA 等主流模型采用 Decoder-only 架构堆叠组成,通过自回归方式生成文本。一个典型的 Transformer Decoder 层包括以下组件:

  • Self-Attention(自注意力层):对输入序列进行全局信息建模,使模型捕捉上下文关系。
  • Feed Forward Network(前馈网络,FFN):通过两层全连接神经网络实现非线性变换。
  • Layer Normalization + 残差连接:保证训练稳定性与深层信息流通。
  • 多层堆叠:一个 LLM 通常包含几十甚至上百层的 Decoder。每一层都会基于当前输入和之前的 token 信息进行信息融合与加工,形成更深层次的语言理解能力。

Description

传统 Transformer:每个解码器块使用固定的前馈网络 MoE 架构:通过 Router 动态选择部分专家网络,提升模型容量同时减少计算量。

图片来源:https://blog.csdn.net/LLM88888888/article/details/147580799

三、Token 与 Tokenizer 理论

token 是指文本中的一个词或者子词,经过 Tokenizer(分词器)将原始文本拆解为子词、单词或字符,同时保留语义和结构信息。

tokenizer 将字符串分为一些 sub-word token string,再将 token string 映射到 id,并保留来回映射的 mapping。

embeddings 将 token id 编码成向量,例如下面 bert 示例中:ID=101 → 向量 [0.1, 0.2, …, 0.5] (bert 768 维)

Description

四、bert 实操解读

代码如下:

# 注意,需要 pip install transformers 安装 transformers 库
from transformers import BertTokenizer, BertModel   sentence = "Hello, my son is cuting."# 问题1:'bert-base-uncased'从哪来,有哪些内容?
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
# 问题2:return_tensors='pt'有什么作用?
encoded_input = tokenizer(sentence, return_tensors='pt')
print("encoded_input: ", encoded_input)
# encoded_input:  {'input_ids': tensor([[ 101, 7592, 1010, 2026, 2365, 2003, 3013, 2075, 1012,  102]]), 'token_type_ids': tensor([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]), 'attention_mask': tensor([[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]])}# 问题3:分词encoded_input表示什么?
model = BertModel.from_pretrained("bert-base-uncased")
output = model(**encoded_input)
print("output: ", output)
print(output.last_hidden_state.shape)  # torch.Size([1, 10, 768]),输出形状为 [1, seq_len, hidden_size]
print(output.pooler_output.shape)      # torch.Size([1, 768])
# 问题4:bertmodel输出是什么?怎么理解?

问题 1:'bert-base-uncased’从哪来,有哪些内容?

运行目录:

.
├── 1_code_run.py
└── bert-base-uncased├── config.json├── pytorch_model.bin├── tokenizer_config.json├── tokenizer.json└── vocab.txt

所需文件到:https://huggingface.co/google-bert/bert-base-uncased/tree/main 中获取。

  • tokenizer.json:存储分词器的核心映射规则(token 与 ID 对应关系等 ),用于文本转 token ID。
  • tokenizer_config.json:配置分词器的参数(如词表路径、模型类型等 ),让 BertTokenizer 能正确初始化。
  • vocab.txt:词表文件,记录模型可识别的所有基础 token,是分词和编码的基础。
  • config.json:存储模型的架构配置(层数、隐藏层维度、注意力头数等 ),用于构建 BertModel 的网络结构。
  • pytorch_model.bin:PyTorch 格式的模型权重文件,加载后为模型提供推理 / 训练所需参数。

使用 from_pretrained 时,只要本地路径(或缓存路径)包含这些文件,transformers 库会自动加载,无需手动逐个指定,把这些文件放在本地对应模型名的文件夹(如 bert-base-uncased 命名的文件夹),然后 from_pretrained 传入该文件夹路径即可。

问题 2:return_tensors='pt’有什么作用?

BertTokenizer 默认返回的是 Python 列表,而 PyTorch 模型需要 torch.Tensor 类型的输入,在调用分词器时,添加 return_tensors=‘pt’ 参数,可以强制返回 PyTorch 张量。

问题 3:分词 encoded_input 表示什么?

  • input_ids:token 对应的编号
  • token_type_ids:句子类型(如问句/答句)
  • attention_mask:是否为有效 token 的掩码

问题 4:bertmodel 输出是什么?怎么理解?

output:  BaseModelOutputWithPoolingAndCrossAttentions(last_hidden_state=tensor([[[ 0.1343,  0.2069, -0.1056,  ..., -0.3678,  0.3318,  0.4747],[ 0.7642,  0.0530,  0.3679,  ..., -0.0856,  0.6686, -0.0110],...,[ 0.6652,  0.3903, -0.0479,  ...,  0.0236, -0.5730, -0.3705]]],grad_fn=<NativeLayerNormBackward0>), pooler_output=tensor([[-8.4724e-01, -3.6394e-01, -7.2207e-01,  6.6477e-01,  4.1991e-01,2.4143e-02,  8.3331e-01,  2.9624e-01, -5.0529e-01, -9.9998e-01,...,8.8765e-01,  8.4602e-01, -3.0099e-01,  4.3198e-01,  5.7014e-01,-4.6997e-01, -6.4236e-01,  9.0241e-01]], grad_fn=<TanhBackward0>), hidden_states=None, past_key_values=None, attentions=None, cross_attentions=None)

前面有介绍到:BERT 是 Encoder-only 架构,仅使用 Transformer 的 Encoder,用于理解文本而非生成。

  1. last_hidden_state
  • 维度一般是 [batch_size, sequence_length, hidden_size](示例里 batch_size=1 ,因单条输入;sequence_length 是句子分词后 token 数量;hidden_size 是模型隐藏层维度,BERT-base 通常为 768 )。
  • 含义:模型对输入序列中每个 token 编码后的向量表示。比如句子分词后有 5 个 token,就对应 5 个向量,每个向量维度是 hidden_size,可用于细粒度的 token 级任务(例如,文本分类时可取特定位置的 token 向量做分类依据)。
  • 示例里的 tensor([[[ 0.1343, 0.2069, -0.1056, …, -0.3678, 0.3318, 0.4747], … ]]) ,就是每个 token 经 BERT 编码后的高维语义向量。
  1. pooler_output:维度是 [batch_size, hidden_size] (示例里 batch_size=1 ),表示对整个输入序列的全局语义总结,可用于句子级任务(如文本分类、情感分析,输入分类器判断类别)。
  2. hidden_states:值为 None ,默认 BERT 不会输出各层(如 embedding 层、各 Transformer 层 )的隐藏状态。若初始化模型时设 output_hidden_states=True ,会输出从输入到各层的隐藏状态列表,可用于分析模型各层对语义的加工过程。
  3. past_key_values:值为 None ,用于增量解码(如文本生成场景 ),默认不输出。若开启相关配置,会保存前一步注意力键值对,加速后续 token 生成。
  4. attentions:值为 None ,默认不输出注意力权重。若设 output_attentions=True ,会输出各层注意力头的权重,可分析模型关注输入序列的哪些部分,辅助调试和理解模型聚焦点。
  5. cross_attentions:值为 None ,BERT 是 Encoder 结构,无交叉注意力(一般 Decoder 或 Encoder-Decoder 结构有 ),所以这儿无输出。

型关注输入序列的哪些部分,辅助调试和理解模型聚焦点。
5. cross_attentions:值为 None ,BERT 是 Encoder 结构,无交叉注意力(一般 Decoder 或 Encoder-Decoder 结构有 ),所以这儿无输出。

后续会对 LLM 推理具体过程进行介绍~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/96169.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/96169.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【运维心得】三步更换HP笔记本电脑外壳

目录 准备工作 第一步&#xff1a;拆卸电池与后盖 第二步&#xff1a;处理隐藏螺丝 第三步&#xff1a;断开内部排线 总结一下 今天又碰到了两台HP的笔记本&#xff0c;一台外壳完好&#xff0c;但是无法开机&#xff0c;判断是主板问题。另外一台外壳有损坏&#xff0c;但…

深入 Linux 网络(一) -- 网卡队列

文章目录网卡网卡的核心功能网卡的关键技术单队列网卡多队列网卡查看网卡信息ifconfigethtool查看网卡队列Linux 查看中断绑定网卡中断查询查看中断绑定的 cpu总结1. 默认情况&#xff08;单队列网卡&#xff09;2. 多队列网卡3. 如何查看和配置绑定关系&#xff1f;4. 性能优化…

HTTP 1.0, 2.0 和 3.0 有什么区别?

HTTP/1.0 就像是“一问一答”的电话&#xff0c;每次打电话&#xff08;请求&#xff09;都得先拨号&#xff08;建立连接&#xff09;&#xff0c;说完一句话&#xff08;发送数据&#xff09;就挂断&#xff08;关闭连接&#xff09;&#xff0c;再打下一通电话。效率比较低。…

无畏契约手游上线!手机远控模拟器畅玩、抢先注册稀有ID!

终于来了&#xff01;《无畏契约》手游今天已经全平台上线&#xff01;保留了端游经典的英雄技能与射击体验&#x1f3ae;&#xff3b;新服开启&#xff0c;ID争夺战一触即发&#xff3d;《无畏契约》手游备受FPS玩家期待&#xff0c;累计获得超6000万线上预约&#xff01;每次…

《WINDOWS 环境下32位汇编语言程序设计》第4章 第一个窗口程序

4.1 开始了解窗口4.1.1 窗口是什么窗口是什么&#xff1f;大家每天在使用Windows&#xff0c;屏幕上的一个个方块就是一个个窗口&#xff01;那么&#xff0c;窗口为什么是这个样子呢&#xff1f;窗口就是程序吗&#xff1f;1.使用窗口的原因回想一下DOS时代的计算机屏幕&#…

Mybatis执行sql流程(二)之加载Mapper

Mybatis加载Mapper注册方式注册时机特点MapperScanBean定义阶段注册接口定义批量注册&#xff0c;推荐方式Mapper (接口注解)同 MapperScan需每个接口单独标注XML 配置 <mapper>MyBatis 初始化时传统方式&#xff0c;不依赖 Spring 容器SqlSessionTemplate 直接获取调用时…

基于 JSP+Mysql实现MVC房屋租赁系统

基于 MVC 的房屋租赁系统的设计与实现摘 要&#xff1a;房屋租赁管理系统与网络相结合&#xff0c;给用户提供更加周到和人性化的服务。网站模式为 MVC 模式&#xff0c;基于 MySQL 数据库,采用 JSP&#xff0c;Session 绘画跟踪、JavaScript 等技术,实现了普通用户可以浏览、查…

第六天~提取Arxml中CAN采样点信息Creat_ECU--Standard

⏱️ ARXML探秘:解码CAN采样点的精准艺术 在汽车电子的交响乐中,CAN采样点(Sample Point) 如同指挥家挥棒的关键时刻——它决定了何时"聆听"总线上的信号。这个看似微小的百分比数值,却是保障整车通信可靠性的核心密码。本文将带您深入ARXML中的采样点配置世界…

Windows Git安装配置

进入git官网Git - Downloading Package 点击下载&#xff08;可复制链接到迅雷&#xff09; 双击运行exe安装包 选择安装目录 下一步 选择 Git 默认编辑器&#xff0c;下一步设置初始化新项目(仓库)的主干名字 让Git决定&#xff08;Let Git decide&#xff09;使用默认的…

面试经验分享-某电影厂

java会吗&#xff1f;不会。。。。。hdfs读文件写文件的流程 数据写入 1-客户端向NameNode发起请求 2-NameNode审核权限和剩余空间&#xff0c;满足条件即允许写入&#xff0c;并告知客户端写入的DataNode地址 3-客户端向指定的DataNode发送数据包 4-被写入数据的DataNode同时完…

数据清理后续

前篇&#xff1a;Python 项目里的数据清理工作&#xff08;数据清洗步骤应用&#xff09; 一&#xff0c;先接上文添加两种数据填充的方法 1、线性回归填充 def lr_train_fill(train_data,train_label):train_data_all pd.concat([train_data, train_label], axis1)train_d…

nuc设置脚本开机自启动

在终端执行gnome-session-properties这个是带有图型化页面的设置开机自启动的软件没有这个软件的可以直接下载sudo apt update sudo apt install gnome-startup-applications一般都有&#xff0c;ubunutu自带的右边有添加&#xff0c;名称和注释随便写&#xff0c;只需要把命令…

JavaScript 性能优化实战大纲

JavaScript 性能优化实战大纲 核心优化方向 减少主线程阻塞 避免长任务&#xff08;Long Tasks&#xff09;拆分计算密集型操作使用 Web Workers 处理后台任务优先使用 requestIdleCallback 或 requestAnimationFrame 内存管理 避免内存泄漏&#xff08;如未清理的定时器、闭包…

openssl生成自签名证书的方法

因为开发中查询过各种命令&#xff0c;失败过很多次&#xff0c;所以记录一下正确的命令&#xff1a; 生成私钥-不要密码 openssl genpkey -algorithm RSA -out ssl/key.pem 生成自签名证书 openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -…

电影购票+票房预测系统 - 后端项目介绍(附源码)

电影购票预测系统 - 后端项目介绍 项目概述 本项目是一个基于Spring BootVue的前后端分离电影购票系统&#xff0c;包含完整的前台用户功能和后台管理功能&#xff0c;并提供数据可视化和电影预测功能。本文档将详细介绍后端项目的架构、功能模块、技术栈和使用方法。 项目源…

专利服务系统平台|个人专利服务系统|基于java和小程序的专利服务系统设计与实现(源码+数据库+文档)

专利服务系统平台 目录 基于java和小程序的专利服务系统设计与实现 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布道师&#x…

【HTML】3D动态凯旋门

目录 版本1.0&#xff1a;简易版本 版本2.0&#xff1a;建筑渲染 版本3.0&#xff1a;优化建筑群 版本4.0&#xff1a;增加公路和车流 版本5.0&#xff1a;去除压在公路上的建筑 版本6.0&#xff1a;优化车流群 版本7.0&#xff1a;添加烟花效果 版本8.0&#xff1a;添…

(论文阅读)FedViT:边缘视觉转换器的联邦持续学习

FedViT&#xff1a;边缘视觉转换器的联邦持续学习 FedViT: Federated continual learning of vision transformer at edge (北京理工大学-2023年发表于《Future Generation Computer Systems》中科院二区) highlight&#xff1a; •提出一种轻量级的客户端联合持续学习方法。 •…

微算法科技(NASDAQ: MLGO)研究利用PBFT中的动态视图变换机制,实现区块链系统高效运转

随着区块链技术的飞速发展&#xff0c;其去中心化、透明性、不可篡改等特性使得它在金融、供应链管理、物联网等多个领域得到了广泛应用。然而&#xff0c;区块链系统在高并发场景下的性能瓶颈问题一直是制约其大规模应用的关键因素。传统的共识算法如PoW&#xff08;工作量证明…

从数据汇总到高级分析,SQL 查询进阶实战(下篇)—— 分组、子查询与窗口函数全攻略

引言&#xff1a;从 “提取数据” 到 “洞察价值”&#xff0c;SQL 进阶之路 在掌握了基础查询与多表关联后&#xff0c;你是否曾遇到这样的挑战&#xff1a;如何按部门统计平均薪资&#xff1f;怎样找出每个岗位薪资最高的员工&#xff1f;或者如何计算销售额的月度环比增长率…