基于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线程池的实现实例
Nov 18 Python
Python数组条件过滤filter函数使用示例
Jul 22 Python
Python中的字符串查找操作方法总结
Jun 27 Python
Python使用ntplib库同步校准当地时间的方法
Jul 02 Python
使用Python3制作TCP端口扫描器
Apr 17 Python
Python批量提取PDF文件中文本的脚本
Mar 14 Python
解决Matplotlib图表不能在Pycharm中显示的问题
May 24 Python
Python下调用Linux的Shell命令的方法
Jun 12 Python
python之django母板页面的使用
Jul 03 Python
python实现音乐播放器 python实现花框音乐盒子
Feb 25 Python
jupyter lab的目录调整及设置默认浏览器为chrome的方法
Apr 10 Python
python实现会员信息管理系统(List)
Mar 18 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中ADODB类详解
2008/03/25 PHP
php cURL和Rolling cURL并发方式比较
2013/10/30 PHP
json的键名为数字时的调用方式(示例代码)
2013/11/15 PHP
PHP文件锁定写入实例解析
2014/07/14 PHP
php连接odbc数据源并保存与查询数据的方法
2014/12/24 PHP
php实现产品加入购物车功能(1)
2020/07/23 PHP
PHP count()函数讲解
2019/02/03 PHP
php与阿里云短信接口接入操作案例分析
2020/05/27 PHP
在JavaScript中实现命名空间
2006/11/23 Javascript
(function(){})()的用法与优点
2007/03/11 Javascript
关于IE浏览器以及Firefox下的javascript冒泡事件的响应层级
2010/10/14 Javascript
Node.js返回JSONP详解
2016/05/18 Javascript
微信小程序实战之仿android fragment可滑动底部导航栏(4)
2020/04/16 Javascript
Vue.js实现列表清单的操作方法
2017/11/15 Javascript
JS实现的简单分页功能示例
2018/08/23 Javascript
[26:24]完美副总裁、DOTA2负责人蔡玮专访:电竞如人生
2014/09/11 DOTA
python遍历数组的方法小结
2015/04/30 Python
详解 Python 读写XML文件的实例
2017/08/02 Python
用Python删除本地目录下某一时间点之前创建的所有文件的实例
2017/12/14 Python
python PyTorch预训练示例
2018/02/11 Python
对pyqt5多线程正确的开启姿势详解
2019/06/14 Python
python 判断三个数字中的最大值实例代码
2019/07/24 Python
python操作excel让工作自动化
2019/08/09 Python
python 和c++实现旋转矩阵到欧拉角的变换方式
2019/12/04 Python
pd.DataFrame统计各列数值多少的实例
2019/12/05 Python
解析pip安装第三方库但PyCharm中却无法识别的问题及PyCharm安装第三方库的方法教程
2020/03/10 Python
flask开启多线程的具体方法
2020/08/02 Python
Django用户认证系统如何实现自定义
2020/11/12 Python
如何用PyPy让你的Python代码运行得更快
2020/12/02 Python
python RSA加密的示例
2020/12/09 Python
运动服饰每月订阅盒:Ellie
2018/04/29 全球购物
护理人员的自我评价分享
2014/03/15 职场文书
2016党员读书思廉心得体会
2016/01/23 职场文书
2019各种保证书范文
2019/06/24 职场文书
承诺书应该怎么写?
2019/09/10 职场文书
详解Nginx 被动检查服务器的存活状态
2021/10/16 Servers