详细摘要 摘要

生成:2025-05-15 14:24

摘要详情

音频文件
Stanford CS224N NLP with Deep Learning | Spring 2024 | Lecture 2 - Word Vectors and Language Models
摘要类型
详细摘要
LLM 提供商
openai
LLM 模型
gemini-2.5-pro-exp-03-25
已创建
2025-05-15 14:24:17

概览/核心摘要 (Executive Summary)

本讲座(Stanford CS224N NLP with Deep Learning, Spring 2024, Lecture 2)主要回顾并深化了词向量(Word Vectors)的概念,特别是 Word2Vec 算法的优化、变体及其背后的数学原理。首先,课程回顾了优化基础,从梯度下降(Gradient Descent)过渡到实际应用中更高效的随机梯度下降(Stochastic Gradient Descent, SGD),强调了其在处理大规模数据和提升神经网络训练效果方面的优势。接着,详细探讨了 Word2Vec 的实现细节,包括参数初始化、为何使用中心词和上下文词两套向量、以及通过负采样(Negative Sampling)作为朴素 Softmax 的高效替代方案。

讲座通过一个 Jupyter Notebook 演示了 GloVe 词向量在词语相似性(如 "USA" 对应 "Canada", "America")和类比任务(如 "king - man + woman = queen")上的有效性,展示了词向量捕捉语义和文化知识的能力。随后,课程介绍了基于计数的方法作为词向量学习的另一途径,从简单的词-词共现矩阵、SVD降维,到更先进的 GloVe 模型,该模型旨在通过对数双线性模型学习词向量,使其能够反映共现概率的比率,从而捕捉线性语义成分。

词向量的评估方法被分为内在评估(如词语相似度任务、词语类比任务)和外在评估(如在命名实体识别等下游任务中的表现)。讲座还讨论了词的多义性问题(Word Senses),指出标准词向量通常是词语不同含义的加权平均或“叠加态”,并提及可以通过稀疏编码等技术从单一词向量中重构出不同的词义向量。最后,初步引入了神经网络分类器的概念,以命名实体识别为例,展示了如何利用词向量构建一个简单的窗口分类器,并简要介绍了神经网络的基本构成(神经元模型、多层网络、激活函数、损失函数如交叉熵损失),为后续深入学习神经网络奠定基础。

课程安排与提醒

  • 首个作业 (Assignment 1):已发布,截止日期为下周二课前。
  • Python 复习课:将于本周五 3:30-4:20 PM 在 Gates B01(Gates 地下室)进行。
  • Office Hours 和 Help Sessions:已开始,具体时间地点在网站上列出,鼓励学生参与。提供线下教室的多助教辅导,也为斯坦福在线学生提供 Zoom 选项。
  • 讲师 Office Hours:将在周一下午进行,通过 Calenly 进行15分钟预约制,预约链接当晚开放。讲师提醒学生不要“霸占”所有预约时段。
  • 关于 Assignment 2 的重要提示:本学期(春季学期较短)不会要求学生从零开始实现 Word2Vec,请勿参考往年要求实现 Word2Vec 的 Assignment 2,应等待新的 Assignment 2 发布。

优化算法基础

  • 目标:最小化损失函数 J(θ)。
  • 梯度下降 (Gradient Descent)
    • 通过计算损失函数关于参数 θ 的梯度 ∇J(θ) 来确定使损失下降最快的方向。
    • 更新规则:θ_new = θ_old - α * ∇J(θ)
      • α 是学习率(learning rate)或步长(step size),通常是一个小数值(如 10⁻³, 10⁻⁴, 10⁻⁵)。
      • 选择小学习率是为了避免“走过头”,甚至可能导致损失比初始点更大。
  • 随机梯度下降 (Stochastic Gradient Descent, SGD)
    • 问题:在整个数据集上计算梯度成本非常高,导致更新缓慢。
    • 方法:每次仅在一个小批量(mini-batch)数据(如16或32个样本)上计算梯度,以此作为对整体梯度的有噪声估计。
    • 优势
      1. 速度快:计算成本远低于全批量梯度下降。
      2. 效果好:噪声的引入有时反而有助于神经网络跳出局部最优,达到更好的优化效果。
    • SGD 是神经网络训练中普遍使用的方法。

Word2Vec 详解

  • 核心思想:通过预测词语的上下文来学习词向量。
  • 初始化:词向量必须用随机的小数值初始化。若初始化为零,则由于对称性无法进行有效学习。
  • 过程
    1. 遍历语料库中的每个位置。
    2. 使用当前词向量估计其上下文词的概率。
    3. 根据预测错误计算梯度。
    4. 更新词向量以更好地预测周围词语。
  • “魔法”之处:仅通过这种简单的数学运算和大量文本,就能学习到捕捉词语语义、意义和关系的词向量。
  • 参数:模型参数仅为词向量本身,包括中心词向量 (center word vectors) 和上下文词向量 (outside word vectors),这两者在计算时被视为不相关的。
  • 模型类型:属于“词袋模型 (bag of words model)”,不考虑句子结构或词语的左右顺序,仅关注中心词的上下文中出现了哪些词。

Word2Vec (GloVe) 演示 (Jupyter Notebook)

  • 使用 gensim 包加载预训练的 GloVe 词向量(讲师提及 GloVe 是斯坦福构建的模型,将在后续介绍,其行为与 Word2Vec 类似)。
  • 词向量表示:一个词(如 "bread", "croissant")表示为一个实数向量(演示中使用100维)。相似词的向量在数值上表现出一定相似性。
  • 词语相似性查询
    • most_similar("usa") -> "canada", "america", "u.s.a.", "united states", "australia"
    • most_similar("banana") -> "coconut", "mango", "bananas", "potato", "pineapple", "fruit"
    • most_similar("croissant") -> "brioche", "baguette", "focaccia", "ciabatta"
  • 负向量相似性:查询与词向量反方向最相似的词(如 -banana),结果通常是无意义的“怪异词汇 (weirdo things)”,对寻找反义词无效。
  • 词语类比 (Analogies):通过向量加减法实现。
    • king - man + woman = queen (最经典的例子)
    • australia - beer + france = champagne
    • russia - [beer/vodka, 讲师演示时为 vodka]
    • pencil - sketching + camera = photographing
    • obama - clinton + reagan = nixon (基于2014年训练的模型)
    • tallest - tall + longest = long (语法关系)
  • 结论:这种简单的词袋模型足以学习到丰富的词汇语义,甚至包括一些超越传统语义的文化和世界知识。向量间的差异(距离)可以捕捉概念关系,如“统治者”概念。

Word2Vec 细节提问与解答

  • 为何 Word2Vec 有两套向量 (U_o 和 V_c)?最终如何得到一个向量?
    • 实践中通常将两套向量(中心词向量和上下文词向量)取平均。它们最终会非常相似,因为文本中词语会交替作为中心词和上下文词出现。
  • 为何设计两套向量?
    • 主要是为了简化数学计算。如果中心词和上下文词使用同一套向量,在计算归一化项时,当上下文词恰好是中心词本身时,会出现该词向量的平方项 (x²),而其他项则是两个不同词向量的点积 (ax)。这种不一致性会使梯度计算更复杂。使用两套独立的向量可以避免这个问题,保持数学形式的简洁。这并非为了提升性能,尽管正确实现下,使用一套向量也可能略好。

Word2Vec 变体与细节

  • Word2Vec 家族 (Mikolov et al., 2013):
    • Skip-gram (SG):用中心词预测上下文词(本课程主要介绍的模型,简单且效果好)。
    • Continuous Bag of Words (CBOW):用上下文词预测中心词。
  • 损失函数与训练方法
    • 朴素 Softmax (Naive Softmax)
      • 对整个词汇表中的每个词计算概率,分母需要对所有词求和。
      • 计算量大:若词汇表大小为40万,每个词向量维度为100-300,则点积和指数运算量巨大。
    • 负采样 (Negative Sampling):作为 Softmax 的一种高效近似。
      • 思想:将多分类问题转化为一系列二分类问题(使用逻辑回归/Sigmoid函数)。目标是让模型认为真实上下文词出现的概率高,而随机采样的“负样本”词出现的概率低。
      • 公式形式J(θ) = -log σ(u_o^T v_c) - Σ_{k=1 to K} log σ(-u_k^T v_c) (简化形式,实际包含对真实词的喜爱和对负样本的厌恶)
        • σ 是 Logistic/Sigmoid 函数:σ(x) = 1 / (1 + e^(-x)),将实数映射到 (0,1) 区间。
        • 对真实上下文词 o,希望 u_o^T v_c 大,使其概率接近1。
        • 对负样本词 k (采样 K 个,如5-10个),希望 u_k^T v_c 小(或 -u_k^T v_c 大),使其概率接近0。
      • 负采样策略:不仅仅从词汇表中均匀随机采样。
        • 通常基于词的一元分布 (unigram distribution) P(w)(即词频)进行采样。
        • Word2Vec 论文中提出使用 P(w)^(3/4) 进行采样。这会提高低频词被采样的概率,介于均匀分布和原始词频分布之间,从而获得更好的词向量。

基于计数的方法:从共现矩阵到 GloVe

  • 基本思想:直接统计词语在上下文中共同出现的次数。
  • 词-词共现矩阵 (Word-Word Co-occurrence Matrix)
    • 构建一个矩阵,行和列代表词汇表中的词,矩阵元素 X_ij 表示词 i 和词 j 在指定上下文窗口内共同出现的次数。
    • 问题
      1. 维度极高:若词汇表大小为 V,则矩阵大小为 V x V (如 400k x 400k),非常稀疏且占用大量空间。
      2. 直接使用高维稀疏向量效果不佳。
  • 降维方法
    • 奇异值分解 (Singular Value Decomposition, SVD)
      • 将共现矩阵 X 分解为 X = UΣV^T
      • 通过保留 Σ 中最大的 k 个奇异值及其对应的 U 和 V 的部分,可以将词表示为低维(如k维)向量。
    • 早期尝试 (Latent Semantic Analysis, LSA):直接对原始计数矩阵做 SVD 效果不佳。
    • 改进 (Doug Rohde, COALS):在 SVD 前对共现计数进行处理,如:
      • 使用对数频率 (log frequencies)。
      • 对上下文窗口进行加权(近的词权重高)。
      • 使用皮尔逊相关系数等。
      • Rohde 的工作实际上也发现了词向量的线性语义成分(如“事件的执行者”),但当时未引起广泛关注。
  • GloVe (Global Vectors for Word Representation) (Pennington, Socher, Manning, 2014):
    • 动机:结合基于计数的方法的统计能力和 Word2Vec 等模型学习到的线性语义结构。
    • 核心洞察 (Jeffrey Pennington)共现概率的比率 (ratios of co-occurrence probabilities) 能够编码词语间的意义关系。
      • 例如,考虑词 icesteam
        • P(solid | ice) / P(solid | steam) 会很大。
        • P(gas | ice) / P(gas | steam) 会很小。
        • P(water | ice) / P(water | steam) 约等于 1。
        • P(fashion | ice) / P(fashion | steam) 约等于 1。
      • 这种比率可以揭示如“固态/气态”这样的语义维度。
    • 模型思想:构建一个模型,使得词向量的点积能够直接建模对数共现概率。
      • w_i^T w_j + b_i + b_j = log(X_ij)
      • 这样,向量间的差 w_i - w_k 就对应于对数共现概率的比率 log(X_ij / X_kj),从而捕获线性语义成分。
    • 模型包含偏置项 (bias terms) 和频率加权等细节。

词向量的评估

  • 评估的重要性:在NLP中,需要量化方法来判断模型的好坏。
  • 两类评估方法
    • 内在评估 (Intrinsic Evaluation)
      • 针对词向量本身的特定子任务进行评估。
      • 优点:计算速度快,有助于理解模型组件。
      • 缺点:与最终下游任务的性能可能不直接相关。
      • 示例
        1. 词语类比 (Word Analogies):如 man:king :: woman:queen。评估模型在预定义类比集上的准确率。GloVe 演示中展示了其有效性,但也承认并非所有类比都有效。
        2. 词语相似度 (Word Similarity):将模型计算的词对相似度(如词向量的余弦相似度)与人类标注的相似度评分(如 WordSim-353, SimLex-999 数据集)进行比较(如计算相关系数)。
          • 讲师展示了一个包含不同方法(SVD, log-count SVD, CBOW, Skip-gram, GloVe)在相似度任务上得分的表格,显示了 GloVe 等模型的优越性。
    • 外在评估 (Extrinsic Evaluation)
      • 在真实的下游NLP任务中评估词向量的性能。
      • 优点:直接反映词向量在实际应用中的价值。
      • 缺点:评估成本高,可能难以精确判断词向量的具体贡献。
      • 示例
        1. 命名实体识别 (Named Entity Recognition, NER):任务是识别文本中的实体(如人名、地名、组织名)。
          • 例如:"Chris Manning lives in Palo Alto" -> (Chris Manning, PERSON), (Palo Alto, LOCATION)。
          • 实验表明,将词向量(如GloVe)加入到NER系统中,可以显著提升性能(相较于仅使用离散特征的基线模型)。

词义的多样性 (Word Senses / Polysemy)

  • 问题:大多数词语拥有多个含义(如 "pike" 可指鱼、武器、道路、跳水姿势等;"bank" 可指金融机构、河岸)。
  • 传统词向量的处理方式
    • 标准 Word2Vec/GloVe 为每个词只学习一个向量。
    • 这个单一向量通常是该词所有不同词义对应向量的加权平均 (weighted average)叠加态 (superposition),权重取决于各词义的出现频率。
  • 替代方法:显式词义向量
    • 对文本中词语的出现实例进行聚类,为每个聚类(代表一个词义)学习一个词向量。
    • 例如,可以为 "jaguar" 学习出代表汽车、操作系统版本、动物等不同含义的向量。
    • 这种方法可以有效区分词义,但目前并非主流。
  • 对单一向量模型的辩护
    • 词义往往是细微和连续的,而非词典中列出的离散条目。不同词典对同一词的词义划分也常不一致(如 "field" 的多种用法)。
    • 单一向量可能更好地捕捉这种词义的连续性和模糊性。
  • 从单一向量中恢复词义 (Sparse Coding)
    • 一个令人惊讶的结果是:尽管单一词向量是多词义的混合,但由于词向量空间的高维性和稀疏性,可以利用稀疏编码 (sparse coding) 理论从单一混合向量中重构出各个独立的词义向量。
    • 引用了 Arora et al. (TACL 2018, 包括斯坦福的 Tengyu Ma) 的工作,他们展示了从 "tie" 的单一词向量中分解出衣物领带、比赛平局、电线束带、乐谱连音符等不同词义向量的例子。

神经网络分类器入门

  • 目标:构建能够进行分类任务的神经网络模型,如命名实体识别。
  • 命名实体识别 (NER) 示例
    • 输入句子,判断特定词是否属于某个类别(如判断 "Paris" 在上下文中是地名还是人名)。
    • "Paris Hilton" (人名) vs "Paris, France" (地名)。
  • 窗口分类器 (Window Classifier)
    • 考虑目标词及其左右若干上下文词(形成一个窗口)。
    • 将窗口内所有词的词向量拼接起来,作为分类器的输入。
    • 本例中简化为二分类:是地名 (LOCATION) 或不是地名 (NOT A LOCATION)。
  • 监督学习框架
    • 训练数据:包含输入 x_i(如词窗的词向量)和对应标签 y_i(如 LOCATION / NOT A LOCATION)。
  • 传统分类器 vs. 神经网络分类器
    • 传统分类器 (如逻辑回归, SVM, 朴素贝叶斯):
      • 通常是线性分类器,学习权重 W,输入特征 x 是固定的。
    • 神经网络分类器
      • 不仅学习权重 W,还学习输入的分布式表示(即词向量本身也是学习的一部分或可调整的)。
      • 能够在原始输入空间中实现非线性决策边界。
  • 一个简单的神经网络结构 (用于NER)
    1. 输入层:词窗内的词(如 "Museums in Paris are amazing",中心词 "Paris")。
    2. 词嵌入层:将每个词转换为词向量,然后将窗口内所有词向量拼接成一个长向量 x (如 5个100维向量拼接成500维向量)。
    3. 隐藏层 (Hidden Layer)
      • h = f(Wx + b)
      • W 是权重矩阵,b 是偏置向量。
      • f 是非线性激活函数 (non-linearity),如 Sigmoid (Logistic) 函数。
      • 隐藏层将输入 x 转换为一个新的表示 h (通常维度较低,如8维)。
    4. 输出层 (Output Layer)
      • score = U^T h (U 是权重向量)
      • P(LOCATION | window) = σ(score) (使用 Sigmoid 函数得到概率)
    5. 该网络在隐藏层表示 h 上是线性的,但在原始词向量输入 x 上是非线性的。
  • 损失函数 (Loss Function)
    • 交叉熵损失 (Cross-Entropy Loss):在 PyTorch 等框架中常用。
      • H(p, q) = - Σ_x p(x) log q(x),其中 p 是真实分布,q 是模型预测分布。
      • 对于独热编码 (one-hot) 的真实标签(即正确类别概率为1,其他为0),交叉熵损失简化为负对数似然 (Negative Log Likelihood)-log q(correct_class)
  • 神经网络的生物学启发
    • 灵感来源于人脑神经元 (neurons):细胞核 (nucleus)、树突 (dendrites) 接收输入、轴突 (axon) 传递输出、突触 (synapses) 连接。
    • 神经元激活表现为放电频率 (spiking rate)。
  • 人工神经元模型 (Artificial Neuron)
    • 一个简化的模型,类似于二元逻辑回归 (binary logistic regression)
      • 多个输入 x_i
      • 加权求和 Σ w_i x_i + b
      • 通过非线性激活函数 f 得到输出 y = f(Σ w_i x_i + b)
    • 尽管人脑神经元远比此复杂,但这种简化模型在当前神经网络革命中非常成功,且易于用线性代数实现。
  • 多层神经网络 (Multi-Layer Neural Networks)
    • 将多个这样的“神经元”组织成层。
    • 前一层的输出作为后一层的输入。
    • 核心优势:中间层(隐藏层)能够自动学习输入数据的有用表示 (useful representations),这些表示使得后续的分类或任务更容易。模型通过学习大量参数,内部自行发现这些有用的特征变换。
    • 层数越多,理论上可以学习更复杂的函数。

总结核心观点

讲座系统介绍了词向量的生成(Word2Vec, GloVe)、评估和应用,并初步引入了神经网络分类器的概念。核心在于理解词向量如何通过预测上下文或分析共现统计来捕捉词汇的语义信息,以及这些向量如何作为更复杂神经网络模型的输入。随机梯度下降是训练这些模型的关键优化算法。词的多义性是词向量表示的一个挑战,但现有模型通过学习平均/叠加表示或利用稀疏编码技术来应对。最后,神经网络通过分层结构和非线性变换,能够从数据中自动学习有用的特征表示,为解决复杂的NLP任务提供了强大工具。