跳到主要内容

词变数 — 机器怎么「读懂」一个词

这一章讲三件事: 词怎么变成数;为什么第一代「词变数」不够用、第二代怎么翻越;以及预训练模型那堵 512 的墙。 这是全书的枢纽章:第 04 章解剖的四个部件、第 06–08 章的三个模型,全部站在这章的地基上。

1. 先看现象:机器拿到的只有数

上一章结尾说,读文章路线的所有难度都压在「读懂」上。但「读懂」之前还有更基本的一件事:机器的电路里只有数,没有一个字。

所以任何问答机的第一个部件——编码器(encoder)——要干的事只有一件:把文章、当前问题、选出的历史,全部变成定长的向量再交给后续计算1。「定长」的意思是每个词都对应同一规格的一串数,比如 768 个,不多不少,这样才好一起算。

把词变成一串定长的数,这门技术叫嵌入(embedding);这样的数串有个名字:向量——就是一列按固定顺序排好的数。它有一条核心设计原则:意思相近的词,对应的数串也要相近——「意思」这个抽象东西被换算成了距离——每串数是空间里的一个点,意思近的点挨得近——机器这才有了可算的对象。

嵌入这个概念如果想再抠一层,可参考同书架的《这就是 ChatGPT》拆解第 03 章:它把「意思变距离」的来龙去脉单独讲了一遍。本书不重复,只补一句:问答机里被嵌入的不只是词,还有位置、段落、甚至「这段是不是历史答案」这类标记(第 04 章会见到)。

2. 第一代:静态词向量

这一节讲最早的词变数方案,以及它的一处致命死穴。

第一代方案的代表作是 Word2Vec 和 GloVe。做法一句话:拿海量文本统计词的共现规律,给每个词练出一个低维向量(low-dimensional vector,意思是数串不长,几百维就够),练到「相关的词彼此靠近」为止2。效果是实打实的:「国王」和「女王」在向量空间——把每串数想成空间里的一个点——里离得近,「国王」减去「男人」加上「女人」会落在「女王」附近。

但死穴在名字里就写着:静态——一个词只有一个向量,不管它出现在什么句子里3。「苹果」在「吃苹果」和「苹果发布会」里是同一个数串;「它」在「猫追狗,它累了」和「猫追狗,它跑赢了」里也是同一个数串。一句话里恰恰最关键的词——代词、多义词——恰恰是静态向量最无能为力的地方。 而对话式问答的命门,前面两章已经说了,正是代词和省略。

3. 第二代:同一个词,不同场合不同向量

这一节讲翻越死穴的思路转变:向量不再属于词,而属于「词+它的上下文」。

思路转变叫做上下文化词向量(contextualized word embeddings):向量不再是查表查出来的,而是把整句(整段)喂进一个神经网络(很多简单计算件连成的网络)现场算出来的——同一个词,场合不同,算出的向量不同4

这批模型先在海量文本上做预训练(pre-training,先泛读海量文本,学到语言的通用规律),再针对具体任务微调(fine-tuning,拿少量标注数据精调)。

这套「先泛读再专攻」的两段式属于迁移学习(把别处学到的本事搬来新任务用)。它们在 NLP(自然语言处理——让计算机处理人类语言的技术)各任务上拿到了惊人的成绩5

这条线的谱系,原书给得很清楚:

模型关键一步
CoVe(2017)最早尝试:拿机器翻译模型的编码结果当上下文向量6
ELMo(2018)用双向语言模型产生向量,并把所有层的输出加权合并——不同层抓不同颗粒的语言信息:有的层管词形搭配,有的层管句子结构,有的层管意思7

ELMo 的「合并所有层」值得停一下:神经网络一层一层往深里算,浅层记着「这个词长什么样、跟谁搭配」,深层记着「这句话在说什么事」。ELMo 不只取最深那层,而是把各层的输出合并进一个向量,每层占多少比重(这个比重叫权重)由任务自己学——问答任务自会调出合适的配比。

4. 注意力:让每个词看遍全句

这一节解释这代技术的引擎——注意力机制。它是理解后面所有模型的最后一块地基。

要现场算出「词+上下文」的向量,最朴素的想法是让每个词「读一遍」句子里的其他词,按相关程度决定吸收谁、吸收多少——这个打分吸收的机制就叫注意力(attention)。让句子里的词互看的版本,叫自注意力(self-attention)。

Transformer 就是把这个机制用到极致的架构:它完全丢掉了旧架构里一层层循环处理的结构,改用多头注意力(multi-head attention,多组注意力齐头并进、各看各的角度),因此整句可以一起算、不用一个等一个——这是它比旧结构快得多的原因,原书说它更高效、可并行化8

5. BERT 与它的家族

这一节讲这本书时代的统治者,以及它统治的方式。

GPT(OpenAI 家那一代会接着往下写的模型)这类模型从左往右单向读文本(练「猜下一个词」),BERT 恰好补上相反的方向:它的预训练任务是「遮住句中一些词,靠左右两边猜出来」,因此每个词的表示都是双向的。原书对这个设计的评语是:BERT「解决了 GPT、GPT-2 等语言模型训练时的单向性问题」,加上 Transformer 架构,在大量 NLP 任务上超过此前所有模型9

BERT 之后立刻出现一整个家族,各自只改一处:

模型改了什么
SpanBERT预训练时整块遮(遮片段而不是单个词)
ALBERT把参数(模型里那些可调的数)合成一份共用,更小更快
RoBERTa训练更久、喂料更足、遮词花样更多——本书第 06/07 章的基座就是它

再往后两支改了训练目标:

| XLNet / Transformer-XL | 改回自回归(从左往右逐个往外蹦的那种)式预训练,更擅长长距离依赖 |

对本书来说,记两件事就够:这一代问答机的心脏几乎都是 BERT 或它的表亲;以及——

6. 走查:「它」这个字怎么被算成向量

主走查。 拿第 02 章那段对话里的 Q5「Where is it?」和文章首句「Staten Island is one of the five boroughs of New York City」,走一遍 BERT 式编码。输入先拼成一段:「[CLS] Where is it ? [SEP] Staten Island is one of the five boroughs …」([CLS]/[SEP] 是 BERT 格式里的分隔标记)。

第 0 层(切与查)
句子切成片段:Where / is / it / ? / Staten / Island / is / ...
每片段查静态嵌入表 + 位置编号,得到初始向量
「it」的初始向量 ≈ [0.11, -0.03, 0.27, …] ← 此时它跟「he」「she」几乎一样,
因为不带任何上下文

第 1 层(第一轮自注意力)
「it」给句中每个片段打相关分:
Staten 0.61 Island 0.24 Where 0.05 is 0.03 …
按分数把别人的信息掺进自己:
「it」新向量 ≈ 「it」旧向量×0.10 + 「Staten」×0.48 + 「Island」×0.30 + …

第 2…12 层(逐层重复)
每层都重新打分、重新掺;浅层掺进来的是「Staten Island 是个地名」,
深层掺进来的是「它就是前文那个被讨论的主体」

输出
「it」的最终向量已经和开头完全不同——静态表里那个「它」被
换成了「指代 Staten Island 的它」的向量

图说:分数是为演示编的,不是真实数值;层数取 BERT-base 的 12 层。
真实模型的打分是几千个维度一起动的,这里只画了一维直觉。

走完这条链,「读懂」这个词就落地了:编码器没有「理解」任何东西,它只是让每个词的向量逐层吸收上下文的信息——「意思」变成了向量之间的几何关系,后续模块(第 04 章)在这张几何关系网上找答案。

7. 工程现实:512 的墙

这一节讲预训练模型的一个硬约束——它是第 06–08 章大量设计的直接原因。

BERT 的输入格式只允许两个段落(一个「句子对」),而且总长度上限是 512 个片段10。对话式问答的输入却是三样东西:文章、当前问题、历史轮次——三样加起来轻松超过 512。原书点破后果:历史轮次塞得越多,文章或历史就得被截掉越多11

这堵墙解释了后面几章的三个设计决定:为什么「选哪些历史」如此要紧(第 07 章)——塞错的历史不但带噪声,还占用这 512 个宝贵位置;为什么 CONVSR 只补「实体」这种小线索(第 06 章)——比补整句历史省得多;为什么开放域系统必须先检索缩小范围(第 08 章)——1100 万段文章不可能整段读,只能先挑几段进来。

8. 可带走的

  1. 编码器的全部职责:把文章+问题+历史变成定长向量;「读懂」在机器里就是「变成数」;
  2. 嵌入 = 意思变距离:意思相近的词,数串相近;
  3. 静态词向量(Word2Vec/GloVe)一词一向量,死穴是代词和多义词——恰是对话问答的命门;
  4. 上下文化词向量 = 向量属于「词+场合」,现场算出;两段式是「预训练泛读 + 微调专攻」;
  5. 自注意力 = 每个词看遍全句、按分吸收;Transformer 靠它丢掉循环、做到整句一起算;
  6. BERT 用「遮词猜词」的双向预训练补上 GPT 的单向缺陷;RoBERTa 是训练更狠的表亲;
  7. 512 墙:输入只许两段、上限 512 片段——后面三章每一个「精选上下文」的设计,根子都在这。

9. 原文地图

主题原书章原文位置
编码器职责:变定长向量2.4text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:92(搜「fixed-length vectors」)
ELMo/GloVE/BERT 并列、POS 等附加特征2.4text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:97(搜「Embeddings from Language Model」) · text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:98(搜「Parts of Speech」)
静态词向量与死穴2.4text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:102(搜「Conventional Word Embeddings」) · text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:106(搜「GloVE」) · text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:107(搜「fail to determine」)
上下文化、迁移学习2.4text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:110(搜「Pre-trained Contextualized」) · text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:115(搜「same in varying contexts」) · text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:119(搜「transfer learning」)
CoVe 与 ELMo 的层级合并2.4text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:123(搜「Context Vectors (CoVe)」) · text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:128(搜「outcomes from all the layers」)
Transformer 与自注意力2.4text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:130(搜「multi-headed attention」) · text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:132(搜「parallelizable」)
BERT 补单向性、家族2.4text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:133(搜「unidirectionality」) · text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:138(搜「masks spans」) · text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:140(搜「RoBERTa」) · text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:142(搜「autoregressive pre-training approach」)
512 墙与截断2.4text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:215(搜「only two segments」) · text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:216(搜「limited to 512」)

Footnotes

  1. 出处:「2.4. CONVERSATIONAL MACHINE READING COMPREHENSION」第 92 段(text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:92,搜「fixed-length vectors」)。原文:编码器负责把源文章、当前问题与选出的历史轮次的 token 转换成定长向量,交给推理模块。

  2. 出处:「2.4. CONVERSATIONAL MACHINE READING COMPREHENSION」第 102 段(text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:102,搜「Conventional Word Embeddings」)与第 106 段(搜「GloVE」)。原文:把词编码成低维向量,相关 token 在向量空间中彼此靠近;最流行的方法是 GloVe 与 Word2Vec。

  3. 出处:「2.4. CONVERSATIONAL MACHINE READING COMPREHENSION」第 107 段(text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:107,搜「fail to determine」)。原文:这些方法「无法结合上下文确定词的准确含义」。

  4. 出处:「2.4. CONVERSATIONAL MACHINE READING COMPREHENSION」第 110–113 段(text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:110,搜「Pre-trained Contextualized」)。原文:传统分布式表示里「同一个词在不同语境中向量相同」,上下文化嵌入为克服此问题而生。

  5. 出处:「2.4. CONVERSATIONAL MACHINE READING COMPREHENSION」第 118–120 段(text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:119,搜「transfer learning」)。原文:先在大语料上预训练、再按下游任务微调,属于迁移学习,在各 NLP 任务上取得惊人成果。

  6. 出处:「2.4. CONVERSATIONAL MACHINE READING COMPREHENSION」第 123 段(text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:123,搜「Context Vectors (CoVe)」)。

  7. 出处:「2.4. CONVERSATIONAL MACHINE READING COMPREHENSION」第 128 段(text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:128,搜「outcomes from all the layers」)。原文:ELMo 不用最顶层,而是把 biLM 所有层的输出合并并按任务赋权。

  8. 出处:「2.4. CONVERSATIONAL MACHINE READING COMPREHENSION」第 130 段(text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:130,搜「multi-headed attention」)与第 131 段(搜「parallelizable」)。原文:Transformer 基于多头注意力,免去多层循环结构;自注意力机制让它学习输入序列上下文时更高效、可并行。

  9. 出处:「2.4. CONVERSATIONAL MACHINE READING COMPREHENSION」第 133 段(text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:133,搜「unidirectionality」)。原文:BERT 解决了 GPT、GPT-2 等模型训练中的单向性问题;凭双向性与 Transformer 架构,其表现超过多个 NLP 下游任务的顶级模型。

  10. 出处:「2.4. CONVERSATIONAL MACHINE READING COMPREHENSION」第 215 段(text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:215,搜「only two segments」)。原文:预训练语言模型(尤其 BERT)输入只允许两个段落。

  11. 出处:「2.4. CONVERSATIONAL MACHINE READING COMPREHENSION」第 216 段(text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:216,搜「limited to 512」)。原文:序列长度限于 512,历史轮次追加越多,文章或历史就得截断越多。