0%

课程学习-CS224n-Lecture 2 Word Vectors 2 and Word Senses

原始Word2Vec的细节

Word2Vec通过最大化目标函数来使得拉近相似的word vectors

为什么使用两个vector:数学上更容易进行优化,可以在最后对两个vector进行平均得到一个vector

模型变体:

  • Skip-gram model:从给定的center word预测context words
  • Continuous Bag of Words:从一系列的context words中预测center word

原始Word2Vec的优化问题

虽然使用随机梯度下降SGD更新,但仍存在两个问题导致模型效率低下。

  • 每次梯度更新时,仅更新window中的word vector,但计算梯度时计算的整个参数矩阵,如果这个word未出现在window中,其偏导为0,则梯度矩阵非常稀疏;
  • 目标函数中计算条件概率 P(o|c) 时采用softmax函数,其中分母计算所有context wordcenter word的相似度得分计算并求和。

解决方案:

  • 针对稀疏矩阵,可以使用稀疏矩阵去更新特定的embedding;或者使用 hash映射到具体的word vector

  • 针对softmax函数计算量过大。

    解决方案包括:将常见词组作为一个word;少采样常见词;Hierarchial Softmax(通过构建Huffman tree,复杂度由 O(V) 变为 O(\log V) );negative sampling

    采用negative sampling

    其主要思想为:训练一个二元逻辑斯蒂回归,去判断一对word对是否是正负对(其中,center word跟真实context word为正对,center word跟随机采样的word为负对,希望正对相似度的概率更大,而负对相似度的概率更小)。

    之前的skip-gram model可以看作是希望最大化 P(o|c) ,而negative sampling是希望最大化 P(1|o,c) ,而最小化 P(0|i,c) ,其中 o,i 分别是 c 的真实context word与随机context word

    其总的损失函数为:

    J(\theta) = \frac{1}{T}\sum_{t=1}^TJ_t(\theta),\ J_t(\theta) = \log \sigma(u_o^Tv_c) + \sum_{i=1}^k\mathbb{E}_{j\sim P(w)}[\log\sigma(-u_j^Tv_c)]

    其中,对于center word v_c ,希望context word u_o v_c 为正对,希望不是context word u_j v_c 为负对, P(w) 为采样的概率分布。最大化 J_t(\theta) 等价于最小化下式:

    J_{neg-sample}(\mathbf{o,v_c,U}) = -\log(\sigma(\mathbf{u_o^Tv_c})) - \sum_{k=1,k\sim P(w)}^K\log(\sigma(-\mathbf{u_k^Tv_c}))

    为了平衡高频词和低频词的影响,取 P(w)=\frac{U(w)^{3/4}}{Z} ,其中 U(w) unigram分布(即按词频比作为其概率分布),指数部分的 3/4 是为了平衡词频的影响,而 Z 则是重新归一化为概率分布。

    由此,对word vector进行更新,得到的式子如下:

    \begin{aligned} \frac{\partial{J_{neg-sample}}}{\partial{v_c}} &= [\sigma(u_o^Tv_c)-1]u_o + \sum_{k=1,k\sim P(w)}^K[1-\sigma(-u_k^Tv_c)]u_k \\ \frac{\partial{J_{neg-sample}}}{\partial{u_o}} &= [\sigma(u_o^Tv_c)-1]v_c \\ \frac{\partial{J_{neg-sample}}}{\partial{u_k}} &= \sum_{k=1,k\sim P(w)}^K[1-\sigma(-u_k^Tv_c)]v_c \end{aligned}

如何构建共现矩阵 X

  • word-document co-occurrence matrix:假设同一篇文章中出现的单词有可能互相关联,元素 X_{ij} 表示word i 出现在文章 j 的次数。

  • window-based word-word co-occurrence matrix:利用定长窗口统计窗口中wordword同时出现的次数。

可能存在的问题:随着语料库的增加,维度过高,存储占用过大;存在稀疏性问题,模型不够鲁棒。

解决方法:

  • 使用低维度的vector,仅保存最重要的一些维度,构建dense vector;

  • count based model的经典工作SVD:通过统计数据得到co-occurrence matrix X ,再对 X 进行奇异值分解得到 U\Sigma V^T ,为了减少尺度并尽量保留有效信息,选取对角矩阵中最大的 k 个值。

Count based和direct prediction的比较

  • Count based(SVD):

    优点:训练快速,且有效利用了统计信息;

    缺点:偏向于高频词,仅能概括word的相关性。

  • direct prediction(Word2Vec):

    优点:在其他任务上效果较好,且可以概括比相关性更复杂的信息;

    缺点:受限于语料库的大小,对统计信息利用不够充分。

GloVe

结合Count based ModelDirect Prediction Model的优势。

优点:训练更快;可扩展到大型语料库;在小的语料库和vector上也有较好的效果。

定义一个矩阵 X ,其中 X_{ij} 表示word j 出现在word i context中的次数,则 X_{i}=\sum_{k}X{ik} 表示出现在word i context中的所有word的次数, P_{ij}=P(j|i)=X_{ij}/X_i 表示word j 出现在word i context中的概率。

引入额外的word k ,比较共现概率的比值 \frac{P_{ik}}{P_{jk}} ,发现如下的规律:

\frac{P_{ik}}{P_{jk}} j,k 相关 j,k 不相关
i,k 相关 接近1 很大
i,k 不相关 很小 接近1

由上表可知, \frac{P_{ik}}{P_{jk}} 能够反映word i,j​ 之间的相关性。

怎样在词向量空间中计算共现概率的比值?

  • 假设对于word vector w_i,w_j,w_k ,模型函数 F 用来计算共现概率的比值,式子如下:

    F(w_i,w_j,w_k) = \frac{P_{ik}}{P_{jk}}

    其中, w_i,w_j 表示想要比较的word vector,而 w_k 表示其它的word vector

  • 由于向量空间为线性空间,为了计算线性空间中的相似性,假设 F word vector w_i,w_j 作差的形式,则:

    F(w_i-w_j,w_k) = \frac{P_{ik}}{P_{jk}}
  • 上式左边为矢量,而右边为标量,通过选择矢量的点积来将矢量转化为标量形式,则:

    F((w_i-w_j)^Tw_k) = \frac{P_{ik}}{P_{jk}}
  • 上式左边为差,右边为商,通过选取 F=\exp 来进行关联,得到:

    \exp((w_i-w_j)^Tw_k) = \frac{\exp(w_i^Tw_k)}{\exp(w_j^Tw_k)} = \frac{P_{ik}}{P_{jk}}
  • 由上式,我们希望 \exp(w_i^Tw_k)=P_{ik}=\frac{X_{ik}}{X_i} ,即 w_i^Tw_k = \log X_{ik}-\log X_i ,考虑word-word co-occurrence共现矩阵的对称性,希望 w_i^Tw_k=w_k^Tw_i ,但 \log X_{ik}-\log X_i\ne \log X_{ki}-\log X_k ,引入两个偏置项 b_i,b_k 平衡对称性,希望得到:

    \log X_{ik}=w_i^Tw_k+b_i+b_k
  • 则理想情况下,希望上式左右两部分接近,故目标函数为:

    J = \sum_{i,k}(w_i^Tw_k + b_i + b_k - \log X_{ik})^2
  • 考虑co-occurence word的出现次数的影响,加入 f(X_{i,k}) 作为权重,故最终目标函数为:

    J = \sum_{i,k=1}^Vf(i,k)(w_i^Tw_k + b_i + b_k - \log X_{ik})^2

    其中,权重项 f(X_{i,k}) 需要满足如下条件:

    • f(0)=0 (如果两个word没有共现,则权重为0);
    • f(x) 为非减函数(两个word共现次数越大,权重不减);
    • f(x) 对于较大的 x ,不能取过大的值(避免一些word(比如,‘的’)共现次数较大,但其重要性较低)。

    文中定义 f(x)=\begin{cases}(x/x_{max})^\alpha \ \ \ \text{if}\ \ x<x_{max}\\ 1 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ otherwise\\ \end{cases} ,其图像如下:

参考文献:

  • CS224N笔记(二):GloVe - 知乎 (zhihu.com)

  • cs224n学习笔记L2:word vectors and word senses_三七的博客-CSDN博客