Word2Vec详解: CBOW Skip-gram和负采样

Word2Vec: CBOW & Skip-gram

如果是拿一个词语的上下文作为输入,来预测这个词语本身,则是 CBOW 模型。

而如果是用一个词语作为输入,来预测它周围的上下文,那这个模型叫做 Skip-gram 模型。

CBOW 模型

连续词袋模型(Continuous Bag of Words, CBOW)是一种常用的词嵌入模型,它与跳元模型有一些相似之处,但也有关键区别。连续词袋模型的主要假设是,中心词是基于其在文本序列中的周围上下文词生成的。例如,在文本序列 “the”, “man”, “loves”, “his”, “son” 中,如果我们选择 “loves” 作为中心词,并将上下文窗口设置为2,连续词袋模型会考虑基于上下文词 “the”, “man”, “his”, “son” 生成中心词 “loves” 的条件概率,即:

在这里插入图片描述

Skip-gram模型

跳元模型(Skip-gram model)是一种常用的词嵌入模型,它的基本假设是一个词可以用来生成其周围的单词。以文本序列 “the”, “man”, “loves”, “his”, “son” 为例,如果我们选择 “loves” 作为中心词,并将上下文窗口设置为2,跳元模型会考虑生成上下文词 “the”, “man”, “his”, “son” 的条件概率,即:
在这里插入图片描述

在跳元模型中,我们通常假设上下文词是在给定中心词的情况下独立生成的,这被称为条件独立性。因此,上述条件概率可以被重写为:
在这里插入图片描述

这意味着,我们可以分别计算每个上下文词在给定中心词的情况下的概率,然后将这些概率相乘,得到的结果就是所有上下文词在给定中心词的情况下的联合概率。这是跳元模型的基本工作原理。
在这里插入图片描述

跳元模型考虑了在给定中心词的情况下生成周围上下文词的条件概率

两种模型的网络结构

参考:
https://cs224d.stanford.edu/lecture_notes/notes1.pdf
Word2Vec 模型本质上可以就是一个简单的神经网络,它包含一个输入层、一个隐藏层,以及一个输出层。在这个网络中,并没有激活函数应用于隐藏层的节点,而是直接将输入传递到隐藏层,然后再传递到输出层。这种结构可以被视为全连接(fully connected)或密集(dense)层的网络,因为每个输入节点都与隐藏层的每个节点相连,隐藏层的每个节点又都与输出层的每个节点相连。

在 Word2Vec 中,输入层和输出层的节点数等于词汇表的大小(用 one-hot 编码表示),而隐藏层的节点数等于我们想要学习的嵌入向量的维度。尽管结构上类似于全连接网络,但 Word2Vec 的目标并不是执行传统的分类或回归任务,而是学习词的向量表示,这些向量可以捕捉词之间的语义信息。词嵌入(embeddings)是通过两个权重矩阵来学习的:输入矩阵(通常称为W)和输出矩阵(通常称为W’)。这两个矩阵的维度分别是VN和NV,其中V是词汇表的大小,而N是嵌入向量的维度。

在训练过程中,每个单词都会通过它的索引与输入矩阵W相对应,这样每个单词就会有一个与之对应的嵌入向量。这个向量就是输入矩阵W中的一行。当模型完成训练后,这个输入矩阵W就可以作为词嵌入矩阵使用。
在这里插入图片描述
在这里插入图片描述

负采样

在原始的Word2Vec模型中,我们使用softmax函数来计算目标词的概率。这需要对词汇表中的每个词进行权重更新,这在大词汇表中是非常耗时的。而负采样是一种优化训练Word2Vec模型的方法。它的核心思想是,对于每个训练样本,我们不仅考虑正例(目标词),还随机选取一小部分的负例(即非目标词)进行更新权重,而不是词汇表中的所有单词。如此一来,我们将多分类转变了一系列二分类问题。因而可以只更新部分权重。

具体来讲:

  1. 在训练神经网络时,我们通常使用梯度下降算法来更新权重。在Word2Vec中,权重实际上是单词的向量表示。在不使用负采样的情况下,softmax函数要求我们更新所有单词的向量,因为它需要计算整个词汇表上的概率分布。然而,当使用负采样时,我们改为优化一个简化的问题,即二分类问题,我们只关心目标词(正在这里插入图片描述
    例)和少量随机选取的非目标词(负例)的概率。
  2. 在负采样中,对于每个训练样本(目标词和上下文词对),我们首先更新目标词的向量表示,使得它更可能与上下文词一起出现。接着,我们从词汇表中随机选择K个负例,并更新这些负例的向量表示,使得它们与上下文词一起出现的概率降低。这意味着,对于每个训练样本,我们只更新1个正例和K个负例的向量,而不是整个词汇表的向量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/582332.shtml

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

相关文章

简单实现一个自定义loader

webpack定义的loader需要遵循单一功能原则,也就是一个loader只实现一个功能。在实现开发中,我们会直接使用诸如蓝湖等生成的样式,比如 button{background: rgb(255, 85, 46); }但为了考虑主题换肤,我们实现的想要的可能是 butto…

在用Vite开发时静态图片放哪里,才能保证显示,不出现找不到资源

在用Vite开发时静态图片放哪里 在用Vite开发时静态图片(资源)放哪里呢 ? 如果你想直接全部显示的那么请你把静态资源放到public目录下面,这样你一打包所有的静态资源都会放到打包根目录下。但是此时你在项目中引用的地址一定要是…

OM6621选型指南详细对比应用蓝牙遥控智能穿戴游戏手柄

昂瑞微蓝牙OM6621系列对比选型指南 OM6621EM和OM6621ED性能特点 超低功耗蓝牙SOC精简BLE5.1协议栈主频64Mhz,40KB RAM集成红外线收发电路主要应用在语音遥控、鼠标、水表等 功能特点 功耗:1秒连接平均电流:11uA峰值电流:TX0dBm…

Vue 监听状态 watch 与监听状态 watchEffect

监听状态 watch watch 函数用于监听响应式数据的变化。 使用 watch 函数监听基于 ref 创建的响应式数据 (基本数据类型)。 import { ref, watch } from "vue" export default {setup() {const text ref("")watch(text, (current, previous) > {conso…

javascript2

文章目录 一、 内置对象1) 对象2) Array 数组1. 创建2. 特点3. 属性和方法4. 二维数组 3)String 对象1. 创建2. 特点3. 属性4. 方法 4) Math 对象1. 定义2. 属性3. 方法 5)日期对象1. 创建日期对象2. 日期对象方法 1. 创建日期对象…

结构体--高考数组

高考数组 高考数组 题意 求给定N组数组的平均值并输出最大的两个 思路 先求出其平均值再结构体进行比较,输出前两个最大值 算法一:结构体 实现步骤 定义结构体,进行平均值的比较,给数据定义下标,sort进行递增排序&a…

c++ 重写 重构 重载

特性重写(Override)重构(Refactoring)重载(Overloading)定义在派生类中提供与基类同名同参数的新方法实现改进代码内部结构但不改变外在行为在同一作用域内创建多个参数列表不同的同名函数目的实现多态&…

(2)llvm解析器和抽象语法树

解析器的输出是抽象语法树 对于数字字面量,创造了一个实例,并捕捉 变量捕捉函数名;二元表达式捕捉运算符;函数调用捕捉函数名和函数调用参数 函数原型和函数定义 构建语法树 getNextToken会从输入流里拿一个token,Cur…

克魔助手:方便查看iPhone应用实时日志和奔溃日志工具

查看ios app运行日志 摘要 本文介绍了一款名为克魔助手的iOS应用日志查看工具,该工具可以方便地查看iPhone设备上应用和系统运行时的实时日志和奔溃日志。同时还提供了奔溃日志分析查看模块,可以对苹果奔溃日志进行符号化、格式化和分析,极…

MSVC++ 编译 module std

环境:windows 10 19045.xxxx 只安装了MSVC C 工具链和一个版本的SDK,SDK版本建议选一个和本机系统匹配的。 cd %USERPROFILE%\source\repos\STLModules mkdir x86 mkdir x64 打开“x86 Native Tools Command Prompt for VS 2022”控制台,…

【mac-m1 docker 安装upload-labs靶场】

1.搜索upload-labs docker search upload-labs 2.下载upload-labs docker pull c0ny1/upload-labs 3.启动 docker run -it -d --name uploadlabs -p 80:80 c0ny1/upload-labs --platform linux/amd64 4.访问127.0.0.1:80

java设计模式学习之【备忘录模式】

文章目录 引言备忘录模式简介定义与用途实现方式 使用场景优势与劣势在Spring框架中的应用备忘录示例代码地址 引言 想象一下,你正在编辑一篇重要的文档,突然你意识到最近的一些更改实际上破坏了文档的结构。幸运的是,你的文本编辑器允许你撤…

哈希桶的模拟实现【C++】

文章目录 哈希冲突解决闭散列 (开放定址法)开散列 (链地址法、哈希桶)开散列实现(哈希桶)哈希表的结构InsertFindErase 哈希冲突解决 闭散列 (开放定址法) 发生哈希冲突时&#xf…

FreeBSD下安装Jenkins(软件测试集成工具)记录

简要介绍Jenkins 简而言之,Jenkins 是领先的开源自动化服务器。它使用 Java 构建,提供了 1,800 多个插件来支持几乎任何事情的自动化,因此人类可以将时间花在机器无法完成的事情上。 主要目的: 持续、自动地构建/测试软件项目。…

【MyBatis-Plus】进阶之乐观锁、悲观锁逻辑删除分页和查询构造器的使用

目录 一、乐观锁、悲观锁 1、什么是乐观锁和悲观锁 ①乐观锁(Optimistic Locking): ②悲观锁(Pessimistic Locking): ③实现方式 2、乐观锁和悲观锁的区别 ①乐观锁(Optimistic Locking) ②悲观锁&…

MySQL ORDER BY(排序) 语句-读取的数据进行排序

MySQL ORDER BY(排序) 语句 我们知道从 MySQL 表中使用 SELECT 语句来读取数据。 如果我们需要对读取的数据进行排序,我们就可以使用 MySQL 的 ORDER BY 子句来设定你想按哪个字段哪种方式来进行排序,再返回搜索结果。 MySQL ORDER BY(排序) 语句可以…

Educational Codeforces Round 124 (Rated for Div. 2) (D 边缘点bfs推答案 C贪心)

A&#xff1a;第一轮剩下的都是奇数&#xff0c;后面全是奇数了&#xff0c;说明两个数相加永远都是偶数&#xff0c;最后答案是最大的那个奇数 #include<bits/stdc.h> using namespace std; const int N 1e610,mod998244353; #define int long long typedef long long…

【CSAPP】探究BombLab奥秘:Phase_2的解密与实战

&#x1f4cb; 前言 ​&#x1f308;个人主页&#xff1a;Sarapines Programmer&#x1f525; 系列专栏&#xff1a;《斯坦福大学之CSAPP》⏰诗赋清音&#xff1a;桃花灼灼春风暖&#xff0c;心随乐曲扬徐徐。 苦尽甘来梦未阑&#xff0c;岁月长河任舟游。 ​ &#x1f389;欢迎…

消息队列基础知识

学一点&#xff0c;整一点&#xff0c;基本都是综合别人的&#xff0c;弄成我能理解的内容 https://blog.csdn.net/BenJamin_Blue/article/details/125946812 https://blog.csdn.net/qq_46119575/article/details/129794304 &#x1f4cc;导航小助手&#x1f4cc; 生产者-消费者…