词向量梳理

2020-01-22  本文已影响0人  p_w

导读:本篇文章为本人目前所掌握词向量知识点的梳理。主要介绍基于Language Model的word embedding方法。


词向量思维导图

Word2vec

基于Language Model的word2vec是词语distibution representation中最具代表性的方法,理解word2vec的原理对理解后续NLP任务和其他词向量训练模型如ELMo至关重要,Stanford cs224n也在课程一开始就介绍了word2vec。(本文相当于对cs224n 2019 lecture1的听课总结)

Word2vec原理

(Skip-grim)For each position t = 1,...,T, predict context words within a window of fixed size m, by given center word w_j.
Likelihood = L(\Theta) = \prod_{t=1}^{T}\prod_{-m\leqslant j\leqslant m,j\neq 0}^{}P(W_t+j|w_t,\Theta )

因此,模型的训练目标函数(objective function, loss function, cost function)为:J(\Theta),is the average negative log likelihood:

J(\Theta) = -\frac{1}{T}logL(\Theta )= -\frac{1}{T}\sum_{t=1}^{T}\sum_{-m\leqslant j\leqslant m,j\neq 0}^{ } logP(W_t+j|w_t,\Theta )

那么,现在的问题是如何表示P(W_t+j|w_t,\Theta ),也就是说如何使用我们的目标——word vector来表示这个公式?答案是使用softmax:

P(o|c) = \frac{exp(U_{o}^{T}\cdot V_c)}{\sum_{w\in V}^{ }exp(U_{w}^{T}\cdot V_c)}
说明:
1、V表示整个词典,V_c表示center word,U_o表示context word.
2、\cdot 表示dot product,larger dot product = larger probability.
3、\Theta是模型中要训练的参数,在本模型(skip-gram)中即是所要学习的word vector。

目标函数已有,接下来的工作就是优化函数中的\Theta使J(\Theta)达到最小,优化的方式就是使用梯度下降法:

\Theta _{j}^{new}=\Theta _{j}^{old}-\alpha \frac{\partial }{\partial\Theta _{j}^{old} }J(\Theta )

skip-gram模型直观感受

Manning 画的图非常清晰的展示了skip-gram模型的工作流程:首先,我们有两个V\times d大小的随机初始化的向量矩阵WW'd表示所训练的词向量的维度,可自己设置)。假设给定center word w_t的ont-hot向量,通过look up function(即one-hot vecter与W相乘)找到center word的embedding vector,然后再将w_t的embedding vector与W'中的每一个词的embedding vector进行dot product,即实现公式中U_{w}^{T}\cdot V_c,接下来通过softmax公式得到概率分布,与答案对比得到loss,便可以根据loss对\Theta进行优化:

skip-gram模型

在课程中,manning给出了对矩阵W的梯度推导(良心老师),在此省略过程,只给出结果:

\frac{\partial }{\partial V_{c}}log\frac{exp(U_{o}^{T}\cdot V_c)}{\sum_{w\in V}^{ }exp(U_{w}^{T}\cdot V_c)}
=
U_{o}-\sum_{x=1}^{V}P(x|c)U_{x}

Talk is cheap, show me the code

参考:https://www.jianshu.com/p/86134284fa14

其他word embedding训练方法举例

在谷歌给出的NMT的tutorial里,有这样的代码:

    encoder_cell = core_rnn_cell.EmbeddingWrapper(
        encoder_cell,
        embedding_classes=num_encoder_symbols,
        embedding_size=embedding_size)

代码的意义是给encoder cell添加了一层embedding wrapper,可以看出相当于上面介绍的W,在Tensorflow中只要是Variable,一般都是可以train的,因此可以认为NMT模型中也可以训练word embedding,即具体NLP任务下的word embedding。

上一篇 下一篇

猜你喜欢

热点阅读