如何在Keras嵌入层中训练嵌入层


Answers:


24

像在您的网络体系结构中的任何其他层一样,对Keras中的嵌入层进行培训:它们通过使用选定的优化方法进行了调整,以使损失函数最小化。与其他层的主要区别在于它们的输出不是输入的数学函数。取而代之的是,该层的输入用于使用嵌入矢量[1]索引表。但是,底层的自动微分引擎没有问题来优化这些向量以最小化损失函数。

因此,您不能说Keras中的Embedding层与word2vec [2]一样。请记住,word2vec指的是一种非常特定的网络设置,它试图学习一种捕获单词语义的嵌入。使用Keras的嵌入层,您只是在尝试最小化损失函数,因此,例如,如果您正在处理情感分类问题,则学习到的嵌入可能不会捕获完整的词语义,而只能捕获其情感极性...

例如,以下从[3]截取的图像显示了三个句子的嵌入以及Keras嵌入层的训练,该层是从头开始进行训练的监督网络的一部分,该监督网络旨在检测clickbait标题(左侧)和预训练的word2vec嵌入(右侧)。如您所见,word2vec嵌入反映了短语b)和c)之间的语义相似性。相反,由Keras嵌入层生成的嵌入可能对分类有用,但不能捕获b)和c)的语义相似性。

在此处输入图片说明

这就解释了为什么训练样本数量有限时,最好使用word2vec权重初始化嵌入层,因此至少您的模型可以识别出“阿尔卑斯”和“喜马拉雅山”是相似的东西,即使它们没有两者都不会出现在训练数据集中的句子中。

[1] Keras的“嵌入”层如何工作?

[2] https://www.tensorflow.org/tutorials/word2vec

[3] https://link.springer.com/article/10.1007/s10489-017-1109-7

注意:实际上,该图像显示了嵌入层之后的层的激活,但是对于本示例而言,这无关紧要...请参阅[3]中的更多详细信息


2
这正是我在寻找的解释!我认为这句话应该以粗体显示:“请记住word2vec指的是一个非常具体的网络设置,它试图学习一种捕获单词语义的嵌入方式。”
凯文

0

嵌入层只是从离散且稀疏的1热向量到连续且密集的潜在空间的投影。它是(n,m)的矩阵,其中n是您的词汇量,n是您所需的潜在空间尺寸。仅在实践中,实际上不需要进行矩阵乘法,而是可以使用索引节省计算量。因此在实践中,它是将正整数(对应于单词的索引)映射到固定大小的密集向量(嵌入向量)的层。

您可以使用Skip-Gram或CBOW训练它创建Word2Vec嵌入。或者,您可以针对特定问题对其进行培训,以获得适合您特定任务的嵌入。您还可以加载经过预训练的嵌入(例如Word2Vec,GloVe等),然后继续针对您的特定问题进行训练(一种转移学习的形式)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.