美文网首页
NLP笔记 - 词向量

NLP笔记 - 词向量

作者: 纸上谈兵何某某 | 来源:发表于2019-07-12 16:16 被阅读0次

    学习词向量的笔记

    词向量 or word2vec,一种NLP中对词语的特征表示。由于one-hot会产生维度灾难,特征矩阵过于稀疏,于是引入神经网络,将tokens投射到固定维度(通常是100-500维)的实数向量。

    主要是通过tokens附近的词语,一个是CBOW(continious bags of words),另外一个是 skip-grams。其实两个方式类似相互倒置,同样是通过一个input layer,一个hidden layer,一个output layer。

    CBOW.jpeg skip-gram.jpeg

    其实二者的区别仅仅在于样本的选取方式的区别,CBOW是多个X对应一个Y,skip-gram是一个X对应多个Y,实际的网络结构是一样的(如下)

    When computing
    the hidden layer output, instead of directly copying the input vector of the input context word, the CBOW model takes the average of the vectors of the input context words, and use the product of the input→hidden weight matrix and the average vector as the output.

    On the output layer, instead of outputing one multinomial distribution, we are outputing C multinomial distributions

    所以他们的核心是一样的,只是输入输出的样本不同,多词的时候加上了求和,会影响在梯度求解里面


    single_w2v.jpg

    关键点

    整个流程其实很简单,但是有几个需要注意的细节

    1. 输入与输出?
      由图可得,原来的词编码依然是one-hot/count的V-dim多维形式,通过N-dim的隐藏层,转化为同样是V-dim的形式,因为在训练词库中,都是客观的sentence,所以输入输出都是客观的。训练就是求解W的过程。

    2. 实际的词向量是什么?

      (skip-gram)当模型训练完后,最后得到的其实是神经网络的权重,比如现在输入一个 x 的 one-hot encoder: [1,0,0,…,0],对应刚说的那个词语『吴彦祖』,则在输入层到隐含层的权重里,只有对应 1 这个位置的权重被激活,这些权重的个数,跟隐含层节点数是一致的,从而这些权重组成一个向量 vx 来表示x,而因为每个词语的 one-hot encoder 里面 1 的位置是不同的,所以,这个向量 vx 就可以用来唯一表示 x。

      在上图中可以得到,其实就是权重W,V x N 维的实数矩阵,然后V是一个非常大的数,整个词库一共包含V个词,对每个词有一个one-hot编码[0,0,0...1,0,0,..],在训练结束后,得到的W,有V行,每行N列,其实就是V个词分别对应的N维词向量表示方法。

    PS:《word2vec Parameter Learning Explained》论文里面真的详细

    数学推导

    1. single world COBA (figure above)
      y就是softmax on W'h的结果
      p(w_j|w_I) = y_j = \frac{exp(u_j)}{\sum_{allj} exp(u_j')}
      因为隐藏层只做求和处理,所以上式可以拆成
      p(w_j|w_I) = \frac{exp(v'^T_{wj}v_{wI})}{\sum_{allj} exp(v'^T_{wj}v_{wI})}
      最后结合输入输出,最大化 p(w_O|w_I),得到损失函数
      p(w_O|w_I) = max y_{j*} = u_{j*} - log \sum exp(u_j') := - log p(w_O|w_I)
      然后采用BP对各层进行更新。。PS 梯度的推导好难啊。。。

    2. Hierarchical Softmax
      因为在更新中,对input vector v_w的开销要比output vector v_w' 小,为了减少 v_w'的计算开销(需要遍历所有词,并且计算概率etc),采用Hierarchical Softmax 或者 down-sampling 来减少v_w'的更新次数
      二叉树,V words必须都是叶子节点,inner node V-1,通过root-leaf路径估计概率,把O(n) 变成 O(log(n)),在实际训练中,树的左右probability也就是训练参数
      其实就是将神经网络扁平的隐藏层到数据层的映射变成树的结构
      先通过词库构建一个Huffman tree(基于词频),然后再根据这颗树的结构,计算左右子树的概率参数

    源码 Go Though

    参考:
    https://cloud.tencent.com/developer/news/357443
    https://cloud.tencent.com/developer/news/342538
    https://zhuanlan.zhihu.com/p/26306795
    https://arxiv.org/pdf/1411.2738.pdf

    相关文章

      网友评论

          本文标题:NLP笔记 - 词向量

          本文链接:https://www.haomeiwen.com/subject/elkykctx.html