摘自:http://blog.csdn.net/thriving_fcl/article/details/51404655
词的向量化与word2vec简介
word2vec最初是Tomas Mikolov发表的一篇文章[1],同时开源了相应的代码,作用是将所有词语投影到K维的向量空间,每个词语都可以用一个K维向量表示。
为什么要将词用向量来表示呢?这样可以给词语一个数学上的表示,使之可以适用于某些算法或数学模型。通常将词语表示成向量有如下两种方法。
一、one-hot 表示法
假如语料库里一共有N个词,one-hot表示即是为每个词分配一个唯一的索引,并且将每个词表示为N维的向量,在该词索引对应的维度值为1,其余维度均为0。如一共有三个词:今天、天气、真好,那么三个词的词向量分别可以是[1,0,0],[0,1,0],[0,0,1]。这种简单的表示方法已经可以解决相当一部分NLP的问题,不过仍然存在不足,即词向量与词向量之间都是相互独立的,我们无法通过这种词向量得知两个词在语义上是否相似,并且如果N非常大,这种高维稀疏的表示也有可能引发维度灾难。为了解决上述问题,就有了词向量的第二种表示方法。
二、Distributed 表示法
word2vec就是通过这种方法将词表示为向量,即通过训练将词表示为限定维度K的实数向量,这种非稀疏表示的向量很容易求它们之间的距离(欧式、余弦等),从而判断词与词语义上的相似性。如K=3时,我们得到的实数向量可以是[0.5,0.22,0.7]这样。
不过Distributed表示法并不是word2vec诞生才有的,这种方法早在1986年Hinton就提出了[2]。word2vec之所以 会产生这么大的影响,是因为它采用了简化的模型,使得训练速度大为提升,让word embedding这项技术(也就是词的distributed表示)变得较为实用。
概率语言模型
在详细介绍word2vec的原理之前还需要简单的提一下概率语言模型。概率语言模型就是表示语言的基本单位(通常为句子)的概率分布函数。有了语言模型我们可以判断一句话是自然语言的概率,或者让机器开口说话(根据语言模型生成一句话)。
见原文!
word2vec训练过程
见原文!
word2vec用的是神经网络模型,分为两种,cbow与skip-gram,每个模型的训练方法又分别有两种,hierarchical sofmax与negative sampling。
Reference
[1] Tomas Mikolov, Kai Chen, Greg Corrado, and Jeffrey Dean. Efficient Estimation of Word Representations in Vector Space. In Proceedings of Workshop at ICLR, 2013.
[2] A. Mnih and G. Hinton. Three new graphical models for statistical language modelling. Proceedings of the 24th international conference on Machine learning,pages 641–648, 2007
所有评论(0)