一、先了解什么是Word2Vec
Word2Vec也称为word Embeddings,中文有很多叫法,比如“词向量”,“词嵌入”。Word2Vec可以将语言中的字词转化为计算机可以理解的稠密向量,比如图片是像素的稠密矩阵,音频可以装换为声音信号的频谱数据。进而对其他自然语言处理,比如文本分类、词性标注、机器翻译等。在自然语言的Word2Vec处理之前,通常将字词转换为离散的单独的符号,这就是One-hot encoder。通常将整篇文章中每一个词都转换为一个向量,则整篇文章变为一个稀疏矩阵,那我们需要更多的数据来训练,稀疏数据训练的效率比较低,计算也麻烦。One-hot encoder对特征的编码往往是随机的,没有提供任何相关的信息,没有考虑字词间可能存在的关系。
当我们使用向量表达(vector repressntations)可以解决这个问题。向量空间模型可以将字词转换为连续值的向量表达,并且其中意思相近的词将被映射到向量空间中相近的位置如图1。向量空间模型可以大致分为两类:一是计数模型,比如latent semantic analysis,它将统计在语料库中,相邻出现词的频率,再把这些计数统计结果转为小而稠密的矩阵。二是预测模型,比如neural prob abilistic models根据一个词周围相邻的词推测出这个词,以及它的空间向量。预测模型通常使用最大似然法,在给定语句h的情况下,最大化目标词汇w1的概率,它的问题是计算量非常大,需要计算词汇表中所有单词可能出现的可能性。
图1
Word2Vec既是一种计算非常高效的,可以从原始语料中学习字词空间向量的预测模型,它主要分为CBOW和Skip-Gram两种模型。其中CBOW是从原始语句推测目标字词,比如中国的首都——北京,对小型数据比较合适。CBOM模型不需要计算完整的概率模型,只需要训练一个二元分类模型如图2,用来区分真实的目标词汇和编造的词汇(噪声)这两类。而Skip-Gram正好相反,从目标字词推测原始语句在大型语料中表现好。
当模型预测真实的目标词汇为高概率,同时预测其他噪声词汇为低概率时,我们训练的学习目标就被最优化了,用编造噪声的词汇训练的方法称为negative sampling,用这种方法计算loss funcation的效率特别高,我们只需要计算随机选择的k个词汇而非词汇表中的全部词汇,所以训练速度特别快。
在实际中, 我们使用Noise-Contrastive Estimation Loss,同时在Tensorflow中也有tf.nn.nce_loss()直接实现这个loss。
下面使用Skip-Gram模式的Word2Vec, 先来看它训练样本的构造。
二、Skip-Gram模式的Word2Vec
以“ the quick brown fox jumped over the lazy dog”这句话为例, 我们要构造一个语境与目标词汇的映射关系, 其中语境包括一个单词左边和右边的词汇, 假设滑窗的尺寸为1,