NLP(六):word embedding(词嵌入)

参考:

https://www.zhihu.com/question/45027109/answer/129387065

一、word embedding是干什么的

比起one-hot编码表示一个词,我们更加希望用分布式表示(distributed representation)来表示一个词。因为one-hot编码的稀疏性决定了它很难把握词语之间的相似性,包括词性,语义信息等等,比如car和bus或多或少具有相似性,one-hot编码却难以衡量。经过embedding之后,一个长达数十万的稀疏向量被映射到数百维的稠密向量,这个稠密向量的每一个维度的数值都可以认为是有实际意义的。
所以我们拿到一个文本,对其中的词进行了一个one-hot编码后,我们还可以把它喂进一个Embedding layer,它的作用主要在于学习 词语的分布式表达并将极其稀疏的one-hot编码的词语进行降维。

二、如何训练词的分布式表示

如果遵循的一个原则是:词要放在上下文中才有意义。就产生了两种训练词的distributed representation的方法:CBOW模型和Skip-gram模型,这两种模型的最终输出层都不是我们想要获得的‘稠密’的词向量,有种醉翁之意不在酒的感觉。

CBOW:根据上下文来预测当前词语的概率,而且上下文中所有的词对当前词出现的概率的影响权重是一样的。CBOW模型的训练输入是某一个特征词的上下文相关的词对应的词向量,而输出层有词汇表大小个神经元。

Skip-gram:根据一个特征词来预测上下文出现词语的概率。训练输入是某一个特征词的词向量,而输出层有词汇表大小个神经元。 

似乎输出的是词的概率,而不是想要的词向量。假如在‘i want to eat apple’这么一句话中,使用CBOW模型,挖去特征词eat,把其余词作为一个输入,输入网络中进行训练,我们的目标就是使得在输出层中大小为词汇表的这些节点中,eat对应的节点的概率最大,如果达成了这个任务,则我们认定此时的模型对词的处理很好。
如果是输入层-隐藏层-输出层这样的网络模型,显然我们是把onehot向量输入,经过权重矩阵W的某种计算,隐藏层输送了这个运算结果给输出层,输出层再经过另一个矩阵计算,softmax一下,得到最终的概率。既然这个模型整体能够预测出我们挖去的特征词eat,说明这个模型能够很好的处理语义,也就说明了我们训练出来的这个权重矩阵W,它和onehot向量组成的矩阵相乘得到的结果,可以当做一个稠密的词向量,拿去做其他的任务。
也就是说,看似我们的目标是获取特征词,或者获取上下文的单词,其实达成了这个目标之后,我们要的只是其中的权重矩阵而已。
因为最开始的词是一个稀疏向量,所以和W相乘后,得到的是一个W中的某行或某列值。W的大小如果是 n×隐藏层数目,那么一个词以稀疏向量形式输入后得到的稠密向量的长度就应该是隐藏层长度,而不是最开始的词汇表长度,这就是 降维
 
 

,


猜你喜欢

转载自www.cnblogs.com/liuxiangyan/p/12526392.html