嵌入层(Embedding Layer)与词向量(Word Embedding)详解

时间:2024-04-01 10:51:03

进行推荐算法\语言输入建模时,需要处理输入的文本
通过one-hot太过于稀疏,于是通过 词嵌入层,进行“训练” 映射到一个较短的词向量上来……等方法。来进行矩阵的稠密化、提取矩阵的隐含特征.
Embedding层——keras中的one-hot映射为 向量的层;词向量(word embedding)——一种语言模型表示方法

注意本文是一个总结\整理,纵向对比各个概念、方法,防止混淆;如果读者 想要清晰具体细节,可以参考标题对应的链接。

(っ•̀ω•́)っ✎⁾⁾ 总结输出~不失为一种 日后回顾的高效率劳动!ヾ(•ω•`。)

常见的语言表示模型

嵌入层(Embedding Layer)与词向量(Word Embedding)详解

词向量与Embedding区分

Embedding层——keras中的one-hot映射为 向量的层;词向量(word embedding)——一种语言模型表示方法

分布式表示(distributed representation)

Distributed representation可以解决One hot representation的问题,它的思路是通过训练,将每个词都映射到一个较短的词向量上来。

所有的这些词向量就构成了向量空间,进而可以用普通的统计学的方法来研究词与词之间的关系。这个较短的词向量维度是多大呢?这个一般需要我们在训练时自己来指定。

比如下图我们将词汇表里的词用"Royalty",“Masculinity”, "Femininity"和"Age"4个维度来表示,King这个词对应的词向量可能是(0.99,0.99,0.05,0.7)(0.99,0.99,0.05,0.7)。当然在实际情况中,我们并不能对词向量的每个维度做一个很好的解释。

嵌入层(Embedding Layer)与词向量(Word Embedding)详解

word2vec

Word2Vec模型中,主要有Skip-Gram和CBOW两种模型,从直观上理解,Skip-Gram(常用这个)是给定input word来预测上下文。而CBOW是给定上下文,来预测input word。

word2vec模型其实就是简单化的神经网络。
嵌入层(Embedding Layer)与词向量(Word Embedding)详解

输入是One-Hot Vector,Hidden Layer 没有**函数,也就是线性的单元。Output Layer维度跟Input Layer的维度一样,用的是Softmax回归。当这个模型训练好以后,我们并不会用这个训练好的模型处理新的任务,我们真正需要的是这个模型通过训练数据所学得的参数,例如 隐层的权重矩阵

这个模型是如何定义数据的输入和输出呢?一般分为CBOW(Continuous Bag-of-Words) 与Skip-Gram两种模型。CBOW模型的训练输入是某一个特征词的上下文相关的词对应的词向量,而输出就是这特定的一个词的词向量。 Skip-Gram模型和CBOW的思路是反着来的,即输入是特定的一个词的词向量,而输出是特定词对应的上下文词向量。CBOW对小型数据库比较合适,而Skip-Gram在大型语料中表现更好。

嵌入层(Embedding Layer)与词向量(Word Embedding)详解

CBOW模型(多对一 小语料库较好)

嵌入层(Embedding Layer)与词向量(Word Embedding)详解

Skip-Gram模型(一对多 大语料库中表现较好)
`P,S, 具体训练过程:详见 标题网址`

More-类似查表操作,区别 W和词向量

下图表示:输入*权重矩阵 = 词向量
嵌入层(Embedding Layer)与词向量(Word Embedding)详解

左边的形式表明,这是一个以2x6的one hot矩阵的为输入、中间层节点数为3的全连接神经网络层,但你看右边,不就相当于在 wijw_{i j} 这个矩阵中,取出第1、2行,这不是跟所谓的字向量的查表(从表中找出对应字的向量)是一样的吗?事实上,正是如此!这就是所谓的Embedding层,Embedding层就是以one hot为输入、中间层节点为字向量维数的全连接层!而这个全连接层的参数,就是一个“字向量表”!从这个层面来看,字向量没有做任何事情!它就是one hot,别再嘲笑one hot的问题了,字向量就是one hot的全连接层的参数!

那么,字向量、词向量这些,真的没有任何创新了吗?有的,从运算上来看,基本上就是通过研究发现,one hot型的矩阵相乘,就像是相当于查表,于是它直接用查表作为操作,而不写成矩阵再运算,这大大降低了运算量。再次强调,降低了运算量不是因为词向量的出现,而是因为把one hot型的矩阵运算简化为了查表操作。这是运算层面的。思想层面的,就是它得到了这个全连接层的参数之后,直接用这个全连接层的参数作为特征,或者说,用这个全连接层的参数作为字、词的表示,从而得到了字、词向量,最后还发现了一些有趣的性质,比如向量的夹角余弦能够在某种程度上表示字、词的相似度。

对了,有人诟病,Word2Vec只是一个三层的模型,算不上“深度”学习,事实上,算上one hot的全连接层,就有4层了,也基本说得上深度了。

More-more

https://www.leiphone.com/news/201706/PamWKpfRFEI42McI.html

类似于自编码思想

Word2Vec模型实际上分为了两个部分,第一部分为建立模型,第二部分是通过模型获取嵌入词向量。Word2Vec的整个建模过程实际上与自编码器(auto-encoder)的思想很相似,即先基于训练数据构建一个神经网络,当这个模型训练好以后,我们并不会用这个训练好的模型处理新的任务,我们真正需要的是这个模型通过训练数据所学得的参数,例如隐层的权重矩阵——后面我们将会看到这些权重在Word2Vec中实际上就是我们试图去学习的“word vectors”。基于训练数据建模的过程,我们给它一个名字叫“Fake Task”,意味着建模并不是我们最终的目的。

上面提到的这种方法实际上会在无监督特征学习(unsupervised feature learning)中见到,最常见的就是自编码器(auto-encoder):通过在隐层将输入进行编码压缩,继而在输出层将数据解码恢复初始状态,训练完成后,我们会将输出层“砍掉”,仅保留隐层。

Word2Vec(Skip-Gram举例)——只需要 权重矩阵和查找表;不用后面的 softmax全连接了(这一层只是为了 训练)

  • 第一个网络层权重矩阵和输出。
    嵌入层(Embedding Layer)与词向量(Word Embedding)详解

  • 直接查找出来 训练好的权重矩阵的第四行,作为自己代表的词向量:
    嵌入层(Embedding Layer)与词向量(Word Embedding)详解

  • 整个过程: 输入one-hot – 【需要的权重矩阵】-- 查找表 --【输出的全连接权重】-- 输出 --【softmax】 --输出概率得到训练情况

嵌入层(Embedding Layer)与词向量(Word Embedding)详解

  • 输出层:
    嵌入层(Embedding Layer)与词向量(Word Embedding)详解