Word2Vec学习笔记(四)——Negative Sampling 模型

    前面讲了Hierarchical softmax 模型,现在来说说Negative Sampling 模型的CBOW和Skip-gram的原理。它相对于Hierarchical softmax 模型来说,不再采用huffman树,这样可以大幅提高性能。

一、Negative Sampling

    在负采样中,对于给定的词www,如何生成它的负采样集合NEG(w)NEG(w)NEG(w)呢?已知一个词www,它的上下文是context(w)context(w)context(w),那么词www就是一个正例,其他词就是一个负例。但是负例样本太多了,我们怎么去选取呢?在语料库C\mathcal{C}C中,各个词出现的频率是不一样的,我们采样的时候要求高频词选中的概率较大,而低频词选中的概率较小。这就是一个带权采样的问题。
设词典D\mathcal{D}D中的每一个词www对应线段的一个长度:
len(w)=counter(w)∑u∈Dcounter(u)(1)len(w) = \frac{counter(w)}{\sum_{u \in \mathcal{D}}counter(u)} (1) len(w)=uDcounter(u)counter(w)(1)
式(1)分母是为了归一化,Word2Vec中的具体做法是:记l0=0,lk=∑j=1klen(wj),k=1,2,…,Nl_0 = 0, l_k = \sum_{j=1}^{k} len(w_j), k=1,2, \dots, Nl0=0,lk=j=1klen(wj),k=1,2,,N,其中,wjw_jwj是词典D\mathcal{D}D中的第jjj个词,则以{lj}j=0N\{l_j\}_{j=0}^{N}{lj}j=0N为点构成了一个在区间[0,1]非等距离的划分。然后再加一个等距离划分,Word2Vec中选取M=108M=10^8M=108,将M个点等距离的分布在区间[0,1]上,这样就构成了M到I之间的一个映射,如下图所示:
负采样描述图
图例参考:http://www.cnblogs.com/neopenx/p/4571996.html ,建议大家读下这篇神作

    选取负例样本的时候,取[M0,Mm−1][M_0, M_{m-1}][M0,Mm1]上的一个随机数,对应到I上就可以了。如果对于词wiw_iwi,正好选到它自己,则跳过。负例样本集合NEG(w)NEG(w)NEG(w)的大小在Word2Vec源码中默认选5.

二、CBOW

    假定关于词www的负例样本NEG(w)NEG(w)NEG(w)已经选出,定义标签LLL如下,对于 ∀w~∈D\forall \widetilde{w} \in \mathcal{D}wD
Lw(w~)={1,w~=w;0,w~≠w;L^w(\widetilde{w}) = \Bigg\{ \begin{array} {ll} 1, & \widetilde{w} = w ;\\ 0, & \widetilde{w} \ne w; \end{array} Lw(w)={1,0,w=w;w=w;
对于给定的一个正例样本(context(w),w)(context(w), w)(context(w),w), 要求:
max⁡g(w)=max⁡∏u∈{w}∪u∈NEG(w)p(u∣context(w))\max g(w) = \max \prod_{u \in \{w\} \cup u \in NEG(w)} p(u|context(w)) maxg(w)=maxu{w}uNEG(w)p(ucontext(w))
其中,
p(u∣context(w))={σ(xwTθu),Lw(u)=11−σ(xwTθu),Lw(u)=0p(u|context(w)) = \Bigg \{ \begin{array}{ll} \sigma(\boldsymbol{x}_w^T \theta^u), & L^w(u) = 1\\ 1-\sigma(\boldsymbol{x}_w^T \theta^u), & L^w(u) = 0 \end{array} p(ucontext(w))={σ(xwTθu),1σ(xwTθu),Lw(u)=1Lw(u)=0
把它写成一个式子:
p(u∣context(w))=σ(xwTθu)Lw(u)+(1−σ(xwTθu))1−Lw(u)p(u|context(w)) = \sigma(\boldsymbol{x}_w^T \theta^u)^{L^w(u)} + (1-\sigma(\boldsymbol{x}_w^T \theta^u))^{1-L^w(u)} p(ucontext(w))=σ(xwTθu)Lw(u)+(1σ(xwTθu))1Lw(u)
下边解释为什么要最大化g(w)g(w)g(w)
g(w)=∏u∈{w}∪u∈NEG(w)p(u∣context(w))=∏u∈{w}∪u∈NEG(w)σ(xwTθu)Lw(u)+(1−σ(xwTθu))1−Lw(u)=σ(xwTθw)∏u∈NEG(w)(1−σ(xwTθu))g(w) = \prod_{u \in \{w\} \cup u \in NEG(w)} p(u|context(w)) \\ =\prod_{u \in \{w\} \cup u \in NEG(w)} \sigma(\boldsymbol{x}_w^T \theta^u)^{L^w(u)} + (1-\sigma(\boldsymbol{x}_w^T \theta^u))^{1-L^w(u)} \\ =\sigma(\boldsymbol{x}_w^T \theta^w)\prod_{u \in NEG(w)} (1-\sigma(\boldsymbol{x}_w^T \theta^u)) g(w)=u{w}uNEG(w)p(ucontext(w))=u{w}uNEG(w)σ(xwTθu)Lw(u)+(1σ(xwTθu))1Lw(u)=σ(xwTθw)uNEG(w)(1σ(xwTθu))
上式中连乘号前边的式子可以解释为最大化正例样本概率,连乘号后边解释为最小化负例样本概率

同样的,针对于语料库,令:
G=∏w∈Cg(w)\mathcal{G} = \prod_{w \in \mathcal{C}} g(w) G=wCg(w)
可以将上式作为整体的优化目标函数,取上式的最大似然:
L=log⁡G=∑w∈Clog⁡g(w)=∑w∈C∑u∈{w}∪u∈NEG(w)Lw(u)log⁡[σ(xwTθu]+[1−Lw(u)]log⁡[1−σ(xwTθu)]\mathcal{L} = \log\mathcal{G} = \sum_{w \in \mathcal{C}} \log g(w) \\ =\sum_{w \in \mathcal{C}} \sum_{u \in \{w\} \cup u \in NEG(w)}L^w(u)\log[\sigma(\boldsymbol{x}_w^T \boldsymbol{\theta}^u] + [1-L^w(u)] \log [1-\sigma(\boldsymbol{x}_w^T \boldsymbol{\theta}^u)] L=logG=wClogg(w)=wCu{w}uNEG(w)Lw(u)log[σ(xwTθu]+[1Lw(u)]log[1σ(xwTθu)]
和之前的计算过程一样,记
L(w,u)=Lw(u)log⁡[σ(xwTθu]+[1−Lw(u)]log⁡[1−σ(xwTθu)]L(w,u) = L^w(u)\log[\sigma(\boldsymbol{x}_w^T \theta^u] + [1-L^w(u)]\log [1-\sigma(\boldsymbol{x}_w^T \boldsymbol{\theta}^u)] L(w,u)=Lw(u)log[σ(xwTθu]+[1Lw(u)]log[1σ(xwTθu)]
然后分别求:∂L(w,u)∂Xw\frac{\partial L(w,u)}{\partial\boldsymbol{X}_w}XwL(w,u)∂L(w,u)∂θu\frac{\partial L(w,u)}{\partial\boldsymbol{\theta}^u}θuL(w,u),求解过程略过:
∂L(w,u)∂Xw=[Lw(u)−σ(xwTθu)]θu∂L(w,u)∂θu=[Lw(u)−σ(xwTθu)]Xw\frac{\partial L(w,u)}{\partial\boldsymbol{X}_w} = [L^w(u)-\sigma(\boldsymbol{x}_w^T \boldsymbol{\theta}^u)]\boldsymbol{\theta}^u \\ \frac{\partial L(w,u)}{\partial\boldsymbol{\theta}^u} = [L^w(u)-\sigma(\boldsymbol{x}_w^T \boldsymbol{\theta}^u)]\boldsymbol{X}_w XwL(w,u)=[Lw(u)σ(xwTθu)]θuθuL(w,u)=[Lw(u)σ(xwTθu)]Xw
则,可得到如下更新公式:
θu:=θu+η[Lw(u)−σ(xwTθu)]Xwv(w~):=v(w~)+∑u∈{w}∪u∈NEG(w)[Lw(u)−σ(xwTθu)]θu\boldsymbol{\theta}^u:=\boldsymbol{\theta}^u+\eta [L^w(u)-\sigma(\boldsymbol{x}_w^T \boldsymbol{\theta}^u)]\boldsymbol{X}_w \\ v(\boldsymbol{\widetilde{w}}):=v(\boldsymbol{\widetilde{w}}) + \sum_{u \in \{w\} \cup u \in NEG(w)} [L^w(u)-\sigma(\boldsymbol{x}_w^T \boldsymbol{\theta}^u)]\boldsymbol{\theta}^u θu:=θu+η[Lw(u)σ(xwTθu)]Xwv(w):=v(w)+u{w}uNEG(w)[Lw(u)σ(xwTθu)]θu
其中, w~∈context(w)\boldsymbol{\widetilde{w}} \in context(w)wcontext(w).

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

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

相关文章

ElasticSearch手动创建mapping

前面也提到过关于手动创建mapping,接着上一篇关于object类型存储以及mapping的介绍,我们接下来就介绍下如何手动创建mapping #手动创建mapping PUT /lib6 {"settings":{"number_of_shards" : 3,"number_of_replicas" : 0…

Array.prototype.slice.call

Array.prototype.slice.call(arguments,0)就类似于arguments.slice(0),但因为arguments不是真正的Array,所以它没有slice这个方法.能用slice方法的,只要有length属性就行。虽然arguments有length属性,但是没有slice方法&#xff0…

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

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

ElasticSearch基本查询一(英文分词)

废话不多说首先准备数据,我们先添加几个文档 PUT /lib3/user/1 { "name" : "zhaoliu","address" :"hei long jiang sheng tie ling shi","age" : 50,"birthday" : "1970-12-12","inte…

HDU1071_数学几何

题目大意: 给你三个点p1,p2,p3,p1是最高点,然后算出面积。 解题思路: 我的解题思路有点水,就是直接求抛物线系数,直线系数,最后求积分搞定e.尽量少用中间变量吧。代码有点丑。虽然这道题目是1a,…

机器学习笔记(十一)——逻辑回归

一、引言 虽然说是逻辑回归,其实既可以用它做回归,也可以用它做分类。一般我们从最简单的二分类问题开始了解他,当然也可以做多分类。 二、Logistic Regression 的一般步骤 找一个合适的假设构造损失函数让损失函数最小,求出对应…

ElasticSearch vs. Solr

为何日志服务商Loggly选择ElasticSearch而非Solr. 原文链接: http://loggly.wpengine.com/bl... 在Gen2产品的早期阶段, 我们事实上是失败的, 这促使我们重新审视我们现有的技术栈. 我们仔细分析系统中的每个独立的组件,并记录下来, 当然其中也包括构成我们核心功能的搜索引擎技…

android 工程结构,它到底是怎么运行的。

为了帮助理解,我决定先上传一个工程截图,这个是我做的一个小作业,3、4个小时完成,没什么含金量,就是交差用的,这里给大家做个模板吧。 我把一个工程分6个部分,如左面的图所示,然后…

为什么ElasticSearch应用开发者需要了解cluster state

原文链接: https://www.loggly.com/blog/p... 在前面的文章(ES vs Solr)中我们提到, ES构建了Loggly的很多核心功能. 在把这项通用搜索技术用于我们的日志管理系统, 并为超过5000多客户提供准实时服务的过程中, 我们在技术上成长颇多. 按照我们对开源社区的尊重, 在此希望能把我…

给 MySQL 增加 Sequence 管理功能

-- Sequence 管理表 DROP TABLE IF EXISTS sequence; CREATE TABLE sequence ( name VARCHAR(50) NOT NULL, current_value INT NOT NULL, increment INT NOT NULL DEFAULT 1, PRIMARY KEY (name) ) ENGINEInnoDB; -- 取当前值的函数 DROP FUNCTION IF EXISTS currval; DE…

最优化学习笔记(六)——牛顿法性质分析

一、牛顿法存在的问题 在单变量的情况下&#xff0c;如果函数的二阶导数f′′<0&#xff0c;牛顿法就无法收敛到极小点。类似的&#xff0c;在多变量的情况下&#xff0c;目标函数的hessian矩阵F(x(k))非正定&#xff0c;牛顿法的搜索方向并不一定是目标函数值的下降方向。甚…

从FLC中学习的设计模式系列-创建型模式(3)-工厂方法

工厂方法是一组方法&#xff0c; 他们针对不同条件返回不同的类实例&#xff0c;这些类一般有共同的父类。 工厂方法模式 来自&#xff1a; http://zh.wikipedia.org/wiki/工厂方法模式 工厂方法模式 是一种面向对象的设计模式。通过调用不同的方法返回需要的类&#xff0c;而不…

Elasticsearch索引的数据存储路径是如何确定的

Elasticsearch中&#xff0c;在node的配置中可以指定path.data用来作为节点数据的存储目录&#xff0c;而且我们可以指定多个值来作为数据存储的路径&#xff0c;那么Elasticsearch是如何判断应该存储到哪个路径下呢&#xff1f;今天我就记录一下这个问题。 Elasticsearch的索…

带分页码的分页算法

int start 1, end 10;//如果总页数小于结束页码if (PageCount < end){//则结束页码为总页数end PageCount;}else{//当前页大于5后开始重新计算起始页,否则起始页为1start PageIndex > 5 ? PageIndex - 5 : start;//起始页码加9减去总页数,用于查看是否超过了总页数i…

最优化学习笔记(七)——Levenberg-Marquardt修正(牛顿法修正)

上节末尾谈到牛顿法中隐含的另外一个问题在于hessian矩阵可能不是正定的。因此&#xff0c;d(k)−F(x(k))−1g(x(k))\boldsymbol{d}^{(k)} = -\boldsymbol{F}(\boldsymbol{x}^{(k)})^{-1}\boldsymbol{g(x^{(k)})} 可能不会是下降方向。Levenberg-Marquardt修正可以解决这个问…

Elasticsearch内存

核心概念 基于LuceneJava应用 内存使用分析 Lucene的内存消耗 倒排索引。&#xff08;堆内存&#xff09; Lucene中&#xff0c;索引是存储在磁盘中&#xff0c;一个索引&#xff08;Index&#xff09;由多个段&#xff08;Segment&#xff09;组成。当启动IndexSearcher时&…

Canal数据堆积

记录一下canal的问题。数据同步一直使用阿里开源的canal&#xff0c;最近使用过程中遇到一些问题&#xff0c;在这里记录一下。 原因 我们使用canal监听MySQL&#xff0c;然后通过client获取发送到mq&#xff08;自定义格式&#xff09;。最近数据组的同事批量更新了一次数据…

最优化学习笔记(八)——共轭方向法

从这节开始&#xff0c;将学习共轭方向法的相关内容&#xff0c;本篇先做一个简短的开篇。共轭方向法的计算效率不如之前的牛顿法&#xff0c;但是也优于最速下降法。它有以下优势&#xff1a; 对于n维二次型问题,能够在n步之内得到结果&#xff1b;作为共轭方向的典型代表&am…

解决PhoneGap在Android手机上的全屏问题

目前&#xff0c;结合PhoneGap 框架使用HTML5JavaScriptCSS3开发Android或IOS系统上的应用和游戏已经成为可能性&#xff0c;这两天自己使用HTML5开发了一款小型悠闲游戏&#xff0c;使用PhoneGap打包成APK运行在Android手机上&#xff0c;却遇到不能全屏&#xff0c;想了好久&…

ES学习笔记之-ClusterState的学习

前面研究过ES的get api的整体思路&#xff0c;作为编写ES插件时的借鉴。当时的重点在与理解整体流程&#xff0c;主要是shardOperation()的方法内部的调用逻辑&#xff0c;就弱化了shards()方法。实际上shards()方法在理解ES的结构层面&#xff0c;作用更大一些。我们还是从get…