引用:
https://blog.csdn.net/u010412858/article/details/77848878
为什么要用Embedding?
使用One-hot方法,编码向量维度很高也很稀疏,导致计算效率很低。
比如,2000容量的字典,如果用One-hot编码,每个词将会用一个2000维的向量来表示,其中1999个数字是0,。词与词之间具有相似性,通过Embedding,相似含义词汇的距离会较近。
Keras对Embedding的解释:
嵌入层将正整数(下标)转换为具有固定大小的向量.
举个例子:
deep learning is very deep
使用嵌入层Embedding的第一步是通过索引对句子进行编码, 具体的做法是:
接下来会创建嵌入矩阵,我们要决定每一个索引需要分配多少个‘潜在因子’,这大体上意味着我们想要多长的向量,通常使用的情况是长度分配为32和50。在这篇博客中,为了保持文章可读性这里为每个索引指定6个潜在因子。嵌入矩阵就会变成这样:
这样,我们就可以使用嵌入矩阵来而不是庞大的one-hot编码向量来保持每个向量更小。简而言之,嵌入层embedding在这里做的就是把单词“deep”用向量[.32, .02, .48, .21, .56, .15]来表达。
然而并不是每一个单词都会被一个向量来代替,而是被替换为用于查找嵌入矩阵中向量的索引。