假设每个词对应一个词向量,假设:

1)两个词的相似度正比于对应词向量的乘积。即:$sim(v_1,v_2)=v_1\cdot v_2$。即点乘原则;

2)多个词$v_1\sim v_n$组成的一个上下文用$C$来表示,其中$C=\sum_{i=1}^{n}v_i$。$\frac{C}{|C|}$称作上下文C的中心向量。即加和原则;

3)在上下文$C$中出现单词$A$的概率正比于能量因子$e^{-E(A,C)},where E=-A\cdot C$。即能量法则(可参看热统中的配分函数)。

因此:

\[p(A|C)=\frac{e^{-E(A,C)}}{\sum_{i=1}^Ve^{-E(v_i,C)}}=\frac{e^{A\cdot C}}{\sum_{i=1}^Ve^{v_i\cdot C}}~~~~(1)\]

其中$V$是整个词汇空间。

$ref{1}$的分母计算是非常耗时的,下面推导比较方面快速的计算$ref{1}$的方法。

把整个词汇空间分成两部分$G$和$H$,同时在下面的公式中$G$和$H$也表示各自的词向量中心,并且设$A$存在于$G$中,则:

\[p(A|C)=p(A|G,C)\cdot p(G|C) ~~~~(2)\]

where,

\[p(G|C)=\frac{e^{G\cdot C}}{e^{G\cdot C}+e^{H\cdot C}}=\frac{1}{1+e^{(H-G)\cdot C}}~~~~(3)\]

and,

\[p(A|G,C)=\frac{e^{A\cdot C}}{\sum_{w\in G}e^{w\cdot C}}~~~~(4)\]

引入$sigmoid$函数$\sigma(x)=1/(1+e^{-x})$,则

\[p(G|C)=\sigma(-(H-G)\cdot C)=\sigma((G-H)\cdot C)\]

$p(G|C)$只是简单的计算两部分向量之差,不能再简化了。

另外,根据上述定义,很容易得到这个关系$p(G|C)=1-(H|C)$,因为$C$要么落在$G$要么落在$H$。

观看$ref{4}$,则知$p(A|G,C)$是另一个版本的$p(A,C)$,只是词汇空间从$V\rightarrow G$而已。然后我们继续拆分$G$递归的计算下去,最后只需要计算各兄弟部分的向量差而已。这是一个典型的二叉树,划分规则在开始就可确定,如果考虑查询效率的话,就是一个霍夫曼树。其中每个叶子节点表示一个单词,每个中间节点$G~ or~ H$的向量为所有子向量的中心。

展开来就是:

\[p(A|C)=\prod \sigma((G_i-H_i)\cdot C)\]

那么问题来了,这个词向量是怎么搞出来了?学习词向量哪家强?

现在我们这里有一堆的语料,一行一行分好词的,语料那是相当的多,以至于它涵盖了自然语言中的所有正确句子,每个单词在它所在的位置都是恰到好处。现在每个单词我们有一个对应的词向量,我们怎么来衡量这批词向量的好坏呢。

这批词向量张成一个自然语言的空间(从线性代数来说这样描述可能不太准确),它自己规定的自然语言空间,在这个空间中,它可以导出给定语料在它的空间中出现的概率。熟悉吧,这就是语言模型。

我们可以根据词向量计算出来每个单词在它的位置出现的概率,然后这整个语料在这个向量空间中出现的概率就等于每个词在其位置出现概率的乘积。

即,

\[p(T)=\prod p(w_i|Context_i)~~~~(5)\]

$T$为整个语料样本,$Context_i$为单词$i$的上下文,理论上是扣除该单词后剩下的所有单词包括位置。当然了,我们只考虑它的前后$c$个邻居。

我们的目标是使$ref 5$最大化,实际中是加$log$加负之后的最小化。怎么以高效率优化这个目标函数呢,这是一个典型的运筹学问题,而且还是非线性规划。我要翻一下运筹学的教材了。

word2vec生成词向量原理的更多相关文章

  1. word2vec生成词向量和字向量

    生成字符向量的过程中需要注意: 1)在收集数据生成corpus时候,通过Word2Vec生成字向量的时候,产生了“ ”空格字符向量,但是加载模型是不会成功的.那么你不是生成的binary文件,就可以修 ...

  2. 基于word2vec训练词向量(二)

    转自:http://www.tensorflownews.com/2018/04/19/word2vec2/ 一.基于Hierarchical Softmax的word2vec模型的缺点 上篇说了Hi ...

  3. 基于word2vec训练词向量(一)

    转自:https://blog.csdn.net/fendouaini/article/details/79905328 1.回顾DNN训练词向量 上次说到了通过DNN模型训练词获得词向量,这次来讲解 ...

  4. [Algorithm & NLP] 文本深度表示模型——word2vec&doc2vec词向量模型

    深度学习掀开了机器学习的新篇章,目前深度学习应用于图像和语音已经产生了突破性的研究进展.深度学习一直被人们推崇为一种类似于人脑结构的人工智能算法,那为什么深度学习在语义分析领域仍然没有实质性的进展呢? ...

  5. 文本分布式表示(二):用tensorflow和word2vec训练词向量

    看了几天word2vec的理论,终于是懂了一些.理论部分我推荐以下几篇教程,有博客也有视频: 1.<word2vec中的数学原理>:http://www.cnblogs.com/pegho ...

  6. DNN模型训练词向量原理

    转自:https://blog.csdn.net/fendouaini/article/details/79821852 1 词向量 在NLP里,最细的粒度是词语,由词语再组成句子,段落,文章.所以处 ...

  7. CountVectorizer,Tf-idfVectorizer和word2vec构建词向量的区别

    CountVectorizer和Tf-idfVectorizer构建词向量都是通过构建字典的方式,比如在情感分析问题中,我需要把每一个句子(评论)转化为词向量,这两种方法是如何构建的呢?拿CountV ...

  8. Python Word2Vec使用训练好的模型生成词向量

    # 文本文件必须是utf-8无bom格式 from gensim.models.deprecated.word2vec import Word2Vec model = Word2Vec.load( ' ...

  9. 学习笔记CB009:人工神经网络模型、手写数字识别、多层卷积网络、词向量、word2vec

    人工神经网络,借鉴生物神经网络工作原理数学模型. 由n个输入特征得出与输入特征几乎相同的n个结果,训练隐藏层得到意想不到信息.信息检索领域,模型训练合理排序模型,输入特征,文档质量.文档点击历史.文档 ...

随机推荐

  1. SharePoint Designer cannot open site error " the server could not complete your request"

    3.SPD cannot open site, in the log :Error when open web service: System.InvalidOperationException: A ...

  2. 【转】Java删除文件夹和文件

    原文网址:http://kxjhlele.iteye.com/blog/323657 以前在javaeye看到过关于Java操作文件的一篇文章,写的很好,但找了半天也没找到,就把找到底几篇文章整理一下 ...

  3. 动态规划(背包问题):HRBUST 1377 金明的预算方案

    金明的预算方案 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱就行 ...

  4. Redis源码阅读笔记(1)——简单动态字符串sds实现原理

    首先,sds即simple dynamic string,redis实现这个的时候使用了一个技巧,并且C99将其收录为标准,即柔性数组成员(flexible array member),参考资料见这里 ...

  5. bzoj 2330 [SCOI2011]糖果(差分约束系统)

    2330: [SCOI2011]糖果 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3574  Solved: 1077[Submit][Status ...

  6. HDU4099 Revenge of Fibonacci(高精度+Trie)

    Revenge of Fibonacci Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 204800/204800 K (Java/ ...

  7. Jenkins 五: 构建Ant项目

    1. 点击“新建”,在“Item名称”栏输入要构建的项目名,比如“Ant_project”,选择“构建一个自由风格的软件项目”,点击“OK”按钮. 2. 找到“源码管理”-> “Subversi ...

  8. selenium grid 测试资料

    像风一样自由的4篇博客: http://blog.csdn.net/five3/article/details/9671287 http://blog.csdn.net/five3/article/d ...

  9. 区别assign VS weak,__block VS __weak

    在objective-c中,类中的全局变量经常使用如下的方式申明. @property(nonatomic(1),strong(2))UIImageView *imageView; 其中的1,2处是对 ...

  10. Servlet工作原理

    Servlet生命周期分为三个阶段: 1,初始化阶段  调用init()方法 2,响应客户请求阶段 调用service()方法 3,终止阶段 调用destroy()方法 Servlet初始化阶段: 在 ...