词语表示法

• 14 min read • 2730 words
Tags: NLP
Categories: NLP

生成:Gemini-2.5-pro, 整理:fyerfyer

词语表示法

1. 预备知识

a.a. 词符 vs. 词型 (Word Token vs. Word Type)

在自然语言处理中,我们首先要区分两个基本概念:

  • 词符 (Word Token):指在文本中实际出现的一个具体的词。它是词的一个“实例”。
  • 词型 (Word Type):指一个抽象的、独特的词。它是词的“原型”或“类别”。

例如,在句子“我爱北京,我爱中国。”中:

  • 词符 (Tokens):我, 爱, 北京, ,, 我, 爱, 中国, . (共8个)
  • 词型 (Types):我, 爱, 北京, ,, 中国, . (共6个)

这个区分至关重要,因为计算机处理的是具体的文本(由词符组成),但它需要学习和存储的是关于词的通用知识(基于词型)。

2. 离散表示法 (Discrete Representations)

这是词语表示的“古代”方法,其核心思想是整数化 (integerized)

a.a. 核心思想

为词汇表中的每一个词型(Word Type)都赋予一个唯一的、任意的非负整数ID

这就像给每个汉字或单词编一个号,形成一个字典: { "苹果": 1, "香蕉": 2, ..., "电脑": 890, "手机": 891 }

b.b. 优缺点

  • 优点

    1. 内存统一:每个词占用的内存相同。
    2. 索引快速:可以用数组快速索引词的信息(如词频、拼写等)。
    3. 比较高效:判断两个词是否相等,只需比较整数,速度极快。
  • 缺点

    • 致命缺陷:整数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, ...]

在这里,第一维可能代表“阳性”程度,第二维代表“阴性”程度,第三维代表“皇室”属性。

a.a. 优点

  1. 表达相似性:意思相近的词,其向量在空间中的距离也相近。模型可以利用这一点在相似词之间共享信息。
  2. 发现关系:向量运算可以揭示词语间的类比关系。最著名的例子是: ext{vector("国王") - vector("男人") + vector("女人") pprox vector("女王")} 这表明模型学会了“国王-男人+女人=女王”这种类比关系。

b.b. 向量的来源

  1. 人类专家知识:通过语言学家手动构建的词典(如 WordNet)来编码词语的同义、反义、上下位等关系。
  2. 从海量文本中自动学习:这是目前的主流方法。通过分析大量文本(语料库),程序可以自动发现词语之间的关系。

4. 分布式向量:上下文即意义

自动学习词向量的背后,有一个重要的理论基础:分布假说 (Distributional Hypothesis)

a.a. 核心思想:分布假说

"You shall know a word by the company it keeps." (观其伴,知其言)

一个词的意义,是由它经常出现的上下文(即周围的词)所决定的。如果两个词的使用方式(上下文)相似,那么它们的意义也很可能相关。

基于此思想,主要有两种技术路线来生成词向量。

b.b. 技术路线一:聚类 (Clustering)

  • 代表:布朗聚类 (Brown Clustering)。
  • 流程
    1. 观察上下文:扫描大量文本,记录每个词周围都出现了哪些词。
    2. 分组:将倾向于出现在相似上下文中的词语分到同一个“簇” (cluster) 里。
    3. 形成层级:这些小簇可以继续合并成更大的簇,最终形成一个树状的层级结构。
  • 效果:能自动把功能、意思、甚至拼写错误的变体都归到一起。

c.c. 技术路线二:高维向量与降维

这是通往现代词向量(如 Word2Vec)更直接的一条路。

  • 流程

    1. 构建超高维向量:为每个词创建一个非常长的向量。向量的每一维都对应一个特定的上下文(如“出现在单词the的附近”),其值是该词与这个上下文共同出现的频率。这会产生一个维度极高且非常稀疏(大部分值为0)的向量。
    2. 降维 (Dimensionality Reduction):使用线性代数方法(如SVD)对这些高维稀疏向量进行压缩,变成更短、更稠密的向量(例如从5万维压缩到300维)。
  • 降维后的向量特性

    • 高效:向量更短,计算效率更高。
    • 去噪:有损压缩的过程可能过滤掉一些文本特有的“噪声”。
    • 保留语义:虽然压缩后每一维度的具体意义变得不可解释,但向量之间的空间关系(距离、方向)却保留了词语的语义关系。

这种向量表示法也被称为分布式表示 (Distributed Representations),因为一个词的意义不是由某一维度决定的,而是“分布”在整个向量的所有维度上。

5. 上下文词向量 (Contextual Word Vectors)

这是当前最前沿、影响力最大的词向量思想,它解决了之前所有方法的根本缺陷。

a.a. 问题的提出:静态向量的局限

核心缺陷:一个词型(Word Type)只对应一个固定的向量。

这无法解决一词多义 (Polysemy) 的问题。例如,bank 这个词在不同句子中的含义完全不同:

  • "I sat on the river bank." (我坐在河岸上。)
  • "I went to the bank to deposit money." (我去银行存钱。)

用一个固定的向量来代表 bank,必然会丢失大量信息,甚至造成混淆。

b.b. 思想的飞跃:从“词型”到“词符”

范式转换:放弃为每个“词型”创建固定的“身份档案”,而是为文本中出现的每一个“词符”(Word Token),根据其所处的句子,动态地生成一个独特的、“量身定制”的向量

这意味着,在下面两个句子中,两个 plant 的词向量是完全不同的:

  1. "The plant is growing." (这个植物正在生长。) -> 向量会更接近 "tree", "flower"。
  2. "The factory is a plant." (这个工厂是一个车间。) -> 向量会更接近 "factory", "industry"。

这个转变让问题变简单了:我们不再需要一个“万能向量”去概括一个词的所有含义,只需要一个能表示“此时此地的这个词是什么意思”的向量。

c.c. ELMo:预训练上下文词向量的突破

ELMo ("Embeddings from Language Models") 是这个新思想的杰出代表。

  • 核心原理
    1. 依赖任意长的上下文:一个词符的向量,由它左右整个句子的内容共同决定。ELMo使用神经网络(RNN)动态地计算这个上下文向量。
    2. 通过“语言模型”任务训练:ELMo通过在海量文本上做“完形填空”(即语言建模任务:根据前面的词预测下一个词)来训练。为了做好这个任务,模型必须深度理解上下文。这些上下文词向量,就是模型在训练时产生的“副产品”。

d.d. 革命性的影响与后续发展

上下文词向量的出现,不是一次小修小补,而是一场革命

  • 效果立竿见影:它在几乎所有NLP基准测试任务上都带来了巨大且一致的性能提升。
  • 催生新王者:它的继任者 BERT (Bidirectional Encoder Representations from Transformers),引入了更先进的 Transformer 架构,取得了更惊人的效果。
  • 开启新时代:此后,涌现出了一大批基于类似思想的模型,如 GPT-2/3/4, RoBERTa, T5 等。NLP从此进入了由大型预训练语言模型 (Large Pre-trained Models) 主导的新纪元。

Comments

Total words: 2730