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层进行可更新向量编码。

我尽力了。。。。希望你能看明白,如果没明白也不要烦躁,再多看看别的教程。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值