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=40.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在此基础上引入更深层的语境建模,进一步提升了语义表示能力。

相关推荐
冷小鱼2 分钟前
TensorFlow 2.21 进阶实战:从训练优化到生产部署的完整指南
人工智能·pytorch·python·tensorflow
GensAI3 分钟前
大模型语音机器人技术深析:从ASR/TTS到方言适配与业务闭环的架构实现
人工智能·语音识别
terry6005 分钟前
5G视频短信服务商选型全攻略:通道资源、架构能力与成本评估2026最新标准
大数据·人工智能·5g·json·asp.net·信息与通信·数据库架构
IT_陈寒6 分钟前
SpringBoot自动配置这么智能,为啥我写的Bean注入不了?
前端·人工智能·后端
青稞社区.7 分钟前
从 LLM 的局限到世界模型:LeWorldModel 为何更接近 AI 的第一性原理?
人工智能
致Great9 分钟前
开源 agentcanvas:读 Logfire 日志,一键可视化整个智能体工作流
人工智能·agent
hai31524754315 分钟前
基于池化隔离的Linux内核原生hrtimer子系统的补充说明
人工智能
2601_9583529015 分钟前
嵌入式对讲收音降噪难题根治方案|AP-0316语音模组原理、实测与落地教程
人工智能·嵌入式硬件·语音识别·ai降噪·回音消除·音频处理模块
大黄说说17 分钟前
码云数智门店系统赋能汽车服务门店全新发展
大数据·人工智能
lichong95119 分钟前
让AI自己用电脑!Cua:后台操作鼠标键盘,Mac/Windows/Linux全支持
人工智能·macos·ai·计算机外设·agent·提示词