2013年,Google的Mikolov et al开源了一款用于词向量计算的工具——word2vec,引起了工业界和学术界的关注。首先,word2vec可以在百万数量级的词典和上亿的数据集上进行高效地训练;其次,该工具得到的训练结果——词向量(word embedding),可以很好地度量词与词之间的相似性。
word2vec的成长历程。站在巨人的肩膀上
第一阶段Statistical Language Model(1906)
先来看马尔可夫链(Markov Chain)是什么?在1906年安德烈·马尔可夫(俄罗斯人,物理-数学博士)提出
马尔可夫链 描述了一种状态序列,其每个状态值取决于前面有限个状态。
这里x为过程中的某个状态。上面这个恒等式可以被看作是马尔可夫性质。
举个简单例子:分析一个人在某一阶段内由一个职位调到另一个职位的可能性,即调动的概率。该模型的一个基本假设就是,过去的内部人事变动的模式和概率与未来的趋势大体相一致。实际上,这种方法是要分析企业内部人力资源的流动趋势和概率,如升迁、转职、调配或离职等方面的情况,以便为内部的人力资源的调配提供依据。
对于一段文本序列S=w1,w2,…,wTS=w1,w2,…,wT,这段文本的概率可以表示为:
如bigram模型(N=2)和trigram模型(N=3)。事实上,由于计算量,模型复杂度和预测精度的限制,我们很少会考虑N>3的模型。
第二阶段Distributed Representation(1986)
第一点:最简单的词向量方式是 one-hot representation,就是用一个很长的向量来表示一个词,向量的长度为词典的大小,向量的分量只有一个 1,其他全为 0, 1 的位置对应该词在词典中的位置。但这种词表示有几个缺点:
(1)容易受维数灾难的困扰,尤其是将其用于 Deep Learning 的一些算法时;
(2)不能很好地刻画词与词之间的相似性。
(3)面对百万字典,单个词的向量化是一个超级稀疏向量。
第二点:基于统计模型仍有其局限性。首先,由于参数空间的爆炸式增长,它无法处理更长程的context(N>3)。其次,它没有考虑词与词之间内在的联系性。
Distributed Representation,它最早是 Hinton 于 1986 年提出的,可以克服 one-hot representation 的缺点。
人们就自然而然地想到,能否用一个连续的稠密向量去刻画一个word的特征呢?这样,我们不仅可以直接刻画词与词之间的相似度,
还可以建立一个从向量到概率的平滑函数模型,使得相似的词向量可以映射到相近的概率空间上。这个稠密连续向量也被称为word的distributed representation。
第三阶段Neural Network Language Model(2003)
2003年,Bengio等人发表了一篇开创性的文章:A neural probabilistic language model。在这篇文章里,他们总结出了一套用神经网络建立统计语言模型的框架(Neural Network Language Model,以下简称NNLM),并首次提出了word embedding的概念(虽然没有叫这个名字),从而奠定了包括word2vec在内后续研究word representation learning的基础。
NNLM模型的基本思想可以概括如下:
- 假定词表中的每一个word都对应着一个连续的特征向量;
- 假定一个连续平滑的概率模型,输入一段词向量的序列,可以输出这段序列的联合概率;
- 同时学习词向量的权重和概率模型里的参数。
值得注意的一点是,这里的词向量也是要学习的参数。
我们可以将整个模型拆分成两部分加以理解:
- 首先是一个线性的embedding层。它将输入的N−1个one-hot词向量,通过一个共享的D×V的矩阵C,映射为N−1个分布式的词向量(distributedvector)。其中,V是词典的大小,D是embedding向量的维度(一个先验参数)。C矩阵里存储了要学习的word vector。
- 其次是一个简单的前向反馈神经网络g。它由一个tanh隐层和一个softmax输出层组成。通过将embedding层输出的N−1个词向量映射为一个长度为V的概率分布向量,从而对词典中的word在输入context下的条件概率做出预估:
p(wi|w1,w2,…,wt−1)≈f(wi,wt−1,…,wt−n+1)=g(wi,C(wt−n+1),…,C(wt−1))
我们可以通过最小化一个cross-entropy的正则化损失函数来调整模型的参数θ:
仔细观察这个模型就会发现,它其实在同时解决两个问题:一个是统计语言模型里关注的条件概率p(wt|context)p(wt|context)的计算;一个是向量空间模型里关注的词向量的表达。而这两个问题本质上并不独立。通过引入连续的词向量和平滑的概率模型,我们就可以在一个连续空间里