第 7 章 · 第三部分 语言

文字怎样变成数字

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

人工智能导论 · 上海交通大学「AI+教育」平台 · 讲义版幻灯片

这一讲对应《Hello, AI》第 7 章《文字怎样变成数字》。主线约 7 分钟的阅读量,展开讲一节课。

本章要回答的问题:一段文字送进模型之前,发生了什么?为什么这一步会影响模型数数、拼写和记忆的能力?

开场一个能写论文的系统

「strawberry 这个词里有几个 r?」

很多版本会答错。
让它把一句话倒着写,它常常写乱。

一个能编程的系统,怎么会数不清三个字母?
答案不在它的智力,在它的眼睛

模型从来没有见过「strawberry」这个词。
它见到的是几个编号:

[496, 675, 15717]

字母 r 对它来说不是一个独立存在的东西。

现场问一句:你们谁试过让它数字母、倒着写、押韵?大多数班里都有人试过并且笑过。这一章解释那些笑点。

?

一段文字送进模型之前,
发生了什么?

一

什么是语言模型

一句七十年没变过的定义。

二

切成 token

分词,以及它造成的全部怪癖。

三

变成向量

意义变成几何。

理解这两步转换,就理解了大语言模型一大半的奇怪行为。

一Part One

先说清什么是语言模型

这个词在这门课后半部分会出现几百次,值得先给它一个精确的定义。

概率分布1948今天
定义只有一句

语言模型是一个概率分布

给定前面的文字,它对「下一个词是什么」的每一种可能给出一个概率。
「今天天气真」后面
好   0.4
热   0.2
差   0.1
香蕉 ≈ 0

一个模型如果能对任何前文给出准确的概率,
它就「懂」这门语言——至少在统计意义上懂。

翻译、写作、问答、总结,全都可以化归为「给定这些前文,最可能的续写是什么」。

第一道自测题就是让学生用这个定义解释翻译。这一页务必讲透。

历史这个定义有七十年了

变的不是定义,是两个数字

1948
香农用字母的统计规律估算英语的信息量
1990s
N 元模型语音识别和输入法:数「前 N 个词之后最常出现哪个词」。
今天
同一个定义
变化的只有两件事
  • 能看多长的前文从一两个词,到几十万个词。
  • 用什么去估计概率从一张计数表,到一个万亿参数的神经网络。

本站首页那个「只看前一个字」的小玩意,就是它最简单的形式。

可以现场打开首页那个小玩意演示三十秒。学生一旦看到「最简单的语言模型」长什么样,后面的敬畏感会转成好奇。

二Part Two

第一步:切成 token

模型不能直接处理文字,它需要一个有限的词表,把任何输入切成词表里的单元。这些单元叫 token。

按字?按词?BPE上下文窗口成本
分词两种朴素办法,各有死穴

按字切,还是按词切

按字(英文按单词)

词表小,但单元没意义

几千个汉字就够了。但每个字承载的信息少,「电脑」要拆成两个单元才有意义。

按词

单元有意义,但词表爆炸

英文有几十万个词,还不算变形和新词。而且遇到没见过的词就傻了。

今天几乎所有模型用的是一种折中:字节对编码(BPE)。

让学生先自己想两分钟「你会怎么切」,他们提出的方案基本就是这两种,然后再给 BPE。

BPE从字节开始,合并几万次

让数据自己决定词表

  1. 从单个字节开始。
  2. 统计训练语料里哪两个相邻单元最常一起出现。
  3. 把它们合并成一个新单元。
  4. 反复几万次。

得到一个几万到几十万条的词表:常见词是一个 token,不常见的词被拆成几个有意义的片段,任何生僻字、表情、代码符号都能拆到字节级别,永远不会「不认识」。

小例子:语料里只有四个词
l o w </w>      5
l o w e r </w>    2
n e w e s t </w>  6
w i d e s t </w>  3
  • e s出现 9 次,最多 → 合并成 es
  • es t9 次 → est;再合并 est</w>
  • l o7 次 → lo;再合并 low

于是语料里从未出现过的 lowest,也能被切成 low + est</w> 两个有意义的单元,而不是六个字母。

合并的顺序就是分词规则,所以同一个模型的分词是确定的、可复现的。本站实验用的就是几个真实模型的合并表。

代价模型看到的世界很奇怪

它在 token 的边界上摔倒

拆字

strawberry

可能被切成 str · aw · berry。字母 r 分散在三个片段里,模型没有任何直接途径去数它。

数字

2024 与 2025

前者可能是一个 token,后者可能是 202 · 5 两个。算术为什么时灵时不灵,一部分原因在这里。

中文

更微妙

常用汉字通常是一个 token,但很多字要占两三个——因为词表主要是在英文语料上建的。

数字母、倒着写、押韵、拆字游戏——这些「愚蠢」都是分词造成的,不是推理能力问题。

实验 · 分词器

现场演示分词实验:让学生输入一段中文、一段英文、一段代码和几个表情,留意同样长度的中文和英文 token 数相差多少。然后问:这对「窗口能装多少字」和「按 token 计费」意味着什么?

第一个实际后果

上下文窗口
是按 token 算的。

一个「十二万八千 token」的窗口,
装英文大约九万个词,装中文大约六到九万字——
取决于分词器对中文的友好程度。

让学生记住这个换算:一个汉字大约 1~2 个 token,一个英文词大约 1.3 个。够用来做预算估算了。

深入token 的经济学

一次对话花了多少钱

一百字中文120~200token,取决于词表
一本三十万字小说40~60 万装不进大多数窗口

所以「把整本书发给它总结」在很多产品里其实是先切成几段分别处理。

对话为什么越聊越贵:模型没有记忆(第十章会讲)。每发一句新话,整个历史都要作为输入重新送进去。这是产品限制对话长度、或自动摘要历史的原因。

语言之间的不平等

同样一句话,英语用的 token 最少,中文、日文次之,很多小语种要三到五倍。

  • 非英语用户支付更多
  • 能装进窗口的内容更少
  • 训练中见到的 token 也按比例更少

近几年模型在扩大词表、改善多语言分词,差距在缩小,但没有消失。

给学生一个估算公式,板书:每次调用的输入 token 数 × 调用次数 × 每百万 token 单价。为一个班、一所学校设计应用时,这就是预算。

深入中文的特殊处境

「南京市长江大桥」

南京市 / 长江大桥
南京 / 市长 / 江大桥

英文有天然的分隔符:空格。中文没有。传统的中文信息处理花了几十年在这个问题上——词典、统计模型、序列标注,都是为了先把词切对。

BPE 绕过了这个问题,办法是不再假设「词」存在:只按字节统计共现。切出来的单元可能是一个字、一个常用词,甚至半个字。

代价与进展

代价是模型看到的中文是一种人不熟悉的切法;好处是「不认识某个字」的情况彻底消失。

  • GPT-2 时代词表几乎没为中文优化,一个汉字平均 2~3 个 token。
  • 2023 年之后词表扩到十几万到二十几万,常用汉字多数成了单个 token,效率已接近英文。
  • 国产模型通常更好训练语料里中文占比高。

同一句话,用「友好」和「不友好」的词表切,token 数可以差一倍——这个差别直接变成成本和窗口的差别。

这一页可以在分词实验里当场验证。选一句成语或古诗效果最明显。

深入上下文窗口的进化

五年里增长了一千倍

年份典型窗口大约能装能做的新事
20191K一页纸补全一段话
20202K–4K几页纸回答一篇短文的问题
202332K–128K一本小册子读完一份合同、一篇论文
2024200K–1M一本书到几本书整个代码库、整学期的课程材料
2025 之后1M–2M一部长篇小说加插图多轮长任务、大量文档交叉比对

靠三件事:注意力计算的工程优化、位置编码的改进、更多显存。

第八章会讲注意力的计算量随长度平方增长——这一页先埋个伏笔。

但窗口大不等于用得好

关键信息埋在中间时,
被漏掉的概率更高。

研究发现模型对长上下文中间部分的注意力常弱于开头和结尾。
而且窗口不是记忆:每一轮对话整个窗口都要重新计算,越长越贵、越慢。

所以「把所有材料都塞进去」往往不如「先检索出相关的几段再放进去」——第十章的检索增强生成。

「大海捞针」测试值得提一句名字,学生以后会在评测报告里反复看到。

三Part Three

第二步:变成向量

有了 token 的编号,还不能直接算。编号只是名字,「496」和「497」之间没有任何意义上的关系。模型需要的是一种能计算的表示:相似的词,数字也相似。

嵌入意义即几何向量算术
嵌入每个 token 一串数字

关键在于:这些数字不是人定的,是训练出来的

给每个 token 分配一个向量,比如一串 4096 个数字,叫它的嵌入(embedding),或者词向量。

训练时模型被要求预测下一个词。为了预测得好,它不得不把「用法相似的词」放到相近的向量上——因为它们后面跟的东西相似。

于是
  • 「猫」和「狗」靠近它们前后出现的词高度重叠。
  • 「猫」和「宪法」很远

第六章讲的表示学习,在这里只是换了一种输入而已。

回扣第六章:网络自己学出中间特征。词向量就是文字的中间特征。

几何距离是相似,方向是关系

语言变成了几何

意义的几何
相近的聚在一起,关系是一个方向。

在这个几千维的空间里,距离对应意义的相似,方向对应意义的关系。下一页给最著名的那个例子。

2013一项著名发现

这个空间里可以做算术

国王 − 男人 + 女人 ≈ 女王

北京 − 中国 + 法国 ≈ 巴黎

「男人到国王」这个方向,和「女人到女王」这个方向几乎一样。

没有人教过它什么是首都、什么是性别

这些关系是它为了预测下一个词而自己发现的结构。

实验 · 词向量

亲手做一次向量算术,看结果离「女王」有多近。它不完美,这本身也是信息。

现场演示词向量实验:先看二维投影里国家聚在一起、动物聚在一起、动词和名词分开,再做算术。
结果通常是「女王」排第一或第二——不完美这件事,可以顺势讨论:向量只反映共现统计。

深入两个向量怎样比较

余弦相似度:用夹角,不用距离

cos(θ) = (a · b) / (‖a‖ ‖b‖)

  • 方向完全一致为 1;垂直时 0;相反时 −1。
  • 为什么用夹角向量的长度往往和词频有关,而我们关心的是方向。
这个简单的度量支撑了今天大量应用
  • 语义搜索搜「怎么让孩子爱上阅读」,能找到标题为「培养阅读习惯的五个方法」的文章——没有一个词相同。
  • 推荐用户历史和商品都变成向量,推方向接近的。
  • 检索增强生成先用向量找资料,再让模型基于资料回答。
  • 相册搜图图片和文字变到同一个空间——第六章开头那个问题的完整答案在这里。

第六章开场的「搜索框输入猫」在这里闭环了。学生会有一个小小的恍然大悟,别错过这个时刻。

理解了「意义即几何」,也就理解了它的局限

向量只反映
训练语料里的共现。

早期的词向量里,「医生」离「男人」比离「女人」近,「护士」则相反。

这不是模型的观点,是语料的统计;
但它会通过模型影响下游的每一个应用。

这一页值得停一下。可以问:如果一个简历筛选系统用了这样的向量,会发生什么?第十四章会正面处理。

深入向量数据库

「我们把 AI 接到了自己的知识库上」——背后是什么

一个知识库有一百万段文字,每段一个几千维向量。用户提问时要在一百万个向量里找出最接近的十个。逐个算余弦太慢,于是有了专门的系统。

核心是近似最近邻:不保证找到绝对最近的,但能在毫秒内找到足够近的。做法是把空间分区、建成图或树,查询时只在少数分区里比较。

纯工程问题,但它决定了检索增强生成的响应速度,也决定了相册搜图、语义搜索、推荐能否实时。

那句话的完整展开
文档切成段
→ 每段算一个向量
→ 存进向量数据库
→ 提问时先检索,再让模型回答

质量取决于三个环节:

  • 文档怎样切段太长会稀释,太短会失去上下文。
  • 用什么模型算向量它决定了「相似」的含义。
  • 检索出的段落怎样喂给模型

出问题时,先查这三处,再怀疑模型。

这一页对做项目的学生极其实用。第十章会完整讲 RAG,这里先给出排查顺序。

四Part Four

这两步决定了什么

一段文字进入模型,先被分词器切成 token 序列,再被嵌入层变成向量序列。此后模型内部处理的全部是向量,直到最后一步再把向量变回 token 的概率。

视力感觉边界
合起来看模型的感官

两步:切成 token 并查编号,再把编号换成向量

今天天气真好 一句话 ① 分词器切成 token,查编号 今天 天气 真 好 210388776311509 ② 嵌入层:每个编号换成一串数字(向量) [0.12, −0.8, 0.33, …] [0.09, −0.7, 0.41, …] [−0.5, 0.2, 0.05, …] [−0.4, 0.3, 0.1, …] 「今天」和「天气」的向量很像:它们前后常出现同样的词 几千维,人读不懂,但可以算距离、算方向 这之后模型内部处理的全是向量,直到最后一步再变回 token 的概率。
  • 分词决定「视力」它对字母、数字、标点看得清不清;窗口能装多少内容;每种语言的成本是多少。
  • 嵌入决定「感觉」它对意义的把握;也决定语料里的偏见怎样进入模型。

下次看到一个大模型犯了一个小学生都不会犯的错误,先想想:这个错误,是不是发生在它的眼睛上,而不是脑子里?

下一章进入脑子:把向量序列送进去之后,Transformer 做了什么。

带走一句话

模型没有见过字,
它见到的是 token,
处理的是向量。

这两步是它的感官,直接决定了它的能力边界。

这是本章唯一必须记住的一句。

自测第 1、2 题

用「语言模型是一个概率分布」这个定义解释:为什么翻译可以看作「预测下一个词」?

为什么大模型经常数不清一个单词里有几个字母?

参考答案 一、把原文放在前面,加上「翻译成英文:」,模型对后续文字的概率分布中,最可能的续写就是译文。任何「给定输入产生输出」的语言任务,都可以化归为在特定前文之后预测最可能的续写。

二、因为模型看到的不是字母而是 token,一个单词往往被切成几个片段,字母分散其中,模型没有直接途径逐个访问。这是分词造成的「视力」问题,不是推理能力问题。

先让学生回答,再按右键展开答案。

自测第 3 题

同一个上下文窗口,为什么装的中文字数通常少于英文词数?

参考答案 窗口按 token 计,而主流分词器的词表主要在英文语料上构建:常见英文词多为一个 token,很多汉字却要占两三个。对中文不够友好的分词器,会让同样长度的中文消耗更多 token。

可以追问一句:那这对中文用户意味着什么?答案是成本更高、能装的内容更少。

自测第 4 题

「国王 − 男人 + 女人 ≈ 女王」说明词向量空间有什么性质?
这个性质是谁教给模型的?

参考答案 说明空间里的方向对应意义关系(性别、地位),关系可以用向量差表示,并在不同词对之间迁移。
没有人教它——这是模型为了预测下一个词,在训练语料的共现统计里自己发现的结构。

「自己发现」四个字要强调。它是第六章表示学习的直接延续。

收束第 7 章

这一章留下什么

  • 语言模型是一个概率分布:给定前文,对下一个词的每种可能给出概率。这个定义有七十年历史。
  • 第一步是分词:BPE 从字节开始反复合并,让数据自己决定词表;模型永远不会「不认识」。
  • 分词决定了它的怪癖:数字母、倒着写、押韵失败,都是在 token 边界上摔倒,不是推理问题。
  • 第二步是嵌入:相似的词向量靠近,方向对应意义关系——这是模型为了预测下一个词自己发现的。
  • 意义即几何,也即局限:向量只反映训练语料的共现,语料里的偏见会被忠实编码并传给每个下游应用。
本章术语
语言模型Token分词BPE上下文窗口词向量嵌入向量相似度

继续读

正文与「深入」段落:ai4edu.sjtu.edu.cn/helloai/read/text-to-numbers/
下一章:第 8 章 每个词都能看见其他词

留三到五分钟做本页的回顾,让学生用自己的话复述其中一条。

阅读本章正文 ↗ 全部幻灯片

放映快捷键

← → 空格
上一页 / 下一页
数字 + 停顿
跳到第 N 页
O
缩略总览,点一张跳过去
N
讲者备注抽屉
S
改成一步一点(默认一次一整页)
F
全屏
P
打印 / 导出 PDF(每页一张)
Esc
退出总览或关闭本窗

鼠标移到屏幕底部会显示控制条;页码记在地址栏的 # 后面,刷新不会丢。
手机上:竖着拿会自动把版面转过来(底下那条里的「转向」可以切回去),点右半边或往上滑翻页。

在手机上怎么翻

竖着拿的时候,整张幻灯片会自动转过来,字大一倍;把手机横过来也一样能看。

点右半边或往上滑是下一页,点左半边回上一页。屏幕底下那条里有缩略总览和讲者备注。

或者读这一章的正文 →