【CS224n 笔记】Lecture 1: NLP 的基石——词向量 (Word Vectors)

69 阅读5分钟

【CS224n 笔记】Lecture 1: NLP 的基石——词向量 (Word Vectors)

斯坦福大学的 CS224n (Natural Language Processing with Deep Learning) 是 NLP 领域的入门神课。Lecture 1 作为开篇,并没有直接通过复杂的神经网络把人劝退,而是从最本质的问题出发:计算机应该如何理解一个词(Word)?

本文是对 Lecture 1 核心内容的总结,带你从传统的 One-hot 编码走到 Word2vec 的思想殿堂。


1. 词的含义 (Meaning) 与传统表示法的局限

在人类语言中,"含义" (Meaning) 通常指用符号(Symbol)来代表某种思想或现实世界的对象。在计算机中,我们如何表示这种含义呢?

传统方案一:WordNet

最早期的尝试是构建像 WordNet 这样的分类词典(Thesaurus)。它通过人工标注的同义词(synonyms)和上下位关系(hypernyms)来建立词与词的联系。

  • 局限性:

    • 缺乏细微差别 (Nuance):  "proficient" 和 "good" 是同义词,但它们在语境中通常不能互换。
    • 更新滞后:  语言演化极快(如 "apple", "tweet", "ninja" 的新含义),人工维护跟不上。
    • 主观性强:  依赖专家的主观判断。
    • 无法计算相似度:  很难量化两个词到底有多像。

传统方案二:离散符号 (Discrete Symbols)

在传统 NLP 中,我们把每个词看作一个独立的离散符号,通常使用 One-hot 编码

  • 假设词表大小为 V,则每个词表示为一个 V 维向量。
  • 例如: motel=[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0]\text{motel} = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0] hotel=[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0]\text{hotel} = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0]
  • 致命问题:正交性 (Orthogonality)  任意两个 One-hot 向量的点积为 0。这意味着在向量空间里,"motel" 和 "hotel" 的距离,与 "motel" 和 "cat" 的距离是一样的。模型无法从向量中捕捉到任何语义相似性。

2. 核心思想:分布式语义 (Distributional Semantics)

为了解决上述问题,现代 NLP 采用了一个革命性的理念:

"You shall know a word by the company it keeps."  (J.R. Firth, 1957) 一个词的含义由它周围经常出现的上下文 (Context) 决定。

这意味着,如果要理解 "banking" 这个词,我们不需要查字典,而是看它经常出现在 "government", "debt", "crisis" 这些词旁边。

基于此,我们要构建 分布式表示 (Distributed Representation) ,也就是大名鼎鼎的 词向量 (Word Vectors / Word Embeddings)

  • 这是一个稠密(Dense)向量,不再全是 0。
  • 维度通常较低(如 50, 300, 1000),远小于词表大小。
  • 相似的词在向量空间中距离更近。

3. Word2vec 算法详解

Word2vec (Mikolov et al., 2013) 是一个学习词向量的框架。它的核心是预测:与其统计共现频率,不如训练一个模型,让它能根据上下文预测中心词(或者反过来)。

模型概览

  • 目标:  遍历海量语料库中的每个位置 t,给定中心词 c (center word),预测其窗口内的上下文词 o (context/outside word)。

  • 参数:  每个词 w 有两个向量:

    • vw: 当 w 做中心词时的向量。
    • uw: 当 w 做上下文词时的向量。
  • 计算概率:  给定中心词 c 和 上下文词 o,我们用 Softmax 函数计算概率: P(oc)=exp(uoTvc)wVexp(uwTvc)P(o|c) = \frac{\exp(u_o^T v_c)}{\sum_{w \in V} \exp(u_w^T v_c)}

    • 分子:uoTvc 是点积,代表两个向量的相似度。越相似,点积越大,概率越高。
    • 分母:对词表中所有词进行归一化,确保概率和为 1。

目标函数 (Objective Function)

我们需要最大化所有预测正确的概率(Likelihood),等价于最小化负对数似然(Negative Log Likelihood):

image.png

训练优化

由于直接计算 Softmax 分母需要遍历整个词表(代价极其昂贵),Word2vec 通常采用 负采样 (Negative Sampling)  来近似训练:

  • 这里的思想由“多分类问题”转变为“二分类问题”。
  • 对于每一对正样本 (c,o)(真实出现的),我们随机抽取 K 个负样本(没出现的噪声词)。
  • 目标:  最大化正样本概率,最小化负样本概率。使用 Sigmoid 函数 σ(x): Jnegsample(θ)=logσ(uoTvc)k=1Klogσ(ukTvc)J_{neg-sample}(\theta) = - \log \sigma(u_o^T v_c) - \sum_{k=1}^K \log \sigma(-u_k^T v_c)
  • 通过 随机梯度下降 (SGD)  迭代更新 u 和 v,最终得到包含丰富语义的词向量。

4. 词向量的神奇特性

训练完成后,我们会发现向量空间展现出了惊人的性质:

  1. 相似性聚合:  可以在空间中看到 "banking", "finance", "monetary" 聚在一起。
  2. 线性类比关系 (Linear Analogies):  这是最著名的例子。向量的加减法居然对应语义的加减法: vector(King)vector(Man)+vector(Woman)vector(Queen)\text{vector(King)} - \text{vector(Man)} + \text{vector(Woman)} \approx \text{vector(Queen)} 这意味着模型不仅记住了词的位置,还隐式地编码了性别、时态、国家-首都等复杂的语义关系(甚至包括 lecture 中提到的 is-a 这种层级关系)。

5. 总结

Lecture 1 告诉我们:NLP 的基础是将离散的符号转化为连续的向量空间。

  • One-hot 是死板的、孤立的。
  • Word Vectors 是灵活的、互联的。
  • Word2vec 证明了通过简单的“预测上下文”任务,计算机可以自动学习到人类语言中丰富的语义结构。

这仅仅是深度学习 NLP 的开始,掌握了词向量,我们才算真正拿到了通往大语言模型时代的入场券。

参考资料:

  • Stanford CS224n Lecture 1 Slides & Video
  • Paper: Distributed Representations of Words and Phrases and their Compositionality (Mikolov et al., 2013)