admin 管理员组

文章数量: 887032

skip

关于skip-gram

  1. skip-gram 是给定中心词预测周围词
    例如,给定一句话 I am working on NLP project, it is interesting.
    设定滑动窗口为5的话
    分别给定中心词 working, on, NLP, project, it, 来预测中心词前后的两个周围词。
    那么目标函数就是
    maxmum( P(i|working) * P(am|working) * P(on|working) * P(NLP|working))
    令其为A, 那最终的目标函数就是 argmaxθA(θ)B(θ)C(θ)D(θ)

  2. 为什么CBOW 不如skip-gram 模型好呢?
    CBOW 相当于是给定周围词,来预测中心词。也例如给定滑动窗口为5,给定第1 2 4 5 个词,来预测中间第3 个词。
    skip-gram 则是给定第2个词,来预测第1 2 4 5 个词。
    首先,skip-gram model 中样本量是远大于CBOW 的。(每个样本就看做是一个条件概率P(W1|W3))
    其次,skip-gram 的训练更难,其泛化性、会更好。

  3. skip-gram 的表达以及公式表示
    参数θ = {u,v}
    其中,u 和v 是shape 相同的矩阵,行 是词库大小,列 是词向量维度。也就是一行代表一个词。
    那,为什么要设置两个向量呢,一个(v)用来表示中心词,一个(u)用来表示周围词。
    所以现在的问题就是,怎样才能把P(W1|W3) 表示成 f(u, v) 呢?
    为了最大化P(W1|W3) ,那就要求其相似度越高 (为啥)
    而文本相似度,就是向量的内积。那就好表示了,也就是 u w i ∗ v w j u_{w_i} * v_{w_j} uwi​​∗vwj​​
    为了改成概率的形式,增加一个softmax,变成
    P ( w i ∣ w j ; θ ) = e u w i ∗ v w j / ∑ C ∈ 词 库 e u C ∗ v w j P(w_i|w_j;θ)=e^{u_{w_i}*v_{w_j}}/\sum_{C∈词库}e^{u_{C} * v_{w_j}} P(wi​∣wj​;θ)=euwi​​∗vwj​​/∑C∈词库​euC​∗vwj​​
    这样就把内积转换成了向量,相当于做了一个简单的normalization。

  4. 对skip-gram 的整体的推导。

    1. 首先,举例,对句子w1w2w3w4w5w6w7w8w9w10 这个句子来说。滑动窗口长度为5,训练过程的损失函数应该是
      L = P ( w 1 ∣ w 3 ) ∗ P ( w 2 ∣ w 3 ) ∗ P ( w 4 ∣ w 3 ) ∗ P ( w 5 ∣ w 3 ) ∗ P ( w 2 ∣ w 4 ) ∗ P ( w 3 ∣ w 4 ) ∗ P ( w 5 ∣ w 4 ) ∗ P ( w 6 ∣ w 4 ) ∗ P ( w 3 ∣ w 5 ) ∗ P ( w 4 ∣ w 5 ) ∗ P ( w 6 ∣ w 5 ) ∗ P ( w 7 ∣ w 5 ) ∗ P ( w 4 ∣ w 6 ) ∗ P ( w 5 ∣ w 6 ) ∗ P ( w 7 ∣ w 6 ) ∗ P ( w 8 ∣ w 6 ) ∗ P ( w 5 ∣ w 7 ) ∗ P ( w 6 ∣ w 7 ) ∗ P ( w 8 ∣ w 7 ) ∗ P ( w 9 ∣ w 7 ) ∗ P ( w 6 ∣ w 8 ) ∗ P ( w 7 ∣ w 8 ) ∗ P ( w 9 ∣ w 8 ) ∗ P ( w 1 0 ∣ w 8 ) L=P(w_1|w_3)*P(w_2|w_3)*P(w_4|w_3)*P(w_5|w_3)*P(w_2|w_4)*P(w_3|w_4)*P(w_5|w_4)*P(w_6|w_4)*P(w_3|w_5)*P(w_4|w_5)*P(w_6|w_5)*P(w_7|w_5)*P(w_4|w_6)*P(w_5|w_6)*P(w_7|w_6)*P(w_8|w_6)*P(w_5|w_7)*P(w_6|w_7)*P(w_8|w_7)*P(w_9|w_7)*P(w_6|w_8)*P(w_7|w_8)*P(w_9|w_8)*P(w_10|w_8) L=P(w1​∣w3​)∗P(w2​∣w3​)∗P(w4​∣w3​)∗P(w5​∣w3​)∗P(w2​∣w4​)∗P(w3​∣w4​)∗P(w5​∣w4​)∗P(w6​∣w4​)∗P(w3​∣w5​)∗P(w4​∣w5​)∗P(w6​∣w5​)∗P(w7​∣w5​)∗P(w4​∣w6​)∗P(w5​∣w6​)∗P(w7​∣w6​)∗P(w8​∣w6​)∗P(w5​∣w7​)∗P(w6​∣w7​)∗P(w8​∣w7​)∗P(w9​∣w7​)∗P(w6​∣w8​)∗P(w7​∣w8​)∗P(w9​∣w8​)∗P(w1​0∣w8​)
      最终应求L 的最大值。
    2. 现在来进行一般化。
      对于n篇文档 d o c 1 , d o c 2 , . . . d o c n doc_1,doc_2,...doc_n doc1​,doc2​,...docn​,其合并为一整个text,那么整个语料库则可以表示为 T e x t = w 1 , w 2 , w 3 , . . . w N Text={w_1,w_2,w_3,...w_N} Text=w1​,w2​,w3​,...wN​,其中,每个w 表示一个单词。
      那么目标函数应该是,对于给定的滑动窗口,遍历text 中的每一个中心词,来最大化 P ( w 边 ∣ w 中 ) P(w_边|w_中) P(w边​∣w中​)。具体表示如下:
      L = arg max ⁡ θ ∏ w ∈ 整 个 文 档 ∏ c ∈ 滑 动 窗 口 e u c ∗ v w / ∑ c ′ ∈ 词 库 e u c ′ ∗ v w L=\displaystyle\argmax_θ\displaystyle\prod_{w∈整个文档}\displaystyle\prod_{c∈滑动窗口}{e^{u_c*v_w}/\sum_{c'∈词库}e^{u_{c'} * v_w}} L=θargmax​w∈整个文档∏​c∈滑动窗口∏​euc​∗vw​/c′∈词库∑​euc′​∗vw​
      解释:前边的连乘是将整个文档连乘,后边的连乘是滑动窗口的连乘,后边的计算时加了softmax 的概率
      连乘加log后变成连加,log 后,变成:
      L = arg max ⁡ θ ∑ w ∈ 整 个 文 档 ∑ c ∈ 滑 动 窗 口 u c ∗ v w − l o g ∑ c ′ ∈ 词 库 e u c ′ ∗ v w L=\displaystyle\argmax_θ\displaystyle\sum_{w∈整个文档}\displaystyle\sum_{c∈滑动窗口}{u_c*v_w - log\sum_{c'∈词库}e^{u_{c'} * v_w}} L=θargmax​w∈整个文档∑​c∈滑动窗口∑​uc​∗vw​−logc′∈词库∑​euc′​∗vw​
      这个是最终版的目标函数。
      1. 目标函数中,有一个 l o g ∑ log\sum log∑,这里不好解决。
      2. 目标函数中,有一个 ∑ c ′ ∈ 词 库 e u c ′ ∗ v w \sum_{c'∈词库}e^{u_{c'} * v_w} ∑c′∈词库​euc′​∗vw​,这个太大了,特别费时。
        怎么解决呢?
    3. 怎么解决第2点的问题呢?
      nagetive sampling
      其实吧好像没有啥好方法,就不能用这个方法了。采用另外的一种方式。
    4. 新的方式:
      1. 对于句子w1w2w3w4w5w6w7w8w9w10 来说。
        对于w2 这个单词来说,w1 和w3 是它的上下文。w5等就不是它的上下文了。那么对于滑动窗口为一,
        P ( D = 1 ∣ w 1 , w 3 ) P(D=1|w_1,w_3) P(D=1∣w1​,w3​) 是w1 和w3 作为上下文出现的概率
        P ( D = 1 ∣ w 1 , w 4 ) P(D=1|w_1,w_4) P(D=1∣w1​,w4​) 是 w1 和w4 没有作为上下文出现的概率。
      2. 那么我们期望,对于任意两个单词 w i , w j {w_i},{w_j} wi​,wj​如果是上下文,那么 P ( D = 1 ∣ w i , w j ) P(D=1|{w_i},{w_j}) P(D=1∣wi​,wj​)越大越好,如果任意两个单词 w i , w j {w_i},{w_j} wi​,wj​如果不是是上下文,那么 P ( D = 0 ∣ w i , w j ) P(D=0|{w_i},{w_j}) P(D=0∣wi​,wj​)越大越好.
        这样,这个问题就可以用逻辑回归的方式来考虑了。逻辑回归的sigmoid 函数 σ = 1 / 1 + e x p ( x w t ) σ=1/1+exp(x^{wt}) σ=1/1+exp(xwt)
        P ( D = 1 ∣ w i , w j ) = 1 1 + e x p ( − U w i , V w j ) P(D=1|{w_i},{w_j})=\frac1{1+exp(-{U_{w_i}, V_{w_j}})} P(D=1∣wi​,wj​)=1+exp(−Uwi​​,Vwj​​)1​
        P ( D = 0 ∣ w i , w j ) = 1 − P ( D = 1 ∣ w i , w j ) P(D=0|{w_i},{w_j})=1-P(D=1|{w_i},{w_j}) P(D=0∣wi​,wj​)=1−P(D=1∣wi​,wj​)
      3. 那么新的目标函数L 可以写成:对于任意每两个词,其中,w 是中心词,c 是上下文词,
        L = arg max ⁡ θ ∏ ( w , c ) ∈ D P ( D = 1 ∣ w , c ; θ ) ∏ ( w , c ) ∈ D N P ( D = 1 ∣ w , c ; θ ) L=\displaystyle\argmax_θ\displaystyle\prod_{(w,c)∈D}P(D=1|w,c;θ)\displaystyle\prod_{(w,c)∈D^N}P(D=1|w,c;θ) L=θargmax​(w,c)∈D∏​P(D=1∣w,c;θ)(w,c)∈DN∏​P(D=1∣w,c;θ)
        = arg max ⁡ θ ∏ 1 1 + e x p ( − U c , V w ) ∏ ( 1 − 1 1 + e x p ( − U c , V w ) ) =\displaystyle\argmax_θ\displaystyle\prod\frac1{1+exp(-{U_c, V_w})}\displaystyle\prod(1-\frac1{1+exp(-{U_c, V_w})}) =θargmax​∏1+exp(−Uc​,Vw​)1​∏(1−1+exp(−Uc​,Vw​)1​)
        加log 后,
        = arg max ⁡ θ ∑ log ⁡ σ ( U c , V w ) + ∑ log ⁡ σ ( − U c , V w ) =\displaystyle\argmax_θ\sum\log\sigma(U_c,V_w)+\sum\log\sigma(-U_c,V_w) =θargmax​∑logσ(Uc​,Vw​)+∑logσ(−Uc​,Vw​)
        但是新的问题出现了,就是一个语料库里,正样本的数量是远远小于负样本的。
        那现在的主要工作,就是怎样降低负样本的量。所以只需要考虑一小部分的负样本就可以了。叫negative sampling
      4. 对于每一个正样本,采集n个负样本。

本文标签: skip