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个负例的向量,而不是整个词汇表的向量。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Gradio】1、Gradio 是什么

官网:https://www.gradio.app/ 一、Gradio 是什么 Gradio是一个用于创建机器学习模型交互式界面的 Python 库。通过Gradio,可以快速地为模型构建一个可视化的、易于使用的Web界面,无需编写任何Web前端代码。 Gradio 支持多种不同类型的输入…

八种常见顺序存储的算法

目录 1、线性枚举 1)问题描述 2)动图演示 3)示例说明 4)算法描述 5)源码详解 2、前缀和差分 1)问题描述 2)动图演示 3)样例分析 4)算法描述 5)源码…

编程笔记 GOLANG基础 003 Go语言开发环境搭建

编程笔记 GOLANG基础 003 Go语言开发环境搭建 一、安装VSCODE二、安装GO语言主程序 Golang的学习从开发环境搭建开始。本例记录的是WINDOWS平台下使用VSCODE做为开发工具的搭建过程。网上查到的资料都是以前版本的方法,新版Golang发生了一些变化。各位参数环境搭建时…

在linux服务器安装anaconda3

下载anaconda3 wget https://repo.anaconda.com/archive/Anaconda3-2023.09-0-Linux-x86_64.sh授权 chmod x Anaconda3-2023.09-0-Linux-x86_64.sh运行安装 ./Anaconda3-2023.09-0-Linux-x86_64.shenter yes 自定义路径,注意路径下的anaconda3文件夹不能已经存…

K8S结合Prometheus构建监控系统

一、Prometheus简介 Prometheus 是一个开源的系统监控和警报工具,用于收集、存储和查询时间序列数据。它专注于监控应用程序和基础设施的性能和状态,并提供丰富的查询语言和灵活的告警机制1、Prometheus基本介绍 数据模型:Prometheus 使用时…

H5向微信小程序发送信息(小程序web-view打开H5)

引入weixin-js-sdk npm i weixin-js-sdk 页面引入 // 引入wxjsimport wx from "weixin-js-sdk"; 点击触发方法 methods: {goweap(id){console.log(wx);// H5传递数据 (navigateBack)wx.miniProgram.navigateBack({delta: 1});wx.min…

如何购买腾讯云的服务器(详解腾讯云服务器购买流程)

腾讯云服务器购买流程直接在官方秒杀活动上购买比较划算,在云服务器CVM或轻量应用服务器页面自定义购买价格比较贵,但是自定义购买云服务器CPU内存带宽配置选择范围广,活动上购买只能选择固定的活动机,选择范围窄,但是…

Smartbi获工信部旗下赛迪网“2023行业信息技术应用创新产品”奖

近日,由工信部旗下的赛迪网、《数字经济》杂志共同主办的2023行业信息技术应用创新大会上,“信息技术应用创新成果名单”重磅揭晓,思迈特软件凭借“Smartbi 自然语言分析引擎”斩获“2023行业信息技术应用创新产品”大奖。 据了解&#xff0c…

图分割算法之贪心算法

1 贪心算法的思想 Linear Deterministic Greedy partitioning (LDG)考虑在分割的时候将邻居结点放置在一起,以减少切割边。它采用贪心算法将一个结点放置在包含其邻居最多的子图中,同时保证每个子图的结点负载均衡,整个算法流程图如下其中 C …

基于人工势场法的航线规划

MATLAB2016b可以运行 基于人工势场法的航线规划资源-CSDN文库

C# OpenCvSharp读取rtsp流录制mp4可分段保存

软件界面: 测试环境: VS2019 .NET Framework 4.7.2 OpencvSharp4.8.0 输入RTSP流地址即可拉取RTSP流,支持抓拍和录制RTSP流视频,且支持支持按固定时间保存,比如我想5分钟保存一个视频,设置保存间隔为30…

边缘检测——PidiNet网络训练自己数据集并优化推理测试(详细图文教程)

PiDiNet 是一种用于边缘检测的算法,它提出了一种简单、轻量级但有效的架构。PiDiNet 采用了新 颖的像素差卷积,将传统的边缘检测算子集成到现代 CNN 中流行的卷积运算中,以增强任务性能。 在 BSDS500、NYUD 和 Multicue 上进行了大量的实验…

联营商自述被坑惨,加盟库迪没有未来?

撰稿 | 多客 来源 | 贝多财经 近日,库迪联营商在社交平台不约而同发出了致库迪咖啡管理层的公开信,两封公开信可谓字字珠玑,没有一句废话,揭开了库迪咖啡在细节、运营、扩张、培训等方方面面的“背后真相”。 两封公开信 折射库…

大数据技术16:数据湖和湖仓一体

前言:近几年大数据概念很多,数据库和数据仓库还没搞清楚,就又出了数据湖,现在又开始流行湖仓一体。互联网公司拼命造高大上概念来忽略小白买单的能力还是可以的。 1、数据库 数据库是结构化信息或数据的有序集合,一般以…

24、Qt使用QCustomPlot

一、下载文件 进入官网,选择“Download”、QCustomPlot.tar.gz Qt Plotting Widget QCustomPlot - Download 二、创建项目 创建一个"Qt Widget Application"项目,基类选择“QMainWindow”,把刚才下载的压缩包里的“qcustomplot.…

给零基础朋友的编程课08 - 代码

给零基础朋友的编程课08 - 旋转、圆弧、初识模块化编程。_哔哩哔哩_bilibili Code: / // 彩色案例 艺术仿制品3 // /// 色表 // // 奶白 215,214,160 // 金黄 187,176,112 // 赭石 96,56,20 // 橙色 218,114,53// 项目设定 size(1000,1000); background(215,214,160); stroke…

vue3-13

token可以是后端api的访问依据,一般绝大多数时候,前端要访问后端的api,后端都要求前端请求需要携带一个有效的token,这个token用于用户的身份校验,通过了校验,后端才会向前端返回数据,进行相应的操作,如果没…

c++ / day01

1. 整理思维导图 2. 定义自己的命名空间myspace&#xff0c;并在myspace中定义一个字符串&#xff0c;实现求字符串大小的函数。 代码 #include <iostream>using namespace std;namespace myns {unsigned long long strlen(string s){return s.length();}}int main() {…

算法导论复习(七) 动态规划

动态规划一般用来求解最优化问题 设计一个动态规划算法一般有以下四步&#xff1a; 描述一个最优解的结构特征。递归地定义最优解的值。计算最优解的值&#xff0c;通常采用自底向上的方法。利用计算出的信息构造出一个最优解。 钢条切割问题 体现了动态规划的一个重要性质&a…

获取b站合集视频时长最新可用代码(2023.12.28)小白也能用

在网上搜索获取b站分集视频时长的代码&#xff0c;发现大部分都过时了 原链接&#xff1a;已过时代码链接 我对原代码做出了部分修改&#xff0c;以下代码于2023.12.28测试&#xff08;Edge浏览器&#xff09; javascript: (function() {var hour 0;var minute 0;var secon…