今天看啥  ›  专栏  ›  prophet__

吴恩达深度学习-序列模型 2.8 GloVe 词向量

prophet__  · 简书  ·  · 2020-02-10 23:48

我们已经讲了skip-gram和word2vec以及负采样之外,我们还有另外一个方法可以建立词嵌入向量。

在一开始,我们要建立一个计数器,Xij,代表的是context在target附近出现的次数,可以设定为某一个词距之内出现的次数。然后对所有的词进行遍历,这样就可以得到一张表。

我们会使用logXij的方法来对它进行损失函数的计算,然后进行梯度下降,但是如果Xij=0的话,logXij就是无穷大,所以我们需要对它进行一个加权处理。在前面加入一个f(Xij),当Xij=0,则f(Xij)=0,0Xlog0=0。同时,这个f(x)函数还有一个作用是,把and,if这种词的权重控制在一个合理的范围内,再把那些词频很少的单词的权重提高一些。

然后这个算法比较不一样的地方是,它在计算过程当中的Θ和e在整个计算当中是对称的。比如说我们一句话是I am a boy.那么I相对于boy出现了1次,boy相对于I也出现了一次。所以如果我们最后训练出来的e向量,会相当于(两次相加)/2。

在总结关于词向量的算法之前,还有一个问题,就是我们没办法确认,组成词嵌入向量的每一个维度都是可以理解的,比如说这个维度属于食物或者性别这种。

我们在生成嵌入向量的时候每一个维度有可能是很多种我们认知的组合,比如说跟性别相关的是0.3食物相关的0.1风景相关的0.5这种各种各样的东西的叠加。我们不理解每一个维度具体代表什么并不会阻碍他们进行计算,每一个维度生成的向量还是遵循四边形法则,能够很好的比较单词与单词之间的相关关系。




原文地址:访问原文地址
快照地址: 访问文章快照