词向量的基石:Word2vec, 分布语义学与学习过程
词向量的基石:Word2vec, 分布语义学与学习过程
本文档整理了关于词向量学习的基础理论,涵盖了Word2vec的核心思想、工作流程、数学原理,以及背后的语义学思想和学习方法。
1. Word2vec 核心思想与工作流程
Word2vec的目标是为词汇表中的每一个词,学习到一个能够代表其语义的向量。其核心思想基于分布假说(Distributional Hypothesis):一个词的意义是由它所在的上下文决定的。
工作流程
- 前提:拥有海量的文本数据(语料库)。
- 表示:为词汇表里的每个词随机初始化一个向量。
- 方法:通过一个“滑动窗口”来扫描整个文本。窗口中心的词是**中心词 (center word, c),窗口里周围的词是上下文词 (context words, o)**。
- 核心任务:模型的核心任务就是预测。具体来说,就是给定一个中心词 c,它周围出现上下文词 o 的概率有多大?这个概率是通过计算 c 和 o 两个词向量的相似度(通常是点积)来决定的。
- 学习过程:通过梯度下降算法,不断地、迭代地进行优化。如果模型预测对了,就调整向量让它们更相似;如果预测错了,就让它们互相远离。这个过程在整个语料库上重复亿万次后,最终的词向量就蕴含了丰富的语义信息。
Skip-gram 模型
这是Word2vec的一种主要架构,其任务是:给定中心词,预测其上下文词。例如,对于文本... problems turning into banking crises as ...,如果中心词是into,窗口大小为2,那么模型的任务就是给定into,去预测problems, turning, banking, crises这几个词。
2. Word2vec 的数学原理
Word2vec将上述思想转化为了一个可以被计算机优化求解的数学问题,其核心是定义一个**目标函数 (Objective Function)**。
似然函数
L(θ):首先,我们定义一个似然函数,它代表了“我们当前的这套词向量(参数θ),能多好地预测出我们语料库里真实的上下文关系?”。这个函数是把语料库中“在每一个位置上,成功预测出其所有真实上下文词”的概率全部乘起来。我们的目标是最大化这个似然函数。目标函数
J(θ):最大化似然函数在计算上非常困难。因此,通过取对数、取负号、取平均三个步骤,将其转化为一个等价的、更容易处理的平均负对数似然,也就是我们最终要优化的损失函数J(θ)。我们的新目标是最小化这个J(θ)。
概率的计算:Softmax函数
模型预测上下文词的概率 P(o|c) 是通过 Softmax 函数 计算的。其核心是利用点积来衡量词向量的相似度。
- 分子:计算中心词
c的向量v_c和目标上下文词o的向量u_o的点积,然后取指数exp(u_o^T v_c)。这个结果代表了这对词的匹配程度。 - 分母:计算中心词
c与词汇表中所有词的点积,取指数后求和∑ exp(u_w^T v_c)。这是一个归一化项,确保所有概率加起来为1。
计算瓶颈:这个分母的计算量极其巨大,因此Word2vec提出了负采样 (Negative Sampling) 和 分层Softmax (Hierarchical Softmax) 等优化算法来近似这个计算,从而大大提高了训练效率。
3. 学习方法:随机梯度下降 (SGD)
- 问题:标准的梯度下降(批量梯度下降)需要计算损失函数在整个数据集上的梯度,对于大型语料库来说,计算量大到不可行。
- 解决方案 (SGD):不再遍历所有数据,而是重复地从语料库中随机抽取一个样本(在Word2vec中就是一个“窗口”),然后只根据这一个样本来估算梯度,并立即更新模型参数。
- Mini-Batch SGD:这是目前深度学习中最常用的方法。它在纯粹的SGD(用1个样本)和批量梯度下降(用全部样本)之间取了个折中,每次使用一小批(mini-batch)数据(如32、64个样本)来计算梯度。这既保证了训练的稳定性,又能利用现代硬件的并行计算能力,实现最高效率。
Brainstorm Q&A: 语义、向量与空间
问:分布语义学 (Distributional Semantics) 和 指称语义学 (Denotational Semantics) 有什么区别?
答:
- 分布语义学:核心思想是“观其伴,知其义”。词的意义由其上下文决定。这是现代NLP词向量的理论基石,是数据驱动的、经验主义的,擅长捕捉词汇间的相似性和关联性。
- 指称语义学:源于逻辑学,认为词的意义在于其与外部世界的指代关系。它关注的是句子的真值,是逻辑驱动的、理性主义的,擅长进行精确的逻辑推理。
问:高维空间中,一个点可以离各种各样的事物都很近,怎么理解?
答: 这是高维空间一个非常反直觉的特性,也是“维度灾难”的一种体现。一个点可以与许多其他点都保持“相对较近”的距离,即使这些点彼此之间相距甚远。这是因为“近”的贡献可以来自不同的维度子集。
- 一个比喻:一个“多面手”(中心点),他在“编程”维度上与“程序员”近,在“烹饪”维度上与“厨师”近。虽然他与这两位专家都有一定的相似性,但“程序员”和“厨师”这两个点本身在空间中是完全不相关的。
问:也就是说一个词向量可以与其多义的近义词相近?
答: 完全正确!这正是对静态词向量(如Word2Vec)核心特性与局限性的绝佳概括。一个多义词(如“bank”)的静态词向量,是在其所有上下文(金融、地理等)的“平均化”或“混合”中训练出来的,因此它的向量会同时与金融相关的词(如“money”)和地理相关的词(如“river”)都保持较近的距离。
- 局限:这导致静态词向量无法解决词义消歧的问题。
- 演进:语境化词向量(如BERT, GPT)解决了这个问题。它会根据词所在的具体语境,动态地生成一个只代表当前含义的、完全不同的向量。
整理自: WordNet:历久弥新, 课程计划:词向量与神经网络, 参数矩阵、梯度下降、秩