【word2vec】篇三:基于Negative Sampling 的 CBOW 模型和 Skip-gram 模型

NLP笔记之word2vec算法(1)--Skip-gram算法原理+数学推导 word2vec中提出了两种模型来进行word embedding,分别是Skip-gram 和 CBOW(continuous bag of words),这两种模型的概念在Word2vec之前就已经提出来了。 下面先对两种模型做个简要的介绍: Skip-gram : 给定中心词,预测窗口内的上下文的词 CBOW : 给定窗口内的上下文的词, 预测中心词 可以看出两种模型属于相反的一个关系,下面分别对两种模型进行相应的介绍。 阅读详情

系列文章:

  1. 【word2vec】篇一:理解词向量、CBOW与Skip-Gram等知识
  2. 【word2vec】篇二:基于Hierarchical Softmax的 CBOW 模型和 Skip-gram 模型
  3. 【word2vec】篇三:基于Negative Sampling 的 CBOW 模型和 Skip-gram 模型

Negative Sampling是这么一种求解word2vec模型的方法,它摒弃了霍夫曼树,采用了Negative Sampling(负采样)的方法来求解。

负采样算法

在CBOW模型中,已知词 w w w的上下文 c o n t e x t ( w ) context(w) context(w)需要预测 w w w。因此,对于给定的 c o n t e x t ( w ) context(w) context(w),词 w w w就是一个正样本,其它词就是负样本了。在Skip-gram中同样也存在正负样本问题。负样本那么多,该如何选取呢?这就是Negative Sampling(负采样)问题。也就是对于给定的词,如何生成其负样本子集 N E G ( w ) NEG(w) NEG(w)?

采用的基本要求是:词典 D D D中的词在语料 C C C中出现的次数有高有低,对于那些高频词,被选为负样本的概率就应该比较大,反之,对于那些低频词,其被选中的概率就应该比较小。本质上就是一个带权采样问题。

word2vec采用的负采样方法如下:

(2)首先将一段长度为1的线段分成长度不相等的 V V V份( V V V是词汇表的大小),每份对应词汇表的一个词。高频词对应长线段,低频词对应短线段。每个词的线段长度由下式决定:
l e n ( w ) = c o u n t ( w ) ∑ u ∈ D c o u n t ( u ) len(w) = \frac{count(w)}{\sum\limits_{u \in D} count(u)} len(w)=u∈D∑​count(u)count(w)​
在word2vec中,分子和分母都取了3/4次幂如下:
l e n ( w ) = c o u n t ( w ) 3 / 4 ∑ u ∈ D c o u n t ( u ) 3 / 4 len(w) = \frac{count(w)^{3/4}}{\sum\limits_{u \in D} count(u)^{3/4}} len(w)=u∈D∑​count(u)3/4count(w)3/4​
(2)在引入一个长度为1的线段进行等距划分成 M M M份,其中 M > > N M>>N M>>N,如下图所示:

在这里插入图片描述

如图所示,M份中的每一份都会落在某一个词对应的线段上。

(3)采样时,先从M个位置中采出neg个位置,再匹配到这neg个位置对应的词就是负词。如假设我们先采出 m 3 m_3 m3​,对应 I 2 I_2 I2​, I 2 I_2 I2​对应的词就是负词。

注:在word2vec中,M取值默认为 1 0 8 10^8 108。

CBOW模型

假设已经采样一个关于 w w w的非空负样本子集 N E G ( w ) NEG(w) NEG(w) ,且对于 w ~ ∈ D \tilde w \in D w~∈D,定义:
L w ( w ~ ) = { 1 , w ~ = w 0 , w ~ ≠ w L^w(\tilde w ) = \begin{cases} 1, \quad \tilde w = w \\ 0, \quad \tilde w \ne w \end{cases} Lw(w~)={1,w~=w0,w~​=w​
表示词 w ~ \tilde w w~的标签。即正样本的标签为1,负样本的标签为0。

对于一个给定的正样本 ( c o n t e x t ( w ) , w ) (context(w),w) (context(w),w),希望最大化:
g ( w ) = ∏ u ∈ w ∪ N E G ( w ) P ( u ∣ c o n t e x t ( w ) ) g(w) = \prod_{u \in {w} \cup NEG(w) }P(u|context(w)) g(w)=u∈w∪NEG(w)∏​P(u∣context(w))
其中:
P ( u ∣ c o n t e x t ( w ) ) = { σ ( x w T θ u ) L w ( u ) = 1 1 − σ ( x w T θ u ) L w ( u ) = 0 P(u|context(w)) = \begin{cases} \sigma(\mathbf x_w^T\theta^u) \qquad L^w( u )=1 \\ 1-\sigma(\mathbf x_w^T\theta^u) \quad L^w( u )=0 \end{cases} P(u∣context(w))={σ(xwT​θu)Lw(u)=11−σ(xwT​θu)Lw(u)=0​
写成整体表达式:
P ( u ∣ c o n t e x t ( w ) ) = [ σ ( x w T θ u ) ] L w ( u ) ⋅ [ 1 − σ ( x w T θ u ) ] 1 − L w ( u ) P(u|context(w)) = [\sigma(\mathbf x_w^T\theta^u)]^{L^w( u )} \cdot [1-\sigma(\mathbf x_w^T\theta^u)]^{1- L^w( u )} P(u∣context(w))=[σ(xwT​θu)]Lw(u)⋅[1−σ(xwT​θu)]1−Lw(u)
这里的 x w \mathbf x_w xw​是各词向量之和。 θ u \theta^u θu表示词对应的一个向量,是个待训练参数。

所以,最终 g ( w ) g(w) g(w)的表达式如下:
g ( w ) = σ ( x w T θ w ) ∏ u ∈ N E G ( w ) [ 1 − σ ( x w T θ u ) ] g(w) = \sigma(\mathbf x_w^T\theta^w) \prod_{u \in NEG(w) } [1-\sigma(\mathbf x_w^T\theta^u) ] g(w)=σ(xwT​θw)u∈NEG(w)∏​[1−σ(xwT​θu)]
其中 σ ( x w T θ w ) \sigma(\mathbf x_w^T\theta^w) σ(xwT​θw) 表示当上下文为 c o n t e c x t ( w ) contecxt(w) contecxt(w) 时,预测中心词为w的概率;而 σ ( x w T θ u ) u ∈ N E G ( w ) \sigma(\mathbf x_w^T\theta^u) u∈NEG(w) σ(xwT​θu)u∈NEG(w),预测中心词为u的概率。从形式上看,最大化 g ( w ) g(w) g(w), 相当于:增大正样本的概率同时降低负样本的概率。所以,给定预料库 C C C,函数:
G = ∏ w ∈ C g ( w ) G= \prod_{w \in C} g(w) G=w∈C∏​g(w)
可以作为整体的优化目标。为了计算方便可以对G 取对数。所以:
L = log ⁡ G = log ⁡ ∏ w ∈ C g ( w ) = ∑ w ∈ C log ⁡ g ( w ) = ∑ w ∈ C log ⁡ ∏ u ∈ w ∪ N E G ( w ) { [ σ ( x w T θ u ) ] L w ( u ) ⋅ [ 1 − σ ( x w T θ u ) ] 1 − L w ( u ) } = ∑ w ∈ C ∑ u ∈ w ∪ N E G ( w ) { L w ( u ) log ⁡ [ σ ( x w T θ u ) ] + ( 1 − L w ( u ) ) log ⁡ [ 1 − σ ( x w T θ u ) ] } = ∑ w ∈ C ∑ u ∈ w ∪ N E G ( w ) L ( w , u ) \begin{aligned} \mathcal L &= \log G = \log \prod_{w \in C} g(w) = \sum_{w \in C} \log g(w) \\ &=\sum_{w \in C} \log \prod_{u \in {w} \cup NEG(w) } \left\{ [\sigma(\mathbf x_w^T\theta^u)]^{L^w( u )} \cdot [1-\sigma(\mathbf x_w^T\theta^u)]^{1- L^w( u )} \right\} \\ & = \sum_{w \in C} \sum_{u \in {w} \cup NEG(w) } \left\{ {L^w( u )} \log [\sigma(\mathbf x_w^T\theta^u)]+ (1- L^w( u ))\log [1-\sigma(\mathbf x_w^T\theta^u)] \right\} \\ &= \sum_{w \in C} \sum_{u \in {w} \cup NEG(w) } \mathcal L(w,u) \end{aligned} L​=logG=logw∈C∏​g(w)=w∈C∑​logg(w)=w∈C∑​logu∈w∪NEG(w)∏​{[σ(xwT​θu)]Lw(u)⋅[1−σ(xwT​θu)]1−Lw(u)}=w∈C∑​u∈w∪NEG(w)∑​{Lw(u)log[σ(xwT​θu)]+(1−Lw(u))log[1−σ(xwT​θu)]}=w∈C∑​u∈w∪NEG(w)∑​L(w,u)​
接下来利用随机梯度上升对参数进行优化。

(1)更新 θ u \theta^u θu:

因为:
∂ L ( w , u ) ∂ θ u = ∂ { L w ( u ) log ⁡ [ σ ( x w T θ u ) ] + [ 1 − L w ( u ) ] log ⁡ [ 1 − σ ( x w T θ u ) ] } ∂ θ u = L w ( u ) [ 1 − σ ( x w T θ u ) ] x w − [ 1 − L w ( u ) ] σ ( x w T θ u ) x w = [ L w ( u ) − σ ( x w T θ u ) ] x w \begin{aligned}\frac{\partial \mathcal L(w,u)}{\partial \theta^u} &= \frac{\partial \{ L^w( u ) \log [\sigma(\mathbf x_w^T\theta^u)]+ [1- L^w( u )]\log [1-\sigma(\mathbf x_w^T\theta^u)]\} }{\partial \theta^u} \\&= L^w( u ) [1-\sigma(\mathbf x_w^T\theta^u)]\mathbf x_w - [1- L^w( u )] \sigma(\mathbf x_w^T\theta^u) \mathbf x_w \\ &=[L^w( u )-\sigma(\mathbf x_w^T\theta^u)] \mathbf x_w \end{aligned} ∂θu∂L(w,u)​​=∂θu∂{Lw(u)log[σ(xwT​θu)]+[1−Lw(u)]log[1−σ(xwT​θu)]}​=Lw(u)[1−σ(xwT​θu)]xw​−[1−Lw(u)]σ(xwT​θu)xw​=[Lw(u)−σ(xwT​θu)]xw​​
所以 θ u \theta^u θu 更新公式为:
θ u : = θ u + η [ L w ( u ) − σ ( x w T θ u ) ] x w \theta^u:=\theta^u + \eta [L^w( u )-\sigma(\mathbf x_w^T\theta^u)] \mathbf x_w θu:=θu+η[Lw(u)−σ(xwT​θu)]xw​
其中 η \eta η为学习率。

(2)更新 x w \mathbf x_w xw​

因为 L ( w , u ) \mathcal L(w,u) L(w,u) 关于变量 x w \mathbf x_w xw​和 θ w \theta^w θw 是对称的。所以:
∂ L ( w , u ) ∂ x w = [ L w ( u ) − σ ( x w T θ u ) ] θ u \begin{aligned} \frac{\partial \mathcal L(w,u)}{\partial \mathbf x_w} = [L^w( u )-\sigma(\mathbf x_w^T\theta^u)] \theta^u \end{aligned} ∂xw​∂L(w,u)​=[Lw(u)−σ(xwT​θu)]θu​
所以:
v ( w ~ ) : = v ( w ~ ) + η ∑ u ∈ w ∪ N E G ( w ) ∂ L ( w , u ) ∂ x ( w ) , w ~ ∈ c o n t e x t ( w ) \mathbf v( \tilde w) := \mathbf v( \tilde w) + \eta \sum_{u \in {w} \cup NEG(w) } \frac{\partial \mathcal L(w,u)}{\partial \mathbf x(w)},\quad \tilde w \in context(w) v(w~):=v(w~)+ηu∈w∪NEG(w)∑​∂x(w)∂L(w,u)​,w~∈context(w)
以下是伪代码:

在这里插入图片描述

Skip-gram模型

Skip-gram模型与CBOW模型的负采样模型推到过程相似。

对Skip-gram模型而言,正常来说,应该是要使用词 w 来预测上下文中的词汇 c o n t e x t ( w ) context(w) context(w),但是在 word2vec 的源码中,本质上还是用了CBOW的思想,将上下文 c o n t e x t ( w ) context(w) context(w)拆成一个个词来考虑,也就是说期望最大化的式子为:
g ( w ) = ∏ w ~ ∈ C o n t e x ( w )    ∏ u ∈ { w } ∪ N E G    w ~ ( w ) P ( u ∣ w ~ ) g(w) = \prod_{\tilde w \in Contex(w)}\;\prod_{u \in \{w\} \cup NEG^{\;\tilde w}(w) }P(u| \tilde w) g(w)=w~∈Contex(w)∏​u∈{w}∪NEGw~(w)∏​P(u∣w~)
其中, N E G    w ~ ( w ) NEG^{\;\tilde w}(w) NEGw~(w)表示对上下文中词 w ~ \tilde w w~的采样。基于上面的目标,用上文类似的推导过程,可以得到下面的算法。

下面简单的给出随机梯度上升更新参数的伪代码:

在这里插入图片描述
参考文章:
word2vec 中的数学原理详解
基于Negative Sampling的word2vec模型

基于pytorch实现Word2Vec(skip-gram+Negative Sampling) 目录 word2vec简介 语料处理 数据预处理 训练模型 近似训练法 参数设定 预测及可视化 word2vec简介 2013 年,Google 团队发表了 word2vec 工具。word2vec 工具主要包含两个模型:跳字模型(skip-gram)和连续词模型(continuous bag of words,简称 CBOW),以及两种高效训练的方法:负采样(negative sampling)和层序 softmax(hierarchical softmax)。 类似于f(x)-> 阅读详情

相关推荐

机器学习算法(十三):word2vec

1 单词表达 1.1Word embedding Embedding是数学领域的有名词,是指某个对象 X 被嵌入到另外一个对象 Y 中,映射 f : X → Y ,例如有理数嵌入实数。 Word embedding 是NLP中一组语言模型(language modeling)和特征学习技术(feature learning techniques)的总称,这些...

weixin_39910711的博客 9027

Word2Vec教程-Negative Sampling 负采样

这篇word2vec教程2中(教程1 Word2Vec教程-Skip-Gram模型),作者主要讲述了skip-gram 模型优化的策略-Negative Sampling,使得模型更加快速地训练。通过教程1,我们了解到word2vec它是一个庞大的神经忘网络! 例如,有一个包含10000个单词的词汇表,向量特征为300维,我们记得这个神经网络将会有两个w...

yanqianglifei的专栏 2834

word2vec模型

(一)简介 1、传统的词向量一般用one-hot表示,通常面临两个问题:(1)高维稀疏的向量带来计算成本;(2)不同的词向量彼此正交,无法衡量词之间的相似度。而distributed representation通过训练,可以得到每个词的低维稠密向量,不仅计算成本低,而且可以通过向量的距离计算来表示词与词之间的相似度。word2vector就是一个将词进行低维稠密向量化的工具。 2、wor...

zakexu的专栏 1万+

实践 | 基于Skip-gram实现Word2Vec

Skip-gram的算法实现 Skip-gram的实际实现 在实际情况中,vocab_size通常很大(几十万甚至几百万),导致W非常大。为了缓解这个问题,通常采取负采样(negative_sampling)的方式来近似模拟多分类任务。 假设有一个中心词c和一个上下文词正样本tp。在Skip-gram的理想实现里,需要最大化使用c推理tp的概率。在使用softmax学习时,需要最大化tp 的推理概率,同时最小化其他词表中词的推理概率。之所以计算缓慢,是因为需要对词表中的所有词都计算一遍。然而我们还可以使用

jiangti_ng的博客 486

word2vec_skip-gram_negative_sampling

Word2Vec是一种用于生成词向量的模型,其中Skip-Gram和Negative Sampling是其核心组成部分之一。

2401_83026894的博客 949

深度学习笔记——Word2vec和Doc2vec训练实例以及参数解读

本篇主要用一个实例来介绍一下如何进行Word2vec和Doc2vec的训练,并对Word2vec和Doc2vec模型训练过程中的参数进行一些解读。使用的是Python版本的gensim库实现,想要了解Word2vec和Doc2vec的原理可以查看我的上一篇博客( 深度学习笔记——Word2vec和Doc2vec原理理解并结合代码分析)。代码见我的GitHub(使用Gensim库训练Word2vec和Doc2vec模型)

mpk_no1的博客 1万+

NLP笔记之word2vec算法(3)--Negative Sampling原理+数学推导

前一篇文章中,我们介绍了基于Hierarchical Softmax的模型,在word2vec中还提出了一个叫做Negative Sampling的方法,本文对Negative Sampling进行一个介绍。 首先我们先介绍一些Hierarchical Softmax存在的一些缺陷,因为Hierarchical Softmax是基于哈夫曼树的算法,相对于传统的神经网络来说,Hierarchical Softmax的确可以很大效率的提升模型的速度和效率,但是如果对于某些比较生僻的词来说,因为我们知道哈夫曼树

张小彬 1433

个人总结:自然语言处理 word2vec(skip-gram/CBOW以及优化算法Hierarchical Softmax和Negative Sampling)

前言 word2vec,顾名思义,将一个词转化为向量,也经常会看到一个非常相关的词“词嵌入”,也就是word embedding。词嵌入是一类将词从高维空间映射到低维空间的过程的统称,核心思想是将每个词都映射为低维空间(通常K=50-300维)上的一个稠密向量。K维空间的每一维可以看做一个隐含的主题,只不过不像主题模型中的主题那么直观。 假设每篇文章有N个词,每个词映射为K维的向量,那就可以用...

yyhhlancelot的博客 2738

Word2vec:skip-gram模型+Negative Sampling(负采样)代码实现

算法原理: 算法原理可以参考该链接 超参数 # Training Parameters learning_rate = 0.1 batch_size = 128 num_steps = 3000000 display_step = 10000 eval_step = 200000 # Evaluation Parameters valid_size = 20 valid_window =...

ACM_hades的博客 4886

word2vec之Negative Sampling理解

word2vec之Negative Sampling理解 本文章将介绍基于Negative Sampling的CBOW和Skip-Gram模型。与Hierarchical Softmax相比,Negative Sampling不需要构建复杂的Huffman树,以及进行多次二分类,而是利用简单的随机负采样,能大幅度提高性能。因而可以说Negative Sampling是Hierarchica

一条臭狗 1720

word2vec中数学原理详解以及原理思考

很久没有写博客了,也没有写过相关总结。最近,工作中又开始用到了word2vector,正好就做个相关总结。这方面相关的博客有很多,我看过的讲的最清楚的就是@peghoty的博客。 要理解wordvector的原理,有些知识还是需要提前了解一下。 预备知识:http://blog.youkuaiyun.com/itplus/article/details/37969635 , 背景知识:

CFZero的专栏 1万+

NLP | Word2Vec之基于Negative Sampling的 CBOW 和 skip-gram 模型

前面介绍了基于Hierarchical Softmax的 skip-gram 和 CBOW 模型,虽然我们使用霍夫曼树代替传统的神经网络,可以提高模型训练的效率。但是如果我们的训练样本里的中心词www是一个很生僻的词,那么就得在霍夫曼树中辛苦的向下走很久了。能不能不用搞这么复杂的一颗霍夫曼树,将模型变的更加简单呢? Negative Sampling就是这么一种求解word2vec模型的方法,它摒...

十三 1290

word2vec的算法思想详解(cbow+skipgram+negative sampling))

参考: https://easyai.tech/ai-definition/word2vec/ https://jalammar.github.io/illustrated-word2vec/ Word2vec 是 Word Embedding 词嵌入的方法之一。 Word Embedding 就是将「不可计算」「非结构化」的词转化为「可计算」「结构化」的向量。 Word2vec 有 2 种训练模式。 CBOW(Continuous Bag-of-Words Model) 通过上下文来预测当前值。相当于一

zhang35的博客 873

word2vec进阶之skim-gram和CBOW模型(Hierarchical Softmax、Negative Sampling)

系列目录(系列更新中) 第二讲 cs224n系列之word2vec & 词向量 word2vec进阶之skim-gram和CBOW模型(Hierarchical Softmax、Negative Sampling) 第三讲 cs224n系列之skip-pram优化 & Global Vector by Manning & 词向量评价 语言模型 在统计自然

AI蜗牛之家 7033

CS224N学习笔记(2):skip-gram和negative sampling

CS224N学习笔记(2)Word2Vec简介Skip-gram Word2Vec 简介 相比Onehotting编码方式: 不能展示语义关系(不同词之间的点积为0) 修正方法: 分布相似性,通过理解上下文理解单词的含义(predict between every word and its context words) 构建dense vector来预测上下文 算法: skip-gram...

Neways的博客 886

一文弄懂Word2Vec之skip-gram(含详细代码)

目录 前言 一、什么是Skip-gram算法 二、目标是什么 三、定义表示法 3.1 one-hot向量 3.2 词向量(word vector) 3.3 单词矩阵 3.4 单词相似度 3.5 softmax函数 3.6算法过程 3.7 求softmax 四、skipgram代码实现 4.1 如何把词转换为向量 4.2 CBOW和Skip-gram的算法实现 Skip-gram的理想实现 Skip-gram的实际实现 4.3 使用Pytorch实现Skip-gram .

Python,数据分析,机器学习,深度学习 1万+

NLP词向量表示:CBOW、Skip-gram、hierarchical softmax、negative sampling

文章目录Skip-gramCBOWhierarchical softmaxnegative sampling Skip-gram skip-gram,即规定了中间词及其上下文窗口大小,会在这个窗口内随机选skip个。 CBOW hierarchical softmax 设词库大小为V,层次softmax不再计算V个softmax,而是只计算logV个,具体如下: negative sampli...

Leon_winter的博客 1331

jason-2卫星介绍及其数据下载

两台仪器发射脉冲宽度均为105.6μs,带宽320MHz(C频段)和320/100MHz(Ku频段),脉冲重复频率1800Hz(Ku频段)和300Hz(C频段),功率78W,数据传输速率22.5kbit/s。共发射了3颗卫星(Jason - 1/2/3),星上有效载荷均主要为雷达高度计和微波辐射计。Jason - 1卫星主要有效载荷为波塞冬 - 2和“贾森微波辐射计”,Jason - 2卫星进行了改进,主要携带了波塞冬 - 3和先进微波辐射计,此外,Jason - 2卫星还携带了“多里斯”系统。

beautyaaaa的博客 1605

word2vec学习笔记(Skip-gram/CBOW + Hierarchy Huffman Tree/Negative sampling)

前言     word2vec是谷歌在2013年推出的一个开源的word embedding工具, 背后的模型包括CBoW ( Continuous Bag of Words )模型(输入context words, 输出center word)和Skip-gram (输入center word, 输出context words)模型。其实两个模型输出的都是softmax向量, 维度与词向量维度相...

Aviato 1568

常见机械臂模型不用找!Mujoco这儿都有!

高质量的模型集合,franka panda,so-arm100,ur之类的机械臂都有。常见机械臂模型不用找!Mujoco这儿都有!大概346M,网速不行的可以下载zip。

darcsdn 992

保姆级教程:用NovAtel Inertial Explorer 8.7搞定GNSS/INS紧组合后处理(附避坑指南)

本文提供NovAtel Inertial Explorer 8.7的GNSS/INS紧组合后处理全流程教程,涵盖环境准备、数据转换、基站坐标解算及紧组合处理等关键步骤。特别针对零基础用户,分享实用技巧和常见陷阱,帮助高效完成高精度组合导航数据处理,适用于测绘、自动驾驶等领域。

weixin_42614269的博客 279
上一篇: 【word2vec】篇二:基于Hierarchical Softmax的 CBOW 模型和 Skip-gram 模型
下一篇: 智慧海洋建设TOP方案借鉴学习与整理
VariableX
博客等级 码龄7年 142粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值