深度学习之循环神经网络(12)预训练的词向量

 在情感分类任务时,Embedding层是从零开始训练的。实际上,对于文本处理任务来说,领域知识大部分是共享的,因此我们能够利用在其它任务上训练好的词向量来初始化Embedding层,完成领域知识迁移。基于预训练的Embedding层开始训练,少量样本时也能取得不错的效果。

 我们以预训练的GloVe词向量为例,演示如何利用预训练的词向量模型提升任务性能。首先从官网上下载预训练的GloVe词向量表,我们选择特征长度100的文件glove.6B.100d.txt,其中每个词汇使用长度为100的向量表示,下载后解压即可。

GloVe词向量模型文件

利用Python文件IO代码读取单词的编码向量表,并存储到Numpy数组中。代码如下:

import os
import numpy as npprint('Indexing word vectors.')
embeddings_index = {}  # 提取单词及其向量,保存在字典中
# 词向量模型文件存储路径
GLOVE_DIR = r'/Users/XXX/Documents/深度学习/glove'
with open(os.path.join(GLOVE_DIR, 'glove.6B.100d.txt')) as f:for line in f:values = line.split()word = values[0]coefs = np.asarray(values[1:], dtype='float32')embeddings_index[word] = coefsprint('Found %s word vectors.' % len(embeddings_index))

运行结果如下所示:

Indexing word vectors.
Found 400000 word vectors.

 GloVe.6B版本共存储了40万个词汇的向量表。前面实战中我们只考虑最多1万个常见的词汇,我们根据词汇的数字编码表一次从GloVe模型中获取其词向量,并写入对应位置。代码如下:

num_words = min(MAX_NUM_WORDS, len(word_index)) + 1
embedding_matrix = np.zeros((num_words, EMBEDDING_DIM))  # 词向量表for word, i in word_index.items():if i > MAX_NUM_WORDS:continue  # 过滤掉其他词汇embedding_vector = embeddings_index.get(word)  # 从GloVe查询词向量if embedding_vector is not None:# words not found in embedding index will be all-zeros.embedding_matrix[i] = embedding_vector
print(embedding_matrix.shape)

运行结果如下所示:

Found 0 unique tokens.
(1, 100)

 在获得了词汇表数据后,利用词汇表初始化Embedding层即可,并设置Embedding层不参与梯度优化。其它部分均保持一致。我们可以简单地比较通过预训练的GloVe模型初始化的Embedding层的训练结果和随机初始化的Embedding层的训练结果,在训练完50个Epochs后,预训练模型的准确率达到了84.7%,提升了约2%

深度学习之循环神经网络(12)预训练的词向量相关推荐

  1. 深度学习之循环神经网络(11-b)GRU情感分类问题代码

    深度学习之循环神经网络(11-b)GRU情感分类问题代码 1. Cell方式 代码 运行结果 2. 层方式 代码 运行结果 1. Cell方式 代码 import os import tensorfl ...

  2. 深度学习之循环神经网络(11-a)LSTM情感分类问题代码

    深度学习之循环神经网络(11-a)LSTM情感分类问题代码 1. Cell方式 代码 运行结果 2. 层方式 代码 运行结果 1. Cell方式 代码 import os import tensorf ...

  3. 深度学习之循环神经网络(6)梯度弥散和梯度爆炸

    深度学习之循环神经网络(6)梯度弥散和梯度爆炸  循环神经网络的训练并不稳定,网络的善妒也不能任意加深.那么,为什么循环神经网络会出现训练困难的问题呢?简单回顾梯度推导中的关键表达式: ∂ht∂hi= ...

  4. 深度学习之循环神经网络(4)RNN层使用方法

    深度学习之循环神经网络(4)RNN层使用方法 1. SimpleRNNCell 2. 多层SimpleRNNCell网络 3. SimpleRNN层  在介绍完循环神经网络的算法原理之后,我们来学习如 ...

  5. 深度学习之循环神经网络(1)序列表示方法

    深度学习之循环神经网络(1)序列表示方法 序列表示方法 Embedding层 2. 预训练的词向量 前面的卷积神经网络利用数据的局部相关性和权值共享的思想大大减少了网络的参数量,非常适合于图片这种具有 ...

  6. 深度学习原理-----循环神经网络(RNN、LSTM)

    系列文章目录 深度学习原理-----线性回归+梯度下降法 深度学习原理-----逻辑回归算法 深度学习原理-----全连接神经网络 深度学习原理-----卷积神经网络 深度学习原理-----循环神经网 ...

  7. 深度学习之循环神经网络(8)长短时记忆网络(LSTM)

    深度学习之循环神经网络(8)长短时记忆网络(LSTM) 0. LSTM原理 1. 遗忘门 2. 输入门 3. 刷新Memory 4. 输出门 5. 小结  循环神经网络除了训练困难,还有一个更严重的问 ...

  8. 深度学习之循环神经网络(7)梯度裁剪

    深度学习之循环神经网络(7)梯度裁剪 1. 张量限幅 2. 限制范数 3. 全局范数裁剪 梯度弥散  梯度爆炸可以通过 梯度裁剪(Gradient Clipping)的方式在一定程度上的解决.梯度裁剪 ...

  9. 深度学习之循环神经网络(5)RNN情感分类问题实战

    深度学习之循环神经网络(5)RNN情感分类问题实战 1. 数据集 2. 网络模型 3. 训练与测试 完整代码 运行结果  现在利用基础的RNN网络来挑战情感分类问题.网络结构如下图所示,RNN网络共两 ...

最新文章

  1. 最新Python学习项目Top10!
  2. Ubuntu SVN安装使用命令
  3. it程序员刷题 面试 中文网站收集
  4. lua linux获取文件夹,Linux:删除目录下的文件的10种方法
  5. osgearth入门图解-用VC++做一个地球出来
  6. 2019秋季PAT甲级考试心得
  7. 7-7 有重复元素的全排列 (10 分)(set容器做法思路加详解)
  8. 解决base64通过http传输后+变空格的问题
  9. 30muduo_net库源码分析(六)
  10. ORA-04043: 对象 dba_data_files 不存在 BUG
  11. (翻译)开始iOS 7中自动布局教程(二)
  12. 2016年4月11日作业
  13. 2007年8月28日 月全食 照片
  14. UG NX 12 删除草图
  15. 《Redis开发与运维》学习第十章
  16. css设置图片、边框、背景样式
  17. 加入收藏 设为首页 代码
  18. 主流激光雷达分类及原理
  19. SwiftUI中NavigationLink多层嵌套导航无法返回上一层的原因及解决
  20. AutoCAD2014打开一闪而过解决方法

热门文章

  1. c语言 if 按大小顺序排序,刚学c语言,老师让用if编一个五个数字从大到小的排序,有那个大神能帮我,谢谢啦...
  2. matlab算概率,用matlab计算概率,再次吐槽某些吧友国战比赛七框选将的建议
  3. 通过调色板(QPalette)将readonly为true的QLineEdit颜色设置为灰色
  4. No relevant classes found. No output generated、metaObject连接错误
  5. Android文件存储方式之openFileOutput与获取数据openFileInput
  6. php必须掌握的库,PHP初學者必須掌握的10個知識點
  7. java 固定listview_listview Button始终放在底部示例
  8. python异常处理优点_python自测100题(下)
  9. angular 在IIS部署运行
  10. 【机器学习实战】第2章 k-近邻算法(kNN)