大模型原理:文字转化为向量 作者:马育民 • 2025-12-29 20:02 • 阅读:10003 # 介绍 1. 文字→向量的过程,行业统称:**文本的向量化/Embedding(嵌入)**,最终得到的向量叫 **文本向量/词向量/句向量/文档向量**,大模型里统一叫 **Embedding向量**。 2. 向量本质:**把人类的「文字语义」,翻译成计算机能理解的「数字数组」**,数组里的每个数字都是浮点数(float32/float16),比如 `[0.123, -0.456, 0.789, ...]`。 3. 核心逻辑:**语义越相似的文字,转化后的向量在高维空间中的「距离越近」**,这是大模型能理解语义、做问答/翻译/摘要/检索的底层根基。 4. 向量维度:大模型的Embedding维度常见 **768/1024/2048/4096**,维度越高,能承载的语义信息越丰富,计算成本也越高;小模型一般用128/256维。 --- ## 一、核心总流程:文字 → 向量(4步闭环,所有大模型通用) 不管是GPT-3.5/4、文心一言、通义千问、Llama2、百川,还是小的BERT/RoBERTa,**把文字转向量的核心步骤完全一致**,只是内部细节实现不同,流程如下,**这是教学的核心骨架,必须讲透**: > **原始文字 → 第一步:文本预处理 → 第二步:Token分词 → 第三步:Token转ID → 第四步:模型计算输出Embedding向量** ✅ 补充:这个流程是**串行不可逆**的,且**所有步骤都有可落地的工程实现**,不是纯理论。 --- ## 二、逐步骤拆解(原理+实现+代码级细节,教学重点) ### ✅ 第一步:文本预处理(清洗文字,统一格式) **目的**:对原始文字做「标准化清洗」,消除无意义的干扰信息,让模型的输入更规整,减少计算噪音。 **本质**:对「字符串」做常规处理,属于**非模型层的工程操作**,无AI计算,纯数据处理。 #### 1. 必做的预处理操作(所有场景通用) - 统一大小写:比如 `Python` → `python`、`我爱中国` 还是 `我爱中国`(中文无大小写,这一步对英文有效) - 去除无意义符号:换行符`\n`、制表符`\t`、连续空格、网页标签``、特殊符号`@#¥%&*` - 统一编码:所有文本转成 **UTF-8**,解决中文乱码问题(最核心的坑) - 过滤无效字符:比如不可见的二进制字符、emoji(可选,部分场景需要保留emoji语义) #### 2. 可选的预处理操作(按需选择) - 中文:繁转简(比如「裡面」→「里面」)、全角转半角(比如「123」→「123」) - 英文:去除标点(`.` `,` `!`)、词形还原(比如 `running`→`run`、`better`→`good`) - 通用:短句过滤(比如过滤掉只有1个字符的无意义文本) #### ✅ 教学提醒 > 预处理没有「标准答案」,核心原则:**你的预处理规则,要和模型训练时的规则一致**。比如训练时保留了标点,推理时也必须保留,否则会影响向量的准确性。 --- ## 三、第二步:Token分词(最核心+最容易讲错的一步,重中之重) ### 1. 为什么需要分词?→ 核心痛点 计算机**不认识任何文字**,不管是中文的「字」、英文的「字母」,对模型来说都是无意义的符号。而且: - 英文:最小语义单元是「单词」(比如 `apple`),而不是单个字母 `a/p/p/l/e`; - 中文:最小语义单元是「词」(比如 `人工智能`),而不是单个字 `人/工/智/能`; 如果直接按「字/字母」处理,会丢失**语义组合信息**,这是分词的核心原因。 ### 2. 什么是Token? **Token = 模型能理解的「最小语义单元」**,是文本向量化的**最小粒度**,也是大模型的「基础货币」(比如GPT-4的上下文窗口是128K Token,就是指能处理这么多语义单元)。 ### 3. 两种主流的分词体系(大模型分两类,必讲) #### ✅ 体系1:字节对编码分词(BPE,Byte Pair Encoding)→ 所有LLM大模型的标配 > 代表模型:GPT系列、Llama1/2、百川、通义千问、文心一言,**99%的生成式大模型都用BPE分词** ##### 核心特点(中文+英文通用) 1. BPE是「贪心的合并分词」,核心逻辑:**从最小的字符开始,把高频出现的字符组合,合并成一个新的Token**,直到满足预设的Token词典大小。 2. 对英文:天然适配单词,比如 `unhappiness` 会被切分成 `un + happy + ness`; 3. 对中文:**这是重点** → 中文没有天然的「空格分隔单词」,BPE会把中文切分成「字/词/短语」的混合粒度,比如: > 原文:`我喜欢人工智能` → BPE分词结果:`我 + 喜欢 + 人工 + 智能` > 原文:`大模型的应用场景很多` → BPE分词结果:`大模型 + 的 + 应用 + 场景 + 很多` ##### BPE的核心优势(为什么成为标配) - 能处理**未登录词(OOV)**:比如模型没见过的新词「生成式AI」,会被切分成「生成 + 式 + AI」,不会出现完全不认识的情况; - 分词粒度可控:词典越大,分词粒度越大,语义越完整; - 效率高:适合长文本、大模型的海量计算。 #### ✅ 体系2:字级/词级分词 → 代表模型:BERT/RoBERTa(Encoder类模型) > 这类模型是「理解型模型」,不是生成式大模型,比如做文本分类、相似度计算的BERT,常用这种分词。 - 中文:按「字」分词(比如 `人工智能` → `人 工 智 能`),简单粗暴,词典极小(只有几千个汉字); - 英文:按「单词」分词,比如 `apple` → `apple`; ##### 优缺点 - 优点:实现简单,无OOV问题(中文就几千个常用字); - 缺点:丢失了词的组合语义,需要模型自己学习字的组合关系,效果不如BPE。 ### ✅ 4. 分词的核心产物:Token词典(Vocab) 所有模型在训练前,都会先训练一个**固定的Token词典**,比如Llama2的词典是32000个Token,GPT-3的词典是50257个Token。 词典里存的是:`Token字符串 → Token索引` 的映射关系,比如: ``` 我 → 100 喜欢 → 2001 人工智能 → 12345 ``` > 教学重点:词典是**固定的、不可修改的**,模型训练好后,词典就定死了,推理时必须用同一个词典分词,否则会报错。 ### ✅ 5. 分词的核心输出 对任意一段文本,分词后会得到一个 **Token列表**,比如: > 原文:`大模型如何将文字转为向量` → 分词结果:`['大模型', '如何', '将', '文字', '转为', '向量']` --- ## 四、第三步:Token转ID(查表操作,简单但必要) 这一步是**纯工程操作,无任何AI计算**,但却是「文字→数字」的**关键桥梁**。 ### 核心逻辑 分词得到的是「Token字符串」(比如`大模型`),模型依然不认识,所以需要做一个**查表映射**: > 用模型的Token词典,把每个Token字符串,映射成一个**唯一的整数ID** 比如词典里的映射关系是: ``` 大模型 → 3001 如何 → 502 将 → 105 文字 → 2034 转为 → 6008 向量 → 9012 ``` 那么上面的Token列表,就会被转成: > `[3001, 502, 105, 2034, 6008, 9012]` 这个**整数ID数组**,就是模型能直接接收的「数字输入」,也是文本向量化的**最后一步预处理**。 ### ✅ 补充2个必讲的细节(教学坑点) 1. 所有模型的输入ID,都会在开头加一个 ** 开始符ID**,结尾加一个 ** 结束符ID**,比如上面的ID数组会变成:`[1, 3001, 502, 105, 2034, 6008, 9012, 2]`,其中`1=,2=`。 2. 会对ID数组做**Padding填充**:模型的输入要求是「固定长度」,比如输入长度必须是512,不够的地方用` 填充符ID=0`补齐,太长的地方会截断。 --- ## 五、第四步:模型计算输出Embedding向量(最终一步,文字→向量的核心) 到这一步,输入已经是**规整的整数ID数组**了,接下来就是模型的核心计算,也是「文字→向量」的**最后一步**。 这个过程分**两个版本讲解**,你可以根据课程难度选择: > ✅ 版本1:**通俗版(适合本科基础课)** → 不讲公式,只讲逻辑; > ✅ 版本2:**硬核版(适合研究生/专业课)** → 讲公式+原理+模型结构; --- ### ✅ 版本1:通俗版(必讲,所有人都能听懂) #### 核心逻辑:3层计算,从ID到向量,层层递进 ##### 第一层:词嵌入层(Token Embedding)→ ID → 基础向量 模型内部有一个**可训练的权重矩阵(叫嵌入矩阵)**,维度是:`词典大小 × Embedding维度`。 比如:词典有32000个Token,Embedding维度是768,那么嵌入矩阵的大小就是 `32000 × 768`。 这个矩阵的作用就是:**查表映射** → 把每个Token的整数ID,映射成一个「768维的基础向量」。 > 举例:ID=3001 → 查嵌入矩阵 → 得到向量 `[0.12, -0.34, 0.56, ..., 0.78]`(768个浮点数) > 最终:一个Token列表 → 变成一个「Token数量 × 768」的二维向量矩阵。 ##### 第二层:位置嵌入层(Position Embedding)→ 补充「语序信息」 > 这是**大模型的灵魂设计,必考必讲**,核心痛点: > 模型是「并行计算」的,本身**没有顺序概念**,如果只输入基础向量,模型无法区分「我打你」和「你打我」的语义差异,因为这两句话的Token完全一样,只是顺序不同。 **位置嵌入的核心作用**:给每个Token的基础向量,**叠加一个「位置向量」**,用来表示这个Token在文本中的「位置信息」。 - 位置向量也是一个可训练的向量,维度和基础向量一致(768维); - 不同位置的Token,叠加的位置向量不同; - 最终:每个Token的向量 = 基础向量 + 位置向量。 ✅ 教学重点:**位置嵌入解决了「语序问题」,是模型能理解语义的核心设计之一**。 ##### 第三层:Transformer编码器计算 → 输出最终的语义向量 这一步是模型的**核心计算层**,也是最复杂的一步,但通俗版不用讲细节,只讲逻辑: > 把「带位置信息的Token向量矩阵」,输入到Transformer的编码器中,经过**多头注意力机制(Multi-Head Attention)+ 前馈神经网络**的层层计算,模型会对每个Token的向量做「语义融合」。 什么是语义融合?举个例子: > 原文:`大模型的应用场景很多` > 模型在计算「应用」这个Token的向量时,会自动融合「大模型」、「场景」这些周边Token的语义信息,最终得到的向量,不再是孤立的「应用」,而是**包含上下文语义的「大模型的应用」**。 ##### 最终输出:向量的两种形式(必讲,两种都常用) 经过Transformer计算后,会得到一个 `Token数量 × Embedding维度` 的向量矩阵,有两种取法,对应两种不同的向量用途: 1. **取 Token的向量** → 作为「整句话的语义向量(句向量)」 - 用途:文本相似度计算、文本检索、文本分类、聚类,比如把两句话的向量拿出来算余弦相似度,就能判断两句话的语义是否相似; - 这是**最常用的向量形式**,也是我们常说的「文本转向量」的最终结果。 2. **取每个Token的向量** → 作为「Token级的语义向量(词向量)」 - 用途:命名实体识别、关键词提取、文本标注等细粒度任务。 --- ### ✅ 版本2:硬核版(适合专业课,公式+原理,可直接写进教案) #### 1. 词嵌入层公式 设词典大小为$V$,Embedding维度为$d_{model}$,嵌入矩阵为$E \in \mathbb{R}^{V \times d_{model}}$,Token的ID为$i$,则该Token的基础向量为: $$ e_i = E[i, :] $$ 所有Token的基础向量构成矩阵 $X \in \mathbb{R}^{n \times d_{model}}$,其中$n$是Token的数量。 #### 2. 位置嵌入层公式 位置嵌入矩阵为$P \in \mathbb{R}^{max\_len \times d_{model}}$,其中$max\_len$是最大序列长度,第$k$个位置的Token的位置向量为$p_k = P[k, :]$,则带位置信息的Token向量为: $$ X' = X + P $$ > 补充:位置嵌入有两种实现方式,GPT用「可训练的位置嵌入」,BERT用「正弦余弦位置嵌入」,效果相近,前者更灵活。 #### 3. Transformer编码器核心计算 输入$X'$后,经过**多头自注意力(MHSA)+ 层归一化(LN)+ 残差连接 + 前馈网络(FFN)**,最终输出编码后的向量矩阵$Z$: $$ \begin{align} Z_1 &= \text{MHSA}(\text{LN}(X')) + X' \\ Z &= \text{FFN}(\text{LN}(Z_1)) + Z_1 \end{align} $$ 其中,多头自注意力的核心是计算Token之间的「语义关联权重」,公式为: $$ \text{MHSA}(Q,K,V) = \text{Concat}(head_1,...,head_h)W^O, \quad head_i = \text{Attention}(QW_i^Q, KW_i^K, VW_i^V) $$ $$ \text{Attention}(Q,K,V) = \text{softmax}(\frac{QK^T}{\sqrt{d_k}})V $$ #### 4. 最终向量输出 句向量:$h_{cls} = Z[0, :]$( Token的向量) 词向量:$h_i = Z[i, :]$(第$i$个Token的向量) --- ## 四、关键补充:不同模型的向量输出差异(教学高频考点) 很多学生会问:为什么BERT的向量和GPT的向量不一样?这里直接给出标准答案,分三类模型,清晰明了: ### ✅ 1. Encoder类模型(理解型)→ BERT/RoBERTa/ERNIE - 向量特点:**双向语义向量**,能充分理解上下文的语义,适合做「文本理解」类任务(相似度、分类、检索); - 向量输出:默认取 Token的向量作为句向量; - 缺点:不能做生成式任务(比如写作文、翻译)。 ### ✅ 2. Decoder类模型(生成型)→ GPT/Llama/百川/通义千问 - 向量特点:**单向语义向量**,只能看到「前文」,看不到「后文」,适合做「文本生成」类任务(续写、翻译、对话); - 向量输出:没有 Token,一般取**最后一个Token的向量**作为句向量; - 优点:生成能力极强,是大模型的主流形态。 ### ✅ 3. Encoder-Decoder类模型(全能型)→ T5/BART - 向量特点:**双向编码+单向解码**,兼顾理解和生成,适合做「机器翻译、文本摘要」等任务; - 向量输出:编码部分取句向量,解码部分做生成。 --- ## 五、落地必知的3个关键知识点(教学延伸,学生必问) ### ✅ 1. 向量的「归一化」:为什么要做? 模型输出的原始向量,数值范围可能很大(比如-10~10),而且向量的「模长」会影响相似度计算的结果。 **解决方案**:对向量做**L2归一化**,让向量的模长=1,归一化后的向量所有元素的平方和=1。 > 公式:$v' = \frac{v}{||v||_2}$ > 作用:归一化后,两个向量的**余弦相似度 = 点积**,计算效率提升10倍,且结果更稳定。 ### ✅ 2. 向量的「相似度计算」:核心评价指标 文本向量化的最终目的,是**通过向量判断语义相似度**,最常用的两个指标(必讲): 1. **余弦相似度(Cosine Similarity)** → 绝对主流,取值范围`[-1, 1]`,值越大,语义越相似; - 优点:不受向量模长的影响,对高维向量友好,计算效率高; - 公式:$\text{sim}(a,b) = \frac{a \cdot b}{||a||_2 \times ||b||_2}$ 2. **欧式距离(Euclidean Distance)** → 取值范围`[0, +∞)`,值越小,语义越相似; - 缺点:对高维向量不友好,容易出现「维度灾难」,一般不用。 ### ✅ 3. 向量的「降维」:高维转低维 大模型的向量维度是768/1024,存储和计算成本都很高,比如存1000万条文本的向量,需要几十G的内存。 **解决方案**:对向量做降维处理,常用方法: - PCA降维:线性降维,速度快,损失少量语义信息; - Sentence-BERT:模型层面直接输出低维向量,效果最好,行业标配; - 降维原则:维度降到**128/256**足够用,能节省90%的存储和计算成本,且语义损失很小。 --- ## 六、总结:文字→向量的核心逻辑链(一句话总结,必背) > 把人类的「文字符号」,通过「预处理」清洗规整,再通过「分词」切分成模型能理解的最小语义单元Token,然后把Token转成整数ID,再通过「词嵌入+位置嵌入」把ID转成带位置信息的基础向量,最后通过Transformer的核心计算,融合上下文的语义信息,得到最终的**语义向量**,这个向量就是文字的「数字语义表示」。 --- ## 最后:教学建议(贴合你的大学老师身份) 1. 讲这个知识点时,**先讲应用,再讲原理**:比如先展示「两句话语义相似→向量距离近」的demo,让学生直观感受到向量的作用,再讲背后的原理,学生更容易理解; 2. 重点讲「分词」和「位置嵌入」:这两个是大模型的核心设计,也是最容易出考点的地方; 3. 少讲公式,多讲逻辑:本科阶段,学生能理解「向量是语义的数字表示」就够了,公式可以作为选讲内容。 --- 我可以帮你把这份内容整理成**课程教案的精简版**,包括「知识点框架+重点标注+课堂提问设计」,直接复制就能用,需要吗? 原文出处:http://www.malaoshi.top/show_1GW2UqUtvOPq.html