基于GloVe的词向量生成算法
字数 1201 2025-10-27 19:14:05
基于GloVe的词向量生成算法
我将为您详细讲解GloVe(Global Vectors for Word Embeddings)算法,这是一种基于全局词共现统计的词向量生成方法。
题目描述
GloVe是一种无监督学习算法,用于从语料库中生成词的分布式表示(词向量)。与Word2Vec基于局部上下文窗口的方法不同,GloVe利用全局词-词共现矩阵,通过矩阵分解和加权最小二乘回归来学习词向量。其核心思想是:词向量的点积应尽可能接近词对共现次数的对数。
解题过程详解
第一步:理解共现矩阵
-
构建共现矩阵:
- 给定语料库,首先定义一个大小为|V|×|V|的矩阵X(V是词汇表)
- 每个元素X_ij表示词j在词i的上下文窗口中出现的次数(例如窗口大小为5)
- 例如:句子"the cat sits on the mat"中,若窗口为2,"cat"的上下文包含"the"和"sits",则对应矩阵位置计数增加
-
矩阵特点:
- 对称矩阵(X_ij ≈ X_ji)
- 对角线元素表示词自身的共现(通常无意义,可忽略)
- 矩阵稀疏但包含全局统计信息
第二步:建立损失函数基础
-
核心观察:
- 对于任意三个词i、j、k,共现概率比P_ij/P_ik能反映词间语义关系
- 例如:"ice"与"solid"的共现概率比"ice"与"gas"的比值应较大
-
向量约束条件:
- 希望词向量满足:w_i · w_j = log(X_ij)
- 但直接拟合会忽略词频差异,需引入偏置项:w_i · w_j + b_i + b_j = log(X_ij)
第三步:设计加权损失函数
-
损失函数形式:
J = Σ_{i,j=1}^{|V|} f(X_ij) (w_i · w_j + b_i + b_j - log(X_ij))^2 -
权重函数f(X_ij)的作用:
- 避免高频词主导训练:对非常高频的词(如"the")进行权重抑制
- 经典权重函数:
f(x) = (x/x_max)^α if x < x_max (通常α=0.75) f(x) = 1 otherwise - 当x较小时权重小于1,防止低频噪声过度影响
第四步:优化求解
-
训练目标:
- 最小化加权平方损失函数
- 使用随机梯度下降(SGD)或自适应优化算法(如AdaGrad)
-
训练细节:
- 初始化词向量和偏置项(通常用高斯分布初始化)
- 迭代更新参数直到收敛
- 最终得到每个词的向量表示w_i
第五步:处理实践细节
-
上下文窗口:
- 使用衰减权重:距离中心词越远的上下文词权重越低
- 例如:距离为d的词权重为1/d
-
特殊词处理:
- 罕见词过滤(出现次数低于阈值)
- 停用词可通过权重函数自然抑制
-
最终向量:
- 通常使用w_i + w̃_i作为最终词向量(w̃_i是上下文向量)
- 实验表明求和能提升性能
算法优势分析
- 兼顾全局与局部:既利用全局统计信息,又保留Word2Vec的线性类比关系
- 训练效率高:共现矩阵可预先计算,比Word2Vec的负采样更快
- 可扩展性强:适合处理大规模语料库
通过以上步骤,GloVe能生成高质量的词向量,在词类比、相似度计算等任务中表现出色。其数学基础扎实,是词向量学习的重要里程碑。