【word2vec】篇三:基于Negative Sampling 的 CBOW 模型和 Skip-gram 模型
系列文章:
- 【word2vec】篇一:理解词向量、CBOW与Skip-Gram等知识
- 【word2vec】篇二:基于Hierarchical Softmax的 CBOW 模型和 Skip-gram 模型
- 【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=logG=log∏w∈Cg(w)=∑w∈Clogg(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 模型相关推荐
- 【word2vec】篇二:基于Hierarchical Softmax的 CBOW 模型和 Skip-gram 模型
文章目录 CBOW 模型 基本结构 目标函数 梯度计算 Skip-gram 模型 基本结构 梯度计算 优缺点分析 系列文章: [word2vec]篇一:理解词向量.CBOW与Skip-Gram等知识 ...
- NLP | Word2Vec之基于Negative Sampling的 CBOW 和 skip-gram 模型
前面介绍了基于Hierarchical Softmax的 skip-gram 和 CBOW 模型,虽然我们使用霍夫曼树代替传统的神经网络,可以提高模型训练的效率.但是如果我们的训练样本里的中心词www ...
- 基于JVM原理、JMM模型和CPU缓存模型深入理解Java并发编程
许多以Java多线程开发为主题的技术书籍,都会把对Java虚拟机和Java内存模型的讲解,作为讲授Java并发编程开发的主要内容,有的还深入到计算机系统的内存.CPU.缓存等予以说明.实际上,在实际的 ...
- word2vec原理(三): 基于Negative Sampling的模型
目录 1. Hierarchical Softmax的缺点与改进 2. Negative Sampling(负采样) 概述 3. 基于Negative Sampling的模型梯度计算 4. Negat ...
- CS224n 词的向量表示word2vec 之skipgram (Negative sampling )
CS224n 词的向量表示word2vec 之skipgram (Negative sampling ) #!/usr/bin/env pythonimport numpy as np import ...
- Word2vec之CBOW模型和Skip-gram模型形象解释
Word2vec中两个重要模型是:CBOW和Skip-gram模型 首先Wordvec的目标是:将一个词表示成一个向量 这里首先说下我对CBOW模型的理解 这是主要是举个例子简化下 首先说下CBOW的 ...
- [深度学习概念]·word2vec原理讲解Negative Sampling的模型概述
word2vec原理讲解Negative Sampling的模型概述 目录 1. Hierarchical Softmax的缺点与改进 2. 基于Negative Sampling的模型概述 3. 基 ...
- Word2Vec学习笔记(五)——Negative Sampling 模型(续)
本来这部分内容不多,是想写在negative sampling 中和cbow一起的,但是写了后不小心按了删除键,浏览器直接回退,找不到了,所以重新写新的,以免出现上述情况 (接上) 三.Negativ ...
- 基于pytorch实现Word2Vec(skip-gram+Negative Sampling)
目录 word2vec简介 语料处理 数据预处理 训练模型 近似训练法 参数设定 预测及可视化 word2vec简介 2013 年,Google 团队发表了 word2vec 工具.word2vec ...
最新文章
- 面试官:Redis熟悉吗?谈谈Redis都有哪些性能监控指标
- vue 2.0 使用 Font Awesome
- 力扣题目——637. 二叉树的层平均值
- 问答 | 为什么car-like robot需要使用差速器?
- CS224N笔记——RNN和语言模型
- wordpress and theme
- 思科网院Packet Tracer实验(二)IOS基本配置
- 原始LBP算法 代码
- 数据库索引类型介绍及其优缺点、区别、适用场景
- 82C55控制交通灯
- 关于《web课程设计》网页设计 用html css做一个漂亮的网站 仿新浪微博个人主页
- 日常生活中的企业监控
- 初探Mach-O学习小记(附源码)
- xsocks 64位平台下编译问题小记
- 【英语六级笔记】翻译部分
- “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面 1
- 错误代码: SEC_ERROR_REUSED_ISSUER_AND_SERIAL(解决办法)
- 【高效办公】Everything高效应用案例——软件基本信息篇
- HDU 3132 Taunt Exposure Estimation(数学)
- 《操作系统真象还原》第二章 ---- 编写MBR主引导记录 初尝编写的快乐
热门文章
- Ubuntu下面对Chrome浏览器护眼插件的调研
- cython编码报错
- opengl坐标转换
- 清理c盘垃圾的cmd命令_用命令删除系统垃圾,这波操作深藏功与名
- python桌面开发吐血_Python3环境(Windows10)单独配置Spyder——记录我的吐血之路...
- 使用kettle将文本文件中的数据导入数据库
- 线上服务器登记的要点
- 恶意软件“EXPENSIVEWALL”感染数百万台安卓设备
- HDU 2546 饭卡(01背包裸题)
- c++中algorithm头文件、STL库简介及使用说明