word2vec是用来生成词向量的相关模型,由Google在2013年提出,相关的论文有以下三篇
Efficient Estimation of Word Representations in Vector Space
Distributed Representations of Words and Phrases and their Compositionality
基本介绍
word2vec的基本思想是:利用相似的词具有相似的上下文这一思想,训练神经网络模型。模型的输入是某个词,输出是这个词的上下文。经过神经网络的训练后,可以得到每一个词在高维空间中的向量表示,其中相似的词语在高维空间中的向量表示也是相互靠近的。
word2vec有两种不同的模型,分别是CBOW和Skip-Gram.CBOW的基本思想是:用上下文词来预测中心词;Skip-Gram的基本思想是:用中心词来预测上下文词。
1.背景知识
在word2vec提出前,已经有很多表示词向量的方法,也有一些神经网络语言模型。但是这些模型或多或少会存在一定的缺陷。
1.1词向量
词向量的表示分为离散型和分布式型两种,离散型的词向量表示,词语与词语之间没有直接的联系,无法计算不同词向量之间的相似性;分布式型的词向量有传统的n-gram模型以及神经网络语言模型,分布式的词向量之间的关系可以进行计算。
1.1.1 one-hot
one-hot是最简单的词向量表示,它的形式是用N维向量来表示单词(N代表词表的长度),在N维向量中,单词对应词表的序号维度上的值为1,其余都为0.这种编码方式存在很多缺陷。
1.1.2词袋模型
词袋模型的维度也是N,与one-hot不同的是,词袋模型的词向量中每一个维度的数值都代表词表中的单词在文本中出现的次数。这种方式也存在很多缺陷。
1.2 语言模型
神经网络语言模型用来训练词向量,它可以获得分布式的词向量,这种词向量解决了离散型词向量的缺陷。
1.2.1n-gram模型
1.2.2NNLM
参考论文《A Neural Probabilistic Language Model》
2.word2vec模型
word2vec有两种模型,分别是CBOW和Skip-Gram,下边分别介绍这两种模型的基本架构。
2.1 CBOW模型
CBOW模型是指,在已知一个单词上下文的情况下,对这个单词进行预测。例如已知单词 w t − 2 , w t − 1 , w t + 1 , w t + 2 w_{t-2},w_{t-1},w_{t+1},w_{t+2} wt−2,wt−1,wt+1,wt+2,预测单词 w t w_t wt.学习的目标是最大化对数似然函数
∑ l o g p ( w ∣ C o n t e x t ( w ) ) \sum logp(w|Context(w)) ∑logp(w∣Context(w))
CBOW的模型架构图如下
2.2 skip-gram模型
skip-gram模型是指,在已知上下文的情况下,对中心词进行预测。例如已知单词 w t w_t wt,预测上下文单词 w t − 2 , w t − 1 , w t + 1 , w t + 2 w_{t-2},w_{t-1},w_{t+1},w_{t+2} wt−2,wt−1,wt+1,wt+2.学习的目标函数是 ∑ l o g p ( C o n t e x t