美文网首页
Pytorch 之词向量 W2V -- 理论部分

Pytorch 之词向量 W2V -- 理论部分

作者: 比特凡人 | 来源:发表于2020-03-11 16:53 被阅读0次

复现这篇论文

理论篇

w2v

  • 原始优化方式
    minimize J=-\log P\left(w_{c-m}, \ldots, w_{c-1}, w_{c+1}, \ldots, w_{c+m} | w_{c}\right)
    \begin{array}{l} =-\log \prod_{j=0, j \neq m}^{2 m} P\left(w_{c-m+j} | w_{c}\right) \\ =-\log \prod_{j=0, j \neq m}^{2 m} P\left(u_{c-m+j} | v_{c}\right) \\ =-\log \prod_{j=0, j \neq m}^{2 m} \frac{\exp \left(u_{c-m+j}^{T} v_{c}\right)}{\sum_{k=1}^{|V|} \exp \left(u_{k}^{T} v_{c}\right)} \\ =-\sum_{j=0, j \neq m}^{2 m} u_{c-m+j}^{T} v_{c}+2 m \log \sum_{k=1}^{|V|} \exp \left(u_{k}^{T} v_{c}\right) \end{array}
    • 梯度下降
      \begin{aligned} \frac{\partial \log P\left(w_{o} | w_{c}\right)}{\partial \boldsymbol{v}_{c}} &=\boldsymbol{u}_{o}-\frac{\sum_{j \in \mathcal{V}} \exp \left(\boldsymbol{u}_{j} \boldsymbol{v}_{c}\right) \boldsymbol{u}_{j}}{\sum_{i \in \mathcal{V}} \exp \left(\boldsymbol{u}_{i} \boldsymbol{v}_{c}\right)} \\ &=\boldsymbol{u}_{o}-\sum_{j \in \mathcal{V}}\left(\frac{\exp \left(\boldsymbol{u}_{j} \boldsymbol{v}_{c}\right)}{\sum_{i \in \mathcal{V}} \exp \left(\boldsymbol{u}_{i} \boldsymbol{v}_{c}\right)}\right) \boldsymbol{u}_{j} \\ &=\boldsymbol{u}_{o}-\sum_{j \in \mathcal{V}} P\left(w_{j} | w_{c}\right) \boldsymbol{u}_{j} \end{aligned}
      从刚刚最终的梯度公式中,存在着一个参数\mathcal{V},我们知道这个参数代表的含义是词典中单词的个数,通常这个个数会非常大,这时候我们在进行迭代的时候对系统消耗也是巨大的,因为每走一步就要对所有的单词进行一次矩阵运算,这里讨论如何解决。

优化

负采样

在 skip-gram 模型, 即通过中心词来推断上下文一定窗口内的单词, 进行softmax来求解,势必会造成维度灾难,所以这里进行负采样
P(D=1 | w, c, \theta)=\frac{1}{1+e^{\left(-v_{c}^{T} v_{w}\right)}}
\log \sigma\left(u_{c-m+j}^{T} \cdot v_{c}\right)+\sum_{k=1}^{K} \log \sigma\left(-\tilde{u}_{k}^{T} \cdot v_{c}\right)

  • 每个中心词,也是其他情况的周围词,所以每个词会有两个词向量,一个是周围词,一个是中心词
    • 在自然语言处理应用中,一般使用跳字模型的中心词向量作为词的表征向量。
Hierarchical Softmax

采用层次softmax 可以使时间复杂度降低到 log_2 w
这个 博客很好 https://www.cnblogs.com/pinard/p/7243513.html了解详情就看一下。

相关文章

网友评论

      本文标题:Pytorch 之词向量 W2V -- 理论部分

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