基于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中下划线的使用方法
Mar 27 Python
给Python的Django框架下搭建的BLOG添加RSS功能的教程
Apr 08 Python
python利用matplotlib库绘制饼图的方法示例
Dec 18 Python
Python数据可视化正态分布简单分析及实现代码
Dec 04 Python
python3.6使用pymysql连接Mysql数据库
May 25 Python
django js实现部分页面刷新的示例代码
May 28 Python
Numpy之文件存取的示例代码
Aug 03 Python
对Python发送带header的http请求方法详解
Jan 02 Python
python利用openpyxl拆分多个工作表的工作簿的方法
Sep 27 Python
pyftplib中文乱码问题解决方案
Jan 11 Python
pandas中的ExcelWriter和ExcelFile的实现方法
Apr 24 Python
django admin管理工具自定义时间区间筛选器DateRangeFilter介绍
May 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调用Linux命令权限不足问题解决方法
2015/02/07 PHP
PHP中大于2038年时间戳的问题处理方案
2015/03/03 PHP
php不使用copy()函数复制文件的方法
2015/03/13 PHP
PHP实现在线阅读PDF文件的方法
2015/06/17 PHP
PHP获取真实客户端的真实IP
2017/03/07 PHP
浅析PHP数据导出知识点
2018/02/17 PHP
阿里云Win2016安装Apache和PHP环境图文教程
2018/03/11 PHP
PHP使用SOAP调用API操作示例
2018/12/25 PHP
不间断滚动JS打包类,基本可以实现所有的滚动效果,太强了
2007/12/08 Javascript
js css样式操作代码(批量操作)
2009/10/09 Javascript
实现JavaScript中继承的三种方式
2009/10/16 Javascript
iframe 异步加载技术及性能分析
2011/07/19 Javascript
JQuery DataTable删除行后的页面更新利用Ajax解决
2013/05/17 Javascript
父元素与子iframe相互获取变量和元素对象的具体实现
2013/10/15 Javascript
浅谈jQuery 中的事件冒泡和阻止默认行为
2016/05/28 Javascript
Bootstrap对话框使用实例讲解
2016/09/24 Javascript
详解JS中的快速排序与冒泡
2017/01/10 Javascript
浅谈webpack打包过程中因为图片的路径导致的问题
2018/02/21 Javascript
Python的Django框架中的select_related函数对QuerySet 查询的优化
2015/04/01 Python
virtualenv实现多个版本Python共存
2017/08/21 Python
matplotlib作图添加表格实例代码
2018/01/23 Python
简单了解Python生成器是什么
2019/07/02 Python
python读写Excel表格的实例代码(简单实用)
2019/12/19 Python
解决matplotlib.pyplot在Jupyter notebook中不显示图像问题
2020/04/22 Python
基于Python下载网络图片方法汇总代码实例
2020/06/24 Python
打造高效课堂实施方案
2014/03/22 职场文书
财务负责人任命书
2014/06/06 职场文书
英文慰问信范文
2015/03/24 职场文书
银行保安拾金不昧表扬稿
2015/05/05 职场文书
业务员年终工作总结2015
2015/05/28 职场文书
鲁冰花观后感
2015/06/10 职场文书
2015暑假社会调查报告
2015/07/13 职场文书
2015年国庆节新闻稿
2015/07/18 职场文书
品牌形象定位,全面分析
2019/07/23 职场文书
Mysql效率优化定位较低sql的两种方式
2021/05/26 MySQL
golang内置函数len的小技巧
2021/07/25 Golang