基于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的Django框架完成视频处理任务的教程
Apr 02 Python
python检查字符串是否是正确ISBN的方法
Jul 11 Python
Django应用程序中如何发送电子邮件详解
Feb 04 Python
Python中字典的setdefault()方法教程
Feb 07 Python
基于Python的文件类型和字符串详解
Dec 21 Python
django之静态文件 django 2.0 在网页中显示图片的例子
Jul 28 Python
django 控制页面跳转的例子
Aug 06 Python
python3.8下载及安装步骤详解
Jan 15 Python
django-利用session机制实现唯一登录的例子
Mar 16 Python
通过自学python能找到工作吗
Jun 21 Python
使用python脚本自动生成K8S-YAML的方法示例
Jul 12 Python
解决python pandas读取excel中多个不同sheet表格存在的问题
Jul 14 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
PHP删除数组中的特定元素的代码
2012/06/28 PHP
php控制linux服务器常用功能 关机 重启 开新站点等
2012/09/05 PHP
php+mysql数据库查询实例
2015/01/21 PHP
PHP中把对象数组转换成普通数组的方法
2015/07/10 PHP
降低PHP Redis内存占用
2017/03/23 PHP
phpcmsv9.0任意文件上传漏洞解析
2020/10/20 PHP
基于jquery1.4.2的仿flash超炫焦点图播放效果
2010/04/20 Javascript
js实现拖拽 闭包函数详细介绍
2012/11/25 Javascript
js 日期比较相关天数代码
2014/04/02 Javascript
jQuery绑定事件不执行但alert后可以正常执行
2014/06/03 Javascript
zepto.js中tap事件阻止冒泡的实现方法
2015/02/12 Javascript
javascript字符串函数汇总
2015/12/06 Javascript
避免jQuery名字冲突 noConflict()方法
2016/07/30 Javascript
Angularjs中的页面访问权限怎么设置
2016/11/11 Javascript
Vue实现表格中对数据进行转换、处理的方法
2018/09/06 Javascript
vue.js指令v-for使用以及下标索引的获取
2019/01/31 Javascript
jquery操作checkbox的常用方法总结【附测试源码下载】
2019/06/10 jQuery
JS阻止事件冒泡的方法详解
2019/08/26 Javascript
jquery将json转为数据字典的实例代码
2019/10/11 jQuery
vue实现购物车选择功能
2020/01/10 Javascript
[54:28]EG vs OG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
对Python生成汉字字库文字,以及转换为文字图片的实例详解
2019/01/29 Python
python内置函数sorted()用法深入分析
2019/10/08 Python
python实现对列表中的元素进行倒序打印
2019/11/23 Python
JupyterNotebook 输出窗口的显示效果调整实现
2020/09/22 Python
CSS3 中的@keyframes介绍
2014/09/02 HTML / CSS
CSS3实现多重边框的方法总结
2016/05/31 HTML / CSS
html5 sessionStorage会话存储_动力节点Java学院整理
2017/07/06 HTML / CSS
Lentiamo比利时:便宜的隐形眼镜
2020/02/14 全球购物
出纳岗位职责
2013/11/09 职场文书
黄河象教学反思
2014/02/10 职场文书
单位绩效考核方案
2014/05/11 职场文书
2014年小学教研工作总结
2014/12/06 职场文书
学生会辞职信
2015/03/02 职场文书
2015年班长个人工作总结
2015/04/03 职场文书
Java 超详细讲解数据结构中的堆的应用
2022/04/02 Java/Android