系列文章:

  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模型中,已知词www的上下文context(w)context(w)context(w)需要预测www。因此,对于给定的context(w)context(w)context(w),词www就是一个正样本,其它词就是负样本了。在Skip-gram中同样也存在正负样本问题。负样本那么多,该如何选取呢?这就是Negative Sampling(负采样)问题。也就是对于给定的词,如何生成其负样本子集NEG(w)NEG(w)NEG(w)?

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

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

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

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

(3)采样时,先从M个位置中采出neg个位置,再匹配到这neg个位置对应的词就是负词。如假设我们先采出m3m_3m3​,对应I2I_2I2​,I2I_2I2​对应的词就是负词。

注:在word2vec中,M取值默认为10810^8108。

CBOW模型

假设已经采样一个关于www的非空负样本子集NEG(w)NEG(w)NEG(w) ,且对于 w~∈D\tilde w \in Dw~∈D,定义:
Lw(w~)={1,w~=w0,w~≠wL^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 ww~的标签。即正样本的标签为1,负样本的标签为0。

对于一个给定的正样本(context(w),w)(context(w),w)(context(w),w),希望最大化:
g(w)=∏u∈w∪NEG(w)P(u∣context(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∣context(w))={σ(xwTθu)Lw(u)=11−σ(xwTθu)Lw(u)=0P(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∣context(w))=[σ(xwTθu)]Lw(u)⋅[1−σ(xwTθu)]1−Lw(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)
这里的xw\mathbf x_wxw​是各词向量之和。θu\theta^uθu表示词对应的一个向量,是个待训练参数。

所以,最终g(w)g(w)g(w)的表达式如下:
g(w)=σ(xwTθw)∏u∈NEG(w)[1−σ(xwTθ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)]
其中σ(xwTθw)\sigma(\mathbf x_w^T\theta^w)σ(xwT​θw) 表示当上下文为contecxt(w)contecxt(w)contecxt(w) 时,预测中心词为w的概率;而σ(xwTθu)u∈NEG(w)\sigma(\mathbf x_w^T\theta^u) u∈NEG(w)σ(xwT​θu)u∈NEG(w),预测中心词为u的概率。从形式上看,最大化g(w)g(w)g(w), 相当于:增大正样本的概率同时降低负样本的概率。所以,给定预料库CCC,函数:
G=∏w∈Cg(w)G= \prod_{w \in C} g(w) G=w∈C∏​g(w)
可以作为整体的优化目标。为了计算方便可以对G 取对数。所以:
L=log⁡G=log⁡∏w∈Cg(w)=∑w∈Clog⁡g(w)=∑w∈Clog⁡∏u∈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)\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=∂{Lw(u)log⁡[σ(xwTθu)]+[1−Lw(u)]log⁡[1−σ(xwTθu)]}∂θu=Lw(u)[1−σ(xwTθu)]xw−[1−Lw(u)]σ(xwTθu)xw=[Lw(u)−σ(xwTθu)]xw\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+η[Lw(u)−σ(xwTθu)]xw\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)更新xw\mathbf x_wxw​

因为L(w,u)\mathcal L(w,u)L(w,u) 关于变量xw\mathbf x_wxw​和θw\theta^wθw 是对称的。所以:
∂L(w,u)∂xw=[Lw(u)−σ(xwTθ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∪NEG(w)∂L(w,u)∂x(w),w~∈context(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 来预测上下文中的词汇context(w)context(w)context(w),但是在 word2vec 的源码中,本质上还是用了CBOW的思想,将上下文context(w)context(w)context(w)拆成一个个词来考虑,也就是说期望最大化的式子为:
g(w)=∏w~∈Contex(w)∏u∈{w}∪NEGw~(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~)
其中,NEGw~(w)NEG^{\;\tilde w}(w)NEGw~(w)表示对上下文中词w~\tilde ww~的采样。基于上面的目标,用上文类似的推导过程,可以得到下面的算法。

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


参考文章:
word2vec 中的数学原理详解
基于Negative Sampling的word2vec模型

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

  1. 【word2vec】篇二:基于Hierarchical Softmax的 CBOW 模型和 Skip-gram 模型

    文章目录 CBOW 模型 基本结构 目标函数 梯度计算 Skip-gram 模型 基本结构 梯度计算 优缺点分析 系列文章: [word2vec]篇一:理解词向量.CBOW与Skip-Gram等知识 ...

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

    前面介绍了基于Hierarchical Softmax的 skip-gram 和 CBOW 模型,虽然我们使用霍夫曼树代替传统的神经网络,可以提高模型训练的效率.但是如果我们的训练样本里的中心词www ...

  3. 基于JVM原理、JMM模型和CPU缓存模型深入理解Java并发编程

    许多以Java多线程开发为主题的技术书籍,都会把对Java虚拟机和Java内存模型的讲解,作为讲授Java并发编程开发的主要内容,有的还深入到计算机系统的内存.CPU.缓存等予以说明.实际上,在实际的 ...

  4. word2vec原理(三): 基于Negative Sampling的模型

    目录 1. Hierarchical Softmax的缺点与改进 2. Negative Sampling(负采样) 概述 3. 基于Negative Sampling的模型梯度计算 4. Negat ...

  5. CS224n 词的向量表示word2vec 之skipgram (Negative sampling )

    CS224n 词的向量表示word2vec 之skipgram (Negative sampling ) #!/usr/bin/env pythonimport numpy as np import ...

  6. Word2vec之CBOW模型和Skip-gram模型形象解释

    Word2vec中两个重要模型是:CBOW和Skip-gram模型 首先Wordvec的目标是:将一个词表示成一个向量 这里首先说下我对CBOW模型的理解 这是主要是举个例子简化下 首先说下CBOW的 ...

  7. [深度学习概念]·word2vec原理讲解Negative Sampling的模型概述

    word2vec原理讲解Negative Sampling的模型概述 目录 1. Hierarchical Softmax的缺点与改进 2. 基于Negative Sampling的模型概述 3. 基 ...

  8. Word2Vec学习笔记(五)——Negative Sampling 模型(续)

    本来这部分内容不多,是想写在negative sampling 中和cbow一起的,但是写了后不小心按了删除键,浏览器直接回退,找不到了,所以重新写新的,以免出现上述情况 (接上) 三.Negativ ...

  9. 基于pytorch实现Word2Vec(skip-gram+Negative Sampling)

    目录 word2vec简介 语料处理 数据预处理 训练模型 近似训练法 参数设定 预测及可视化 word2vec简介 2013 年,Google 团队发表了 word2vec 工具.word2vec ...

最新文章

  1. 面试官:Redis熟悉吗?谈谈Redis都有哪些性能监控指标
  2. vue 2.0 使用 Font Awesome
  3. 力扣题目——637. 二叉树的层平均值
  4. 问答 | 为什么car-like robot需要使用差速器?
  5. CS224N笔记——RNN和语言模型
  6. wordpress and theme
  7. 思科网院Packet Tracer实验(二)IOS基本配置
  8. 原始LBP算法 代码
  9. 数据库索引类型介绍及其优缺点、区别、适用场景
  10. 82C55控制交通灯
  11. 关于《web课程设计》网页设计 用html css做一个漂亮的网站 仿新浪微博个人主页
  12. 日常生活中的企业监控
  13. 初探Mach-O学习小记(附源码)
  14. xsocks 64位平台下编译问题小记
  15. 【英语六级笔记】翻译部分
  16. “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面 1
  17. 错误代码: SEC_ERROR_REUSED_ISSUER_AND_SERIAL(解决办法)
  18. 【高效办公】Everything高效应用案例——软件基本信息篇
  19. HDU 3132 Taunt Exposure Estimation(数学)
  20. 《操作系统真象还原》第二章 ---- 编写MBR主引导记录 初尝编写的快乐

热门文章

  1. Ubuntu下面对Chrome浏览器护眼插件的调研
  2. cython编码报错
  3. opengl坐标转换
  4. 清理c盘垃圾的cmd命令_用命令删除系统垃圾,这波操作深藏功与名
  5. python桌面开发吐血_Python3环境(Windows10)单独配置Spyder——记录我的吐血之路...
  6. 使用kettle将文本文件中的数据导入数据库
  7. 线上服务器登记的要点
  8. 恶意软件“EXPENSIVEWALL”感染数百万台安卓设备
  9. HDU 2546 饭卡(01背包裸题)
  10. c++中algorithm头文件、STL库简介及使用说明