跳到主要内容

文本 — 从词袋到 Transformer

这一章讲三件事: 文本怎么变成张量(向量化三步);词袋和序列模型两条路线各是什么、 什么时候选哪条(黄金常数 1500);以及 Transformer 凭什么取代 RNN—— 自注意力、位置嵌入、编码器-解码器,全部落到具体数字上。 这是全书最重的一章(原书 95k 字符),也是今天大模型世界的入口。

1. 顶层全景

这一章讲的整件事有个名字:自然语言处理,缩写 NLP—— 让机器处理人写的文字这一支,翻译、分类、摘要、问答、聊天都归它 (第 01 章讲 Transformer 崛起时出现过这个缩写,这里正式接手)。

先泼冷水:书里的立场是,你训练的文本模型并不会像人一样理解语言, 它只是在输入数据中寻找统计规律——计算机视觉是应用于像素的模式识别, 自然语言处理就是应用于单词、句子和段落的模式识别1。 这句话是全章的定调句:这一行做的不是「让机器懂中文英文」,是「在文字上做模式识别」。

这个领域四十年的主线,是从「手写规则」到「统计学习」2: 60 年代 ELIZA 那种手写规则系统让人失望了几十年;90 年代换成决策树、 logistic 回归(作者 2013 年赢 Kaggle NLP 竞赛靠的就是这两样); 2015–2017 双向 LSTM 统治;2017–2018 Transformer 取代一切。 语音识别先驱 Jelinek 的那句玩笑标志着旧时代的终结: 「每次我解雇一名语言学家,语音识别的性能都会提高一些。」3

本章的主走查有两条:一条是 IMDB 影评分类,四种方法同台比武 (词袋 89.2% → 二元语法 90.4% → 序列模型 88.3%); 另一条是书里那句「The train left the station on time」—— 看自注意力怎么让「station」这个词沾上「train」的意思。

2. 文本向量化:标准化、词元化、索引

深度学习模型只吃数值张量。原始文本变成张量的标准流程是三步4:

第一步,标准化。 「Mexico」和「México」、「Isnt」和「Isn't」在字节层面完全不同, 但对模型是同一个词。最广泛的做法:全部转小写、删除标点。 (注意标准化也会删信息:如果任务是从采访里提取问题,「?」恰恰有用,就不能删。)5

第二步,词元化。 把文本切成单元,每个单元叫一个词元(token)。 三种切法:按词切(单词级)、按连续 N 个词切(N 元语法)、按字符切6

第三步,建索引。 给每个词元一个整数编号。两个特殊编号先占掉7:

索引 0:掩码词元 —— 「别理我,我不是一个单词」(用来把短序列填充到统一长度)
索引 1:OOV 词元 —— 「这里有个我们不认识的词」(out of vocabulary,未登录词)
索引 2 起:真正的词,按出现频率排

词表通常只留前 2~3 万个常见词——只出现一两次的罕见词没有信息量。

Keras 的 TextVectorization 层把三步打包:adapt() 在语料上扫一遍建好词表, 之后喂字符串进、出整数序列。一个工程要点:它本质是字典查询,只能在 CPU 上跑—— 放进 tf.data 管道异步预处理,GPU 才不用干等8

3. 词袋模型:不要词序,意外地能打

3.1 一元语法、二元语法、TF-IDF

词袋模型把文本看成无序的词元集合——一个「袋」,不是一条「链」。 第 05 章的 multi-hot 就是一元语法词袋:整篇影评变成「哪些词出现过」的 20000 维向量9

回到 IMDB:主走查第 ① 步。 同一个模型(20000 维 multi-hot → Dense(16) → Dropout → sigmoid), 三种编码,三种成绩10:

编码测试精度说明
一元语法 multi-hot89.2%只要「出现过哪些词」
二元语法 multi-hot90.4%词元换成「相邻两词组合」,局部词序回来了
二元语法 TF-IDF89.8%给稀有词加权,本例没赚到

二元语法为什么赢?「United States」和「states」「united」各说各话, 拼起来才是美国——N 元语法把少量局部词序手动注入词袋11

TF-IDF 是词频加权的经典方案:一个词在当前文档里出现越多、 在整个数据集里出现越少,权重越高——「the」在每篇都有,不值钱; 「Herzog」只在几篇里有,很值钱。它只用除法,不破坏向量的稀疏性12

3.2 序列模型第一战:one-hot + 双向 LSTM 为什么又慢又差

换序列模型的思路:保留词序,把影评编码成整数序列,截到 600 词, 每个整数先 one-hot 成 20000 维向量,再进双向 LSTM。结果两个观察13:

  1. :每个样本是 (600, 20000) 的矩阵,一条影评 1200 万个浮点数;
  2. :测试精度只有 87%,还不如 89.2% 的一元语法词袋。

病根在 one-hot 的假设上:它内置了「任意两个词相互独立」的假设—— 所有 one-hot 向量两两正交。可「movie」和「film」明明可以互换, 它们的向量不该正交,该几乎是同一个向量14。这逼出了本章最重要的概念。

4. 词嵌入:让语义变成几何

词嵌入是另一种词的向量:低维、密集、从数据里学出来—— 和 one-hot 的高维、稀疏、硬编码正好相反。它给每个词发的那一串数,也叫词向量—— 就是同一件东西的另一个叫法:说「词嵌入」侧重那个动作(把词嵌进一个几何空间), 说「词向量」侧重那个结果(词最后拿到的那串数)。两个名字出门都会撞见,所以两个都留着。

它的设计原则是:两个词向量之间的几何关系,应该反映两个词之间的语义关系—— 同义词靠得近,不相干的离得远15

书里给的四词图值得记住:Cat、Dog、Wolf、Tiger 嵌进平面后, 「Cat→Tiger」和「Dog→Wolf」是同一个向量(从宠物到野生), 「Dog→Cat」和「Wolf→Tiger」也是同一个向量(从犬科到猫科)。 真实嵌入空间里有上千个这种可解释的向量方向: king + female = queen;king + plural = kings16

4.1 Embedding 层 = 可学习的字典

获得词嵌入的第一种方法:随任务一起学。Keras 的 Embedding 层, 作用就是字典查询——整数进来,对应的向量出去; 不同的是这本字典的「内容」是权重,跟着反向传播一起学17

有一个重要的认识:不存在一个对所有任务都完美的嵌入空间—— 影评情感分析和法律文件分类需要的「语义相近」不是一回事。 所以合理做法是每个新任务学一个新的嵌入空间18

IMDB 上:Embedding(20000, 256) + 双向 LSTM → 87%,和 one-hot 版打平, 但快得多(LSTM 只处理 256 维而不是 20000 维)19

4.2 填充与掩码:别让模型读几百个零

序列要补齐到等长才能成批(第 2 节的 0 号掩码词元)。 问题是:双向 LSTM 的正序半身会一路读到最后——短评论后面跟着几百个填充零, 读几百次无意义输入,状态里攒下的信息会被逐渐冲掉20

解法是给 Embedding 层开 mask_zero=True:它顺手生成一个掩码 (哪些时间步是真词、哪些是填充),Keras 自动把掩码传给后面的层, RNN 遇到被掩码的时间步直接跳过。加上掩码:87% → 88%,小但实在的改进21

4.3 预训练词嵌入:小数据集的外援

第二种方法:直接用别人学好的嵌入——预训练词嵌入。 Word2Vec(谷歌,2013)和 GloVe(斯坦福,2014,对词共现统计矩阵做因式分解) 是两个经典来源;书里把 40 万个词的 GloVe 向量灌进 Embedding 层并冻结(trainable=False)22

结果坦白说:在 IMDB 上没什么用——数据够多时,随任务学的嵌入已经够专业; 预训练嵌入真正的用武之地是小数据集(和第 08 章预训练卷积网络同理)23

5. Transformer:注意力、QKV 与多头

5.1 自注意力:主走查第 ② 步(「station」沾上「train」)

2017 年,Vaswani 等人的论文「Attention Is All You Need」提出 Transformer: 只用一种叫神经注意力的机制,不用任何循环层和卷积层24

注意力的想法你其实已经见过两次:最大汇聚是「全有或全无」的注意力, TF-IDF 是「连续」的注意力——都是先给特征算重要性分数,再按分数取舍25自注意力把这套用到词的表示上:用序列里相关词的表示来调节某个词的表示, 造出「上下文感知」的新表示。

拿主走查那句:「The train left the station on time」。「station」是哪种站—— 广播站?空间站?自注意力分两步26:

① 算相关性分数:station 和句中每个词做点积
the 0.2 / train 0.8 / left 0.6 / the 0.3 / station 1.0 / on 0.2 / time 0.2
(点积:两个词向量的「方向重合度」,第 02 章见过;分数过一遍 softmax 归一)

② 加权求和:按分数把所有词向量混起来
新的 station = 1.0×station + 0.8×train + 0.6×left + 0.3×the + …
── train 和 left 占了大头,新向量里掺进了「火车」的意思

图说:这一行分数是原书图 11-6 的数值。每个词都重复这两步,
整句话就得到一组上下文感知的新表示。

5.2 查询、键、值:为什么是三个输入

Keras 的 MultiHeadAttention 层调用时要传三次 inputs,看着多余。 书里用搜索引擎解释这三个角色27:

你输入「沙滩上的狗」 ← 查询(query):描述你要找什么
每张照片的关键词 ← 键(key):用来和查询比对的索引
照片本身 ← 值(value):真正要取回的东西

outputs = sum(values × pairwise_scores(query, keys))
「对查询的每个元素,算它和每个键的相关程度,按分数对值加权求和。」

做序列分类时,查询、键、值是同一个序列(所以传三次 inputs)——自己和自己比对; 做翻译时,查询是目标语言序列,键和值都是源语言序列—— 这就是翻译时「回头看原文」的机制28

5.3 多头注意力:子空间版的可分离卷积

多头就是把嵌入空间切成几个独立子空间,每个「头」各自做一遍注意力,再拼回来—— 每个头学一组彼此相关的特征。书里点出一个漂亮的对应: 这和深度可分离卷积是同一个思想——把特征空间拆成独立子空间分别学习, 只不过一个用在卷积上,一个用在注意力上29

5.4 Transformer 编码器 = 注意力 + 密集投影 + 残差 + 规范化

把下面这些「标准动作」组装起来,就是 Transformer 编码器30:

输入序列
→ MultiHeadAttention(自注意力)
→ LayerNormalization(输入 + 注意力输出) ← 残差连接
→ Dense → Dense(密集投影)
→ LayerNormalization(再一次残差)

图说:第 09 章的两个模式原样搬来:残差连接保信息、规范化助梯度。
作者自述这是他设想的「发明者当时的思考过程」——都是标准架构模式。

这里的规范化换了品种:LayerNormalization——对每个序列单独算均值方差, 而不是像 BatchNormalization 那样跨批量统计(序列数据不适合跨样本混着算)31

5.5 关键坦白:它其实不懂词序,要手动把顺序加回去

把编码器直接用于 IMDB 分类,精度 87.5%——但书里紧接着给了一个「不对劲」的坦白32:

你刚刚见到的 Transformer 编码器根本就不是一个序列模型。 密集层独立处理每个词元,注意力把词元视为一个集合—— 你可以把每篇影评的单词完全打乱,模型不会注意到,精度完全一样。

自注意力是集合处理机制:它只看词与词的关系,不看谁先谁后。 解法是把词序手动注入表示:给每个位置也学一个嵌入向量, 和词嵌入相加——这就是位置嵌入(原论文用余弦函数造位置向量, 书里用更简单的办法:像学词嵌入一样学位置嵌入)33

回到 IMDB:主走查第 ③ 步。 Embedding 换成 PositionalEmbedding 之后, 精度 87.5% → 88.3%——最好的序列模型,但仍没赢过 90.4% 的二元语法词袋34

5.6 黄金常数 1500:什么时候该选词袋

「词袋过时了、凡事都上 Transformer」是流行说法,作者直接反驳, 并给出他和团队 2017 年系统分析出的经验法则35:

看「训练样本数 ÷ 每个样本的平均词数」这个比例。 小于 1500,用二元语法词袋(还更快);大于 1500,用序列模型。

IMDB:20000 个样本、平均 233 词,比例约 86 → 该用词袋,实验结果恰好证实。 5 万条平均 40 词的推文(比例 1250)也该用词袋;涨到 50 万条(12500)再上 Transformer。 道理:序列模型的输入空间复杂得多,需要更多数据才能学动; 而且样本越短,词序丢掉越可惜36

6. 序列到序列:机器翻译

6.1 编码器-解码器模板

分类只是 NLP 的一种任务。翻译、摘要、问答、聊天、文本生成, 都是「输入一个序列、输出另一个序列」——序列到序列(seq2seq)模型。 通用模板37:

训练时:编码器把源序列(英语)压成表示
→ 解码器看着「目标序列的前 0~i-1 个词元 + 源序列表示」,预测第 i 个词元
推断时:从种子词 [start] 开始,逐个词元生成,生成的词元喂回解码器,直到 [end]

图说:英语句子「How's the weather today?」进编码器;
西班牙语句子「[start] ¿Qué tiempo hace hoy? [end]」进解码器,
目标是向后偏移一个时间步的同一句话。

6.2 RNN 版的两个根本限制

先用 RNN 实现(双向 GRU 编码器,最后状态当解码器的初始状态):精度 64% (下一词元精度;整句质量的标准指标叫 BLEU)38

它有两个治不好的限制,正是 Transformer 要拆的墙39:

  1. 整个源序列必须压进一个状态向量——像一个人只许看一遍源句、 完全凭记忆翻译,句子一长就装不下;
  2. RNN 沿时间遗忘——处理到第 100 个词元时,开头的信息几乎磨没了。

6.3 Transformer 版:交叉注意力 + 因果掩码

Transformer 解码器在编码器的基础上多插一个注意力块: 查询是目标序列,键和值是编码后的源序列—— 预测每个词时,模型自己决定该回头看原文的哪几个词。 这和人做翻译的样子几乎一样:在原文和译文之间来回看40

还有一个训练时必需的机关。解码器一次性看到整个目标序列, 它只要学会「把第 N+1 个词抄到第 N 个位置」就能拿满分——训练作弊。 因果掩码把注意力矩阵的上三角遮掉:预测第 N+1 个词时, 只许看第 0~N 个词,不许偷看未来41

结果:英译西任务上,Transformer 67% vs RNN 64%, 翻译质量肉眼可见更好(但仍是玩具模型)42

书里还留了一个今天的读者必须带走的警告:模型把无性别之分的英文 「She can play the piano」翻成假定女性的西班牙语句子—— 翻译模型会对输入做无根据的假设,这就是算法偏差; 最坏情况下模型会「幻觉」出与输入无关的内容43

7. 作者的判断与证据

实测证据: IMDB 四连(89.2 / 90.4 / 88.3 / 87)、掩码 +1%、 翻译 64% vs 67%——全部同数据管道对照;

作者团队的研究: 黄金常数 1500 来自作者团队 2017 年的系统分析—— 书里明确说它是经验法则不是科学规律,「希望大多数时候有效,但不一定每次」36;

作者的个人经验: 「一维深度可分离卷积残差堆叠通常能打平双向 LSTM 且便宜得多」—— 他自己的经验,不是文献共识44;

机制论证: 「模型不理解语言,只做模式识别」——这是作者的立场陈述, 和第 14 章的「模型不理解其输入」一脉相承。

8. 边界与局限

  • 本章的 Transformer 是教学版:每层各一个,没有预训练。 今天 NLP 的实际做法是拿大规模预训练模型微调——原书成于 2021 年, BERT/GPT 式的工作流只露了一面(第 12 章讲 GPT-3 时提了一句);
  • 位置嵌入需要事先知道序列长度,这是它的已知缺点(书里自己标注);
  • 黄金常数只管文本分类,不推广到其他 NLP 任务(书里自己声明);
  • 翻译例子的 BLEU、去标点等简化,离生产级翻译系统很远。

9. 可带走的

  1. NLP = 应用于文字的模式识别,模型不理解语言——作者的立场,贯穿全书;
  2. 向量化三步:标准化、词元化、索引;索引 0 是掩码、1 是 OOV;
  3. 词袋三连:一元 89.2% → 二元语法 90.4%(局部词序) → TF-IDF(稀有词加权);
  4. one-hot 的正交假设是错的;词嵌入让语义变成几何(king+female=queen);
  5. Embedding 层 = 可学习的字典;没有对所有任务都完美的嵌入空间;
  6. 填充必须配掩码,否则状态被几百个零冲掉(+1%);
  7. 自注意力 = 点积算相关 → softmax → 加权求和;「station」因此沾上「train」;
  8. 查询/键/值来自搜索引擎;多头 = 子空间版可分离卷积;
  9. 自注意力不懂词序(打乱不影响输出),顺序靠位置嵌入注入;
  10. 黄金常数 1500:样本数/平均词数小于它,别犹豫,用词袋;
  11. seq2seq:编码器压表示、解码器逐词生成;因果掩码防偷看未来;
  12. 生成模型会做无根据的假设(性别)甚至幻觉——部署前必读的警告。

10. 原文地图

主题原书章原文位置
NLP=模式识别、Jelinek深度学习处理文本text/18-ch11.txt:37(搜「语言学家」) · text/18-ch11.txt:49(搜「模式识别」)
向量化三步深度学习处理文本text/18-ch11.txt:66(搜「文本向量化」) · text/18-ch11.txt:110(搜「小写」)
词袋与 N 元语法深度学习处理文本text/18-ch11.txt:139(搜「词袋模型」) · text/18-ch11.txt:159(搜「N 元语法袋」)
OOV 与掩码词元深度学习处理文本text/18-ch11.txt:195(搜「未登录词」) · text/18-ch11.txt:200(搜「掩码词元」)
词袋三连 89.2/90.4/89.8深度学习处理文本text/18-ch11.txt:568(搜「89.2%」) · text/18-ch11.txt:618(搜「90.4%」) · text/18-ch11.txt:700(搜「89.8%」)
TF-IDF深度学习处理文本text/18-ch11.txt:646(搜「TF-IDF 规范化」) · text/18-ch11.txt:622(搜「词频」)
one-hot+双向 LSTM 的慢与差深度学习处理文本text/18-ch11.txt:805(搜「12 000 000」) · text/18-ch11.txt:806(搜「87%」)
one-hot 正交假设深度学习处理文本text/18-ch11.txt:813(搜「正交」)
词嵌入与 king+female深度学习处理文本text/18-ch11.txt:821(搜「词嵌入」) · text/18-ch11.txt:858(搜「queen」)
Embedding 层与任务相关深度学习处理文本text/18-ch11.txt:885(搜「字典查询」) · text/18-ch11.txt:872(搜「取决于你的任务」)
掩码 +1%深度学习处理文本text/18-ch11.txt:934(搜「无意义的输入」) · text/18-ch11.txt:981(搜「88%」)
GloVe 与适用范围深度学习处理文本text/18-ch11.txt:996(搜「GloVe」) · text/18-ch11.txt:1073(搜「不是很有帮助」)
自注意力 station 走查深度学习处理文本text/18-ch11.txt:1123(搜「station」) · text/18-ch11.txt:1156(搜「相关性分数」)
查询键值深度学习处理文本text/18-ch11.txt:324(搜「查询」) · text/18-ch11.txt:1217(搜「搜索引擎」)
多头与子空间深度学习处理文本text/18-ch11.txt:1258(搜「多头注意力」) · text/18-ch11.txt:1282(搜「可分离卷积」)
编码器与 LayerNormalization深度学习处理文本text/18-ch11.txt:1085(搜「Transformer 编码器」) · text/18-ch11.txt:1298(搜「LayerNormalization」)
集合处理坦白深度学习处理文本text/18-ch11.txt:1453(搜「完全打乱」) · text/18-ch11.txt:1454(搜「集合处理机制」)
位置嵌入与 88.3%深度学习处理文本text/18-ch11.txt:1485(搜「位置嵌入」) · text/18-ch11.txt:1565(搜「88.3%」)
黄金常数 1500深度学习处理文本text/18-ch11.txt:1577(搜「黄金常数」) · text/18-ch11.txt:1579(搜「1500」)
seq2seq 模板深度学习处理文本text/18-ch11.txt:1622(搜「通用模板」)
RNN 两限制与 64%深度学习处理文本text/18-ch11.txt:1851(搜「64%」) · text/18-ch11.txt:1915(搜「凭记忆翻译」)
因果掩码与 67%深度学习处理文本text/18-ch11.txt:2009(搜「因果填充」) · text/18-ch11.txt:2091(搜「67%」)
算法偏差与幻觉深度学习处理文本text/18-ch11.txt:2146(搜「算法偏差」)

Footnotes

  1. 出处:「深度学习处理文本」第 48 段(text/18-ch11.txt:48,搜「统计规律」)与第 49 段(text/18-ch11.txt:49,搜「模式识别」)。

  2. 出处:「深度学习处理文本」第 50 段(text/18-ch11.txt:50,搜「决策树」)至第 61 段(text/18-ch11.txt:61,搜「Transformer」)。

  3. 出处:「深度学习处理文本」第 37 段(text/18-ch11.txt:37,搜「语言学家」)。

  4. 出处:「深度学习处理文本」第 66 段(text/18-ch11.txt:66,搜「文本向量化」)与图 11-1。

  5. 出处:「深度学习处理文本」第 110 段(text/18-ch11.txt:110,搜「小写」)与第 123 段(text/18-ch11.txt:123,搜「删掉一些信息」)。

  6. 出处:「深度学习处理文本」第 128 段(text/18-ch11.txt:128,搜「词元化」)与第 130 段(text/18-ch11.txt:130,搜「单词级词元化」)。

  7. 出处:「深度学习处理文本」第 185 段(text/18-ch11.txt:185,搜「20 000」)、第 195 段(text/18-ch11.txt:195,搜「未登录词」)与第 200 段(text/18-ch11.txt:200,搜「掩码词元」)。

  8. 出处:「深度学习处理文本」第 324 段(text/18-ch11.txt:324,搜「GPU」)与第 348 段(text/18-ch11.txt:348,搜「同步进行」)。

  9. 出处:「深度学习处理文本」第 374 段(text/18-ch11.txt:374,搜「词袋模型」)与第 471 段(text/18-ch11.txt:471,搜「一元语法」)。

  10. 出处:「深度学习处理文本」第 568 段(text/18-ch11.txt:568,搜「89.2%」)、第 618 段(text/18-ch11.txt:618,搜「90.4%」)与第 700 段(text/18-ch11.txt:700,搜「89.8%」)。

  11. 出处:「深度学习处理文本」第 574 段(text/18-ch11.txt:574,搜「United States」)。

  12. 出处:「深度学习处理文本」第 644 段(text/18-ch11.txt:644,搜「稀疏性」)与第 622 段(text/18-ch11.txt:622,搜「词频」)。

  13. 出处:「深度学习处理文本」第 802 段(text/18-ch11.txt:802,搜「训练速度非常慢」)与第 805 段(text/18-ch11.txt:805,搜「12 000 000」)。

  14. 出处:「深度学习处理文本」第 811 段(text/18-ch11.txt:811,搜「特征工程有关的决策」)与第 813 段(text/18-ch11.txt:813,搜「正交」)。

  15. 出处:「深度学习处理文本」第 817 段(text/18-ch11.txt:817,搜「几何关系」)与第 823 段(text/18-ch11.txt:823,搜「密集向量」)。

  16. 出处:「深度学习处理文本」第 841 段(text/18-ch11.txt:841,搜「Wolf」)与第 858 段(text/18-ch11.txt:858,搜「queen」)。

  17. 出处:「深度学习处理文本」第 885 段(text/18-ch11.txt:885,搜「字典查询」)。

  18. 出处:「深度学习处理文本」第 869 段(text/18-ch11.txt:869,搜「理想的词嵌入空间」)与第 872 段(text/18-ch11.txt:872,搜「取决于你的任务」)。

  19. 出处:「深度学习处理文本」第 921 段(text/18-ch11.txt:921,搜「256 维」)。

  20. 出处:「深度学习处理文本」第 934 段(text/18-ch11.txt:934,搜「无意义的输入」)。

  21. 出处:「深度学习处理文本」第 938 段(text/18-ch11.txt:938,搜「掩码」)与第 981 段(text/18-ch11.txt:981,搜「88%」)。

  22. 出处:「深度学习处理文本」第 992 段(text/18-ch11.txt:992,搜「Word2Vec」)与第 996 段(text/18-ch11.txt:996,搜「GloVe」)。冻结见第 1043 段(text/18-ch11.txt:1043,搜「trainable=False」)。

  23. 出处:「深度学习处理文本」第 1073 段(text/18-ch11.txt:1073,搜「不是很有帮助」)。

  24. 出处:「深度学习处理文本」第 1080 段(text/18-ch11.txt:1080,搜「Attention Is All You Need」)。

  25. 出处:「深度学习处理文本」第 1092 段(text/18-ch11.txt:1092,搜「两次介绍过」)与第 1093 段(text/18-ch11.txt:1093,搜「最大汇聚」)。

  26. 出处:「深度学习处理文本」第 1123 段(text/18-ch11.txt:1123,搜「station」)、第 1156 段(text/18-ch11.txt:1156,搜「相关性分数」)与图 11-6(第 1137–1145 段,注意力分数矩阵的具体数值)。

  27. 出处:「深度学习处理文本」第 1197 段(text/18-ch11.txt:1197,搜「查询−键−值」)与第 1217 段(text/18-ch11.txt:1217,搜「搜索引擎」)。

  28. 出处:「深度学习处理文本」第 1249 段(text/18-ch11.txt:1249,搜「机器翻译」)与第 1252 段(text/18-ch11.txt:1252,搜「三者是相同的」)。

  29. 出处:「深度学习处理文本」第 1258 段(text/18-ch11.txt:1258,搜「多头注意力」)与第 1282 段(text/18-ch11.txt:1282,搜「可分离卷积」)。

  30. 出处:「深度学习处理文本」第 1288 段(text/18-ch11.txt:1288,搜「密集投影」)与第 1293 段(text/18-ch11.txt:1293,搜「思考过程」)。

  31. 出处:「深度学习处理文本」第 1298 段(text/18-ch11.txt:1298,搜「LayerNormalization」)与第 202 段(text/18-ch11.txt:202,搜「批量」)。

  32. 出处:「深度学习处理文本」第 1451 段(text/18-ch11.txt:1451,搜「就不是一个序列模型」)与第 1453 段(text/18-ch11.txt:1453,搜「完全打乱」)。

  33. 出处:「深度学习处理文本」第 1473 段(text/18-ch11.txt:1473,搜「位置编码」)与第 1485 段(text/18-ch11.txt:1485,搜「位置嵌入」)。

  34. 出处:「深度学习处理文本」第 1565 段(text/18-ch11.txt:1565,搜「88.3%」)。

  35. 出处:「深度学习处理文本」第 1575 段(text/18-ch11.txt:1575,搜「系统分析」)与第 1579 段(text/18-ch11.txt:1579,搜「1500」)。

  36. 出处:「深度学习处理文本」第 1597 段(text/18-ch11.txt:1597,搜「更加丰富」)与第 1576 段(text/18-ch11.txt:1576,搜「经验法则」)。 2

  37. 出处:「深度学习处理文本」第 1622 段(text/18-ch11.txt:1622,搜「通用模板」)与图 11-12。

  38. 出处:「深度学习处理文本」第 1851 段(text/18-ch11.txt:1851,搜「64%」)与第 1855 段(text/18-ch11.txt:1855,搜「BLEU」)。

  39. 出处:「深度学习处理文本」第 1914 段(text/18-ch11.txt:1914,搜「状态向量」)与第 1915 段(text/18-ch11.txt:1915,搜「凭记忆翻译」)。

  40. 出处:「深度学习处理文本」第 1927 段(text/18-ch11.txt:1927,搜「来回切换」)与第 1937 段(text/18-ch11.txt:1937,搜「查询」)。

  41. 出处:「深度学习处理文本」第 2009 段(text/18-ch11.txt:2009,搜「因果填充」)与第 2016 段(text/18-ch11.txt:2016,搜「上半部分进行掩码」)。

  42. 出处:「深度学习处理文本」第 2091 段(text/18-ch11.txt:2091,搜「67%」)与第 2133 段(text/18-ch11.txt:2133,搜「明显好于」)。

  43. 出处:「深度学习处理文本」第 2141 段(text/18-ch11.txt:2141,搜「性别之分」)与第 2146 段(text/18-ch11.txt:2146,搜「算法偏差」)。

  44. 出处:「深度学习处理文本」第 741 段(text/18-ch11.txt:741,搜「可分离卷积」)。