Embedding一下看清楚
作者:互联网
原因就是你没找到合适的教程。如果这篇你看不明白,关了,下一篇。
embedding层有什么用
首先,embedding是为了处理文字的理解。让机器能够理解一句话的意思: 灰白灰会挥发。一句话,6个字。
但是只有五种 白,灰,会,挥,发。
编码
我们需要将汉字表达成网络认识的数字,比如我用整数表达。
白:2
灰:1
会:3
挥:4
发:5
句子就可以写成121345。
我用3维的01向量也能表达
白:(000)
灰:(001)
会:(010)
挥:(100)
发:(111)
成吧?相应的这句话就是(001)(000)(001)(010)(100)(111)就能表示灰白灰会挥发了。就是比起121345的表示方法长了好些。
我再费劲点,我用one hot编码方式
白:(10000)
灰:(01000)
会:(00100)
挥:(00010)
发:(00001)
也可以吧?
那么看来,我有很多种能够对字编码的方式。那我能不能找到一种最有优势的。比方说,如果我能用一个向量来表示这个字,这个向量能够表达这个字的特点。比如(255,255,255)这是白色的rgb颜色码,(100,100,100)是灰色的rgb颜色码。那么如果我的向量这样表达——白:(255,255,255,0,0) 灰:(100,100,100,0,0)诶,这个向量他有灵性,棒棒的哈,那如果我能把编码与字的属性合一,那么想当然,会给我的网络带来很多便利。
不过我肯定不能人工去编码,那么我选择整一个编码矩阵,交给网络更新成不?
网络更新编码
白:(11,22,33,44,55)
灰:(5,8,2,1,4)
会:(6,6,6,6,6)
挥:(8,8,8,8,8)
发:(0,0,0,0,0)
我让其他层的网络将每个字更新成这种有语义的可不可以:
白:(255,255,255,0,0)
灰:(100,100,100,0,0)
其他字省略了
针对以上需求我们。。
当然这个更新过程与我们的embedding层无关,后面的网络会负责更新。embedding只是让把句子转换成初始编码矩阵。
1.我们需要用将这句话转换成向量
2.我们需要一个初始的可以更新的特征编码矩阵。
就说我们这个句子:灰白灰会挥发,有5种字,一共长度6,那我想把每个字编码成维度5的’灵性‘’向量(白:(255,255,255,0,0) )怎么整呢。
keras.layers.Embedding(input_dim, output_dim, embeddings_initializer='uniform', embeddings_regularizer=None, activity_regularizer=None, embeddings_constraint=None, mask_zero=False, input_length=None)
input_dim: 词汇表大小,对应我们的例子就是5
output_dim:输出维度,对应我们的例子还是5,不过这回说的就是:白:(255,255,255,0,0)这个了。
input_length:输入的句子长度,对应我们的例子,6.
通常就需要给出这三个参数,embedding层就能自动的暗搓搓给你生成一个编码矩阵,一个字对应矩阵的一行。更新矩阵,你的字的想两步就被更新了吗。第一行向量长什么样,你的字不就被编码成什么样吗,所以啊,你的输入长什么样其实全权由这个矩阵决定了。
不对啊,还有一个问题,网络的输入都得是向量,一开始的输入他就不认字啊,怎么转换啊?
很简单。你自己也暗搓搓的把‘’灰白灰会挥发‘’转化成(1, 2, 1, 3, 4, 5)给网络就好。
那么官方这句:将正整数(索引值)转换为固定尺寸的稠密向量。 例如: [[4], [20]] -> [[0.25, 0.1], [0.6, -0.2]]
你也明白什么意思了吧。通常都会先将文字转换成普通整数编码,然后再用embedding层进行可更新向量编码。
我尽力了。。。。希望你能看明白,如果没明白也不要烦躁,再多看看别的教程。
NLP蜗牛 发布了34 篇原创文章 · 获赞 3 · 访问量 5825 私信 关注标签:编码,embedding,一下,矩阵,看清楚,Embedding,100,向量,255 来源: https://blog.csdn.net/weixin_41845265/article/details/104125984