NLP—word2vec词向量简介

NLP处理的数据都是文字,而文字是无法直接被计算机计算的,于是人们想出了使用独热编码的方式来表示单词。

浙江 [0,0,0,0,0,0,0,1,0,......0,0,0,0,0,0,0]
江苏 [0,0,0,0,1,0,0,0,0,......0,0,0,0,0,0,0]
安徽 [0,0,0,1,0,0,0,0,0,......0,0,0,0,0,0,0]
天津 [0,0,0,0,0,0,0,0,0,......1,0,0,0,0,0,0]

在语料库中采用这样一种方式来表示单词无疑会面临一些问题,例如忽略了单词之间的相关性,当语料库很大的时候,维度太高且矩阵稀疏。随后出现了word2vec词向量这种方式,它可以将独热编码转化为低维度的连续值即稠密向量,并且其中意思相近的词被映射到向量空间中相近的位置。如下图所示经过一个简单的神经网络学习到一个权值矩阵,将独热编码转化为稠密低维度向量。


word2vec是从大量文本中以无监督学习的方式学习语义知识的模型,其本质就是通过学习文本来用词向量的方式表征词的语义信息,通过嵌入空间将语义上相似的单词映射到距离相近的地方。即将单词从原先所属的空间映射到新的多维空间中。举例来讲,smart和intelligent意思相近,target和goal在意思上比较相近,但是target与apple离的较远,映射到新的空间中后smart和intelligent、target和goal,它们的词向量比较相近,而target与apple的词向量相差较远。

常见的word2vec词向量有两种模式,CBOW(continuous bag of words)和skip-gram,CBOW是根据目标单词所在原始语句的上下文来推测目标单词本身,而skip-gram则是利用该目标单词推测原始语句信息即它的上下文。举个例子:美国对中国进口钢铁采取了反倾销调查。那么CBOW的目标可以是:{中国,钢铁}—>进口,{采取了,调查}—>反倾销,{美国,中国}—>对;skip-gram的目标可以是:{进口}—>{中国,钢铁},{了}—>{采取,反倾销}。下面我们将以skip-gram为例做详细介绍。

以The president walked into the White House这句话为例,首先选取句子中的一个词作为输入词input word,比如我们把president作为输入词;有了输入词之后,再定义一个skip_window的参数,当skip_window=2时代表从当前输入词input word的左右两侧各选取两个单词,即窗口中的词就是【The,president,walked,into】。另一个重要的参数为num_skips,当num_skips=2时,代表我们从整个窗口中选取2个不同的词作为我们的output word,即(president,The),(president,walked)。神经网络通过学习这样的训练数据最终输出一个概率分布,这个概率分布表征了词汇表中每个单词出现在president之后的概率大小。我们直观的理解一下就会明白动作词、政治话题等出现在总统之后的概率将会更大,因为这些单词将会有更大的可能性出现在president的窗口之中。


我们的神经网络模型结构如下:


通过训练数据学习得到的模型,我们需要的是模型隐藏层的权重矩阵,这些权重实际上就是我们试图去学习的“词向量”。通过{ president the }、{ president walked }这样的样本,模型就会知道经常出现在“总统”附近的单词有哪些,在这个过程中我们需要的是训练模型的副产物即隐藏层权重矩阵,通过这个权重矩阵就可以将独热编码的单词转换为低维的稠密词向量,而这样的词向量恰恰是作为特征向量输入到神经网络的输出层softmax层的。我们发现,如果语料库比较巨大,例如有10万单词,隐藏层结点200个,即每个单词使用200维度特征表示,那么权重矩阵就是[100000,200],此时采用随机梯度下降等方法来训练神经网络将是十分缓慢的,所以提出了Hierarchical Softmax、Negative Sampling等方法来加速训练。

1、词表当中,有些单词组合或者词组在一起的时候有特定的含义,例如“machine learning”在一起代表一个学科领域,而拆开则表示了不同的意义,对于这样的单词应该并在一起进行模型训练。

2、高频词抽样,有些单词“and”、“but”、“a”等等词汇出现的频率要远远高于其他一些词汇,数量远远超过了训练这些词向量所需的样本数。定义一个单词被保留的概率P,单词出现的频次越高,则单词不被抽样删除的可能性越低。

3、Negative Sampling负采样:以目标单词与窗口内单词组成的真实单词对“得分”和目标单词与词表中其他单词随机组成的单词对“得分”为代价函数。不同于原本每个训练样本更新所有的权重,负采样每次让一个训练样本仅仅更新一小部分的权重,这样就会降低梯度下降过程中的计算量。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章