NLP《词汇表示方法(二)词嵌入表示》

用one-hot向量的方式表示词汇无法得到词语之间的相似性和联系性,这个不符合我们的语言习惯,我们很多词语都是有联系的。

比如:语义上,“橘子”和“苹果”,都是水果。“你”和“你们”只是复数的区别。“go”和“went”是时态的差异。但是都是具有某种相似性的。然鹅,one-hot向量一开始就把各个代词看成了各个类别,之间毫无关联性。除此之外,且维度很高,数据十分稀疏,不利于计算和存储。
因此我们需要一个更加合理的词汇表示方式。

一:Word Embedding
词嵌入最粗浅的理解,每个词被映射到低维连续向量,如下所示:
爷爷: (-0.065, -0.035, 0.019, -0.026, 0.085,…)
奶奶: (-0.019, -0.076, 0.044, 0.021,0.095,…)
珠江: (0.027, 0.013, 0.006, -0.023, 0.014, …)
这个低维度的空间有这样的特征,相似的词映射到相似方向 – 语义相似性被编码了,Cosine相似度衡量方向,相类似的词汇被映射到一个相近的向量位置。这样一来,我们不再使用稀疏且独立的one-hot向量了,而是换成了一个低维度稠密的,且可以表征词汇相似度的一个向量来表征一个词汇。
在这里插入图片描述

如上图所示,具有相似性质的词汇可以映射到相似位置的向量位置上,这样能表示出词汇之间的相似性,这就很符合语言习惯了,有利于后续的一些应用,打好基础,这个是很有用的,尤其是在语言词汇上下文中,相似的上下文是希望得到相似的预测结果的。

比如句子预测(语言模型):
句子A:I want one cup of orange juice.
句子B:I want one cup of apple ?.

怎么猜出这个横线的词语是啥?我们能看到上下文的句子是很类似的,如果我们能根据某个语言模型得出,“orange”和“apple”是很类似的向量,那么就可以通过学习第一句话,就能预测出第二句话的内容也是“juice”,因为是很相似的一句话。这个有些类似于小时候小学语文中学习的造词造句,通过类比和相似度进行学习。

再比如NER(命名实体识别)问题:
已知句子A:Tom is an orange farmer. –》Tom是一个人名实体
已知句子B:Mike is an apple farmer. –》Mike是一个人名实体
预测句子C:Robert is a pear cultivator. –》?是一个人名实体
我们能看出来句子的结构很相似,如果我们使用嵌入空间的向量来表示单词,我们会发现,“orange”和“apple”和“pear”是很相近的词语,“farmer”和“cultivator”是相似的词语,那么通过学习前俩句子的标记,我们也就能顺利成章的理解出待预测句子的命名实体了。

如上两个例子就是嵌入空间,词汇相似度带来的好处。

另一方面,假如,我们有词汇10000个,如果使用one-hot向量,这个向量就是10000维度的,整个词汇表就是10000X10000的矩阵V。现在我们想将他们映射到一个低维度稠密的空间,假如每个向量是300维度的,那么嵌入空间的词汇表的大小就是300X10000的矩阵E,大大减少了存储空间。也减少了计算量。这个300的空间维度是自定义的,你想多少就多少,一般是取100~500 之间比较常见了,达到了降维的效果(之前学习的人脸检测中,也是把一个高维度的人脸图像经过一个CNN映射到一个128维度的向量,用这个向量来表示人脸的距离相似度,呐,跟这个是很类似的概念了,都是把高维稀疏且独立的数据映射到低维稠密且具有相似度的空间上)。

从另一个角度来看,在V空间内,每一个原始的one-hot向量v_i都表示一个词汇,在E的低维度嵌入空间,每个e_i也表示同样一个词汇,怎么对应起来呢?由于我们定义他们的词汇的下标i是一样的。就是简单地根据下标look up词汇表的操作了。如果换成数学计算就是。
e_i = E * v_i。
通过上述式子就能简单的从one-hot向量转换到低维空间的表示向量。

词嵌入的好处是,不仅达到了降维的效果,还能表示词语之间的相似程度,因为予以相近的词汇在嵌入向量空间中更加距离接近(欧式距离或者是余弦距离)。

最后问题来了,怎么得到这个空间呢?注意到我们上述的数学计算公式了吧,输入可以是one-hot向量,参数矩阵是E,诶?参数?说到这里是不是有点眉目了,初始化参数,学习参数,梯度下降这些概念是不是就出来了。

我们给一下思路啊,我们得先定义一个语言模型,就是预测句子人话的概率,输入数据就是整个嵌入空间的向量,还要给定上下文,将输入的数据(嵌入空间的向量作为参数)进行模型学习,输出就是应该预测到的那个词语,通过这样的监督学习,最大化这个预测模型,求出参数。下面我们将学习神经网络模型,word2vec模型来学习如何得到这个词向量。具体做法且看后面的学习。