Word2Vec模型原理
1.Word2Vec用来干什么?
发现很多教程直接上来说one-hot,分布式表示,然后给word2Vec数学推导式,但就是不说Word2Vec用来干什么,这让人感觉很迷惑。而且根据其名字,新手很容易认为其是语言的一种数学表达技巧,很多问题会陷入迷茫。根据看的资料,我总结了Word2Vec是干什么的。
一句话,word2Vec是用来推导一句话中缺失某个词,或者多个词的模型,分为两种
1.推导缺失单个词,这时候叫CBOW(Continuous Bag-of-Words),即根据上下文,推导中间缺失的一个词。
2.推导上下文,这时候叫SG模型(Skip-Gram),即输入是特定的一个词的词向量,而输出是特定词对应的上下文词向量。
由于推导上下文,需要我们做出更多推测,因此SG在大型语料库中表现更好。
总结:CBOW对小型数据库比较合适,而Skip-Gram在大型语料中表现更好。
2.Word2Vec如何实现推导缺失词?
分两种模型解释
2.1 CBOW(Continuous Bag-of-Words)
我们都知道,模型的训练包括输入数据(训练数据),损失函数(loss)和优化方法,那么在CBOW中是如何进行的呢?
- 输入数据
1.模型的输入数据,是以onehot表示的。维数为V,上下文单词数为C.
2.所有onehot分别乘以共享的输入权重矩阵W. {VN矩阵,N为自己设定的数,初始化权重矩阵W}
注意这里W为权重矩阵,为V×N维,1×V的原数据与W相乘后,变为1×N,即为影藏层神经元个数。
3.影藏层输出,乘以输出权重矩阵W’ {NV},又变为1×V的向量了。(表示单词)
4.1×V向量,经过**函数处理得到V-dim概率分布 {PS: 因为是onehot,其中的每一维都代表着一个单词}。
5.概率最大的index所指示的单词为预测出的中间词(target word)与true label的onehot做比较,误差越小越好(根据误差更新权重矩阵)。
CBOW的训练模型如图所示:
以上即是CBOW的工作过程。
2.2 Skip-Gram模型
1.首先我们选句子中间的一个词作为我们的输入词,例如我们选取“dog”作为input word;
2.有了input word以后,我们再定义一个叫做skip_window的参数,它代表着我们从当前input word的一侧(左边或右边)选取词的数量。如果我们设置skip_window=2,那么我们最终获得窗口中的词(包括input word在内)就是[‘The’, ‘dog’,‘barked’, ‘at’]。skip_window=2代表着选取左input word左侧2个词和右侧2个词进入我们的窗口,所以整个窗口大小span=2x2=4。另一个参数叫num_skips,它代表着我们从整个窗口中选取多少个不同的词作为我们的output word,当skip_window=2,num_skips=2时,我们将会得到两组 (input word, output word) 形式的训练数据,即 (‘dog’, ‘barked’),(‘dog’, ‘the’)。
小结:
Word2Vec模型具有以下特点:
- 1.拥有大规模语料库
- 2.词使用分布式向量表示
- 3.对于每一个文本,均有一个中心词和一个上下文。
- 4.使用相似度计算中心词和上下文的概率