文本首先要转为向量
- 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)