ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

一句话怎样变成向量:Token、Embedding 与 Transformer

一句话怎样变成向量:Token、Embedding 与 Transformer 上一篇先画清了模型与 Agent 的边界模型负责根据上下文提出下一步Harness 才负责执行工具、维护状态和验证结果。现在把镜头移回模型内部。我们输入的明明是一句话神经网络为什么能对它做矩阵运算“苹果发布新产品”和“吃一个苹果”里同一个词为什么能形成不同表示Transformer 又怎样让当前位置读取前文却不偷看未来答案要回答这些问题需要沿着一条完整的数据流往下走系统层次文本 → UTF-8 字节 → Token → Token ID→ Embedding 位置信息→ Transformer Block × N→ 下一 Token 概率从文本到向量模型怎样“看见”一句话神经网络处理数字。自然语言进入模型前必须先经过 Tokenizer。文本、字节、Token ID 与向量的转换过程这张图里有四种容易混在一起的表示字符是人阅读的文字单位字节是计算机存储和传输文本的底层编码Token是 Tokenizer 根据词表切出的模型单位向量才是神经网络层真正参与计算的连续数值。同一个汉字在 UTF-8 中通常占多个字节但可能对应一个 Token也可能与相邻文字共同组成 Token。英文单词可能是一个 Token也可能被拆成词根、后缀或更小片段。字符数、字节数、Token 数和向量维度没有简单的一一对应关系。Token 不是字也不总是一个词Token 可以是一个汉字、半个英文单词、空格与标点的组合也可能是某段高频字节序列。不同模型使用不同词表与切分算法同一句话的 Token 数量并不固定。下面是本章锁定环境tiktoken0.13.0、编码器o200k_base的真实输出实测结果文本深入浅出 AI Agent字符数13UTF-8 字节数21Token 数5Token ID[125047, 190269, 6390, 20837, 28237]Token 字节[b\xe6\xb7\xb1\xe5\x85\xa5, b\xe6\xb5\x85, b\xe5\x87\xba, b AI, b Agent]这个结果不是跨模型常量。更换编码器或版本后切分可能变化真实结果必须以目标模型的 Tokenizer 为准。Token 数会影响三件非常现实的事上下文窗口能容纳多少内容API 输入输出怎样计费模型在哪些边界上更容易复制、拼写或计算出错。仓库里的chapter1/token_demo.py使用 OpenAI 的 tiktoken 查看真实切分。可以在项目根目录运行命令python chapter1/token_demo.py 深入浅出 AI Agent不要只运行一个例子。继续比较中文、英文、代码、Emoji 和同义改写才能看到 Tokenizer 的真实行为边界。为什么不直接按“一个词一个 Token”如果把每个完整单词都放进词表会遇到词表爆炸。英文有复数、时态、派生词和拼写变化中文没有天然空格代码包含变量名、路径和随机标识符用户还会不断创造新词。无论词表多大都无法预先列出所有可能字符串。如果退到字符级词表会变小也不会遇到未知单词但序列会变长。unbelievable原本可能由少量子词表示字符级却需要逐个字母处理。更长的序列意味着更多注意力计算也意味着上下文窗口能容纳的有效内容更少。子词 Tokenization 在两者之间折中高频片段保留为较长 Token提高压缩率低频词拆成更小片段避免完全未知采用 byte-level 或显式 byte fallback 的实现还能回退到字节从而覆盖任意 Unicode 文本。并非所有子词算法都具备字节回退。传统 WordPiece 可能产生未知词标记SentencePiece 是否启用 byte fallback 也取决于配置。不能把某一类现代 Tokenizer 的实现特征写成全部 Tokenizer 的共同性质。这不是单纯的文本预处理细节。Tokenizer 决定了模型“看问题的颗粒度”。电话号码、长整数、罕见人名和代码标识符如果被切成许多碎片模型就要跨多个位置保持精确关系通常比处理高频自然语言更困难。BPE 的直觉反复合并高频片段不同模型会采用不同 Tokenizer。为了理解基本思想可以用 Byte Pair Encoding也就是 BPE做一个玩具推演。假设语料只有提示词low lower lowest开始时把词拆成字符或字节提示词l o wl o w e rl o w e s t统计相邻片段后l与o、lo与w都很常见于是算法可以依次学习合并规则提示词l o → lolo w → low之后low可以用一个 Token 表示lower可能被表示为low erlowest可能是low est。真实 Tokenizer 会在大规模语料上学习大量合并并常以字节为基础处理 Unicode。这个例子只解释一个方向高频组合变长低频组合回退。Tokenizer 的合并规则在模型训练前已经确定。模型不能在一次对话中临时把新词加入固定词表。它可以通过多个已有 Token 表示新词并在上下文中学会怎样使用但底层切分没有改变。空格、大小写和格式也会改变 Token很多词表把前导空格作为 Token 的一部分因此Agent和Agent可能拥有不同 ID。大小写、换行和缩进也会改变切分。对代码模型而言空格和换行不仅影响 Token 数还携带语法结构。这带来几个工程后果重复的大段固定提示会消耗上下文和费用JSON 中冗长字段名会在每轮工具调用中重复出现把二进制、Base64 或压缩数据直接塞进上下文通常极不经济同样内容用表格、JSON 或自然语言表达Token 数与模型可读性不同提示词“更短”不总是更好还要保留完成任务所需的高信号信息。这里先建立一个习惯讨论“文本长度”时明确你说的是字符、字节还是模型 Token。从 Token ID 到 EmbeddingToken ID 只是词表里的编号。编号 100 与 101 在数值上接近不表示它们的语义接近。模型会通过 Embedding 表把每个离散 ID 映射为一个高维向量公式eᵢ E[xᵢ]训练会让在相似上下文中出现、承担相似作用的 Token 形成可利用的几何关系。这里的“意义”不是某个维度写着“是否动物”而是分散在许多维度和网络层中的表示。为什么不用一个超长 One-hot 向量假设词表有 20 万个 Token。最直接的表示是为每个 Token 建立一个长度 20 万的向量只有对应位置为 1其余为 0。它能区分 Token却有两个问题向量极其稀疏存储和计算浪费任意两个不同 Token 的距离都一样无法表达相似性。Embedding 表可以看成一个形状为“词表大小 × 隐藏维度”的可学习矩阵。根据 Token ID 取出对应行就得到稠密向量。如果词表大小为V隐藏维度为d长度为n的 Token 序列经过查表后得到公式X ∈ Rⁿˣᵈ这个X是 Transformer 的主要输入。后续每一层都会保持“序列位置 × 隐藏特征”的基本形状注意力在位置之间交换信息前馈网络在每个位置的特征维度上进行变换。初始 Embedding 与上下文化表示同一个 Token 从 Embedding 表取出的初始向量是固定的但经过注意力层后它的隐藏表示会依赖上下文。例如“苹果发布新产品”和“吃一个苹果”中的“苹果”初始 Token 可能相同后续层表示却会因为周围文字不同而分化。因此下面两句话应当区分Token Embedding 是固定查表结果模型内部对这个位置的表示会随上下文变化。很多入门解释只展示二维词向量图容易让人误以为每个词永远只有一个语义坐标。对现代 Transformer更重要的是上下文化表示每一层、每个位置都在根据可见上下文更新。顺序从哪里来仅有 Token Embedding不足以区分“猫追狗”和“狗追猫”。Transformer 还需要位置信息。最简单的直觉是给第 0、1、2……个位置分别准备位置向量再与 Token Embedding 组合。这样即使两个位置出现同一 Token输入表示也不同。现代 LLM 常见的旋转位置编码 RoPE不只是把位置向量加到内容上而是在 Query 和 Key 的部分维度中施加与位置相关的旋转使注意力分数自然携带相对位置信息。第一遍阅读不必掌握复数形式推导但要记住它解决的核心问题注意力需要知道谁在谁之前、相隔多远。位置机制也解释了为什么模型不能无代价地把上下文从训练长度扩展到任意长度。即使技术上能够接收更长输入精度和注意力利用也可能变化。Tokenizer 也不是跨模型通用的。工程系统应优先使用目标模型官方 SDK 或 Tokenizer 进行测量如果无法获得应把估算标为近似值并在接近上限时为工具结果和模型输出留出安全余量。常见故障输入明明没有超过字符限制API 为什么仍然拒绝因为 API 通常按 Token 而不是字符计算上下文而且总预算还可能包含系统指令、工具定义、历史消息、图片编码和预留输出。界面里看到的用户文字只是完整上下文的一部分。Transformer让每个位置有选择地读取上下文2017 年的论文《Attention Is All You Need》提出了以注意力为核心的 Transformer 架构。今天具体模型的层结构、位置编码、归一化和注意力实现已经发生许多变化但“根据上下文动态汇聚信息”仍是理解 LLM 的关键入口。从循环网络到 Transformer在 Transformer 之前语言模型常使用 RNN、LSTM 等循环结构。它们按照顺序逐步更新隐藏状态读完第一个 Token 得到状态h₁再把h₁与第二个 Token 一起计算h₂以此类推。这种结构符合“从左往右读”的直觉却有两个明显困难。第一位置之间存在强顺序依赖。计算后面的位置前通常要先得到前面的位置训练难以充分并行。第二远距离信息必须经过许多状态传递。尽管 LSTM 等结构缓解了梯度问题长距离依赖仍然困难。Self-Attention 提供了另一条路线一个位置可以在同一层直接计算它与所有可见位置的关系。信息路径变短训练也更适合现代加速器进行大规模矩阵运算。代价是标准全注意力需要处理随序列长度平方增长的成对关系这成为长上下文的重要成本来源。Encoder、Decoder 与 Decoder-only原始 Transformer 用于机器翻译包含 Encoder 和 DecoderEncoder 可以双向读取整段源文本适合理解和编码输入Decoder 使用因果遮罩只读取已经生成的目标前缀并通过交叉注意力读取 Encoder 输出Encoder-Decoder 组合把一种序列转换为另一种序列。后来形成三类常见路线Encoder-only**上下文可见性**通常双向**典型目标**分类、表征、遮盖恢复**直觉**读完整段后理解Encoder-Decoder**上下文可见性**输入双向、输出自回归**典型目标**翻译、摘要、序列转换**直觉**先读输入再生成输出Decoder-only**上下文可见性**对生成位置因果可见**典型目标**下一个 Token**直觉**把任务统一成续写生成式 LLM 广泛采用 Decoder-only不是因为 Encoder 已经没有价值而是因为大量任务可以统一表示为“给定上下文继续生成”。指令、示例、检索资料、工具定义和对话历史都可以排进一个 Token 序列用同一个自回归目标处理。Decoder-only Transformer 的最小数据流一次前向计算可以先粗略理解为系统层次文本 → Token ID → Embedding 位置→ N 个 Transformer Block→ 词表 Logits → 概率分布 → 下一个 Token每个 Transformer Block 里最值得先掌握两部分自注意力与前馈网络。自注意力不是“把所有内容平均一下”对每个位置的表示模型通过学习到的矩阵得到 Query、Key 和 Value公式Q XW_QK XW_KV XW_V缩放点积注意力为公式Attention(Q,K,V) softmax((QKᵀ / √dₖ) M)V其中dₖ是每个 Key/Query 向量的维度除以√dₖ是为了避免维度增大后点积数值过大M是因果遮罩矩阵未来位置对应负无穷。生成第t个位置时模型不能偷看未来的真实 Token因此未来位置经过 Softmax 后权重为 0。可以先用“检索”作一个不完全但有用的类比Query 表示当前位置正在寻找什么Key 表示每个历史位置能以什么特征被匹配Query 与 Key 的相似度形成注意力分数Softmax 把分数转成权重对 Value 加权求和得到当前位置从上下文读取的信息。仓库里的chapter1/attention_demo.py只有几十行 NumPy 代码。它不会复现完整 Transformer却会把分数矩阵、因果遮罩和 Softmax 后的权重逐项打印出来命令python chapter1/attention_demo.py比背诵公式更重要的是观察两个现象被遮罩的未来权重是否严格为零以及改变某个 Query 后信息来源怎样变化。用三个位置手算一次注意力假设序列只有三个位置每个位置的表示都是二维向量。为了让计算可复现令投影矩阵为单位矩阵因此Q K V X并且dₖ 2公式X Q K V [1.0 0.0] [0.8 0.2] [0.0 1.0]先计算缩放点积分数公式QKᵀ / √2≈ [0.707 0.566 0.000] [0.566 0.481 0.141] [0.000 0.141 0.707]第i行表示第i个位置在看哪些位置第j列表示它对第j个位置的匹配程度。加入因果遮罩后公式S_masked≈ [0.707 -∞ -∞ ] [0.566 0.481 -∞ ] [0.000 0.141 0.707]因果自注意力矩阵的读法在因果生成中第 1 个位置只能看自己第 2 个位置可以看第 1、2 个位置第 3 个位置可以看第 1、2、3 个位置。上三角的未来位置在 Softmax 前被设为负无穷归一化后权重为 0。这样训练时即使完整句子已经放在显存中每个位置也无法通过注意力直接读取未来答案。逐行做 Softmax可得到公式A≈ [1.000 0.000 0.000] [0.521 0.479 0.000] [0.239 0.276 0.485]最后计算AV。第二个位置的新信息约为公式0.521v₁ 0.479v₂ (0.904, 0.096)注意力输出不是“选中一个词”而是把多个 Value 连续混合。上面的每一个数都可以在实验脚本中逐项核对。还要澄清一个常见误解注意力权重能帮助观察模型在这一层怎样汇聚信息但不能自动当作完整解释。最终输出还要经过其他注意力头、前馈网络、残差连接和后续层。某个位置权重高不等于它在因果意义上就是答案的唯一原因。一个 Transformer Block 还做了什么多头注意力单个注意力头只能在一组投影空间中建立关系。多头注意力让不同头学习不同类型的匹配模式再拼接结果。某些头可能更关注局部搭配另一些头关注远距离引用但不要把每个头拟人化成固定的“语法专家”真实模型中的功能往往是分布式的也会随层与上下文变化。公式headᵢ Attention(XWᵢ_Q, XWᵢ_K, XWᵢ_V)MultiHead(X) Concat(head₁, …, headₕ)Wᴼ不同头不是把同一分数矩阵计算多次因为它们拥有不同投影参数。相同输入会被映射到不同特征空间从而允许模型同时建立多组关系。一些现代架构会采用 Multi-Query Attention 或 Grouped-Query Attention让多个 Query 头共享较少的 Key/Value 头以减少 KV Cache 和推理带宽。这个变化提醒我们Transformer 是一个持续演化的架构家族而不是 2017 年论文代码的永久复刻。前馈网络、残差连接与归一化注意力在 Token 之间搬运和组合信息前馈网络则对每个位置的表示做非线性变换。简化形式为公式FFN(x) W₂ σ(W₁x b₁) b₂一个 Block 的直觉可以压缩成两句注意力决定“从其他位置读什么”前馈网络决定“读到之后怎样变换”。残差连接让新信息与原表示相加公式x_next x Sublayer(x)如果每一层都完全覆盖上一层表示深层网络很难稳定训练也容易丢失已有信息。残差连接让子层只学习“在当前表示上增加什么变化”归一化则帮助控制不同层的数值尺度。真实模型可能采用 Pre-Norm、Post-Norm 或 RMSNorm 等变体。入门阶段不用背具体顺序但阅读结构图时应知道Attention FFN并不是完整 Block残差与归一化同样是基础设施。为什么还要堆很多层“一个位置能直接看见所有历史位置”只表示信息路径存在不表示一次加权就能完成复杂计算。考虑阅读一段代码并判断变量最终类型较早层可能识别标识符、括号和局部语法中间层组合赋值、调用和作用域关系更高层将这些关系组织成适合预测下一段代码的表示。这是示意而不是严格的神经元分工。模型行为来自多层分布式计算。更深的网络允许模型反复读取、组合和变换上下文不能把注意力理解成一次数据库查询。标准注意力为什么让长上下文昂贵长度为n的序列会形成n × n的注意力分数矩阵。仅从成对关系看序列长度翻倍矩阵元素约变成四倍。训练时还要保存用于反向传播的中间结果显存压力更大。现代系统会使用 FlashAttention、分块计算、稀疏或滑动窗口注意力、KV Cache、量化和并行策略降低实际成本。它们改变的是计算与存储方式或限制部分连接并没有让上下文成为免费的无限资源。对于 Agent问题更加突出。系统指令、工具定义、文件片段、终端日志和每轮工具调用都会积累。即使模型支持很长上下文也需要选择哪些信息值得进入下一轮而不是把全部历史原样保留。写在最后这一篇沿着原书的数据流回答了三个问题。第一模型读到的不是文字而是 Tokenizer 产生的离散 ID以及 Embedding 查表得到的连续向量。第二初始 Token Embedding 相对固定但每一层 Transformer 都会根据可见上下文更新当前位置的隐藏表示。第三自注意力通过 Query、Key、Value 和因果遮罩从历史位置读取信息多头注意力、前馈网络、残差连接和归一化再反复组合这些表示。学AI大模型的正确顺序千万不要搞错了2026年AI风口已来各行各业的AI渗透肉眼可见超多公司要么转型做AI相关产品要么高薪挖AI技术人才机遇直接摆在眼前有往AI方向发展或者本身有后端编程基础的朋友直接冲AI大模型应用开发转岗超合适就算暂时不打算转岗了解大模型、RAG、Prompt、Agent这些热门概念能上手做简单项目也绝对是求职加分王给大家整理了超全最新的AI大模型应用开发学习清单和资料手把手帮你快速入门学习路线:✅大模型基础认知—大模型核心原理、发展历程、主流模型GPT、文心一言等特点解析✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑✅开发基础能力—Python进阶、API接口调用、大模型开发框架LangChain等实操✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经以上6大模块看似清晰好上手实则每个部分都有扎实的核心内容需要吃透我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
返回列表