跳到主内容

什么是嵌入层?文字是怎么变成向量的

2026-10-06 发布 来源:我告诉你AI导航 阅读

大模型内部只有矩阵乘法,可"苹果"这两个字没法直接相乘。嵌入层就是入口处的转换:把离散的词变成一串连续的数,让语义关系变成可以计算的距离。理解它,能解释不少日常现象,比如为什么换个说法,检索结果就变了。

大模型内部只有矩阵乘法,可"苹果"这两个字没法直接相乘。嵌入层就是入口处的转换:把离散的词变成一串连续的数,让语义关系变成可以计算的距离。理解它,能解释不少日常现象,比如为什么换个说法,检索结果就变了。

进来的是编号,不是词

文本先经过分词器切成 token,每个 token 在词表里对应一个整数编号。中文不一定按字切,英文也不一定按词切,生僻词常被拆成更小的片段。这一步的输出是一串整数:长度为 512 的序列,就是 512 个编号。

编号本身没有大小含义。词表里"苹果"是 3021、"香蕉"是 8871,两个数字相减没有任何意义。直接把编号喂给后面的网络,模型会误以为编号接近的词意思也接近。嵌入层要消掉的就是这个假信息。

顺带说明一个常见混淆:token 不等于字。一个汉字可能是一个 token,也可能和相邻的字合成一个;英文词也可能被拆成两三个片段。所以常说的"上下文 32K"是 token 数,不是字数,中文字数要按比例折算。

发生的是查表,等价于一次矩阵乘法

嵌入层是一张矩阵,行数是词表大小,列数是维度。第 n 行就是编号 n 对应的向量。取一个词的向量,工程上是按编号取出一行;数学上,是把一个只有一位为 1 的向量乘上这张矩阵。两种说法描述同一件事:查表和矩阵乘法在这里等价。

这也解释了参数量:词表十万、维度一千,这张矩阵就有一亿个参数,在模型总参数里往往占不小的一块。词表越大、维度越高,这块开销越大,所以多语言模型的嵌入层通常比单语模型厚。

取出的向量还要加上位置信息,才能区分"狗咬人"和"人咬狗"。位置编码不在嵌入矩阵里,是另一套加进去的量。此后每层注意力都在这些向量上做加权组合,维度一般保持不变,变的是数值。

那些数字是训练出来的

矩阵初始化时是随机的,训练刚开始,向量之间没有关系。训练任务是预测下一个 token:给定前文,模型输出一个概率分布,和真实的下一个词算误差,反向传播把梯度送回嵌入矩阵,逐轮调整每一行。

关键在于同一个词出现在不同上下文里,会被推向"让预测更准"的方向。"苹果"和"香蕉"都能接"很甜""多少钱一斤",为了让这两类上下文都预测得准,它们的向量会被拉到相近区域。语义相近变成空间相近,是训练目标的副产品,不是谁手工设定的规则。

所以向量反映的是语料里的用法,不是词典定义。"苹果"会靠近"手机""发布会",也会靠近"水果""产地",偏向哪边取决于训练语料里哪种搭配更多。它是一张用法地图,不是一本释义书。

距离怎么算,维度怎么选

常用余弦相似度,看夹角不看长度。向量长度常被用来承载词频这类信息,夹角更能反映方向上的相似。做检索前一般先归一化再算内积,结果等价,速度更快。

维度是取舍。维度低,能装的信息少,近义词容易挤在一起;维度高,表达细,但参数量和计算量上升,语料不够时还会记住噪声。常见取值在几百到几千之间,具体跟词表规模、语料量一起定,没有通用答案。

环节输入输出容易误解的地方
分词原始文本整数编号序列以为编号大小代表语义远近
查表每个编号一个 d 维向量以为向量是人手工设定的
加位置向量序列带顺序信息的向量以为顺序信息存在词向量里
反向传播预测误差被调整的矩阵以为一次训练只改当前这句话

表格第四行值得展开。一次前向只处理一批文本,但梯度会累积、参数会被更新,同一个词在不同句子里的调整方向可能相反,最终位置是折中的结果。

国王减男人加女人,边界在哪

这个例子常被拿来说明向量捕捉了语义结构:king 减 man 加 woman,最近邻是 queen。它在早期词向量上确实能复现,但别把它当成模型理解了概念。

回到机制:结果来自共现统计。king 和 queen 共享大量上下文(王室、加冕、宫殿),man 和 woman 共享另一批(性别、称谓)。两组差值方向接近,做向量运算才会落到 queen 附近。它证明的是分布规律可被线性近似,不证明模型会做逻辑推理。

这类类比在低频词、专有名词、多义词上经常失效。拿它做产品判断容易过度解读;拿它做聚类、去重、召回,才是稳定的用途。

一张矩阵解决不了的事

一张矩阵,一个词只有一行。"苹果"无论是水果还是公司,取出的向量完全相同,后面的层只能靠上下文补救。早期词向量因此在一词多义上表现差;后来的上下文相关表示让同一个词在不同句子里得到不同向量,代价是每个 token 都要过一遍网络,算力开销明显上升。

词表外的问题也还在。没见过的词,分词器拆成子词片段,向量由片段组合而来,能用但不精确。拼写错误、网络新词、专业缩写都属于这一类。语料里出现少的词,训练不足,位置会偏。

多语言也是边界。向量空间是否对齐,取决于训练语料里有没有平行数据;没对齐时,中文词和英文译词可能离得很远,跨语言检索就失效。

部署时还有精度这一层。嵌入矩阵通常跟着模型一起被量化,显存省了,向量的细微差别也被抹平,近邻排序可能变化,模型量化的取舍里讲过这类精度损失怎么评估。

放回整条链路

嵌入层速查

  • 进:token 编号序列;出:每个 token 一个 d 维向量
  • 查表与 one-hot 矩阵乘法等价,参数量约等于词表乘维度
  • 向量是训练出来的,反映语料用法,不反映词典定义
  • 比较用余弦,先归一化再算内积
  • 静态向量分不清多义词,上下文表示才解决这一层

检索系统里单独跑这件事的组件叫嵌入模型,它和生成模型不是一回事,嵌入模型怎么选那篇给了判断标准。嵌入矩阵的大小直接计入总参数量,参数量怎么算可以对照着看。具体维度与词表规模以各模型的官方说明为准。

反馈页面信息

请描述需要更正的地方,页面标题和网址会自动附上。

也可以发邮件至 [email protected]