文本和序列Embedding-词嵌入-提要

文本首先要转为向量

  • one-hot
  • 词嵌入

转one-hot

  • Tokenizer将单词fit进去,得出单词对应一一索引,zeros矩阵遍历赋值【samples,words,one-hot】
  • 取word的Hash来作为索引,非显性(注意上限)

词嵌入

  • Ebedding层学习词嵌入
    学习单词之间的关系,使向量距离,方向,几何变换都有其意义
    构造方式Embedding(标记的个数,嵌入的维度dims)
    层输入【samples, maxlen】
    层输出【samples, maxlen, dims】
    之后会被Flatten()拉平成【samples,maxlen*dims】
    

读取原始文本使用预训练词嵌入流程

数据制作

  • 读取文本,文本内容添加进texts,标签添加进labels
  • 使用Tokenizer,指定词汇容量,fit导入texts
  • texts_to_sequences方法,原始数据texts字符串转化为整数索引的列表
  • pad_sequences使其规定长度,适应于张量
  • labels使用asarray方法转成numpy矩阵
    -对数据进行打乱,分割训练,验证集

准备Glove词嵌入

  • 导入glove文本,获得单词,和单词对应的向量,制成字典
  • 制作层权重矩阵:【max_words单词,embedding_dims单词对应的维度向量】,遍历训练集的(单词-》数值)元祖,获得每个单词的向量,制成(数值-》词向量)的权重矩阵
  • 得(数值->向量)的权重矩阵

构建模型

  • Embedding层,Flatten层,Dense层,sigmoid层
  • model.layers[0].set_weights([embedding_matrix])改变权重
  • model.layers[0].trainable = False 设置冻结,不加入训练
  • 模型编译,喂数据

评估

  • 绘制图表
  • 最终使用测试集
    1.数据导入同“数据制作”
    2.model.load_weights('pre_trained_glove_model.h5')
    3.model.evaluate(x_test, y_test)
    

项目代码

点击这里