首页 > > > 4.1 Word2Vec技术
如果要一句话概括词向量的用处,就是提供了一种数学化的方法,把自然语言这种符号信息转化为向量形式的数字信息。这样就把自然语言理解的问题要转化为机器学习的问题。词向量化的方法有很多种,我们就先从最简单的one-hot向量讲起吧。
说到词向量,以one-hot编码的形式表示再简单不过了。所谓one-hot编码其实就是每一个词用一个只有0或1的向量来表示。我们假设一个语料集中有5个词,分别为[“今天”,“天气”,“真的”,“很好”,“啊”],那么我们就可以表示为以下形式:
今天:[1,0,0,0,0]
天气:[0,1,0,0,0]
真的:[0,0,1,0,0]
很好:[0,0,0,1,0]
啊:[0,0,0,0,1]
从上面的例子可见,one-hot编码表示的形式十分简单,假设在一个语料集合中,一共有n个不同的词,则可以用一个长度为n的向量,对于第i个词(i=0....n-1),向量index=i处的值为1外,向量其他位置的值都为0,这样就可以唯一通过一个[0,1,0,···,0]形式的向量表示一个词。
one-hot向量比较简单也容易理解,但是这里存在很多问题。比如:
1、计算量
种方法相当于有多少词汇就要建立多少维的向量。有人估算过2018年中国主流在线词典收录的词汇已经超过50万个,而且每年还以数千的速度递增。几十万维的向量,对于任何模型的计算都是很吃力的。
2、词汇鸿沟
比如“好”和“坏”,这两个词是反义词,应该是体现出一些在数值上相反的特性;比如“精明”,“强干”这两个词含义接近,在数值上应该也有接近的特性。然而这些特性在One-Hot的形式下都忽略掉了,因为独热向量标记模式就是把所有的对象标记成线性无关的向量。这当然不好,本身应该把特征表达在合适的维度上量化得更为合理一些,但是却在如此稀疏的向量上完全被破坏了。因此,科学家们还是找了一些比较有趣的办法来解决这个问题,比如Word Embedding。
上面我们说到了one-hot向量存在着很多问题,一个是向量稀疏、计算量大,另一个就是词与词之间没有相关性。向量稀疏和计算量大的问题很容易理解,one-hot向量的长度是根据词表的长度而定的,就我们现有的中文词库而言,有上千万个词,而且每年以上千个词的速度增长,这必然导致了one-hot向量的稀疏和计算困难。我们再来看另一个问题,词与词之间的相关性。这个怎么理解呢?我们来看下面的例子:
比如现在有两个句子:
美丽的(珠海)是经济特区。
美丽的(海南)是经济特区。
不难看出,括号里的“珠海”和“海南”是两个意思比较相近的词汇,都是一个城市。这种近似是怎么体现出来的呢?当然是上下文关系了,两个越接近的词汇在上下文表现出来的特征应该越接近。我们再找两个例子体会一下:
(小明)今年8岁。
(小丽)今年28岁。
(青海湖)风景宜人。
(长白山)风景宜人。
此处,我们通过理解一个句子的上下文,就可以推断出。“小明”和“小丽”语义相近,都是人物。“青海湖”和“长白山”都是风景名胜。 这种词与词之间的相关性本来就是一种十分有用的特征,对于计算机理解文字有非常大的帮助。然而,用one-hot编码的词向量之间是彼此独立的,并不会有任何相关性。这样说可能有点陌生,我们看下面的图片就很好理解了。

用one-hot编码出来的词向量在空间里面的表示如上图一样,两两之间是互相垂直的。这表明它们之间不存在任何的相关性。而我们知道词与词之间是客观存在相关关系的,那么理想的状态它们在空间里面的表示应该是这样的:

意思比较相近的词汇的两个向量应该靠得比较近些,譬如“珠海”和“海南”靠在一起,“小明”和“小丽”靠在一起。这样的词向量对于后续的任务会更有利以及更合理些。既然,one-hot向量做不了这一点,那么有没有另外办法可以做到呢?答案是肯定的。时间追溯到2013年,Google发表的一篇论文祭出了神经网络法则,这个论文里的模型后来被人们称为“Word2Vec”。通过这个模型,可以将one-hot向量转化为低维度的连续值(稠密向量),并且其中意思相近的词会映射到向量空间中相近的位置。这真是个伟大的发明啊,一次性解决了one-hot向量的词汇鸿沟和维度灾难的问题。
说到word2vec其实就是一个简化版的神经网络模型,我们上一章讲的网络结构几乎没有差别,它事实上是训练了一个语言模型,通过语言模型来获取词向量的。所谓语言模型,就是通过前n个字预测下一个字的概率,我们输入one-hot向量,然后连接一个全连接层,然后再连接若干层,然后连接一个分类器,就可以得到语言模型了,然后将大量文本输入训练就行了,最后得到的第一个全连接层的参数,就是词向量表。下面我们来具体看看网络结构:
我们假设语料集中有V个词,那么
记词典大小为V,即one-hot向量有V维。
输入层:one-hot向量,V个节点。
隐藏层:无激活函数,D个节点(D
模型训练后输入层和隐藏层之间权重即为我们要获取的词向量
输出层:输出输入词的邻近词的概率分布,V个节点

从上图可以看到,word2vec的网络结构十分简单,也只有3层结构。那么我们该如何训练它呢?目前在学术界和工业界比较成熟的主要是两种训练方法,一种叫做CBOW(Continuous Bag-of-Words),一种叫做Skip-gram。

这两种方法的思路十分有意思。它们认为,在一个语言的文章中,一个一个词汇的出现不是随便出现的,是有上下文约束的。好的正常的文章语料中,为了保证文章的通顺,上下文的约束会比较完整。那么能不能直接通过这些上下文的约束关系来对这一个一个的词汇进行Embedding的编码呢?它们俩正是这个思路。CBOW模型的假设是在一个句子中,已知当前词的前后几个词,然后预测当前这个词。Skip-gram模型正好反过来,它是假设在一个句子中,已知当前词,然后也测当前词前后的几个词。我这样说可能不够具象,我下边将用实例来说明一下,由于篇幅有限,我们暂且讨论CBOW模型。
比如现在有两个句子:
美丽的(珠海)是经济特区。
美丽的(海南)是经济特区。
不难看出,括号里的“珠海”和“海南”是两个意思比较相近的词汇,都是一个城市。这种近似是怎么体现出来的呢?当然是上下文关系了,两个越接近的词汇在上下文表现出来的特征应该越接近。我们再找两个例子体会一下:
(小明)今年8岁。
(小丽)今年28岁。
(青海湖)风景宜人。
(长白山)风景宜人。
此处,我们通过理解一个句子的上下文,就可以推断出。“小明”和“小丽”语义相近,都是人物。“青海湖”和“长白山”都是风景名胜。
那我们如何训练一个模型得到一个词汇的Embedding后的值呢?来看这张图。

首先,我们先人为规定一个要降维后的维度数量(也就是隐藏层的神经元个数),比如V个维度,这里我们暂定为3层。原始词表有N个词汇,那就是一个N维的One-Hot向量空间,上面的句子中一个有4个词,所以one-hot向量是4维。
接着,我们要定一个W矩阵,这个矩阵是一个尺寸为【V,N】的矩阵,这个矩阵是要训练的。
然后,我们要定一个 W'
矩阵,这个矩阵是一个尺寸为【N,V】的矩阵,这个矩阵也是要训练的。
在定义好网络结构后,我们来看看具体的计算过程。
第一步:随机初始化W矩阵和 W'
矩阵:

第二步:使用one-hot向量与W矩阵相乘,

第三步:得出的矩阵相加求平均值作为隐层,;

第四步:隐层的输出与W”矩阵相乘,

第五步:使用softmax函数对输出进行映射,

至此,我们的计算已经完成了,得出的输出结果就是[0.23,0.62,0.03,0.12]这个向量,而我们期望输出的向量是[0,1,0,0],即“珠海”这个词。这时,我们只要使用前一章说到的神经网络的训练方法不断地调整W和W”矩阵的值,使到输出结果无限逼近[0,1,0,0]即可。当我们训练得到W矩阵后,用每个词的one-hot向量车乘以这个矩阵W就可以得到自己的word embedding表示了。这里“珠海”的表示如下,[2,2,1]即为“珠海”这个词的词向量。

看明白这个过程了吗?这也是一个Encode和Decode的过程,Encode是期望编出来上下文对于中心词(珠海)的约束——也就是中心词的Embedding值,Decode是把Embedding值再还原成一个One-Hot向量。
Word Embedding训练完成后词汇的特性会有比较有趣的变化。比如France这个词和Paris这个词的差(几何距离),会近似等于Italy和Rome的差,这个差的关系可以被理解为首都。其实推论里面也就有一个

的关系成立,这在One-Hot向量中是根本没办法想象的。那当然也就会有

的关系成立。
上面我们讲述了如何使用神经网络去训练词向量。但之前我们提过,对于中文来说,由于不像英文有天然的空格符去分割每一个词,所以第一步是需要对文本进行分词。但是呢,有时候分词的效果并不理想,这样会导致误差的传递和叠加,严重影响了下流任务的训练效果。故此,有人就提出了针对中文可不可以对单个汉字进行训练呢?答案是可以的。这里的训练方法和上文相同,只不过当我们在进行one-hot编码的时候并不是使用一个词,而是使用单个汉字进行编码。这样就减少了分词效果不好从而导致误差传递,而且根据实验得出,通过单个字训练出来的字向量效果还是十分理想的。
Word Embedding的词之间的几何关系是靠上下文约束得到的,那么也就意味着在不同的语料中,由于上下文的不同,会导致训练得到的词汇的关系有很大不同。例如:定性来说,在以科技类文章做语料训练出来的向量中,“小米”、“苹果”、“IBM”、“华为”这几个词汇彼此之间的距离会比较近;而在以农业与生物类文章做语料的训练出来的向量中,“小米”、“苹果”、“菠萝”、“花生”会比较近一些。
Word Embedding的出现可以说在词汇量化方面提供了非常好的理论支持,为NLP在通向更远的道路上夯实了基础,可以说现在所有的基于深度学习的NLP模型几乎没有一个不用到Word Embedding技术的。希望大家能够仔细体会一下这种方法的优势。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69954080/viewspace-3125313/ ,如需转载,请注明出处,否则将追究法律责任。