Word2Vec向量化语句的计算原理

一、Word2Vec的核心理念

Word2Vec由Google团队于2013年提出,是一种通过无监督学习生成词向量的模型。其核心思想是 "相似的词拥有相似的上下文" ,通过上下文关系捕捉词汇的语义和语法特征。生成的向量具有低维(通常100-300维)、连续且稠密的特点,解决了传统One-Hot编码的高维稀疏和语义缺失问题。


二、向量化的核心步骤(以Skip-Gram模型为例)

示例句子

假设句子为:"The quick brown fox jumps over the lazy dog."

步骤1:分词与构建词汇表
  • 分词结果:["The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog"]
  • 词汇表(去除重复词):{"The":0, "quick":1, "brown":2, "fox":3, "jumps":4, "over":5, "lazy":6, "dog":7}

作用:将文本转化为可处理的离散符号,为后续向量化提供基础。


步骤2:定义上下文窗口
  • 设定窗口大小(window=2),即中心词前后各取2个词作为上下文。
  • 示例:中心词为"brown"时,上下文词为["The", "quick", "fox", "jumps"]

作用:限定模型学习的局部语境范围,平衡语义关联与计算复杂度。


步骤3:生成训练样本
  • 输入-输出对
    • ("brown" → "The"), ("brown" → "quick"), ("brown" → "fox"), ("brown" → "jumps")
    • 类似地为其他词生成样本。

作用:将文本转化为监督学习任务,目标是让模型通过中心词预测上下文词。


步骤4:构建神经网络
  1. 输入层:中心词的One-Hot编码

    • 词汇表大小V=8,"brown"的One-Hot向量为:[0,0,1,0,0,0,0,0]
  2. 隐藏层:权重矩阵W(维度V×N,N为向量维度,假设N=3)

    • 输入向量与W相乘得到隐藏层向量: h = W T ⋅ x h = W^T \cdot x h=WT⋅x

    • 例如:若W的某行为[0.1, -0.2, 0.3],则h=[0.1, -0.2, 0.3]

  3. 输出层:权重矩阵W'(维度N×V)

    • 计算上下文词的概率分布: p = softmax ( W ′ T ⋅ h ) p = \text{softmax}(W'^T \cdot h) p=softmax(W′T⋅h)

作用:通过矩阵运算将高维One-Hot编码压缩为低维稠密向量,并学习词与上下文的关系。


步骤5:训练与优化
  • 损失函数:交叉熵损失,衡量预测概率与真实分布的差异。
  • 反向传播:通过梯度下降调整W和W'的参数,使预测更准确。
  • 优化方法
    • 层次Softmax:通过哈夫曼树编码减少计算复杂度(从O(V)降到O(logV))。
    • 负采样:随机选取非上下文词作为负样本,加速训练。

作用:通过迭代优化,使语义相近的词在向量空间中距离更近(如"fox"和"dog"的向量余弦相似度较高)。


步骤6:获取词向量
  • 最终输出 :权重矩阵W的每一行对应一个词的向量。
    • 例如:"fox"的向量为W的第3行,可能是[0.4, -0.1, 0.2]

三、从词向量到句子向量

词向量生成后,需组合成句子向量。常用方法包括:

  1. 平均池化(Average Pooling)

    • 将句子中所有词向量取算术平均。
    • 示例:句子"The quick brown fox"的向量 = (vec(The)+vec(quick)+vec(brown)+vec(fox))/4
    • 优点 :简单高效;缺点:忽略词序和权重差异。
  2. TF-IDF加权平均

    • 计算每个词的TF-IDF值作为权重,加权求和。

    • 公式: Sentence Vector = ∑ i = 1 n ( TF-IDF ( w i ) ⋅ vec ( w i ) ) \text{Sentence Vector} = \sum_{i=1}^n (\text{TF-IDF}(w_i) \cdot \text{vec}(w_i)) Sentence Vector=i=1∑n(TF-IDF(wi)⋅vec(wi))

    • 优点:突出关键词的贡献。

  3. 深度学习组合

    • 使用RNN、LSTM等模型捕捉词序信息,生成更复杂的句子表示。

四、示例完整流程

假设训练后的词向量如下:

  • "The": [0.1, 0.2, 0.3]
  • "quick": [0.4, -0.1, 0.5]
  • "brown": [0.2, 0.3, -0.2]
  • "fox": [0.5, 0.0, 0.1]

句子向量计算(平均池化)
Sentence Vector = [ 0.1 + 0.4 + 0.2 + 0.5 , 0.2 + ( − 0.1 ) + 0.3 + 0.0 , 0.3 + 0.5 + ( − 0.2 ) + 0.1 ] 4 = [ 0.3 , 0.1 , 0.175 ] \text{Sentence Vector} = \frac{[0.1+0.4+0.2+0.5, 0.2+(-0.1)+0.3+0.0, 0.3+0.5+(-0.2)+0.1]}{4} = [0.3, 0.1, 0.175] Sentence Vector=4[0.1+0.4+0.2+0.5,0.2+(−0.1)+0.3+0.0,0.3+0.5+(−0.2)+0.1]=[0.3,0.1,0.175]


五、Word2Vec的优缺点

优点 缺点
低维稠密,避免维度灾难 无法处理未登录词(OOV)
捕捉语义相似性(如"king"-"queen"≈"man"-"woman") 忽略词序和全局语境(需依赖后续模型)
训练效率高(通过负采样优化) 句子向量过于简单(需结合其他方法)

六、应用场景

  1. 语义搜索:将查询词和文档转为向量,计算相似度。
  2. 推荐系统:通过用户行为生成向量,推荐相似商品。
  3. 文本分类:将句子向量输入分类器(如SVM)。

七、代码示例(使用Gensim库)

python 复制代码
from gensim.models import Word2Vec

# 训练数据
sentences = [["The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog"]]

# 训练模型(Skip-Gram架构)
model = Word2Vec(sentences, vector_size=100, window=2, sg=1, min_count=1)

# 获取词向量
vector_fox = model.wv["fox"]

# 计算句子向量(平均池化)
sentence_vector = sum(model.wv[word] for word in sentences[0]) / len(sentences[0])

总结

Word2Vec通过局部上下文关系将词映射为低维向量,再通过池化或加权生成句子表示。尽管存在局限性,但其高效性和语义捕捉能力使其成为NLP的基础工具之一。后续模型如BERT、ELMo在此基础上引入更深层的语境建模,进一步提升了语义表示能力。

相关推荐
LeeZhao@15 分钟前
【AGI】智谱开源2025:一场AI技术民主化的革命正在到来
人工智能·开源·aigc·语音识别·agi
个推技术20 分钟前
个推助力小米米家全场景智能生活体验再升级
人工智能
科技快报24 分钟前
中兴移动互联终端三剑齐发 AI、5G-A、WiFi7构建高效智能网络
网络·人工智能·5g
惊雲浅谈天25 分钟前
Self-Supervised Prompt Optimization
人工智能·prompt
树莓集团28 分钟前
海南自贸港的数字先锋:树莓集团的战略布局解析
大数据·人工智能·物联网·百度·创业创新
阿正的梦工坊1 小时前
变分扩散模型 ELBO 重构推导详解
人工智能·深度学习·算法·机器学习
紫雾凌寒2 小时前
计算机视觉|Swin Transformer:视觉 Transformer 的新方向
人工智能·深度学习·计算机视觉·transformer·vit·swintransformer·视频理解
国货崛起2 小时前
宇树科技再落一子!天羿科技落地深圳,加速机器人创世纪
人工智能·科技·机器人
EasyCVR2 小时前
安防监控/视频集中存储EasyCVR视频汇聚平台如何配置AI智能分析平台的接入?
人工智能·音视频·webrtc·rtsp·gb28181