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

相关推荐
martindelophy7 分钟前
Codex Chrome 插件 + Timeline Studio:构建可编辑的 AI 视频剪辑 Agent 工作流
前端·人工智能·chrome
AIkk868 分钟前
大文件怎么压缩变小方便传输?本地压缩+云端方案对比测评
人工智能
薛定e的猫咪11 分钟前
(ICLR2026)MORL‑FB:从无奖励强化学习视角重新审视多目标强化学习
人工智能·深度学习·机器学习
行业研究员19 分钟前
腾讯云ADP:智能体平台封神榜
人工智能·microsoft·腾讯云·智能体·智能体平台·腾讯云adp
问天_观心24 分钟前
零基础在windows环境下的WSL使用llamafactory(一)
人工智能·windows·python·神经网络·语言模型·github·模型蒸馏
陈童学哦25 分钟前
DeepSeek Harness(Cordis):打破Agent框架黑盒,一切皆插件
人工智能
小睿科技27 分钟前
建筑AI睿兔大脑 | AI把工程成本测算从经验活变成算清楚的技术活
人工智能
正经教主29 分钟前
AI提示词工程(高阶)第19课:提示词评估与A/B测试
人工智能
SomeB1oody36 分钟前
【RustyML入门】5.0. 模型评估
开发语言·后端·机器学习·rust·教程
Zach_菠萝侠38 分钟前
【DeepSeek Harness 研究】进化方向1:动态路由 思考、设计与实现
人工智能·深度学习·deepseek