002-词向量,神经网络模型,CBOW,哈夫曼树,Negative Sampling

 

 

词向量:

无论是一段话或是一篇文章,词都是最基本的组成单位。

如何让计算机利用这些词?

 

 

重点是如何把一个词转换成一个想向量

 

如果在一个二维空间中,had,has,have意思相同,所以要离的比较近。

need,help也是离的比较近

要表现出相同,相关。

比如说下面的例子:

哪些词离青蛙frog比较近?同义词

 

对于两种不同语言,建模之后语言空间也是很接近的,

所以可以说构建出来的词向量跟语言类别无关,只是根据语义环(上下文的逻辑)境来建模。

 

神经网络模型:

将输入词向量进行首尾相接(projection Layer 投影层),在传给神经网络进行参数优化,

这里的输入向量也需要被优化。

训练样本:包括前n-1个词分别的向量,假定每个词向量大小m

投影层:(n-1)*m 首尾拼接起来的大向量

输出:

表示上下文为时,下一个词恰好为词典中第i个词的概率

归一化:

 

 

目的就是要求出每一个词的词向量是什么。

 

 

 

神经网络的优势:

S1 = ‘’我今天去网咖’’ 出现了1000次
S2 = ‘’我今天去网吧’’ 出现了10次


对于N-gram模型:P(S1) >> P(S2)
而神经网络模型计算的P(S1) ≈ P(S2)

 

 

神经网络看来,类似的句子和词都是一个东西

只要语料库中出现其中一个,其他句子的概率也会相应的增大

 

 

 

 Hierarchical Softmax:

 分层的softmax

 

 

 CBOW:根据上下文得到当前词

skip-gram:根据当前词得到上下文。

 

CBOW:

CBOW 是Continuous Bag-of-Words Model 的缩写,是一种根据上下文的词语预测当前词语的出现概率的模型

 

如果出现上下文,词w我们希望它出现的概率应该是越大越好的

 

 

我们需要先了解一个叫做哈夫曼树的东西

哈夫曼树:

相当于权值乘以步长,把权值最大的放在最前面,在word2vec中,我们可以把词频(概率)当做这个权值。

这个二分类可以做softmax分层的判断,判断是不是后面要出现的词,然后把重要的放在第1位,第2位。。。。。。

哈夫曼树的构造流程

利用哈夫曼树编码:

 

A:111

C:110

B:10

D:0

 

在哈夫曼树中,如何决定走向呢?(决定左右)

用以前的知识:逻辑回归

sigmoid函数

 

 

 任意数值输入,得到0~1的输出,那么就可以根据这个输出分类往左还是往右

 

接着说前文的CBOW

 

输入层是上下文的词语的词向量,在训练CBOW模型,词向量只是个副产品,确切来说,是CBOW模型的一个参数。训练开始的时候,词向量是个随机值,随着训练的进行不断被更新)。
投影层对其求和,所谓求和,就是简单的向量加法。
输出层输出最可能的w。由于语料库中词汇量是固定的|C|个,所以上述过程其实可以看做一个多分类问题。给定特征,从|C|个分类中挑一个。

 

如果我最后需要得到足球这个词,那么流程就是:

.

如何求解:

目标函数:

越大越好

求它的最大值也就是求一个梯度上升的问题。

因为和向量和每一个词向量是线性相关的,所以对和向量更新可以应用到每一个词向量当中

 

 

skip-gram:

 

 还需要考虑的一个问题,如果语料库非常大,即使用了哈夫曼树的话,常见的排在最前面,那么有很多不常见的排在后面,这样就会使计算复杂度变得非常大。

有一种解决方法叫做Negative Sampling(负采样):

我们希望预测对的就可能性达到最大化。

累乘的意思就是所有的词都可以预测对。

所求的值是一样的,只不过通过另外一种方法描述出来了,前者是通过霍夫曼树,现在是通过区间取值。

 

 

最后更新词向量

posted on 2018-10-20 00:01  医疗兵皮特儿  阅读(574)  评论(0编辑  收藏  举报

导航