Word2Vec语言模型:低维稠密向量

Word2Vec

一共有两种模式,以及两种近似训练的方法,个人认为CBOW搭配negative-sampling,以及SkipGram搭配H-softmax,所以以下小节按这个顺序排列。

参考资料:吾爱NLP(5)
有求导实例
https://zhuanlan.zhihu.com/p/53425736
实例计算
https://blog.csdn.net/qq_41664845/article/details/83108222
其他公式推导
https://blog.csdn.net/liuyuemaicha/article/details/52611219

1. CBOW

训练结束后,对于词语w^t\in W (|W|=T),获得其作为中心词和背景词的情况下的两组词向量u^tv^t

中心词使用u表示,背景词使用v表示。

对于词语w^t\in W (|W|=T),当它作为中心词u_t时,它的2m个背景词为v_{t1}+...+v_{t2m},取背景词的平均向量。则用这些背景词生成它这个中心词的概率为,2m个背景词生成它的向量相乘数值/2m个背景词生成其他词语的向量相乘数值之和),即是
P(w^t|w^{t-m},...,w^{t-1},w^{t+1},...,w^{t+m})=\frac{ \exp(\mathbf{u_t}^\mathrm{T}(v_{t1}+...+v_{t2m})/(2m) }{ \sum_{j=1}^{V}{\exp(\mathbf{u_j}^\mathrm{T}(v_{t1}+...+v_{t2m})/(2m)} }
v_t=(v_{t1}+...+v_{t2m})/(2m),则上式取log后的形式为
u_t - \log{\sum_{j=1}^{V}{\exp(\mathbf{u_j}^\mathrm{T} v_t}}

则求整体最大化似然估计
\prod{i=1}^{V}{P(w^t|w^{t-m},...,w^{t-1},w^{t+1},...,w^{t+m})}

因为求梯度,除了对应变量外其他数值都可以视为常数,所以v_{t1}+...+v_{t2m}=v_{ti}+restrest为其余常数,求梯度时可以不影响结果,则求w_t的其中一个背景词v_{ti}(i=1,2,...,2m)生成中心词u_t的梯度为,
\frac{\partial{\log{P(w^t|w^{t-m},...,w^{t-1},w^{t+1},...,w^{t+m})}}}{\partial{v_{ti}}} = \frac{1}{2m}( u_t - \frac{ \sum_{k=1}^{V}{u_k \times \exp{u_k(v_{ti}+rest)}} }{ \sum_{j=1}^{V}{\exp{u_j(v_{ti}+rest)}} } )
这个式子可以进一步写作,
\frac{\partial{\log{P(w^t|w^{t-m},...,w^{t-1},w^{t+1},...,w^{t+m})}}}{\partial{v_{ti}}} = \frac{1}{2m}( u_t - \sum_{k=1}^{V}{u_k \times P(w_k|w_t)}

2. Negative Sampling

改进的部分主要考虑词表大小的运算。softmax的运算考虑了背景词是词典中任何一个词的可能(该运算在分母)。

对于CBOW的改进

注意到 (u_t - \sum_{k=1}^{V}{u_k \times P(w_k|w_t)}中,第二项是考虑了“给定背景词,其生成整个词表中每个词成为中心词”的情况,所以其计算复杂度为O(V)。一种缓解的方法是只考虑词表中部分词能成为中心词的情况,例如认为最多只有K个词能成为中心词,则计算复杂度则降到O(K)
所以对于之前损失函数需要改变,
之前的损失函数,
\log{\frac{1}{\exp{(-\mathbf{u_t}^\mathrm{T}v_t/(2m))}}}- \sum_{i=1}^{V}{ \log{\frac{1}{\exp{(\mathbf{u_i}^\mathrm{T}v_t/(2m))}}} }
之后的损失函数(同时给分母加一防止分母为0,因为采样少数后可能出现0的情况),
\log{\frac{1}{1+\exp{(-\mathbf{u_t}^\mathrm{T}v_t/(2m))}}}- \sum_{i=1}^{K}{ \log{\frac{1}{1+\exp{(\mathbf{u_i}^\mathrm{T}v_t/(2m))}}} }
其中v_t=v_1+v_2+...+v_2m

对于Skipgram的改进

其主要更改了中心词生成背景词的条件概率。中心词的生成变成了两个部分(背景词w_o和噪声词w_k):

中心词w_c和背景词w_o同时出现在window中
中心词w_c和噪声词w_1不同时出现在window中
...
中心词w_c和噪声词w_K不同时出现在window中

D=1中心词和背景词同时出现,D=0中心词和噪声词不同时出现

其中\sigma(x)=1/(1+\exp(-x)),即是sigmoid函数,这里用于计算概率

  • 中心词u_c与背景词v_o同时出现的概率
    P(D=1|w_o,w_c)=\sigma(u_c, v_o)

  • 同理,加上中心词w_c和噪声词(不出现w_oD=1)不同时出现的情况
    P(D=0|w_o,w_c) = \prod_{k=1}^{K}{ \sigma(u_c,v_k) }

  • 则“中心词生成背景词的条件概率”为
    \log{P(w_o|w_c)}=\log{ P(D=1|w_o,w_c)\prod_{k=1}^{K}{ P(D=0|w_k,w_c) }}

使用指数表达方式再加上平滑后,
-logP(w_o|w_c)=-log(frac{1}{ 1+\exp{-\mathbf{u_c}^\mathrm{T} v_o} }) -\sum_{k=1}^{K}{ \log{frac{1}{ 1+\exp{-\mathbf{u_c}^\mathrm{T} v_k} }} }

3. SkipGram

主要目的为使用一个词来预测它在文本序列周围的词。

对于长度为T的一句话,整体最大似然估计
\prod_{t=1}^{T}{\prod_{-m \leq j \leq m,j \neq 0}{ P(w^{t+i}|w^{t}) }}

给定任意w_t作为中心词u_t,产生w_i作为背景词v_i的概率,使用softmax作为损失函数
=\frac{ \exp{ \mathbf{u_t}^\mathrm{T}v_i }}{\sum_{j\in V}{ \exp{ \mathbf{u_t}^\mathrm{T}v_j }}}

4. H-Softmax

整体改变了Softmax的计算方式,复杂度由O(|V|)下降到对应霍夫曼树的高度O(\log{|V|})

判断函数:到达w_t路径上第j个节点,“它的左子节点” 是否等于 “到达w_t路径上第j+1个节点”
I(w_t, j)=([node(w_t, j+1)]==leftchild(node(w_t, j))) = 1 if true else -1

只考虑路径上的非叶子节点涉及的向量,而不再是把所有词表里的词轮流一遍。
P(w_t|w_i) = \prod_{j=1}^{L(w_t)-1}{ \sigma (I(w_t, j) \times \mathbf{u_{n(w_t,j)}}^\mathrm{T} v_i) }
其中\sigma(x)=1/(1+\exp(-x)),即是sigmoid函数。

举例计算
需要将w_i的词向量v_i和根节点到w3路径上的非叶子节点向量一一求内积。
在下面的例子中需要向左、向右、再向左遍历。

       n(w3,1)
      /       \
  n(w3,2)      *
   /   \       / \
  *  n(w3,3)      *
 / \    / \        \
w1  w2 w3  w4 ...  w|V|

(这里都是u^{T}v相乘)
P(w_3|w_i)=\sigma(u_{n(w3,1)}v_i) \cdot \sigma(-u_{n(w3,2)}v_i) \cdot \sigma(u_{n(w3,3)}v_i)
第二个节点因为判断函数为负因为其节点和做子左节点不相同。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,402评论 6 499
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,377评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,483评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,165评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,176评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,146评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,032评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,896评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,311评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,536评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,696评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,413评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,008评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,815评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,698评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,592评论 2 353