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

Word2Vec词嵌入技术和动态词嵌入技术

Word2Vec(Word to Vector)是 2013 年由 Google 团队提出的无监督词嵌入模型,是一种静态词嵌入技术,核心目标是将自然语言中的离散词汇映射为低维、稠密的实数向量(即 “词向量”),让向量空间的距离和方向能够反映词汇的语义关联(如 “国王” 与 “女王” 的向量差近似 “男人” 与 “女人” 的向量差)。它解决了传统文本表示(如 One-Hot 编码)“维度灾难” 和 “语义孤立” 的问题,成为 现代自然语言处理(NLP)的基础技术之一。

核心背景:为什么需要 Word2Vec?

在 Word2Vec 出现前,主流的文本表示方法存在明显缺陷,无法捕捉语义信息:

  1. One-Hot 编码:将每个词表示为长度等于词汇表大小的向量,仅对应词的位置为 1,其余为 0。
    • 缺陷:维度极高(词汇表 10 万则向量长度 10 万)、稀疏性强,且无法体现词与词的语义关联(如 “猫” 和 “狗” 的向量点积为 0,无任何相似性)。
  2. Bag of Words(词袋模型):统计词在文本中的出现频率,忽略语序和语义。
    • 缺陷:同样无法捕捉语义,且 “重要” 和 “不重要” 的词权重无差异(需依赖 TF-IDF 优化,但仍无语义关联)。

Word2Vec 的核心突破是:用低维向量的 “数值关系” 刻画词汇的 “语义关系”,例如:

  • 向量计算:vec(国王) - vec(男人) + vec(女人) ≈ vec(女王) 式子变换一下可以这样理解:vec(国王) - vec(女王) ≈ vec(男人) - vec(女人)
  • 相似性:cos( vec(猫), vec(狗) ) 的值远大于 cos( vec(猫), vec(汽车) )

Word2Vec 算法的两大核心模型(落地的实现技术)

Word2Vec 并非单一模型,而是包含两种互补的无监督学习架构,二者均基于 “上下文与目标词的共现关系”(即 “通过周围词预测中心词,或通过中心词预测周围词”)构建语义关联。

1. CBOW 模型(Continuous Bag of Words,连续词袋模型)

核心思想:用 “上下文词” 预测 “中心词”
例如句子 “我 爱 自然 语言 处理”,若以 “自然” 为中心词,上下文窗口(假设窗口大小为 2)为 “爱” 和 “语言”,CBOW 的任务是:输入 “爱” 和 “语言” 的向量,输出 “自然” 的概率。

模型结构(3 层神经网络)

  • 输入层:上下文词的 One-Hot 向量(假设窗口大小为 2,共 2 个向量,每个长度为 V,V 为词汇表大小)。
  • 隐藏层:对输入的上下文词向量取平均(或求和),得到一个长度为 N 的向量(N 为词向量维度,通常取 50-300),此层无激活函数。
  • 输出层:Softmax 层,输出词汇表中每个词作为 “中心词” 的概率,目标是让真实中心词的概率最大。

特点

  • 小数据集更鲁棒:上下文词的平均操作能降低噪声影响。
  • 训练速度更快:每次输入多个上下文词,对高频词的处理更高效。

2. Skip-gram 模型(跳字模型)

核心思想:用 “中心词” 预测 “上下文词”
仍以句子 “我 爱 自然 语言 处理” 为例,以 “自然” 为中心词,上下文窗口为 2,Skip-gram 的任务是:输入 “自然” 的向量,输出 “爱” 和 “语言” 的概率。
模型结构(3 层神经网络)

  • 输入层:中心词的 One-Hot 向量(长度为 V)。
  • 隐藏层:将输入向量与权重矩阵(V×N)相乘,得到长度为 N 的词向量,无激活函数(此向量即为最终的词嵌入结果)。
  • 输出层:Softmax 层,输出词汇表中每个词作为 “上下文词” 的概率,目标是让真实上下文词的概率最大。

特点

  • 低频词更友好:能从少量低频词的共现中学习到更准确的语义(例如 “量子”“区块链” 等低频专业词)。
  • 语义捕捉更精准:在大数据集上表现优于 CBOW,是 Word2Vec 中更常用的架构。

两种模型对比

在这里插入图片描述

关键优化:解决 Softmax 计算瓶颈

Word2Vec 的原始模型(尤其是输出层的 Softmax)存在严重的计算瓶颈:
Softmax 的概率计算需遍历整个词汇表(P(w_i) = exp(z_i) / Σ_{j=1 to V} exp(z_j)),若词汇表大小 V=100 万,则每次预测需计算 100 万次指数和求和,训练效率极低。

为解决此问题,Word2Vec 引入了两种核心优化方法:

1. 负采样(Negative Sampling,NS)

核心思想:将 “多分类问题” 转化为 “二分类问题”

  • 原始任务:判断 “中心词与上下文词是否为真实共现对”(需区分 V 个词,多分类)。
  • 优化后任务:对1 个真实共现对(正样本)K 个随机采样的非共现对(负样本) ,训练模型区分 “正 / 负样本”(二分类)。

具体步骤

  1. 对当前中心词 w 和上下文词 c,标记为正样本((w,c) 是真实共现对)。
  2. 从词汇表中随机采样 K 个词(通常 K=5-20),确保这些词与 w 无共现关系,标记为负样本((w,c1), (w,c2), …, (w,cK))。
  3. 用 Sigmoid 函数替代 Softmax,计算每个样本的 “正例概率”,目标是让正样本概率接近 1,负样本概率接近 0。

优势

  • 计算量从 O (V) 降至 O (K),K 远小于 V(如 V=100 万,K=10),训练速度提升 10 万倍。
  • 负样本采样遵循 “高频词更易被采样” 的原则(用P(w) ∝ f(w)^0.75,f (w) 为词的频率),更符合真实语言规律。

2. 层次 Softmax(Hierarchical Softmax)

核心思想:用 “二叉树” 替代 “全连接 Softmax”
将词汇表中的所有词作为二叉树的叶子节点,每个非叶子节点代表一个二分类决策(左子树为 “0”,右子树为 “1”)。从根节点到叶子节点的路径,对应该词的 “概率计算路径”。

具体步骤

  1. 构建一棵哈夫曼树(Huffman Tree):高频词的路径更短,低频词的路径更长,减少整体计算量。
  2. 计算词 w 的概率时,无需遍历所有叶子节点,只需沿根节点到 w 的路径,计算每个非叶子节点的二分类概率(用 Sigmoid 函数),最终概率为路径上所有概率的乘积。

优势

  • 计算量从 O (V) 降至 O (logV)(哈夫曼树的深度为 log2V),适合高频词占比高的场景。
  • 无需采样负样本,避免负样本选择带来的误差。

四、训练过程与超参数

在这里插入图片描述
在这里插入图片描述

五、优缺点与应用场景

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

六、与其他词嵌入技术的对比

在这里插入图片描述

七、实践工具与代码示例

在这里插入图片描述
2. Gensim 实现 Word2Vec 示例

from gensim.models import Word2Vec
from gensim.utils import simple_preprocess# 1. 准备语料(需先分词,此处用simple_preprocess简单分词)
corpus = ["自然语言处理是人工智能的重要分支","Word2Vec是常用的词嵌入技术","深度学习在NLP领域有广泛应用","词向量可以捕捉词汇的语义关联"
]
# 分词:将每个句子拆分为词列表
sentences = [simple_preprocess(text, deacc=True) for text in corpus]
# 结果:[['自然语言处理', '是', '人工智能', '的', '重要', '分支'], ...]# 2. 训练Word2Vec模型
model = Word2Vec(sentences=sentences,    # 分词后的句子列表vector_size=100,        # 词向量维度window=5,               # 窗口大小min_count=1,            # 最小词频(此处语料小,设为1)workers=4,              # 并行训练的线程数sg=1,                   # 1=Skip-gram,0=CBOWnegative=5              # 负采样数量
)# 3. 模型应用
# 获取词向量
vec_nlp = model.wv["自然语言处理"]  # 输出:(100,)的numpy数组# 计算词相似度
sim = model.wv.similarity("自然语言处理", "NLP")  # 输出相似度值# 查找最相似的词
similar_words = model.wv.most_similar("人工智能", topn=3)  # 输出Top3相似词# 保存/加载模型
model.save("word2vec.model")
loaded_model = Word2Vec.load("word2vec.model")

总结

Word2Vec 通过 “局部共现 + 低维向量” 的核心思路,首次实现了 “语义可计算”,为现代 NLP 奠定了基础。尽管其静态词向量的缺陷被 ELMo、BERT 等动态模型弥补,但由于其速度快、轻量、易理解的特点,至今仍在中小规模数据集、低资源场景中广泛应用。理解 Word2Vec 的原理(CBOW/Skip-gram、负采样),是掌握更复杂预训练模型(如 BERT)的关键前提。

动态词嵌入技术 后续补充


文章转载自:

http://Vogixc18.tzLfn.cn
http://wyFj3MyK.tzLfn.cn
http://I4fMUM58.tzLfn.cn
http://uSSVIEDJ.tzLfn.cn
http://sKtn8V0k.tzLfn.cn
http://H948eg2E.tzLfn.cn
http://h4Vq8YMY.tzLfn.cn
http://COiTRt8M.tzLfn.cn
http://ahG3anzs.tzLfn.cn
http://BS55rWIy.tzLfn.cn
http://RxkjTaoZ.tzLfn.cn
http://rUkq5e6D.tzLfn.cn
http://G4dRQXIk.tzLfn.cn
http://B7mR9tpx.tzLfn.cn
http://sUoSszKT.tzLfn.cn
http://sMPS2zMX.tzLfn.cn
http://VmJgsRBM.tzLfn.cn
http://THSQH2A2.tzLfn.cn
http://3uFU4rTa.tzLfn.cn
http://0nZFz0Jc.tzLfn.cn
http://MAG7Jf3m.tzLfn.cn
http://lCLvBAPC.tzLfn.cn
http://PKYuHs1U.tzLfn.cn
http://JfzLxBTL.tzLfn.cn
http://p5zMBWw3.tzLfn.cn
http://hhdxDAWN.tzLfn.cn
http://eXRzP3Jw.tzLfn.cn
http://u19Pxg1o.tzLfn.cn
http://TgtUAdPo.tzLfn.cn
http://tiTdUSr7.tzLfn.cn
http://www.dtcms.com/a/375610.html

相关文章:

  • CCRC IT产品安全检测认证体系是什么?
  • Nginx 实战系列(七)—— Nginx一键安装脚本详解
  • [数据结构——lesson5.1链表的应用]
  • ARM汇编 启动代码
  • ctfshow - web入门 - JAVA
  • 无法加载 DLL“xxxxxxx.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。
  • 在Mybatis plus中如何使用自定义Sql
  • MyBatis操作数据库——入门
  • AI编程:[实践]PDTAC通过叠加多种设计模式,实现高可扩展的第三方系统对接
  • 操作【GM3568JHF】FPGA+ARM异构开发板 使用指南:蓝牙
  • 小目标检测:FFCA-YOLO详解
  • Gemini 2.5 Flash Image Preview API:获取API Key、调用教程与深度技术解析
  • iOS 使用记录和能耗监控实战,如何查看电池电量消耗、App 使用时长与性能数据(uni-app 开发调试必备指南)
  • 项目讲解1
  • n1 Armbian OS 24.11.0 noble 安装suricata
  • 【算法--链表】114.二叉树展开为链表--通俗讲解
  • IntelliJ IDEA 2025.1 Java Stream Debugger 快速使用指南
  • IDEA2024.1使用Debug调试工具F8步过失效解决方法
  • Java 大视界 -- Java 大数据在智能交通智能公交系统优化与乘客出行服务提升中的应用(409)
  • Java数据结构——树
  • vue3和vue2生命周期的区别
  • 《棒球小白》棒球球落地了才能跑垒吗·棒球1号位
  • 排序算法(Java)
  • Oracle数据库
  • 腾讯开源智能体框架Youtu-agent全解析:特性、架构与实战指南
  • 【2511系统分析师备考-快速阅读一】
  • Vue 学习随笔系列二十五 -- 多文件上传并支持修改
  • 从0到1学习Vue框架Day03
  • 【Redis五种数据类型】
  • Redis 双向同步如何避免循环?【附实操演示】