词转化为词向量

  • 2019 年 10 月 4 日
  • 笔记

前言

2013年末,谷歌发布了word2vec工具,引起了热捧,大家几乎都认为它是深度学习在NLP的一项了不起的应用,并且很多互联网公司也开始跟进,使用word2vec解决实际问题。

NLP的相关任务中,要将我们能看懂的语言交给计算机来处理,通常需要首先将语言数学化,只有这样机器才能认得出,而词向量正是将我们看懂的词进行数学化的一种方法,就是把一个词语表示成一个向量。

一般将词语转化为向量的方法有两种:

One-Hot Representation

Distributed Representation

下面分别介绍这两种方法

1 One-Hot 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是一对同义词

2 Distributed Representation

这种表示是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,依次利用这种距离相近的方法找出其他的词的对应。

英语转西班牙语