导读:本篇文章为本人目前所掌握词向量知识点的梳理。主要介绍基于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 , predict context words within a window of fixed size m, by given center word .
因此,模型的训练目标函数(objective function, loss function, cost function)为:,is the average negative log likelihood:
那么,现在的问题是如何表示,也就是说如何使用我们的目标——word vector来表示这个公式?答案是使用softmax:
说明:
1、表示整个词典,表示center word,表示context word.
2、 表示dot product,larger dot product = larger probability.
3、是模型中要训练的参数,在本模型(skip-gram)中即是所要学习的word vector。
目标函数已有,接下来的工作就是优化函数中的使达到最小,优化的方式就是使用梯度下降法:
skip-gram模型直观感受
Manning 画的图非常清晰的展示了skip-gram模型的工作流程:首先,我们有两个大小的随机初始化的向量矩阵、(表示所训练的词向量的维度,可自己设置)。假设给定center word 的ont-hot向量,通过look up function(即one-hot vecter与相乘)找到center word的embedding vector,然后再将的embedding vector与中的每一个词的embedding vector进行dot product,即实现公式中,接下来通过softmax公式得到概率分布,与答案对比得到loss,便可以根据loss对进行优化:
在课程中,manning给出了对矩阵的梯度推导(良心老师),在此省略过程,只给出结果:
=
Talk is cheap, show me the code
其他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,可以看出相当于上面介绍的,在Tensorflow中只要是Variable,一般都是可以train的,因此可以认为NMT模型中也可以训练word embedding,即具体NLP任务下的word embedding。
网友评论