【无标题】


keras.embedding

例如:随着人工智能的不断发展,深度学习这门技术也越来越重要,很多人都开启了学习深度学习,本文就介绍了深度学习中keras框架进行embedding的原理。


一、embedding参数详解

input_dim:大或等于0的整数,字典长度,即输入数据最大下标+1
output_dim:大于0的整数,代表全连接嵌入的维度
embeddings_initializer: 嵌入矩阵的初始化方法,为预定义初始化方法名的字符串,或用于初始化权重的初始化器。参考initializers
embeddings_regularizer: 嵌入矩阵的正则项,为Regularizer对象
embeddings_constraint: 嵌入矩阵的约束项,为Constraints对象
mask_zero:布尔值,确定是否将输入中的‘0’看作是应该被忽略的‘填充’(padding)值,该参数在使用递归层处理变长输入时有用。设置为True的话,模型中后续的层必须都支持masking,否则会抛出异常。如果该值为True,则下标0在字典中不可用,input_dim应设置为|vocabulary| + 2。
input_length:当输入序列的长度固定时,该值为其长度。如果要在该层后接Flatten层,然后接Dense层,则必须指定该参数,否则Dense层的输出维度无法自动推断。


二、数学原理

1.one-hot

one-hot编码是一种简单的表示单词的方法,例如‘我 喜 欢 吃 苹 果’,可以生成如下的独热矩阵:

wordvector
[1,0,0,0,0,0]
[0,1,0,0,0,0]
[0,0,1,0,0,0
[0,0,0,1,0,0]
[0,0,0,0,1,0]
[0,0,0,0,0,1]

喜欢的可以用下面这种形式进行表示:

wordvector
喜欢[0,1,0,0,0,0][0,0,1,0,0,0]]

但是使用这种稀疏矩阵存储数据是浪费空间的。

2.word embedding计算过程

上面的例子可以看出使用独热编码构造的句子表示矩阵很消耗空间。
在这里插入图片描述
上述计算过程是word embedding的详细过程, 首先是2x6的独热矩阵为输入,中间层节点数为3的全连接的神经网络层。右边为得到的嵌入后的向量矩阵。可以看做是查表的过程,从矩阵中取出1,2行。
所以woed embedding的过程就是通过训练好的参数矩阵,将one-hot向量转换成对应的嵌入向量的过程。中间层的节点的维度就是全连接层的字向量维数,输入的one-hot矩阵和权重矩阵进行点积得到对应的嵌入向量,并使用嵌入向量作为字词的表示。

3.keras embedding过程

keras中的embedding和word embedding类似,与word embedding的one-hot矩阵不同的是,keras的embedding是使用的词下标矩阵作为embedding层的输入。
keras的embedding的嵌入过程如下所示:
(1)提取文章所有的单词(此处以1000个为例),按照出现的次数进行降序排列,单词频数最大的排第一位,以此类推。
(2)每个编号使用1000维的one-hot编码表示。
(3)经过embedding层的训练,得到一个行为词个数1000,列为词向量维度的大小的权重矩阵,矩阵的第一行对应ID为0的词向量。
生成嵌入矩阵之后,就完成了对单词的嵌入,类似word embedding过程,keras的embedding也是一个查表的过程,例如输入Input_length = 2的情况,输入长度为6的句子,将该句子中的词语替换为对应的下标,例如[[4],[20]],即可通过类似于word embedding的查表过程转化成[0.25,0.1]。此处生成的embedding层并不包含语义特征,只是进行了词嵌入的操作。矩阵的训练类似于普通神经网络的训练,权重矩阵的训练与整个网络的所有参数的训练是一样的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值