/knowledge/natural-language-processing
自然语言处理
如何让机器读懂文字。从数词到注意力——从一袋词元,到一个能把整句话装在脑中的模型,这一路的历程。
- 学于
- 自然语言处理COMP90042 · 数据科学硕士
- 时间
- 墨尔本大学,2024
- 应用于
- 气候事实核查器
- 阅读 / 复习
- 约 14 分钟阅读2026-06-24
语言是我们经常要求计算机处理的最杂乱的数据。一列电子表格本身就是数字;而一句话是 一串符号,它的含义取决于顺序、上下文、语气,以及写作者从未明说的一大堆共同假设。自然语言处理(NLP)就是弥合这道鸿沟的领域——把文本变成模型能够计算的 东西,再把模型的输出变回人能使用的语言。
本页走完整条弧线,与我在墨尔本大学所学的相同:从最古老的招数(数词)到每个现代 语言模型背后的架构(关注正确的词)。每一步的存在,都是为了修复前一步的某个具体弱点。
01
NLP 是什么,以及为什么难
NLP 涵盖任何输入或输出是人类语言的任务:把一条评论分类为正面或负面、从合同中 抽取公司名称、把中文翻译成英文、回答一个问题、总结一份报告,或者生成一句话中的 下一个词。它们的共同点在于,其原材料——文本——抗拒大多数统计所依赖的那些整洁假设。
四个难点反复出现:
- 歧义。「I saw her duck」是两个不同的句子,取决于 duck 是 一只鸟还是一个动作。人类毫无察觉地就化解了它;而模型必须被给予足够的上下文才能 做到同样的事。
- 稀疏性。可能的句子数量实际上是无穷的,所以你将遇到的大多数词的 组合,从未出现在你的训练数据中。好的方法能从见过的泛化到没见过的。
- 顺序与长程依赖。「The dog that chased the cat that ran across the road was fast」——这个动词与十个词之前的名词保持一致。含义存在于结构 之中,而不只是当下那一袋词里。
- 符号接地鸿沟。词是离散的符号,本身不带任何相似性的概念。
cat和kitten这两个字符串没有任何地方告诉计算机它们 是相关的。NLP 的许多进步,其实都是在制造一种有用的相似性概念。
记住这四点——下面的每一项技术都是对其中一个或多个的回答。
02
经典流水线
在任何建模之前,原始文本会被清洗并切成单元。这个预处理并不光鲜,但它为下游的 一切设定了上限——模型的好坏,至多只能与你喂给它的词元一样好。
分词
分词把一个字符串切成单元——通常是词,但越来越多是子词。 按空格切分看似显然,直到你遇到「don't」「U.S.A.」、连字符词、表情符号,或者根本 词与词之间没有空格的中文。现代系统大多使用像字节对编码这样的子词 方案,它学习一份由高频片段组成的词表,于是像 tokenisation 这样的 稀有词就变成 token + isation。这在仍能表示任何词的同时 保持词表小巧,也是对稀疏性问题的直接回答。
规范化
一旦你有了词元,你通常会缩减那些对你的任务无关紧要的变化:
- 大小写折叠——
Apple→apple(小心:它丢失了 公司与水果的区别)。 - 词干提取粗暴地砍掉后缀(
running→run,studies→studi);词形还原用词典映射到 真正的词根(better→good)。词形还原更慢,但更正确。 - 停用词移除丢弃高频、低信息量的词(
the、of、is)——对关键词方法有帮助,对任何语法承载含义的场景有害。
03
把词变成数字
模型需要向量,而不是字符串。第一类答案把一篇文档视为一袋词——对哪些 词出现的计数,完全忽略顺序。
原始计数会过度奖励常见词,所以标准的修正是 TF-IDF(词频 × 逆文档 频率)。当一个词在本文档中频繁、却在整个文集中稀有时,它给出 高分——恰恰是那些让一篇文档与众不同的词。
这里 tf(t, d) 是词 t 在文档 d 中出现的频次,N 是文档总数,df(t) 是有多少篇文档包含 t。在 每篇文档中都出现的词(如 the)得到 log(N/N) = 0,于是被 自动忽略;在数千篇中只出现于一篇的词,得到很大的权重。n 元组(相邻词 的对或三元组,如 not_good)找回了一点点被袋装词丢掉的词序。
TF-IDF 快速、透明,至今仍是文档分类与检索中一个真正强大的基线。它的弱点是符号 接地鸿沟:car 和 automobile 就和 car 与banana 一样毫不相关,因为每个词都是它自己独立的维度。
04
词嵌入
修复了接地问题的突破是分布假说:一个词的含义由它结伴出现的词所 捕捉。出现在相似上下文中的词——tea 和 coffee——应当拥有 相似的表示。
词嵌入把这变成几何。每个词成为一个由几百个数字构成的稠密向量,经过 学习,使得用在相似上下文中的词彼此落得很近。word2vec 通过训练一个小 网络来从邻词预测某词(CBOW)或从某词预测邻词(skip-gram)来学习它们;GloVe 则通过分解一个全局共现矩阵达到同样目的。著名的结果是:含义 变成了算术:
性别关系被编码为空间中一个一致的方向。余弦相似度——两个向量之间的 夹角——成为衡量两个词有多相关的一个可用度量,这恰恰是 TF-IDF 所缺乏的相似性概念。
问题在于:经典嵌入是静态的。无论是河岸还是储蓄银行,bank 都 只有一个向量。修复它需要一个能读整句话的模型——这就把我们带到了序列。
05
序列模型:RNN 与 LSTM
为了尊重词序,一个循环神经网络(RNN)一次读一个词元,并把一个隐藏 状态向前传递——这是对目前为止所见一切的滚动摘要。原则上,这让网络能在前面所有词的 条件下处理每个词。
实践中,朴素的 RNN 会遗忘。训练它们意味着把梯度乘过每一个时间步,而这些乘积在长 距离上趋向于零——即梯度消失问题。网络学不会一个动词要与二十个词之前的 主语保持一致。
长短期记忆(LSTM)网络用一个独立的细胞状态和一组门——决定每一步要遗忘什么、添加什么、读出什么的小型可学习阀门——来 修复这一点。信息现在可以几乎原封不动地沿着细胞状态流过很长的跨度,所以 LSTM 能 捕捉长得多的依赖。多年来,它们是翻译、语音和标注的默认选择。
但它们仍有两个结构性局限:它们严格从左到右读取(所以每一步都要等上一步,使它们 训练缓慢),而且即便有门,单个固定大小的状态对于很长的输入也是瓶颈。两者都败给了 下一个想法。
06
注意力与 Transformer
注意力的洞见是:你不需要把整句话塞进一个滚动状态里。相反,在处理 某个词时,让它直接看向其他每一个词,并拉入那些重要的。对于「the trophy didn't fit in the suitcase because it was too big」中的「it」,注意力让 it回望并对 trophy 赋以很高的权重。
2017 年的论文 Attention Is All You Need 完全抛弃了循环,仅用注意力就 构建了一个模型——Transformer。每个词发出三个向量:一个查询(我在找什么?)、一个键(我提供什么?)和一个值(我传递什么?)。一个词的新表示是所有值的加权和,其中权重来自它的查询与每个键的 匹配程度:
Q·Kᵀ 这一项把每个词与其他每个词打分;除以 √dₖ 让这些 分数在数值上保持稳定;softmax 把它们变成总和为一的权重;乘以V 则相应地混合各个值。因为这一次性比较所有位置,整个序列是并行处理的, 而非一步一步。还有两个部件让它得以运作:
- 多头注意力。若干注意力机制并行运行,各自可以专注于一种不同的关系 ——一个头追踪句法,另一个追踪指代——它们的输出再被组合起来。
- 位置编码。仅有注意力是对顺序盲视的,所以一个编码每个词元位置的信号 被加到它的嵌入上,从而恢复词序。
这也解决了静态嵌入的问题:在 Transformer 中,bank 在「river bank」中 得到的表示与在「central bank」中不同,因为它的向量每一次都是由周围的 上下文构建的。这些就是上下文嵌入,也是这一架构接管整个领域的原因。
07
预训练与大语言模型
Transformer 解锁了一种如今主导 NLP 的训练范式:先预训练,再微调。先用 一个自监督目标在一座未标注文本的大山上训练一个大模型——预测一个被遮盖的词,或预测 下一个词。无需人工标签,所以它基本能从整个网络中学习。然后用一个相对极小的带标签 数据集,把这个通用模型适配到某个具体任务。
由此产生了两个家族:
- 编码器(BERT 式)一次读完整句话、左右兼顾,并通过遮盖词来训练。它们 为理解而生——分类、命名实体识别、检索。
- 解码器(GPT 式)从左到右读取,并被训练去预测下一个词元。它们为生成而生,而把它们做大——更多参数、更多数据——正是产生了今天的大语言模型。
过去几年最醒目的教训是:一旦模型及其训练数据足够大,许多看起来像推理的东西,都从 这一个简单目标——预测下一个词元——中涌现出来。底层的管道,依然是词元、嵌入和注意力。
08
如何衡量它
一个模型的可信度,至多只能与它的评估一样。正确的指标取决于任务。
对于分类(垃圾邮件 / 非垃圾邮件,论断被支持 / 被驳斥),只要类别 不平衡,准确率就会误导——如果只有 1% 是垃圾邮件,一个永远说「非垃圾邮件」的检测器 能得 99 分。所以你报告精确率(在我标记的当中,有多少是对的)、召回率(在实际存在的当中,我抓到了多少),以及它们的调和平均,即F1 分数:
对于语言建模,困惑度衡量模型对留出文本有多惊讶——越低 越好,它大致是模型在多少个等可能的词之间做选择的平均数。对于翻译或摘要这样的生成任务,BLEU 和 ROUGE 这样的指标把输出与 人类参考之间重叠的词序列做比较——有用但粗钝,这就是为什么人工评估从未完全消失。
09
我在哪用过它
同样的形态在生产工作中反复出现:一个透明的基线来设定门槛并对数据做合理性检查, 然后在歧义确实需要化解之处用一个上下文模型——再加上一个足够诚实、能把两者区分开来 的评估。
10