word2vec是如何得到词向量的

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了word2vec是如何得到词向量的相关的知识,希望对你有一定的参考价值。

参考技术A 假设每个词对应一个词向量,假设:
1)两个词的相似度正比于对应词向量的乘积。即:sim(v1,v2)=v1⋅v2sim(v1,v2)=v1⋅v2。即点乘原则;
2)多个词v1∼vnv1∼vn组成的一个上下文用CC来表示,其中C=∑ni=1viC=∑i=1nvi。C|C|C|C|称作上下文C的中心向量。即加和原则;
3)在上下文CC中出现单词AA的概率正比于能量因子e−E(A,C),whereE=−A⋅Ce−E(A,C),whereE=−A⋅C。即能量法则(可参看热统中的配分函数)。
因此:

p(A|C)=e−E(A,C)∑Vi=1e−E(vi,C)=eA⋅C∑Vi=1evi⋅C (1)p(A|C)=e−E(A,C)∑i=1Ve−E(vi,C)=eA⋅C∑i=1Vevi⋅C (1)

其中VV是整个词汇空间。
ref1ref1的分母计算是非常耗时的,下面推导比较方面快速的计算ref1ref1的方法。
把整个词汇空间分成两部分GG和HH,同时在下面的公式中GG和HH也表示各自的词向量中心,并且设AA存在于GG中,则:

p(A|C)=p(A|G,C)⋅p(G|C) (2)p(A|C)=p(A|G,C)⋅p(G|C) (2)

where,

p(G|C)=eG⋅CeG⋅C+eH⋅C=11+e(H−G)⋅C (3)p(G|C)=eG⋅CeG⋅C+eH⋅C=11+e(H−G)⋅C (3)

and,

p(A|G,C)=eA⋅C∑w∈Gew⋅C (4)p(A|G,C)=eA⋅C∑w∈Gew⋅C (4)

引入sigmoidsigmoid函数σ(x)=1/(1+e−x)σ(x)=1/(1+e−x),则

p(G|C)=σ(−(H−G)⋅C)=σ((G−H)⋅C)p(G|C)=σ(−(H−G)⋅C)=σ((G−H)⋅C)

p(G|C)p(G|C)只是简单的计算两部分向量之差,不能再简化了。
另外,根据上述定义,很容易得到这个关系p(G|C)=1−(H|C)p(G|C)=1−(H|C),因为CC要么落在GG要么落在HH。
观看ref4ref4,则知p(A|G,C)p(A|G,C)是另一个版本的p(A,C)p(A,C),只是词汇空间从V→GV→G而已。然后我们继续拆分GG递归的计算下去,最后只需要计算各兄弟部分的向量差而已。这是一个典型的二叉树,划分规则在开始就可确定,如果考虑查询效率的话,就是一个霍夫曼树。其中每个叶子节点表示一个单词,每个中间节点G or HG or H的向量为所有子向量的中心。
展开来就是:

p(A|C)=∏σ((Gi−Hi)⋅C)p(A|C)=∏σ((Gi−Hi)⋅C)

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

现在我们这里有一堆的语料,一行一行分好词的,语料那是相当的多,以至于它涵盖了自然语言中的所有正确句子,每个单词在它所在的位置都是恰到好处。现在每个单词我们有一个对应的词向量,我们怎么来衡量这批词向量的好坏呢。
这批词向量张成一个自然语言的空间(从线性代数来说这样描述可能不太准确),它自己规定的自然语言空间,在这个空间中,它可以导出给定语料在它的空间中出现的概率。熟悉吧,这就是语言模型。
我们可以根据词向量计算出来每个单词在它的位置出现的概率,然后这整个语料在这个向量空间中出现的概率就等于每个词在其位置出现概率的乘积。
即,

p(T)=∏p(wi|Contexti) (5)p(T)=∏p(wi|Contexti) (5)

TT为整个语料样本,ContextiContexti为单词ii的上下文,理论上是扣除该单词后剩下的所有单词包括位置。当然了,我们只考虑它的前后cc个邻居。
我们的目标是使ref5ref5最大化,实际中是加loglog加负之后的最小化。怎么以高效率优化这个目标函数呢,这是一个典型的运筹学问题,而且还是非线性规划。我要翻一下运筹学的教材了。

以上是关于word2vec是如何得到词向量的的主要内容,如果未能解决你的问题,请参考以下文章

word2vec 构建中文词向量

word2vec是如何得到词向量的

Glove词向量

如何构建词空间向量和文本向量化

词向量:GloVe

Word2vec 理解