19.6.22 小白随记:关于embedding嵌入层

#在完成了词向量的学习,激动的想赶快应用到神经网络当中,无奈直接的植入到神经网络的embedding中是不能使用的,所以还是需要了解embedding层的使用:

嵌入层被定义为网络的第一个隐藏层,必须有三个参数:

  • input_dim:文本数据中词汇的大小
  • output_dim:嵌入单词的向量空间的大小
  • input_length:输入序列的长度

嵌入层的输出是一个三维向量(x,y,z),x代表有多少个句子(样本);y代表这个句子的长度(长度需要统一);z代表嵌入后的维度。
如果希望Dense层直接到embedding层,必须先将y和z压缩到一行,形成一个(x,yz)的二维矩阵。


embedding layer的使用方式:

  • 单独使用学习嵌入,之后可以用在另一个模型中
  • 可以作为深度学习model的一部分,与model本身一起学习
  • 可以加载训练好的词嵌入模型,相当于一种迁移学习

关于word2vec与embedding layer:

  • word2vec:无监督,利用上下文环境来学习词嵌入表示
  • embedding layer:监督,嵌入层权重的更新是基于标签的信息进行学习
    注:之前看代码总结流程,大概就是先要训练词向量,然后如果用keras有embedding层可以处理,直接植入才发现不是那么容易的,那个其实是用word2vec学到词向量然后作为embedding layer的初始权重。相当于上面embedding layer使用的第三条(而一般的情况是随机初试化权重。)

一个用神经网络进行分类的代码各片段:
例子如下:19.6.22 小白随记:关于embedding嵌入层_第1张图片

  • 先针对句子编码,并用0补足(pad)

19.6.22 小白随记:关于embedding嵌入层_第2张图片


  • 定义模型,定义的过程中是独立的
    19.6.22 小白随记:关于embedding嵌入层_第3张图片

  • 训练拟合与评估时才用到编码等的原始数据的处理
    19.6.22 小白随记:关于embedding嵌入层_第4张图片

结合词向量(用词向量作为embedding初始化)的embedding:

同上一个例子相同,不同点是要用Tokenizer()来数字化句子里的单词
19.6.22 小白随记:关于embedding嵌入层_第5张图片


之后对glove向量进行处理形成一个dictionary,key是单词,value是embedding的值
19.6.22 小白随记:关于embedding嵌入层_第6张图片


遍历embeddings_index(读单词),作为embedding层输入权重的初始化
19.6.22 小白随记:关于embedding嵌入层_第7张图片


model定义和上面相同,嵌入层参数改为:
在这里插入图片描述

维数定义为100(glove的迁移版本选择的是100维的),不更新单词学习权重,可训练属性为false,
其他拟合部分评估部分均一致。

*数据内容等参考https://blog.csdn.net/anshuai_aw1/article/details/84329337


#注:
既然one-hot编码就可以实现表示,但很容易理解的是数据量大的时候矩阵过大过稀疏,所以embedding层的作用某种程度上来讲就是降维的,(原理其实就是矩阵相乘,线性代数中的,如2100维的矩阵乘以10010的矩阵就变成了2*10的矩阵,也可以理解为CNN中特殊的全连接层操作,当然有时为了放大特征还要升维,矩阵同理)

你可能感兴趣的:(19.6.22 小白随记:关于embedding嵌入层)