基于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中使用异常处理来判断运行的操作系统平台方法
Jan 22 Python
wxPython的安装图文教程(Windows)
Dec 28 Python
python调用OpenCV实现人脸识别功能
May 25 Python
python基于http下载视频或音频
Jun 20 Python
Python返回数组/List长度的实例
Jun 23 Python
python调用并链接MATLAB脚本详解
Jul 05 Python
用Python获取摄像头并实时控制人脸的实现示例
Jul 11 Python
利用 Flask 动态展示 Pyecharts 图表数据方法小结
Sep 04 Python
Python使用gluon/mxnet模块实现的mnist手写数字识别功能完整示例
Dec 18 Python
python每5分钟从kafka中提取数据的例子
Dec 23 Python
Pytorch evaluation每次运行结果不同的解决
Jan 02 Python
Python+pyftpdlib实现局域网文件互传
Aug 24 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
同时提取多条新闻中的文本一例
2006/10/09 PHP
php日历[测试通过]
2008/03/27 PHP
php数组函数序列之asort() - 对数组的元素值进行升序排序,保持索引关系
2011/11/02 PHP
PHP图像处理之imagecreate、imagedestroy函数介绍
2014/11/19 PHP
PHP实现简单汉字验证码
2015/07/28 PHP
功能强大的PHP图片处理类(水印、透明度、旋转)
2015/10/21 PHP
PHPCMS手机站伪静态设置详细教程
2017/02/06 PHP
DEFER怎么用?
2006/07/01 Javascript
Jquery乱码的一次解决过程 图解教程
2010/02/20 Javascript
JS字符串累加Array不一定比字符串累加快(根据电脑配置)
2012/05/14 Javascript
JQuery页面的表格数据的增加与分页的实现
2013/12/10 Javascript
jQuery新的事件绑定机制on()示例应用
2014/07/18 Javascript
使用jQuery jqPlot插件绘制柱状图
2014/12/18 Javascript
javascript中parseInt()函数的定义和用法分析
2014/12/20 Javascript
鼠标经过子元素触发mouseout,mouseover事件的解决方案
2015/07/26 Javascript
JS实现不规则TAB选项卡效果代码
2015/09/16 Javascript
JS实现的不规则TAB选项卡效果代码
2015/09/18 Javascript
jQuery实现鼠标经过时高亮,同时其他同级元素变暗的效果
2016/09/18 Javascript
JS实现一次性弹窗的方法【刷新后不弹出】
2016/12/26 Javascript
ES6使用let命令更简单的实现块级作用域实例分析
2017/03/31 Javascript
js 实现复选框只能选择一项的示例代码
2018/01/23 Javascript
Python实现数据库并行读取和写入实例
2017/06/09 Python
Python实现繁体中文与简体中文相互转换的方法示例
2018/12/18 Python
python中pytest收集用例规则与运行指定用例详解
2019/06/27 Python
pyqt5 使用cv2 显示图片,摄像头的实例
2019/06/27 Python
在pytorch中查看可训练参数的例子
2019/08/18 Python
pytorch查看模型weight与grad方式
2020/06/24 Python
在Tensorflow中实现leakyRelu操作详解(高效)
2020/06/30 Python
keras训练浅层卷积网络并保存和加载模型实例
2020/07/02 Python
python中yield的用法详解
2021/01/13 Python
x-ua-compatible content=”IE=7, IE=9″意思理解
2013/07/22 HTML / CSS
社区食品安全实施方案
2014/03/28 职场文书
终止劳动合同协议书
2014/04/14 职场文书
个人委托书如何写
2014/09/25 职场文书
毕业论文致谢部分怎么写
2015/05/14 职场文书
卡特教练观后感
2015/06/08 职场文书