当前位置: 首页 > article >正文

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=WTx

    • 例如:若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(WTh)

作用:通过矩阵运算将高维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=1n(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库)

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


http://www.kler.cn/a/578943.html

相关文章:

  • Guava Cache 中LocalCache的分段锁实现
  • UV,纹理,材质,对象
  • electron的通信方式(三种)
  • 健康养生:为生活注入活力
  • 深度链接技术解析:openinstall如何通过场景还原优化用户体验?
  • 【已解决】error setting certificate verify locations
  • 用套接字在网络中传送对象的时候为什么需要序列化?
  • Mac安装jdk教程
  • 深入探讨 Docker 层次结构及其备份策略20250309
  • 《基于Selenium的网页聊天室自动化测试实战报告》
  • android flow中collect和collectLatest的区别
  • [Kubernetes] 7控制平面组件
  • Django ORM 中的 RelatedManager 特殊方法
  • TypeScript系列06-模块系统与命名空间
  • neo4j随笔-将csv文件导入知识图谱
  • 【Java代码审计 | 第八篇】文件操作漏洞成因及防范
  • IntelliJ IDEA 2021版创建springboot项目的五种方式
  • javaEE初阶————多线程进阶(1)
  • 大整数加法(信息学奥赛一本通-1168)
  • NoSQL数据库系统Cassandra学习笔记