word2vec原理知识铺垫

word2vec: 词向量计算工具====》训练结果 词向量(word embedding) 可以很好的度量词与词的相似性,word2vec为浅层神经网络

*值得注意的是,word2vec是计算word vector 的开源工具。 当说word2vec算法或模型时,是指背后用于计算word vector 的CBOW模型和Skip-gram

如何计算一段文本序列在某种语言下出现的概率?
对于一段文本序列S=w1,w2,...,wT,它的概率可以表示为:
P(S)=P(w1,w2,...,wT)=∏p(wt|w1,w2,...,wt−1)
即将序列的联合概率转化为一系列条件概率的乘积。问题变成了如何去预测这些给定previous words下的条件概率:p(wt|w1,w2,...,wt−1)
巨大的参数空间,这个原始模型在实际中并没有卵用,更多采用其简化版本,Ngram模型:
p(wt|w1,w2,...,wt−1)≈p(wt|wt−n+1,...,wt−1) ===>常见的如bigram模型(N=2)和trigram模型(N=3)。
事实上,由于模型复杂度和预测精度的限制,我们很少会考虑N>3的模型
我们可以用最大似然法去求解Ngram模型的参数——等价于去统计每个Ngram的条件词频。

值得注意的是:Ngram模型仍有其局限性。首先,由于参数空间的爆炸式增长,它无法处理更长程的context(N>3)。其次,它没有考虑词与词之间内在的联系性。

考虑"the cat is walking in the bedroom"这句话。如果我们在训练语料中看到了很多类似“the dog is walking in the bedroom”或是“the cat is running in the bedroom”这样的句子,那么,即使我们没有见过这句话,也可以从“cat”和“dog”(“walking”和“running”)之间的相似性,推测出这句话的概率[3]。然而, Ngram模型做不到 ====>Ngram本质上是将词,孤立的原子单元(atomic unit)去处理的,one-hot 方式, 在大数据词典的实际应用中,面临维度灾难。

解决方法:用一个连续的稠密向量去刻画一个word的特征, 这样既可以刻画词与词之间的相似度,也可以建立一个从向量到概率的平滑函数模型,使得相似的词向量可以映射到相近的概率空间上,
这个稠密的向量称为word的distributed representation ===> 向量空间模型 vector space model(VSM) ==>基于statistical semantic hypothesis, word2vec 基于 distribution hypothesis, 即上下文相似的两个词有着相近的语义

问题: VSM如何将离散的one hot词向量 映射到稠密连续的distribution representation??
bag of word hypothesis 构造一个term-document矩阵A:矩阵的行 Ai 对应着词典里的一个word,矩阵的列 Aj 对应着训练预料里的一篇文档,Ai,j代表word wi 在文档Dj中出现的次数,那么就可以提取行向量作为word的语义向量。

for example: the dog is walking in the bedrom , the cat is running in the bedroom
构造term-document矩阵A:
the 2 2
dog 1 0
cat 0 1
is 1 1
walking 1 0
running 0 1
in 1 1
bedrom 1 1
则提取行向量作为word的语义向量,思考:这是基于词频的,也可以基于此得到主题分布,但是缺少语义的考虑即上下文context

distributional hypothesis 构造word-context 的矩阵,与term-document相比,矩阵的列变成了context里的word,矩阵的元素也变成了一个context窗口里word的共现次数。
word-context矩阵 通过统计一个事先指定大小的窗口内的word共现次数,不仅可以刻画word的语义信息,还在一定程度上反映了word的语法结构信息。

for example:I like deep learning; I like NLP; I enjoy flying;
设置窗口的大小为1, 得到word-content矩阵

I like enjoy deep learning NLP flying .
I 0 2 1 0 省略后面
like 2 0 0 1
enjoy 1 0 0 0
deep 0 1 0 0
learning 0 0 0 1
NLP 0 1 0 0
flying 0 0 1 0
. 0 0 0 0
*注意:矩阵里的元素是列向量所代表的word出现在行向量所代表的word的上下文的次数。

得到word-context 矩阵后,可以用此矩阵的行向量来计算word之间的相似度。
*But, 词向量的维度等于词典的大小,会出现极大的资源消耗,伴随着高维向量出现的数据稀疏性问题,训练变得困难,总结起来就是两句话,数据稀疏性和维度灾难。

解决办法-----**********SVD分解:低维词向量的简接学习******-----------
就维度灾难和数据稀疏性,比较自然的方法就是降维,得到稠密的连续词向量。
方法:SVD奇异值分解(通过将原co-occurrence矩阵X分解为一个正交矩阵U,一个对角矩阵S,和另一个正交矩阵V乘积的形式,并提取U的k个主成分(按S里对角元的大小排序)构造低维词向量)、Hacks。

*SVD的优势:SVD分解得到的稠密词向量,也具有很多优美的性质。语义相近的词(比如"wrist"和"ankle")可以通过用词向量内积定义的相似度聚类到一起;同一动词的不同时态也往往出现在向量空间的同一片区域。词向量甚至可以一定程度上反应word之间的线性联系

*SVD的劣势:高额的计算复杂度花销,与deep learning 相比是两类不同的学习算法。
****将word表示为一个稠密的低维连续向量的思想被应用,将原始的稀疏矩阵分解为两个低秩矩阵乘积的形式。

***************Neural Network Language Model , NNLM
Bengio NNLM模型的基本思想:
假定词表中的每一个word都对应着一个连续的特征向量;
假定一个连续平滑的概率模型,输入一段词向量的序列,可以输出这段序列的联合概率;
同时学习词向量的权重和概率模型里的参数。

***************NNLM这一部分比较有意思

 

posted @ 2019-01-09 15:23  陈柯成  阅读(473)  评论(0编辑  收藏  举报