基于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 相关文章推荐
Python3基础之输入和输出实例分析
Aug 18 Python
详解Python中的序列化与反序列化的使用
Jun 30 Python
Python删除windows垃圾文件的方法
Jul 14 Python
python实现多线程的两种方式
May 22 Python
Python正则表达式教程之二:捕获篇
Mar 02 Python
Python3 读、写Excel文件的操作方法
Oct 20 Python
在Python中,不用while和for循环遍历列表的实例
Feb 20 Python
python使用Plotly绘图工具绘制气泡图
Apr 01 Python
在Python中过滤Windows文件名中的非法字符方法
Jun 10 Python
python使用rsa非对称加密过程解析
Dec 28 Python
Python loguru日志库之高效输出控制台日志和日志记录
Mar 07 Python
python怎么删除缓存文件
Jul 19 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基础知识:类与对象(4) 范围解析操作符(::)
2006/12/13 PHP
一个图形显示IP的PHP程序代码
2007/10/19 PHP
php无限遍历文件夹示例分享
2014/03/04 PHP
php中关于长度计算容易混淆的问题分析
2016/05/27 PHP
PHP的mysqli_stmt_init()函数讲解
2019/01/24 PHP
java script编程起步(第三课)
2007/01/10 Javascript
Jquery 模拟用户点击超链接或者按钮的方法
2013/10/25 Javascript
javascript删除数组重复元素的方法汇总
2015/06/24 Javascript
详解 javascript中offsetleft属性的用法
2015/11/11 Javascript
字符串反转_JavaScript
2016/04/28 Javascript
javascript 将共享属性迁移到原型中去的实现方法
2016/08/31 Javascript
利用Vue.js指令实现全选功能
2016/09/08 Javascript
ReactNative实现图片上传功能的示例代码
2017/07/11 Javascript
Angularjs实现上传图片预览功能
2017/09/01 Javascript
JQuery 又谈ajax局部刷新
2017/11/27 jQuery
vue-router 实现导航守卫(路由卫士)的实例代码
2018/09/02 Javascript
vue、react等单页面项目部署到服务器的方法及vue和react的区别
2018/09/29 Javascript
node微信开发之获取access_token+自定义菜单
2019/03/17 Javascript
no-vnc和node.js实现web远程桌面的完整步骤
2019/08/11 Javascript
vue实现短信验证码登录功能(流程详解)
2019/12/10 Javascript
[47:12]TFT vs Secret Supermajor小组赛C组 BO3 第三场 6.3
2018/06/04 DOTA
Python文件右键找不到IDLE打开项解决办法
2015/06/08 Python
Django框架 querySet功能解析
2019/09/04 Python
如何使用Python发送HTML格式的邮件
2020/02/11 Python
pycharm设置python文件模板信息过程图解
2020/03/10 Python
Python尾递归优化实现代码及原理详解
2020/10/09 Python
Python SQLAlchemy库的使用方法
2020/10/13 Python
美国领先的家居装饰和礼品商店:Kirkland’s
2017/01/30 全球购物
Shopee越南:东南亚与台湾电商平台
2019/02/03 全球购物
Ariat英国官网:为世界顶级马术运动员制造最优质的鞋类和服装
2020/02/14 全球购物
Perfume’s Club中文官网:西班牙美妆在线零售品牌
2020/08/24 全球购物
小学综治宣传月活动总结
2014/07/02 职场文书
歌舞青春观后感
2015/06/10 职场文书
雷锋电影观后感
2015/06/10 职场文书
2016年领导干部正风肃纪心得体会
2015/10/09 职场文书
python 下载文件的几种方式分享
2021/04/07 Python