携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第30天,点击查看活动详情
2013年,谷歌提出了一个自然语言工具(NLP),Word2Vec模型。通过使用Word2Vec模型能够将单词转化为向量来表示,当然同样可以将Word2Vec模型用于中文文本处理,将经过中文分词后的结果输入Word2Vec模型,就能够实现分词向量化,进行这样的处理之后,我们就可以使用词向量来分词每个分词之间的联系、相似度,进而实现挖掘分词之间的关系。但是实际上使用词向量的方式来表示一个分词并不是Word2Vec模型首次创立的方式,这种方式已经出现了很长的时间了。对分词进行向量化最早采用的方式是使用One-Hot编码,又称为一位有效编码,每个分词向量维度数目就是自然语言文本中整个分词的数目,对于每个具体的自然语言文本中的分词,将分词词向量在对应位置的数值置为一。采用One-Hot编码的方式来描述词汇向量非常简单而快捷,但是采用这种方式也存在显而易见的弊端,一方面我们实际用到的字汇表数量很多,而且往往是在百万级以上,每个词向量的维度都非常大,这也会造成计算机在运算时耗费了巨大的计算资源和时间。从另一个层面来看,One-Hot编码中每一个词向量相互之间都是正交的,无法体现出词汇表每一个分词之间的联系和区别。
word2vec是一个简单的神经网络,有以下几个层组成:
(1)1个输入层:在进行输入时,将每一个分词进行one-hot编码。One-hot编码即是将分词表示为一个一维向量,向量维度为总的分词数目,设置特定位为1,其余各位都设置为0.
(2)1个隐藏层:在隐藏层中,最终将通过多少维度来表达每一个分词向量,根据隐藏层次中神经单元的数量确定。在输入层与隐藏层之间,权值矩阵是[vocab_size, hidden_size]这样的形式。
(3)1个输出层:输出层输出的向量是一个一维向量,形状为[vocab_size],每一个值的大小等于输出词的概率。
将分词使用one-hot编码后输入Word2Vec模型,输出值同样是one-hot编码的词向量,使用整个语料库的分词训练Word2Vec模型,然后等到收敛以后,各层的权重值,也就是对每一个词的采用Distributed或Representation的词向量。
Google的Mikolov在关于Word2Vec的论文中提出了CBOW和Skip-gram两种模型,数据集比较小的时候采用CBOW效果比较好,而当数据集较大时,采用Skim-Gram算法效果比较好。