第15章 词语怎样变成可以计算的意义

计算机可以给词语编号:“猫”是 17,“狗”是 63,“银行”是 2048。但编号只用于查找。63 不表示“狗”比“猫”大 46,也不表示两个词相似。

若模型只看到互不相关的编号,“猫追狗”和“幼猫追小狗”几乎没有共享结构。人能看出“猫”与“幼猫”、“狗”与“小狗”的关系,模型需要一种表示,让有相似使用方式的词在计算中能够共享经验。

词向量(word embedding)把离散词语映射到连续向量空间。向量的每一维通常没有人工指定名称;它们在预测上下文、目标词或其他任务的训练中形成。

这个想法不仅改变了自然语言处理,也具体展示了表示学习:模型不只是学习最终分类边界,还学习怎样把原始符号变成更适合任务的坐标。

编号不是大小,one-hot 也没有相似度

设词表有 \(V\) 个词。最直接表示是 one-hot 向量:长度为 \(V\),目标词对应位置为 1,其余全为 0。

若“猫”编号为 2,“狗”编号为 5:

猫 = [0, 1, 0, 0, 0, ...]
狗 = [0, 0, 0, 0, 1, ...]

这种表示精确区分词语,却有两个问题。第一,词表很大时向量极其稀疏;第二,任意两个不同词的内积都是 0、距离相同,表示本身没有告诉模型哪些词相似。

One-hot 不是错误方案。它适合做唯一身份索引,也可以乘以一个矩阵得到稠密向量。问题是语义关系必须从其他地方学习。

词袋:先数出现什么,暂时忽略顺序

词袋模型(bag of words)用每个词在文档中出现的次数或权重表示文档。例如:

“猫追狗”   -> 猫:1 追:1 狗:1
“狗追猫”   -> 猫:1 追:1 狗:1

它保留词语出现情况,却丢掉顺序,所以两句话表示相同。对于主题分类、垃圾邮件过滤和检索,这种简化常很有效:某些词是否出现,比语序更重要。

常见 TF-IDF 会降低到处出现的词的权重,提高在少数文档中有区分力的词。但无论怎样加权,词袋主要表示文档,不会自动给每个词形成可复用的稠密语义坐标。

词袋也提醒我们:表示是否足够取决于任务。做主题分类时忽略顺序可能是合理偏置;判断“狗咬人”与“人咬狗”时,同一偏置就会失败。

一个词的意义,可以从它的邻居寻找

分布语言学提出一条重要直觉:出现在相似上下文中的词,往往具有某些相似功能。Zellig Harris 从语言元素的分布关系分析结构。(Harris 1954年) J. R. Firth 那句常被引用的话是:“你可以通过一个词相伴出现的词认识它。”(Firth 1957年)

如果“猫”常出现在“喂养、爪子、宠物、睡觉”附近,“狗”也常出现在类似环境,它们的分布会比“发动机”更接近。模型不需要先得到词典定义,可以从大量使用记录中统计关系。

这叫作分布假说(distributional hypothesis)。它不是说上下文等于全部意义。讽刺、指代、世界知识、说话者意图和罕见用法都可能超出局部共现;反义词还常出现在相似句式中,例如“温度很高”与“温度很低”。

分布信息提供可计算证据,但不能把语言意义完整压缩成邻词计数。

共现矩阵:把邻居统计成坐标

可以建立一个词语-上下文矩阵 \(X\)。行表示目标词,列表示上下文词,\(X_{ij}\) 记录词 \(i\) 与上下文 \(j\) 在某个窗口中共同出现多少次。

目标词 宠物 发动机 喂养 轮胎
80 1 65 0
76 0 59 1
汽车 0 90 0 84

“猫”和“狗”的两行相似,“汽车”明显不同。真实矩阵包含数万或数十万列,非常稀疏,也受高频词支配。研究者会使用对数、互信息等权重,再进行降维。

潜在语义分析(LSA)使用奇异值分解把词语与文档的高维矩阵压到低维空间,保留主要关联结构。(Deerwester 等 1990年) 这条计数路线已经能产生稠密表示,并帮助检索同义表达。

降维仍是一种选择:保留哪些方向、压缩到多少维、怎样处理频率,都决定了最终空间强调什么关系。

嵌入矩阵:用编号查出可训练向量

设词表大小为 \(V\),向量维度为 \(d\)。模型维护嵌入矩阵:

\[ E\in\mathbb{R}^{V\times d} \]

编号为 \(i\) 的词向量就是第 \(i\) 行:

\[ e_i=E[i] \]

这在实现中叫作 Embedding 查表。它与 one-hot 向量乘矩阵等价:

\[ e_i=x_i^\mathsf{T}E \]

但程序不必真的构造长度为 \(V\) 的稀疏 one-hot,只需按编号读取一行。

训练开始时,矩阵常是小随机数。词向量没有预装“意义”。当这个词参与预测并产生损失,反向传播只更新相关行及后续参数。大量语料反复训练后,相似上下文带来相似更新,几何结构逐渐出现。

核心机制

Embedding 是模型参数表:离散编号选择一行,训练损失再通过反向传播修改这行。向量关系不是由编号产生,也不是人工填写,而是由语料、上下文定义和预测目标共同塑造。

在预测中学习表示

Yoshua Bengio 等人在神经概率语言模型中,让网络用前几个词的分布式表示预测下一个词。(Bengio 等 2003年) 词向量与语言模型其他参数一起训练,使相似词能够共享统计强度。

例如,训练中见过“猫坐在垫子上”,即使很少见到“狗坐在垫子上”,若“猫”和“狗”的表示接近,模型也更容易推广。

这种方法比完整共现矩阵更直接连接预测任务,但早期神经语言模型要为巨大词表计算输出概率,训练成本很高。Word2Vec 后来用更简单目标和高效近似,把大规模词向量训练变成常用工具。

Word2Vec:从滑动窗口制造训练对

Word2Vec 主要包括两种架构:

  • CBOW(continuous bag of words)用周围上下文预测中心词;
  • Skip-gram 用中心词预测周围上下文。

对句子“模型 学习 词语 表示”,若窗口半径为 1,中心词“学习”会产生:

(学习 -> 模型)
(学习 -> 词语)

窗口向右滑动,又产生新的中心词-上下文对。原始语料因此自动生成大量监督信号,不需要人工为每个词标注语义。

Mikolov 等人在 2013 年展示了 CBOW 与 Skip-gram 的高效训练及向量关系。(Mikolov, Chen, 等 2013年; Mikolov, Sutskever, 等 2013年)

窗口大小改变学到的关系。小窗口更强调句法功能和局部替换,例如动词周围常出现什么;大窗口更容易强调主题关联,例如“医生”与“医院”。频繁词的下采样、罕见词阈值和分词方式也会改变空间。

技术深潜:Skip-gram 的预测目标

给定中心词 \(w\),Skip-gram 希望真实上下文词 \(c\) 获得高概率。每个词通常有输入向量 \(v_w\) 和输出向量 \(u_c\)。完整 softmax 写成:

\[ P(c\mid w)= \frac{\exp(u_c^\mathsf{T}v_w)} {\sum_{j=1}^{V}\exp(u_j^\mathsf{T}v_w)} \]

对语料产生的训练对,目标是最大化对数概率:

\[ \sum_{(w,c)\in\mathcal{D}} \log P(c\mid w) \]

点积越大,中心词越倾向预测该上下文。训练不仅拉近真实词对,也必须压低其他候选,否则所有向量一起变大不能形成区分。

难点在分母:每个训练对都要遍历词表中全部 \(V\) 个候选。词表有几十万词时,成本很高。分层 softmax 和负采样提供了不同近似。

负采样:不和整个词表逐一比较

负采样(negative sampling)把多类别预测改成若干二分类判断:真实中心词-上下文对标为正样本,再从噪声分布抽取少量错误上下文作为负样本。

单个正词对的目标可以写成:

\[ \begin{aligned} \log\sigma(u_c^\mathsf{T}v_w) &+\sum_{k=1}^{K} \log\sigma(-u_{n_k}^\mathsf{T}v_w) \end{aligned} \]

第一项提高真实词对的点积,第二项降低抽到的负词对点积。每次只更新少量词向量,训练速度大幅提高。

负样本怎样抽很重要。若完全按词频抽,高频功能词占据多数;Word2Vec 常使用平滑后的词频分布。负样本数 \(K\) 也改变训练成本和表示质量。

负采样不只是加速完整 softmax 的机械替代,它优化的是相关但不同的目标。Levy 与 Goldberg 推导出,在相应假设下,Skip-gram 负采样可视为对一种平移后的点互信息矩阵进行隐式分解,由此把神经预测路线与共现统计路线连接起来。(Levy 和 Goldberg 2014年)

GloVe:让全局计数与向量预测相遇

GloVe 从全局共现计数出发,让词向量点积拟合共现概率的对数,并降低极少或极多计数的影响。(Pennington 等 2014年)

它说明“计数方法”和“预测方法”不是完全对立的阵营。两者都在压缩词语与上下文关系,区别在目标函数、权重和优化方式。

面对一个词向量系统,比问“它是神经网络还是统计方法”更重要的问题是:

  • 语料来自哪里?
  • 一个词或 Token 怎样划分?
  • 上下文窗口怎样定义?
  • 高频和罕见事件怎样加权?
  • 训练目标鼓励保存哪种关系?
  • 最终怎样评价?

这些选择共同决定向量空间。

向量接近究竟表示什么

常用余弦相似度比较两个向量方向:

\[ \operatorname{cos}(a,b)= \frac{a\cdot b}{\lVert a\rVert\lVert b\rVert} \]

值接近 1 表示方向相近,接近 0 表示近似正交,接近 \(-1\) 表示方向相反。余弦忽略向量长度,适合关注相对模式。

“相似”仍有多种含义:

  • 同义或近义:汽车与轿车;
  • 同类:猫与狗;
  • 相关:医生与医院;
  • 句法可替换:走与跑;
  • 对立但共享环境:高与低。

一个近邻列表常把这些关系混在一起。向量距离是训练分布中的可替换或共现结构,不自动等于词典同义。

频率也会影响长度与邻居。高频词经历更多更新,多义词的多个用法会被平均,罕见词估计不稳定。比较相似度时要结合语料和任务,而不是把小数点后三位当作绝对语义测量。

词语类比为什么令人惊讶

经典词向量展示过类似关系:

\[ v_{king}-v_{man}+v_{woman}\approx v_{queen} \]

它表明某些语义关系在向量空间中近似形成一致方向。Mikolov 等人的工作让这类线性类比广受关注。(Mikolov, Sutskever, 等 2013年)

但类比不能被理解为模型掌握了代数化的世界知识。结果依赖词表、语料、预处理、相似度和候选限制;有些题可以被词频与近邻结构解释;同一关系未必在所有词对上保持平行。

更稳妥的判断是:训练目标把一部分重复分布关系压成了可线性读取的几何结构。这是有用表示的证据,不是完整理解的证明。

一个词一个向量,会把多义词压在一起

静态词向量为每个词表项保存一行。例如英文 “bank” 在 “deposit money at a bank” 中指金融机构,在 “the river bank” 中指河岸;只要分词器把它们作为同一个词表项,两种用法就共享同一向量。

中文“苹果”可以指水果或公司,英文 “bank” 可以指金融机构或河岸。静态向量会把不同上下文的统计混合成折中位置。近邻可能同时出现两组概念,却无法为当前句子选择一个动态表示。

词袋和固定窗口还难以表达顺序、长距离关系与组合意义。“不太好”和“太不好”包含相似词,却不能只靠独立词向量确定句意。

下一章的循环神经网络会让当前隐藏状态读取前文,使同一词在不同位置获得不同上下文表示。再后来的 Transformer 则让每个 Token 直接汇总相关位置。

未登录词与子词

固定词表总会遇到训练时没有的词,叫作未登录词(out-of-vocabulary, OOV)。全部映射成同一个“未知词”会丢掉内部结构。

子词方法把单词拆成更小单位。例如罕见词可能共享词根、前缀或汉字片段。FastText 一类方法用字符 n-gram 组合词向量;现代分词器则把文本拆成可复用 Token。

子词提高罕见词覆盖,也不是免费答案。切分可能破坏熟语或专名,词表大小与序列长度互相权衡,同一个字符串在不同语言中的合理边界也不同。第 20 章会进一步讨论 Tokenizer 与 Embedding 的接口。

向量会压缩语料中的偏见

若训练语料把某些职业、性别、地区或群体反复放在特定上下文中,词向量会学习这些统计关系。技术上,它与学习“猫”和“宠物”相关是同一机制。

Bolukbasi 等人展示了词向量中的性别刻板关系,并讨论了去偏方法。(Bolukbasi 等 2016年) 这类工作很重要,也容易被过度简化。

从向量中投影掉一个指定方向,可能降低某项类比测试中的偏见,却不保证:

  • 偏见只存在于一个线性方向;
  • 下游模型不会从其他相关维度恢复它;
  • 所有需要保留的真实差异不受影响;
  • 新语料与新任务不会重新引入偏差;
  • 评价集合覆盖真实使用中的伤害。

表示学习压缩了数据中的规律,也压缩了数据收集过程与社会结构。审查下游影响不能只看几个著名词对,还要检查任务、群体、错误和决策后果。

词向量有没有“理解意义”

词向量捕捉了大量可用关系:相似词共享统计强度,检索可以匹配不同表达,神经网络不必为每个词从零学习。它们是现代语言模型不可缺少的接口。

但向量的“意义”应限定语境。它们编码的是对训练目标有用的分布结构,不自动包含感知经验、因果知识、说话者意图或真实世界指称。一个模型能把“火”与“热”放得很近,不等于它感受过温度或知道怎样安全灭火。

同样,单个维度通常不能命名为“动物程度”或“情感程度”。信息分布在许多方向中,又会随旋转等变换重新编码而保持点积关系。可读性不应强加到单个坐标。

技术深潜:旋转后关系仍可不变

若所有向量同时乘以正交矩阵 \(R\),得到 \(v'=Rv\),则内积保持:

\[ (Ra)^\mathsf{T}(Rb)=a^\mathsf{T}b \]

距离和余弦相似度也保持。模型功能可以不变,每个坐标轴的数值却完全不同。这说明语义关系主要存在于向量之间的几何结构,而不是固定落在“第 17 维”的人工概念上。

某些方向可以通过线性探针读出属性,但探针成功只表示信息可被该方法提取,不自动说明模型在实际预测中使用了它,更不说明该方向是唯一编码位置。

从词表查表到上下文表示

本章建立了一个清晰数据流:

  1. 文本被切成词或 Token,并映射为编号;
  2. 编号从嵌入矩阵取出初始向量;
  3. 上下文预测产生损失;
  4. 反向传播修改参与预测的向量;
  5. 大量共现把可复用关系压进空间;
  6. 下游模型使用这些向量进行分类、检索或序列建模。

第 15 章小实验将在后续实践阶段用小语料生成窗口训练对,观察负采样、近邻与语料偏差。它不作为继续阅读的前提。

下一章将补上静态词向量缺少的时间顺序。同一个词进入句子后,模型需要把此前信息带到当前位置;句子继续延长时,还要避免早期信息和梯度在漫长链条中消失。循环网络与 LSTM 就从这里进入。

本章小结

  • 词语编号只提供身份,one-hot 精确区分词,却不编码词间相似性。
  • 词袋适合依赖词频的任务,但忽略顺序;表示是否足够必须结合任务判断。
  • 分布假说从上下文使用方式寻找词语关系,共现矩阵把这种关系变成可计算统计。
  • Embedding 是可训练矩阵查表,词向量由语料、窗口、目标与优化共同形成。
  • CBOW 用上下文预测中心词,Skip-gram 用中心词预测上下文;负采样避免每次遍历完整词表。
  • 余弦相似度衡量向量方向关系,但近邻可能混合同义、同类、相关、句法相似与反义。
  • 线性类比说明部分关系形成几何结构,不足以证明模型拥有完整世界理解。
  • 静态词向量把一词多义压成一个位置,也不能独立处理顺序与长距离组合。
  • 词向量会编码语料中的社会偏见;简单删除一个方向不能保证下游系统公平。

思考问题

  1. “猫追狗”和“狗追猫”在词袋中相同,这种表示在哪些任务上仍可能足够?
  2. 调大 Word2Vec 的上下文窗口,可能让近邻关系发生什么变化?
  3. 一个词向量去偏测试通过后,为什么仍要检查下游招聘或推荐系统的群体错误?

延伸阅读

参考文献

Bengio, Yoshua, Rejean Ducharme, Pascal Vincent, 和 Christian Jauvin. 2003年. 《A Neural Probabilistic Language Model》. Journal of Machine Learning Research 3: 1137~55.
Bolukbasi, Tolga, Kai-Wei Chang, James Y. Zou, Venkatesh Saligrama, 和 Adam T. Kalai. 2016年. 《Man Is to Computer Programmer as Woman Is to Homemaker? Debiasing Word Embeddings》. Advances in Neural Information Processing Systems 29, 4349~57.
Deerwester, Scott, Susan T. Dumais, George W. Furnas, Thomas K. Landauer, 和 Richard Harshman. 1990年. 《Indexing by Latent Semantic Analysis》. Journal of the American Society for Information Science 41 (6): 391~407.
Firth, John R. 1957年. 《A Synopsis of Linguistic Theory, 1930–1955》. 收入 Studies in Linguistic Analysis. Basil Blackwell.
Harris, Zellig S. 1954年. 《Distributional Structure》. Word 10 (2–3): 146~62. https://doi.org/10.1080/00437956.1954.11659520.
Levy, Omer, 和 Yoav Goldberg. 2014年. 《Neural Word Embedding as Implicit Matrix Factorization》. Advances in Neural Information Processing Systems 27, 2177~85.
Mikolov, Tomas, Kai Chen, Greg Corrado, 和 Jeffrey Dean. 2013年. 《Efficient Estimation of Word Representations in Vector Space》. arXiv preprint arXiv:1301.3781. https://arxiv.org/abs/1301.3781.
Mikolov, Tomas, Ilya Sutskever, Kai Chen, Greg S. Corrado, 和 Jeffrey Dean. 2013年. 《Distributed Representations of Words and Phrases and Their Compositionality》. Advances in Neural Information Processing Systems 26, 3111~19.
Pennington, Jeffrey, Richard Socher, 和 Christopher D. Manning. 2014年. GloVe: Global Vectors for Word Representation》. Proceedings of the 2014 Conference on Empirical Methods in Natural Language Processing, 1532~43. https://doi.org/10.3115/v1/D14-1162.