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,一经查实,立即删除!

相关文章

HDU1071_数学几何

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

ElasticSearch vs. Solr

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

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

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

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

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

HTML简单实例加表单的显示效果

HTML可以说是一种十分简单的标记语言,但是对于Web开发还是必不可少的,所以对HTML的标记进行适当的了解 还是十分有必要的。下面我们来演示一下基本的HTML效果和一些简单的标签,以及在表单界面的各种提交方式。 首先是HTML的常用简单标签。 &l…

机器学习笔记(十三)——隐马尔科夫模型

一、隐马尔科夫模型 在马尔科夫模型中,每一个状态代表了一个可以观察的事件,所以,马尔科夫模型有时称为可视马尔科夫模型(visible Markov model,VMM),这在某种程度上限制了模型的适应性。在隐马…

elasticsearch基本查询三(英文分词)match查询

#match查询 #match query知道分词器的存在,会对filed进行分词操作, 然后再查询 GET /ib3/user/_search { "query":{ "match":{ "name": "zhaoliu" }} } GET /lib3/user/_search { "query":{ "match"…

solr 3.5 配置及应用(二)

在 solr 3.5 配置及应用(一) 讲过一了 solr 3.5的详细配置,本节我们讲利用solr 的客户端调用solr的应用了! 一、利用SolrJ操作solr API 使用SolrJ操作Solr会比利用httpClient来操作Solr要简单。SolrJ是封装了httpClient方法,来操作solr的API的…

elasticsearch控制返回字段查询三(英文分词)match查询

#_source指定查询返回的字段信息 #_source指定查询返回的字段信息 GET /lib3/user/_search {"from":0, "size": 2, "_source": ["address" , "name"] ,"query": {"match": {"interests": &…

通过日志恢复MSSQL数据例子

这段时间看了关于在SQL server 中通过日志和时间点来恢复数据。也看了一些网上的例子,看如何通过日志来恢复数据。 前提条件: 数据库的故障恢复改为非简单模式,去掉自动关闭和自动收缩两个选项 如果是简单模式: 类似下面的语…

ElasticSearch通配符 * 查询(英文检索)

#如果你要查询的字段信息记得不太清楚, 我们也可以使用通配符 * GET /lib3/user/_search {"from":0, "size": 2,"_source": {"includes": "addr*","excludes": ["name" , "bir*"]},"…

(转)CDN是如何工作的?

转载自:CDN是如何工作的? CDN是互联网中使用较频繁的一种技术。你也许常听人说:“我们的网站使用了CDN技术”,但可能他们对CDN的了解并不多,也许只局限于--用了以后网站访问速度会变快。 其实,CDN的原理非常…

机器学习笔记(十七)——EM算法的推导

一、Jensen 不等式 在EM算法的推导过程中,用到了数学上的Jensen不等式,这里先来介绍一下。 若Ω是有限集合{x1,x2,…,xn}{x1,x2,…,xn},而μ是Ω上的正规计数测度,则不等式的一般形式可以简单地用和式表示: φ(∑i1ng(xi)λi)≤…

基本查询(Query查询中文)

查询语句: GET /lib4/user/_search {"query": {"term": {"interests":"唱歌"}} }#terms:查询某个字段里含有多个关键词的文档 GET /lib4/user/_search {"query":{"terms":{"interests": …

C#实现POST提交方式

网页自动登录和提交POST信息的核心就是分析网页的源代码(HTML),在C#中,可以用来提取网页HTML的组件比较多,常用的用WebBrowser、WebClient、HttpWebRequest这三个。 以下就分别用这三种方法来实现: 1、WebB…

EasyCode.Net代码生成器使用心得

前段时间购买了一个EasyCode的正式使用许可 看他的界面设计的不错 就用他生成了一个项目(目地是想把以前我自己的一个程序的界面给更换下 人家有专业的UI设计我自己设计出来的肯定没有人家专业UI设计师弄出来的好看) ,项目生成完了 发现还不能直接更换界面他的是sq…

系统管理员必须知道的PHP安全实践

系统管理员必须知道的PHP安全实践 PHP是一种开源服务器端脚本语言,应用很广泛。Apache web服务器提供了这种便利:通过HTTP或HTTPS协议, 访问文件和内容。配置不当的服务器端脚本语言会带来各种各样的问题。所以,使用PHP时要小心。…

ElasticSearch filter查询

学习查询之前,我还是老规矩,先准备数据 #Filter查询 #filter是不计算相关性的,同时可以cache.因此,filter速度要快于query. POST /lib5/items/_bulk {"index":{"_id": 1}} {"price": 40,"ite…

SQL Server 2005中的分区表(四):删除(合并)一个分区

在前面我们介绍过如何创建和使用一个分区表,并举了一个例子,将不 同年份的数据放在不同的物理分区表里。具体的分区方式为: 第1个小表:2010-1-1以前的数据(不包含2010-1-1)。 第2个小表:2010-1-…

畅通您的iOS开发之路

随着大家对苹果产品的趋之若鹜,iphone与ipad软件开发的前景也相当广阔。然而,目前精通iOS开发的专业人才却是凤毛麟角。因此,安博中 程在2012年推出重磅课程——“iPhone与iPad开发实战之路——精通iOS开发”高级培训班,为想从事i…