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://www.pswp.cn/pingmian/96321.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/96321.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Netty从0到1系列之Netty逻辑架构【上】

文章目录一、Netty逻辑架构【上】1.1 网络通信层1.1.1 BootStrap & ServerBootStrap1. ✅核心方法链与配置2. ✅ 架构与流程3. ✅ 底层实现与原理分析4. ✅ 实践经验与总结1.1.2 Channel1.2 事件调度层1.2.1 事件调度层概述1.2.2 EventLoop【事件循环】1.2.3 EventLoopGrou…

Spring Cloud 高频面试题详解(含代码示例与深度解析)

文章目录Spring Cloud 高频面试题详解(含代码示例与深度解析)1. 什么是 Spring Cloud?它与 Spring Boot 有什么关系?2. 服务发现:Eureka 和 Nacos 的区别与选型?Eureka 示例与原理Eureka vs Nacos 对比表3.…

Ascend310B重构驱动run包

在Atlas 200I AI加速模块(Ascend310B)移植过程中如需要将自己编译的Image、dt.img及内核模块打包到启动镜像包中需要对"Ascend-hdk-310b-npu-driver-soc_<version>_linux-aarch64.run"(下面统称驱动run包)进行重构。下面将介绍如何重构run包。 重构驱动run包需…

Leecode hot100 - 287. 寻找重复数

题目描述 287. 寻找重复数 - 力扣&#xff08;LeetCode&#xff09; 定一个包含 n 1 个整数的数组 nums &#xff0c;其数字都在 [1, n] 范围内&#xff08;包括 1 和 n&#xff09;&#xff0c;可知至少存在一个重复的整数。 假设 nums 只有 一个重复的整数 &#xff0c;返…

机器人控制器开发(驱动层——奥比大白相机适配)

文章总览 编译OrbbecSDK_ROS2的代码 执行命令 colcon buildros2 launch orbbec_camera dabai.launch.py问题1&#xff1a; 运行时报错&#xff1a; [component_container-1] [ERROR] [1757153916.450795107] [camera.camera_container]: Failed to load library: Could not…

`vcpkg` 微软开源的 C/C++ 包管理工具的使用和安装使用spdlog

vcpkg 是 微软开源的 C/C 包管理工具&#xff0c;类似于 Python 的 pip、Node.js 的 npm、Rust 的 cargo。 它的主要作用是&#xff1a;帮助你快速下载、编译、安装和管理 C/C 第三方库&#xff0c;并自动配置到你的项目&#xff08;比如 Visual Studio、CMake、MSBuild&#x…

Mysql 幻读详解

我们来详细地聊一聊 MySQL InnoDB 中的“幻读”&#xff08;Phantom Read&#xff09;问题。这是一个在数据库事务隔离中非常核心且有时令人困惑的概念。 我会从定义、例子、原因以及解决方案几个方面来彻底讲清楚。 1. 什么是幻读&#xff1f; 官方定义&#xff1a;幻读指的…

如何生成 GitHub Token(用于 Hexo 部署):保姆级教程+避坑指南

如何生成 GitHub Token&#xff08;用于 Hexo 部署&#xff09;&#xff1a;保姆级教程避坑指南 前置说明&#xff1a;为什么需要 GitHub Token&#xff1f; 在使用 Hexo 部署博客到 GitHub Pages 时&#xff0c;你可能会遇到「密码验证失败」或「需要双重验证」的问题——这…

常用加密算法之 AES 简介及应用

相关系列文章 常用加密算法之 SM4 简介及应用常用加密算法之 RSA 简介及应用 引言 AES&#xff08;Advanced Encryption Standard&#xff0c;高级加密标准&#xff09;是一种​​广泛使用的对称分组加密算法​​&#xff0c;它使用相同的密钥进行加密和解密操作&#xff0c…

Java面试问题记录(一)

一、Java 核心基础与进阶1、我们知道 Java 中存在 “值传递” 和 “引用传递” 的说法&#xff0c;你能结合具体例子&#xff0c;说明 Java 到底是值传递还是引用传递吗&#xff1f;这背后涉及到 JVM 中哪些内存区域的交互&#xff1f;Java中只有值传递&#xff0c;不存在引用传…

Redis 主从复制、哨兵与 Cluster 集群部署

文章摘要 本文基于 VMware 虚拟机环境&#xff0c;详细讲解 Redis 高可用架构的核心组件与部署流程&#xff0c;涵盖三大核心模块&#xff1a;Redis 主从复制&#xff08;实现数据备份与读写分离&#xff09;、Redis 哨兵&#xff08;基于主从复制实现故障自动转移&#xff0c;…

ElementUI 中 validateField 对部分表单字段数组进行校验时多次回调问题

目录 方案一&#xff1a;循环调用 Promise.all 合并结果 方案二&#xff1a;直接传入数组字段 总结 在实际业务中&#xff0c;我们有时只需要对表单的部分字段进行校验。ElementUI 提供的 validateField 方法支持单个字段&#xff0c;也支持字段数组&#xff0c;但在使用时…

Visual Studio 2026 震撼发布!AI 智能编程时代正式来临

Visual Studio 2026 震撼发布&#xff01;AI 智能编程时代正式来临 Visual Studio 2026 Insider图标 开发者们的开发环境即将迎来前所未有的智能革命&#xff0c;微软用Visual Studio 2026 重新定义了编码体验。 2025年9月10日&#xff0c;微软正式推出了Visual Studio 2026 In…

Gamma AI:高效制作PPT的智能生成工具

你有没有过这种崩溃时刻&#xff1f;领导让你下午交一份产品介绍 PPT&#xff0c;你打开模板网站翻了半小时没找到合适的&#xff0c;好不容易选了个模板&#xff0c;又得手动调整文字间距、搭配图片&#xff0c;光是把数据做成图表就花了一小时&#xff0c;最后赶出来的 PPT 还…

Python副业新玩法:用Flask搭小程序后端,躺赚被动收入的秘密

凌晨1点&#xff0c;林浩合上电脑时&#xff0c;手机弹出一条微信消息——是上周帮一家社区水果店搭的小程序后端&#xff0c;商家发来了当月的服务费到账提醒。他靠在椅背上笑了&#xff1a;这是这个月第8笔“睡后收入”&#xff0c;加起来刚好覆盖了下个月的房贷。半年前&…

基于PyQt5和阿里云TTS的语音合成应用开发实战[附源码】

项目概述 本文将详细介绍一个基于PyQt5图形界面框架和阿里云TTS(Text-to-Speech)服务的语音合成桌面应用程序的开发过程。该应用提供了完整的文字转语音功能,包括多音色选择、参数调节、实时试听、语速调节和音频下载等特性。 技术栈 前端界面: PyQt5 语音合成: 阿里云TTS服…

基于esp32c3 rust embassy 的墨水屏程序

EPD Reader 基于ESP32-C3的电子墨水屏阅读器&#xff0c;支持ap 配网、sntp 时间同步、txt阅读、天气预报、显示节假日信息、农历显示、自动休眠、web配置等功能。这是在另一个项目 一个rust embassy esp32c3 的练习项目-CSDN博客的基础上修改的 。 界面比较粗糙&#xff0c;以…

Spring 单例测试及线程安全

创建一个账户类 package com.duanhw.demo22.account;import org.springframework.beans.factory.annotation.Value;//Service public class AccountService {Value("1000")private Integer balance;//存款public void deposit(Integer amount){int newbalance balanc…

【vue】组件宽度调整失效后,调整的方法

父容器布局限制 若组件放置在栅格布局&#xff08;如display: grid&#xff09;或弹性容器中&#xff0c;父元素的宽度限制可能导致子组件宽度失效。解决方案是为父容器设置明确的宽度&#xff0c;或通过百分比布局实现自适应16。例如&#xff1a; <div style"width:…

Java 在Word 文档中插入页眉页脚:一份实用的编程指南

在现代企业应用中&#xff0c;Java 开发者经常需要处理各种文档操作&#xff0c;其中对 Word 文档的自动化处理尤为常见。无论是生成报告、合同还是其他商业文档&#xff0c;页眉页脚作为文档结构的重要组成部分&#xff0c;承载着公司 Logo、页码、版权信息等关键内容。手动添…