词语表示法
生成:Gemini-2.5-pro, 整理:fyerfyer
词语表示法
1. 预备知识
词符 vs. 词型 (Word Token vs. Word Type)
在自然语言处理中,我们首先要区分两个基本概念:
- 词符 (Word Token):指在文本中实际出现的一个具体的词。它是词的一个“实例”。
- 词型 (Word Type):指一个抽象的、独特的词。它是词的“原型”或“类别”。
例如,在句子“我爱北京,我爱中国。”中:
- 词符 (Tokens):我, 爱, 北京, ,, 我, 爱, 中国, . (共8个)
- 词型 (Types):我, 爱, 北京, ,, 中国, . (共6个)
这个区分至关重要,因为计算机处理的是具体的文本(由词符组成),但它需要学习和存储的是关于词的通用知识(基于词型)。
2. 离散表示法 (Discrete Representations)
这是词语表示的“古代”方法,其核心思想是整数化 (integerized)。
核心思想
为词汇表中的每一个词型(Word Type)都赋予一个唯一的、任意的非负整数ID。
这就像给每个汉字或单词编一个号,形成一个字典:
{ "苹果": 1, "香蕉": 2, ..., "电脑": 890, "手机": 891 }
优缺点
优点:
- 内存统一:每个词占用的内存相同。
- 索引快速:可以用数组快速索引词的信息(如词频、拼写等)。
- 比较高效:判断两个词是否相等,只需比较整数,速度极快。
缺点:
- 致命缺陷:整数ID本身没有任何意义。它无法表达词语之间的任何关系。
- 意思相近的两个词(如“猫”和“狗”)可能会被分配到相差很远的ID(例如 10 和 5000),而ID相邻的两个词(例如 101 和 102)可能毫无关系。
- 这种表示方法让计算机无法举一反三,每个词都是一个孤立的点。
3. 静态向量表示法 (Static Vector Representations)
这是词语表示的“现代”方法,也是后来更复杂模型的基础。其核心思想是:不要用一个孤立的数字来表示词,而是用一个多维度的向量(一串数字)来描述它。
这个向量就像词语的“基因图谱”或“属性列表”。
例如,在一个虚构的向量空间中:
- "国王" ->
[0.9, 0.1, 0.95, 0.2, ...]
- "女王" ->
[0.1, 0.9, 0.92, 0.2, ...]
- "男人" ->
[0.85, 0.05, 0.2, 0.8, ...]
- "女人" ->
[0.05, 0.85, 0.18, 0.8, ...]
在这里,第一维可能代表“阳性”程度,第二维代表“阴性”程度,第三维代表“皇室”属性。
优点
- 表达相似性:意思相近的词,其向量在空间中的距离也相近。模型可以利用这一点在相似词之间共享信息。
- 发现关系:向量运算可以揭示词语间的类比关系。最著名的例子是: ext{vector("国王") - vector("男人") + vector("女人") pprox vector("女王")} 这表明模型学会了“国王-男人+女人=女王”这种类比关系。
向量的来源
- 人类专家知识:通过语言学家手动构建的词典(如 WordNet)来编码词语的同义、反义、上下位等关系。
- 从海量文本中自动学习:这是目前的主流方法。通过分析大量文本(语料库),程序可以自动发现词语之间的关系。
4. 分布式向量:上下文即意义
自动学习词向量的背后,有一个重要的理论基础:分布假说 (Distributional Hypothesis)。
核心思想:分布假说
"You shall know a word by the company it keeps." (观其伴,知其言)
一个词的意义,是由它经常出现的上下文(即周围的词)所决定的。如果两个词的使用方式(上下文)相似,那么它们的意义也很可能相关。
基于此思想,主要有两种技术路线来生成词向量。
技术路线一:聚类 (Clustering)
- 代表:布朗聚类 (Brown Clustering)。
- 流程:
- 观察上下文:扫描大量文本,记录每个词周围都出现了哪些词。
- 分组:将倾向于出现在相似上下文中的词语分到同一个“簇” (cluster) 里。
- 形成层级:这些小簇可以继续合并成更大的簇,最终形成一个树状的层级结构。
- 效果:能自动把功能、意思、甚至拼写错误的变体都归到一起。
技术路线二:高维向量与降维
这是通往现代词向量(如 Word2Vec)更直接的一条路。
流程:
- 构建超高维向量:为每个词创建一个非常长的向量。向量的每一维都对应一个特定的上下文(如“出现在单词
the
的附近”),其值是该词与这个上下文共同出现的频率。这会产生一个维度极高且非常稀疏(大部分值为0)的向量。 - 降维 (Dimensionality Reduction):使用线性代数方法(如SVD)对这些高维稀疏向量进行压缩,变成更短、更稠密的向量(例如从5万维压缩到300维)。
- 构建超高维向量:为每个词创建一个非常长的向量。向量的每一维都对应一个特定的上下文(如“出现在单词
降维后的向量特性:
- 高效:向量更短,计算效率更高。
- 去噪:有损压缩的过程可能过滤掉一些文本特有的“噪声”。
- 保留语义:虽然压缩后每一维度的具体意义变得不可解释,但向量之间的空间关系(距离、方向)却保留了词语的语义关系。
这种向量表示法也被称为分布式表示 (Distributed Representations),因为一个词的意义不是由某一维度决定的,而是“分布”在整个向量的所有维度上。
5. 上下文词向量 (Contextual Word Vectors)
这是当前最前沿、影响力最大的词向量思想,它解决了之前所有方法的根本缺陷。
问题的提出:静态向量的局限
核心缺陷:一个词型(Word Type)只对应一个固定的向量。
这无法解决一词多义 (Polysemy) 的问题。例如,bank
这个词在不同句子中的含义完全不同:
- "I sat on the river bank." (我坐在河岸上。)
- "I went to the bank to deposit money." (我去银行存钱。)
用一个固定的向量来代表 bank
,必然会丢失大量信息,甚至造成混淆。
思想的飞跃:从“词型”到“词符”
范式转换:放弃为每个“词型”创建固定的“身份档案”,而是为文本中出现的每一个“词符”(Word Token),根据其所处的句子,动态地生成一个独特的、“量身定制”的向量。
这意味着,在下面两个句子中,两个 plant
的词向量是完全不同的:
- "The plant is growing." (这个植物正在生长。) -> 向量会更接近 "tree", "flower"。
- "The factory is a plant." (这个工厂是一个车间。) -> 向量会更接近 "factory", "industry"。
这个转变让问题变简单了:我们不再需要一个“万能向量”去概括一个词的所有含义,只需要一个能表示“此时此地的这个词是什么意思”的向量。
ELMo:预训练上下文词向量的突破
ELMo ("Embeddings from Language Models") 是这个新思想的杰出代表。
- 核心原理:
- 依赖任意长的上下文:一个词符的向量,由它左右整个句子的内容共同决定。ELMo使用神经网络(RNN)动态地计算这个上下文向量。
- 通过“语言模型”任务训练:ELMo通过在海量文本上做“完形填空”(即语言建模任务:根据前面的词预测下一个词)来训练。为了做好这个任务,模型必须深度理解上下文。这些上下文词向量,就是模型在训练时产生的“副产品”。
革命性的影响与后续发展
上下文词向量的出现,不是一次小修小补,而是一场革命。
- 效果立竿见影:它在几乎所有NLP基准测试任务上都带来了巨大且一致的性能提升。
- 催生新王者:它的继任者 BERT (Bidirectional Encoder Representations from Transformers),引入了更先进的 Transformer 架构,取得了更惊人的效果。
- 开启新时代:此后,涌现出了一大批基于类似思想的模型,如
GPT-2/3/4
,RoBERTa
,T5
等。NLP从此进入了由大型预训练语言模型 (Large Pre-trained Models) 主导的新纪元。
Comments