Embedding小结

Word2Vec Tutorial


Idea

Word2Vec 是一个可以将单词转换为固定维度向量的工具。


Two model

  • Skip-Gram(SG)

    • 基本思想

      给定中心词,去预测窗口范围内的词。

      例如给定句子:{...,"prolems", "turning", ’into", ’banking", "crises’, "as",...}

      给定窗口 m = 2 m = 2m=2 ,中心词为 banking

    在这里插入图片描述

    • 模型

在这里插入图片描述

  • 过程

    • 参数

      在开始训练前,把所有的单词以 one-hot 向量表示,输入中心词 x 的时候就是输入该词的 one-hot 向量表示,在输出预测词 y ′ ​ y'​y 的时候是一个概率向量,这个后面会讲,但是这个预测词对应的真实标签 y ​ y​y 则是一个 one-hot 向量。

      每个词 w i w_{i}wi 都分别有 v i v_{i}viu i u_{i}ui 两个向量表示:

      1. w i w_{i}wi 作为中心词输入时,使用 v i v_{i}vi 参与计算;
      2. w i w_{i}wi 作为上下文词时,使用 u i u_{i}ui 参与计算。

      所以还需要两个重要的矩阵 V ​ V​VU ​ U​U ,即模型图中的权重矩阵 W V ∗ N ​ W_{V*N}​WVNW N ∗ V ′ ​ W'_{N*V} ​WNV

      在这里插入图片描述

      n ​ n​n 是设定好词向量的维度。

      数组 V ​ V​V 如下图所示:

      在这里插入图片描述
      数组 U ​ U​U 如下图所示:

    • 前向过程

      在这里插入图片描述

    • 后向过程
      1. 目标函数

        单词个数为 T TT ,窗口大小为 m mm ,所有单词的向量表示为 θ \thetaθ

        目的是通过训练得到合适的 θ \thetaθ , 最大化似然函数 L ( θ ) L(\theta)L(θ) ,即最小化负的对数似然函数 J ( θ ) J(\theta)J(θ)

        在这里插入图片描述

      2. 推导过程

        对中心词求导:

      在这里插入图片描述

      1. 使用梯度优化算法更新所有的词向量 u c u_{c}ucv j v_{j}vj

        在这里插入图片描述

  • Continuous Bag of Words(CBOW)

    • 基本思想

      给定窗口范围内的词,去预测窗口中间的词。

      例如句子:{"The", "cat", ’jumped", ’over", "the’, "puddle"},窗口大小为 2 ,预测 jump的概率。

      在这里插入图片描述

    • 本质

      依次计算输入的中心词 v c ​ v_{c}​vc 与窗口内的上下词 u o ​ u_{o}​uo 的点积相似度(可换成余弦相似度),并进行 Softmax 归一化。

    • 模型

      在这里插入图片描述

      单词的个数为 V VV,单词向量空间维度为 N NN,上下文单词的个数为 C CC

    • 过程

      • 前向过程

        在这里插入图片描述

        简单来说:

        1. 输入是 C 个上下文词的 one-hot 向量,大小为 C CC[ 1 , V ] [1, V][1,V] 的向量。
        2. 分别将每个 one-hot 向量与权重矩阵 W V ∗ N W_{V*N}WVN 进行点积操作,得到 C CC[ 1 , N ] [1, N][1,N] 的向量,然后累加求平均为一个向量,作为隐层向量的表示。实质上是根据 one-hot 向量中 1 的位置从 W V ∗ N W_{V*N}WVN 中取出每个单词的向量进行累加,融合为一个可以表示这些词的总向量。
        3. 将得到的矩阵与权重矩阵 W N ∗ V ′ W'_{N*V}WNV 进行点积操作,得到大小为 [ 1 , V ] [1,V][1,V] 的矩阵。实质上是将第二步得到的C个词总向量与 W N ∗ V ′ ​ W'_{N*V}​WNV 中的每一列(每一个单词的向量表示)做点积相似度计算。
        4. [ 1 , V ] ​ [1,V]​[1,V] 的矩阵经过 Softmax 函数变换为概率矩阵 y ^ ​ \hat y​y^,其中数值最大的那个就代表预测出来的中间词 v c ​ v_{c}​vc 的索引。
        5. 与真实的中间词 v c ​ v_{c}​vcone-hot 向量比较,计算误差。
      • 后向过程

        前向过程已经说明有了 V VVU UU 向量,即权重矩阵 W V ∗ N W_{V*N}WVNW N ∗ V ′ W'_{N*V}WNV ,模型是如何训练的。后向过程则会说明如何优化参数 V VVU UU

        1. 使用交叉熵作为损失函数:

          H ( y ^ , y ) = − ∑ j = 1 V y j l o g ( y j ^ ) H( \hat{y}, y) = - \sum_{j=1}^{V} y_{j}log(\hat{y_{j}})H(y^,y)=j=1Vyjlog(yj^)

          y j ^ \hat{y_{j}}yj^ 的结果是经过 Softmax 计算后的一个概率向量,y j y_{j}yj 则是一个 one-hot 向量。

        2. 最小化损失函数:

          在这里插入图片描述

        3. 使用梯度优化算法更新所有的词向量 u c u_{c}ucv j v_{j}vj

          在这里插入图片描述


Two Training methods

  • Hierarchical softmax

    • 原理
      1. 从隐藏层到输出层的 Softmax 时,需要计算 e x p ( u o T v c ) ∑ w = 1 ∣ V ∣ e x p ( u o T v c ) \frac{exp(u_{o}^T v_{c})}{\sum_{w=1}^{\left| V \right|} exp(u_{o}^T v_{c})}w=1Vexp(uoTvc)exp(uoTvc) ,然而分母里直接将中心词与所有词进行计算非常耗时,所以就引出了 层次softmax

      2. 根据单词的个数建立霍夫曼树,作为从隐藏层到实际单词的映射过程,取代了从隐藏层到输出层中 Softmax 的计算结果 y ′ y'y

      3. 与霍夫曼树编码不同的是,往左时编码为 1,往右时辩吗为 0,刚好和霍夫曼树编码反过来。

      4. 每个叶子结点都是一个单词 w ​ w​w ,叶子结点总数为词汇表的大小 V ​ V​V

      5. 非叶子结点作为其左右子树中所有单词的集合,用符号 θ = n ( w i , k ) ​ \theta =n(w_{i},k)​θ=n(wi,k) 表示,k ​ k​k 表示该结点属于第几层,θ ​ \theta​θ 是该结点的向量表示。

      6. 每一个非叶子结点都要进行一次二分类,既然是二分类,那就用 sigmoid 函数来进行判断。往右走的概率为: σ ( x w , θ ) = 1 1 + e x p ( − x w θ ) \sigma(x_{w}, \theta) = \frac{1}{1 + exp(-x_{w}\theta)}σ(xw,θ)=1+exp(xwθ)1 ,往坐走的概率为: 1 − σ ( x w , θ ) 1 - \sigma(x_{w}, \theta)1σ(xw,θ)

        在这里插入图片描述

    • 目标

      找到合适的词向量 x w ​ x_{w}​xw 和结点 θ ​ \theta​θ ,以找到词 w 2 ​ w_{2}​w2 为例,最大化似然函数:

      ∏ i = 1 3 P ( n ( w 2 , i ) ) = [ 1 − σ ( x w 2 , θ 1 ) ] [ 1 − σ ( x w 2 , θ 2 ) ] σ ( x w 2 , θ 3 ) ​ \prod_{i=1}^{3}P(n(w_{2}, i)) = [1-\sigma(x_{w_{2}},\theta_1)][1-\sigma(x_{w_{2}},\theta_2)]\sigma(x_{w_{2}},\theta_3) ​i=13P(n(w2,i))=[1σ(xw2,θ1)][1σ(xw2,θ2)]σ(xw2,θ3)

      所以,给定要寻找的某个输出词 w ww 所经过的某个结点的概率可以定义为:

      $$P(d_i|x_w,\theta_{i-1})=

      \begin{cases}

      1 - \sigma(x_w \theta_{i-1}) & d_i=1

      \sigma(x_w \theta_{i-1}) & d_i=0\

      \end{cases}$$

      其中 d i ∈ { 0 , 1 } , i = 2 , 3 , L ( w ) d_i \in \{0,1\}, i=2,3,L(w)di{0,1},i=2,3,L(w) 为霍夫曼编码,i = 1 i=1i=1 为根结点,$L(w) $ 为到词 w ww 的路径中做包含的结点个数。

      那么,设对于要查找的某个输出词 w ​ w​w 的概率,即最大似然函数为:

      ∏ i = 2 L ( w ) P ( d i ∣ x w , θ i − 1 ) = ∏ i = 2 L ( w ) [ 1 − σ ( x w ) θ i − 1 ] d i [ σ ( x w ) θ i − 1 ] 1 − d i ​ \prod_{i=2}^{L(w)} P(d_i|x_w,\theta_{i-1}) = \prod_{i=2}^{L(w)}[1-\sigma(x_w)\theta_{i-1}]^{d_{i}} [\sigma(x_w)\theta_{i-1}]^{1-d_{i}} ​i=2L(w)P(dixw,θi1)=i=2L(w)[1σ(xw)θi1]di[σ(xw)θi1]1di

      所以,最后的目标函数为负的对数似然函数

      L ( x w , θ i ) = l o g ∏ i = 2 L ( w ) P ( d i ∣ x w , θ i − 1 ) = ∑ i = 2 L ( w ) d i l o g [ 1 − σ ( x w ) θ i − 1 ] + d i l o g [ σ ( x w ) θ i − 1 ] ​ L(x_w, \theta_i) = log \prod_{i=2}^{L(w)} P(d_i|x_w,\theta_{i-1}) = \sum_{i=2}^{L(w)} d_i log [1-\sigma(x_w)\theta_{i-1}] + d_i log [\sigma(x_w)\theta_{i-1}] ​L(xw,θi)=logi=2L(w)P(dixw,θi1)=i=2L(w)dilog[1σ(xw)θi1]+dilog[σ(xw)θi1]

      将其最小化即可:

      m i n L ( x w , θ i ) min L(x_w, \theta_i)minL(xw,θi)

    • 优点
      1. 计算量由 V VV 变为 l o g 2 V log_{2} Vlog2V
      2. 使用频率越高的词离根结点越近,查找时间越短。
  • Negative sampling

    将其最小化即可:

    m i n L ( x w , θ i ) min L(x_w, \theta_i)minL(xw,θi)

    • 优点
      1. 计算量由 V VV 变为 l o g 2 V log_{2} Vlog2V
      2. 使用频率越高的词离根结点越近,查找时间越短。
  • Negative sampling


版权声明:本文为wshixinshouaaa原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。