admin 管理员组文章数量: 887032
skip
关于skip-gram
-
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(θ) -
为什么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 的训练更难,其泛化性、会更好。 -
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。 -
对skip-gram 的整体的推导。
- 首先,举例,对句子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(w10∣w8)
最终应求L 的最大值。 - 现在来进行一般化。
对于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=θargmaxw∈整个文档∏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=θargmaxw∈整个文档∑c∈滑动窗口∑uc∗vw−logc′∈词库∑euc′∗vw
这个是最终版的目标函数。- 目标函数中,有一个 l o g ∑ log\sum log∑,这里不好解决。
- 目标函数中,有一个 ∑ c ′ ∈ 词 库 e u c ′ ∗ v w \sum_{c'∈词库}e^{u_{c'} * v_w} ∑c′∈词库euc′∗vw,这个太大了,特别费时。
怎么解决呢?
- 怎么解决第2点的问题呢?
nagetive sampling
其实吧好像没有啥好方法,就不能用这个方法了。采用另外的一种方式。 - 新的方式:
- 对于句子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 没有作为上下文出现的概率。 - 那么我们期望,对于任意两个单词 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) - 那么新的目标函数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 - 对于每一个正样本,采集n个负样本。
- 对于句子w1w2w3w4w5w6w7w8w9w10 来说。
- 首先,举例,对句子w1w2w3w4w5w6w7w8w9w10 这个句子来说。滑动窗口长度为5,训练过程的损失函数应该是
本文标签: skip
版权声明:本文标题:skip 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1687281777h84681.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论