2013年末,谷歌发布了word2vec工具,引起了热捧,大家几乎都认为它是深度学习在NLP的一项了不起的应用,并且很多互联网公司也开始跟进,使用word2vec解决实际问题。
NLP的相关任务中,要将我们能看懂的语言交给计算机来处理,通常需要首先将语言数学化,只有这样机器才能认得出,而词向量正是将我们看懂的词进行数学化的一种方法,就是把一个词语表示成一个向量。
一般将词语转化为向量的方法有两种:
One-Hot Representation
Distributed Representation
下面分别介绍这两种方法
这种方法很暴力,直接将词典的长度标记为向量的长度,每个词向量的分量只有一个为1,其余全为0,1的位置对应该词在词典的位置,比如:
adore 表示为 [0,0,0,1,...,0,0]
respect表示为 [0,0,0,...,0,1,0,..0,0]
这种表示方法的优点是简洁清晰,用哈希表给每个词分配一个编号就可以了,比如 adore编号为102,respect编号为34214,然后配合上最大熵,SVM等算法可以完成NLP的一些任务,但是它的缺点也很明显:
1). 维数灾难,这种方法容易受到这方面的困扰,尤其是用DL的一些算法时;
2.) 不能很好地刻画词语与词语间的相似性,称为“词汇鸿沟”,因为从adore和respect的词向量,编号上,我们看不出它们之间是否存在某种关系,比如为同义词,反义词等,尽管adore和respect是一对同义词
这种表示是Hinton,在1986年提出的,它解决了One-Hot Representation的问题,其基本思想就是直接用一个普通的向量表示一个词,维度一般不长,比如50维,这个向量怎么表示是要经过训练的,训练方法较多,谷歌开发的word2vec便是其中一个,比如向量长这样 [0.452, 0.256, 0.912,...],当然训练的预料库不一样,或者方法不一样,最终得到了某个词的向量长的也不一样。
显然,这种方法获得了 adore 和 respect 两个词的词向量,这样他俩组成了一个词向量空间,而每一个向量则为该空间中的一个点,即向量的终端点,那么adore和repect这两个点的距离,我们就可以拿来分析了,如果它们很近,就可证明 adore和respect的语法,语义之间的相似性,这样的特性使得词向量很有意义,因此google的Mikolov等人研究出了word2vec。也就是说距离近的词,相似性可能越高。
利用这个特性,可以用于机器翻译领域,通过向量空间,把一种语言转变成另一种语言,举个别人的例子,将英语中的one, two, ..., five自动转化为西班牙语,怎么做呢,首先得到这5个词的词向量,如下图所示:
然后,训练另一套即西班牙语表示的语料库,得到了每个词的词向量,找到与英语one最相近的西班牙单词为:uno,所以one对应西班牙语的uno,依次利用这种距离相近的方法找出其他的词的对应。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。