基于pytorch 预训练的词向量用法详解


Posted in Python onJanuary 06, 2020

如何在pytorch中使用word2vec训练好的词向量

torch.nn.Embedding()

这个方法是在pytorch中将词向量和词对应起来的一个方法. 一般情况下,如果我们直接使用下面的这种:

self.embedding = torch.nn.Embedding(num_embeddings=vocab_size, embedding_dim=embeding_dim)
num_embeddings=vocab_size  表示词汇量的大小
embedding_dim=embeding_dim 表示词向量的维度

这种情况下, 因为没有指定训练好的词向量, 所以embedding会帮咱们生成一个随机的词向量(但是在我刚刚测试的一个情感二分类问题中, 我发现好像用不用预训练的词向量, 结果差不多, 不过不排除是因为当时使用的模型比较简单, 导致一些特征根本就没提取出来).

如果我想使用word2vec预训练好的词向量该怎么做呢?

其实很简单,pytorch已经给我们提供好了接口

self.embedding.weight.data.copy_(torch.from_numpy(embeding_vector))
self.embedding.weight.requires_grad = False

上面两句代码的意思, 第一句就是导入词向量, 第二句表示的是在反向传播的时候, 不要对这些词向量进行求导更新. 我还看到有人会在优化器那里使用这样的代码:

# emotion_net是我定义的模型
optimizer = torch.optim.Adam(filter(lambda p: p.requires_grad, emotion_net.parameters()), lr=1e-3, betas=(0.9, 0.99))

大概意思也是为了保证词向量不会被反向传播而更新, 具体有没有用我就不清楚了.

其实我感觉大家比较在意的其实应该是embeding_vector的形式, 下面我就介绍一下embeding_vector的形式

为了讲述方便, 这里定义出下面几个矩阵

​embeding_vector:表示词向量,每行是一个词的词向量,有多少行就说明有多少单词

word_list:表示单词列表,里面就是单词

word_to_index:这个矩阵将word_list中的单词和embeding_vector中的位置对应起来 ​

其实embeding_vector是一个numpy矩阵, 当然你看到了, 实际输入到pytorch的时候, 是需要转换成tensor类型的. 这个矩阵是什么样子的呢? 其中这个矩阵是 [vocab_size×embeding_dim] [vocab\_size \times embeding\_dim][vocab_size×embeding_dim] 的形式. 其中一共包含vocab_size vocab\_sizevocab_size 个单词, 每个单词的维度是 embed_dim embed\_dimembed_dim, 我们把这样一个矩阵输入就行了.

之后, 我们要做的其实就是将 word_to_index word\_to\_indexword_to_index 这个矩阵搞出来, 这里的单词转下标的矩阵, 就是联系 embeding_vector embeding\_vectorembeding_vector 和 word_list word\_listword_list 这两个矩阵的中间者. 我们在输入到torch.nn.Embedding中之前, 需要先通过 word_to_index word\_to\_indexword_to_index 将单词转换成 embeding_vector embeding\_vectorembeding_vector 的下标就可以了.

以上这篇基于pytorch 预训练的词向量用法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python基于xml parse实现解析cdatasection数据
Sep 30 Python
Python实现简单的代理服务器
Jul 25 Python
Python selenium如何设置等待时间
Sep 15 Python
Python中index()和seek()的用法(详解)
Apr 27 Python
python交互式图形编程实例(三)
Nov 17 Python
python实现本地图片转存并重命名的示例代码
Oct 27 Python
python自动化生成IOS的图标
Nov 13 Python
详解Python二维数组与三维数组切片的方法
Jul 18 Python
python异常触发及自定义异常类解析
Aug 06 Python
python mqtt 客户端的实现代码实例
Sep 25 Python
matlab 计算灰度图像的一阶矩,二阶矩,三阶矩实例
Apr 22 Python
Python持续监听文件变化代码实例
Jul 22 Python
导入tensorflow:ImportError: libcublas.so.9.0 报错
Jan 06 #Python
Python连接字符串过程详解
Jan 06 #Python
pytorch中的自定义数据处理详解
Jan 06 #Python
如何基于Python实现自动扫雷
Jan 06 #Python
pytorch 自定义参数不更新方式
Jan 06 #Python
3种python调用其他脚本的方法
Jan 06 #Python
pytorch 实现模型不同层设置不同的学习率方式
Jan 06 #Python
You might like
使用apache模块rewrite_module (转)
2007/02/14 PHP
php实现excel中rank函数功能的方法
2015/01/20 PHP
Ajax+PHP实现的模拟进度条功能示例
2019/02/11 PHP
PHP7匿名类的用法示例
2019/04/05 PHP
Jquery ui css framework
2010/06/28 Javascript
Javascript计算时间差的函数分享
2011/07/04 Javascript
js的隐含参数(arguments,callee,caller)使用方法
2014/01/28 Javascript
jQuery实现延迟跳转的方法
2015/06/05 Javascript
JavaScript简单修改窗口大小的方法
2015/08/03 Javascript
非常酷炫的Bootstrap图片轮播动画
2016/05/27 Javascript
使用JS读取XML文件的方法
2016/11/25 Javascript
JS实现淡入淡出图片效果的方法分析
2016/12/20 Javascript
Vue结合原生js实现自定义组件自动生成示例
2017/01/21 Javascript
Vue 单文件中的数据传递示例
2017/03/21 Javascript
3分钟快速搭建nodejs本地服务器方法运行测试html/js
2017/04/01 NodeJs
node.js中debug模块的简单介绍与使用
2017/04/25 Javascript
js上传图片预览的实现方法
2017/05/09 Javascript
node.js 用socket实现聊天的示例代码
2017/10/17 Javascript
JavaScript面向对象程序设计中对象的定义和继承详解
2019/07/29 Javascript
JS动态显示倒计时效果
2019/12/12 Javascript
vue集成openlayers加载geojson并实现点击弹窗教程
2020/09/24 Javascript
从表单校验看JavaScript策略模式的使用详解
2020/10/17 Javascript
python实现删除文件与目录的方法
2014/11/10 Python
python通过smpt发送邮件的方法
2015/04/30 Python
详解django实现自定义manage命令的扩展
2019/08/13 Python
解决pip install psycopg2出错问题
2020/07/09 Python
python实现简单遗传算法
2020/09/18 Python
澳大利亚领先的宠物用品商店:VetSupply
2017/09/08 全球购物
最新计算机专业自荐信
2013/10/16 职场文书
毕业生的自我评价范文
2013/12/31 职场文书
医药类个人求职的自我评价
2014/02/12 职场文书
七一讲话心得体会
2014/09/05 职场文书
学生穿着不得体检讨书
2014/10/12 职场文书
2015年党风廉政建设责任书
2015/01/29 职场文书
2015年乡镇扶贫工作总结
2015/04/08 职场文书
2016高考冲刺决心书
2015/09/23 职场文书