一个大语言模型从来没有见过一个「字」。它见到的是 token,处理的是向量。这一章讲这两步转换,它们决定了模型能做什么、不能做什么。

这一讲对应《Hello, AI》第 7 章《文字怎样变成数字》。主线约 7 分钟的阅读量,展开讲一节课。
本章要回答的问题:一段文字送进模型之前,发生了什么?为什么这一步会影响模型数数、拼写和记忆的能力?
很多版本会答错。
让它把一句话倒着写,它常常写乱。
模型从来没有见过「strawberry」这个词。
它见到的是几个编号:
[496, 675, 15717]
字母 r 对它来说不是一个独立存在的东西。
现场问一句:你们谁试过让它数字母、倒着写、押韵?大多数班里都有人试过并且笑过。这一章解释那些笑点。
一句七十年没变过的定义。
分词,以及它造成的全部怪癖。
意义变成几何。
理解这两步转换,就理解了大语言模型一大半的奇怪行为。
这个词在这门课后半部分会出现几百次,值得先给它一个精确的定义。
给定前面的文字,它对「下一个词是什么」的每一种可能给出一个概率。
一个模型如果能对任何前文给出准确的概率,
它就「懂」这门语言——至少在统计意义上懂。
翻译、写作、问答、总结,全都可以化归为「给定这些前文,最可能的续写是什么」。
第一道自测题就是让学生用这个定义解释翻译。这一页务必讲透。
本站首页那个「只看前一个字」的小玩意,就是它最简单的形式。
可以现场打开首页那个小玩意演示三十秒。学生一旦看到「最简单的语言模型」长什么样,后面的敬畏感会转成好奇。
模型不能直接处理文字,它需要一个有限的词表,把任何输入切成词表里的单元。这些单元叫 token。
几千个汉字就够了。但每个字承载的信息少,「电脑」要拆成两个单元才有意义。
英文有几十万个词,还不算变形和新词。而且遇到没见过的词就傻了。
今天几乎所有模型用的是一种折中:字节对编码(BPE)。
让学生先自己想两分钟「你会怎么切」,他们提出的方案基本就是这两种,然后再给 BPE。
得到一个几万到几十万条的词表:常见词是一个 token,不常见的词被拆成几个有意义的片段,任何生僻字、表情、代码符号都能拆到字节级别,永远不会「不认识」。
于是语料里从未出现过的 lowest,也能被切成 low + est</w> 两个有意义的单元,而不是六个字母。
合并的顺序就是分词规则,所以同一个模型的分词是确定的、可复现的。本站实验用的就是几个真实模型的合并表。
可能被切成 str · aw · berry。字母 r 分散在三个片段里,模型没有任何直接途径去数它。
前者可能是一个 token,后者可能是 202 · 5 两个。算术为什么时灵时不灵,一部分原因在这里。
常用汉字通常是一个 token,但很多字要占两三个——因为词表主要是在英文语料上建的。
数字母、倒着写、押韵、拆字游戏——这些「愚蠢」都是分词造成的,不是推理能力问题。
现场演示分词实验:让学生输入一段中文、一段英文、一段代码和几个表情,留意同样长度的中文和英文 token 数相差多少。然后问:这对「窗口能装多少字」和「按 token 计费」意味着什么?
上下文窗口
是按 token 算的。
一个「十二万八千 token」的窗口,
装英文大约九万个词,装中文大约六到九万字——
取决于分词器对中文的友好程度。
让学生记住这个换算:一个汉字大约 1~2 个 token,一个英文词大约 1.3 个。够用来做预算估算了。
所以「把整本书发给它总结」在很多产品里其实是先切成几段分别处理。
对话为什么越聊越贵:模型没有记忆(第十章会讲)。每发一句新话,整个历史都要作为输入重新送进去。这是产品限制对话长度、或自动摘要历史的原因。
同样一句话,英语用的 token 最少,中文、日文次之,很多小语种要三到五倍。
近几年模型在扩大词表、改善多语言分词,差距在缩小,但没有消失。
给学生一个估算公式,板书:每次调用的输入 token 数 × 调用次数 × 每百万 token 单价。为一个班、一所学校设计应用时,这就是预算。
英文有天然的分隔符:空格。中文没有。传统的中文信息处理花了几十年在这个问题上——词典、统计模型、序列标注,都是为了先把词切对。
BPE 绕过了这个问题,办法是不再假设「词」存在:只按字节统计共现。切出来的单元可能是一个字、一个常用词,甚至半个字。
代价是模型看到的中文是一种人不熟悉的切法;好处是「不认识某个字」的情况彻底消失。
同一句话,用「友好」和「不友好」的词表切,token 数可以差一倍——这个差别直接变成成本和窗口的差别。
这一页可以在分词实验里当场验证。选一句成语或古诗效果最明显。
| 年份 | 典型窗口 | 大约能装 | 能做的新事 |
|---|---|---|---|
| 2019 | 1K | 一页纸 | 补全一段话 |
| 2020 | 2K–4K | 几页纸 | 回答一篇短文的问题 |
| 2023 | 32K–128K | 一本小册子 | 读完一份合同、一篇论文 |
| 2024 | 200K–1M | 一本书到几本书 | 整个代码库、整学期的课程材料 |
| 2025 之后 | 1M–2M | 一部长篇小说加插图 | 多轮长任务、大量文档交叉比对 |
靠三件事:注意力计算的工程优化、位置编码的改进、更多显存。
第八章会讲注意力的计算量随长度平方增长——这一页先埋个伏笔。
关键信息埋在中间时,
被漏掉的概率更高。
研究发现模型对长上下文中间部分的注意力常弱于开头和结尾。
而且窗口不是记忆:每一轮对话整个窗口都要重新计算,越长越贵、越慢。
所以「把所有材料都塞进去」往往不如「先检索出相关的几段再放进去」——第十章的检索增强生成。
「大海捞针」测试值得提一句名字,学生以后会在评测报告里反复看到。
有了 token 的编号,还不能直接算。编号只是名字,「496」和「497」之间没有任何意义上的关系。模型需要的是一种能计算的表示:相似的词,数字也相似。
给每个 token 分配一个向量,比如一串 4096 个数字,叫它的嵌入(embedding),或者词向量。
训练时模型被要求预测下一个词。为了预测得好,它不得不把「用法相似的词」放到相近的向量上——因为它们后面跟的东西相似。
第六章讲的表示学习,在这里只是换了一种输入而已。
回扣第六章:网络自己学出中间特征。词向量就是文字的中间特征。
在这个几千维的空间里,距离对应意义的相似,方向对应意义的关系。下一页给最著名的那个例子。
国王 − 男人 + 女人 ≈ 女王
北京 − 中国 + 法国 ≈ 巴黎
「男人到国王」这个方向,和「女人到女王」这个方向几乎一样。
这些关系是它为了预测下一个词而自己发现的结构。
亲手做一次向量算术,看结果离「女王」有多近。它不完美,这本身也是信息。
现场演示词向量实验:先看二维投影里国家聚在一起、动物聚在一起、动词和名词分开,再做算术。
结果通常是「女王」排第一或第二——不完美这件事,可以顺势讨论:向量只反映共现统计。
cos(θ) = (a · b) / (‖a‖ ‖b‖)
第六章开场的「搜索框输入猫」在这里闭环了。学生会有一个小小的恍然大悟,别错过这个时刻。
向量只反映
训练语料里的共现。
早期的词向量里,「医生」离「男人」比离「女人」近,「护士」则相反。
这不是模型的观点,是语料的统计;
但它会通过模型影响下游的每一个应用。
这一页值得停一下。可以问:如果一个简历筛选系统用了这样的向量,会发生什么?第十四章会正面处理。
一个知识库有一百万段文字,每段一个几千维向量。用户提问时要在一百万个向量里找出最接近的十个。逐个算余弦太慢,于是有了专门的系统。
核心是近似最近邻:不保证找到绝对最近的,但能在毫秒内找到足够近的。做法是把空间分区、建成图或树,查询时只在少数分区里比较。
纯工程问题,但它决定了检索增强生成的响应速度,也决定了相册搜图、语义搜索、推荐能否实时。
质量取决于三个环节:
出问题时,先查这三处,再怀疑模型。
这一页对做项目的学生极其实用。第十章会完整讲 RAG,这里先给出排查顺序。
一段文字进入模型,先被分词器切成 token 序列,再被嵌入层变成向量序列。此后模型内部处理的全部是向量,直到最后一步再把向量变回 token 的概率。
下次看到一个大模型犯了一个小学生都不会犯的错误,先想想:这个错误,是不是发生在它的眼睛上,而不是脑子里?
下一章进入脑子:把向量序列送进去之后,Transformer 做了什么。
模型没有见过字,
它见到的是 token,
处理的是向量。
这两步是它的感官,直接决定了它的能力边界。
这是本章唯一必须记住的一句。
用「语言模型是一个概率分布」这个定义解释:为什么翻译可以看作「预测下一个词」?
为什么大模型经常数不清一个单词里有几个字母?
先让学生回答,再按右键展开答案。
同一个上下文窗口,为什么装的中文字数通常少于英文词数?
可以追问一句:那这对中文用户意味着什么?答案是成本更高、能装的内容更少。
「国王 − 男人 + 女人 ≈ 女王」说明词向量空间有什么性质?
这个性质是谁教给模型的?
「自己发现」四个字要强调。它是第六章表示学习的直接延续。
继续读
正文与「深入」段落:ai4edu.sjtu.edu.cn/helloai/read/text-to-numbers/
下一章:第 8 章 每个词都能看见其他词
留三到五分钟做本页的回顾,让学生用自己的话复述其中一条。
鼠标移到屏幕底部会显示控制条;页码记在地址栏的 # 后面,刷新不会丢。
手机上:竖着拿会自动把版面转过来(底下那条里的「转向」可以切回去),点右半边或往上滑翻页。