word2vec生成词向量原理
假设每个词对应一个词向量,假设:
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生成词向量原理的更多相关文章
- word2vec生成词向量和字向量
生成字符向量的过程中需要注意: 1)在收集数据生成corpus时候,通过Word2Vec生成字向量的时候,产生了“ ”空格字符向量,但是加载模型是不会成功的.那么你不是生成的binary文件,就可以修 ...
- 基于word2vec训练词向量(二)
转自:http://www.tensorflownews.com/2018/04/19/word2vec2/ 一.基于Hierarchical Softmax的word2vec模型的缺点 上篇说了Hi ...
- 基于word2vec训练词向量(一)
转自:https://blog.csdn.net/fendouaini/article/details/79905328 1.回顾DNN训练词向量 上次说到了通过DNN模型训练词获得词向量,这次来讲解 ...
- [Algorithm & NLP] 文本深度表示模型——word2vec&doc2vec词向量模型
深度学习掀开了机器学习的新篇章,目前深度学习应用于图像和语音已经产生了突破性的研究进展.深度学习一直被人们推崇为一种类似于人脑结构的人工智能算法,那为什么深度学习在语义分析领域仍然没有实质性的进展呢? ...
- 文本分布式表示(二):用tensorflow和word2vec训练词向量
看了几天word2vec的理论,终于是懂了一些.理论部分我推荐以下几篇教程,有博客也有视频: 1.<word2vec中的数学原理>:http://www.cnblogs.com/pegho ...
- DNN模型训练词向量原理
转自:https://blog.csdn.net/fendouaini/article/details/79821852 1 词向量 在NLP里,最细的粒度是词语,由词语再组成句子,段落,文章.所以处 ...
- CountVectorizer,Tf-idfVectorizer和word2vec构建词向量的区别
CountVectorizer和Tf-idfVectorizer构建词向量都是通过构建字典的方式,比如在情感分析问题中,我需要把每一个句子(评论)转化为词向量,这两种方法是如何构建的呢?拿CountV ...
- Python Word2Vec使用训练好的模型生成词向量
# 文本文件必须是utf-8无bom格式 from gensim.models.deprecated.word2vec import Word2Vec model = Word2Vec.load( ' ...
- 学习笔记CB009:人工神经网络模型、手写数字识别、多层卷积网络、词向量、word2vec
人工神经网络,借鉴生物神经网络工作原理数学模型. 由n个输入特征得出与输入特征几乎相同的n个结果,训练隐藏层得到意想不到信息.信息检索领域,模型训练合理排序模型,输入特征,文档质量.文档点击历史.文档 ...
随机推荐
- [Mon Feb 10 15:21:06 2014] [notice] child pid 7101 exit signal File size limit exceeded (25)
今天遇到的问题: LAMP的LOG里报如下错误. 然后IE和FIREFOX里显示连接被重置或是无法访问. 但自己建一个正常的PHP测试探针倒可以. 原来是PHP错误日志太多,无法写入LOG导致. [r ...
- TWinControl的DoubleBuffered属性的作用与举例
留个爪,网上搜一篇,仔细分析一下.
- AOP实现方法
原文地址 http://michael-softtech.iteye.com/blog/650779 (1)使用ProxyFactoryBean的代理 Java代码 package chapter4; ...
- 关于type check的定义
Concept: Type Checking There is no static type checking in Scheme; type checking is done at run time ...
- IMAP与POP3的区别
POP3协议允许电子邮件客户端下载服务器上的邮件,但是在客户端的操作(如移动邮件.标记已读等),不会反馈到服务器上.比如通过客户端收取了邮箱中的2封邮件并移动到其他文件夹,邮箱服务器上的这些邮件是没有 ...
- oracle 存储过程和函数例子 --2
关于 游标 if,for 的例子 create or replace procedure peace_if is cursor var_c is select * from grade; begin ...
- 网络流(最大流) HDU 1565 方格取数(1) HDU 1569 方格取数(2)
HDU 1565 方格取数(1) 给你一个n*n的格子的棋盘,每个格子里面有一个非负数.从中取出若干个数,使得任意的两个数所在的格子没有公共边,就是说所取的数所在的2个格子不能相邻,并且取出的数的 ...
- 【宽搜】ECNA 2015 E Squawk Virus (Codeforces GYM 100825)
题目链接: http://codeforces.com/gym/100825 题目大意: N个点M条无向边,(N<=100,M<=N(N-1)/2),起始感染源S,时间T(T<10) ...
- 在Ubuntu中安装Redis
原文地址:http://blog.fens.me/linux-redis-install/ 在Ubuntu中安装Redis R利剑NoSQL系列文章,主要介绍通过R语言连接使用nosql数据库.涉及的 ...
- FTP软件Filezilla出现“读取目录列表失败”的解决办法
FTP软件Filezilla出现“读取目录列表失败”情况一般出现在vista/win7系统上,之前在xp上没发现这种情况. 总的来说,不论是打开FTP出现乱码或者显示“读取目录列表失败”均是由字符集引 ...