基于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 25 Python
Python中实现远程调用(RPC、RMI)简单例子
Apr 28 Python
Python ORM框架SQLAlchemy学习笔记之关系映射实例
Jun 10 Python
Python中encode()方法的使用简介
May 18 Python
详解python进行mp3格式判断
Dec 23 Python
Python通过future处理并发问题
Oct 17 Python
深入理解Django的自定义过滤器
Oct 17 Python
python list元素为tuple时的排序方法
Apr 18 Python
Python3如何对urllib和urllib2进行重构
Nov 25 Python
python实现差分隐私Laplace机制详解
Nov 25 Python
Python插入Elasticsearch操作方法解析
Jan 19 Python
用Python生成HTML表格的方法示例
Mar 06 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的FTP学习(三)
2006/10/09 PHP
如何修改和添加Apache的默认站点目录
2013/07/05 PHP
php中使用getimagesize获取图片、flash等文件的尺寸信息实例
2014/04/29 PHP
php each 返回数组中当前的键值对并将数组指针向前移动一步实例
2016/11/22 PHP
Laravel框架学习笔记之批量更新数据功能
2019/05/30 PHP
php解决约瑟夫环算法实例分析
2019/09/30 PHP
用jQuery模拟页面加载进度条的实现代码
2011/12/19 Javascript
10个基于浏览器的JavaScript调试工具分享
2013/02/07 Javascript
javaScript中两个等于号和三个等于号之间的区别介绍
2014/06/27 Javascript
jquery获取radio值(单选组radio)
2014/10/16 Javascript
JavaScript中Cookie操作实例
2015/01/09 Javascript
JS显示下拉列表框内全部元素的方法
2015/03/31 Javascript
JS非Alert实现网页右下角“未读信息”效果弹窗
2015/09/26 Javascript
jQuery内存泄露解决办法
2016/12/13 Javascript
JavaScript获取中英文混合字符串长度的方法示例
2017/02/04 Javascript
NodeJS收发GET和POST请求的示例代码
2017/08/25 NodeJs
使用JavaScript实现在页面中显示距离2017年中秋节的天数
2017/09/26 Javascript
vue+Java后端进行调试时解决跨域问题的方式
2017/10/19 Javascript
深入剖析Express cookie-parser中间件实现示例
2018/02/01 Javascript
BootStrap modal实现拖拽功能
2018/12/01 Javascript
vue自动化路由的实现代码
2019/09/30 Javascript
vue点击标签切换选中及互相排斥操作
2020/07/17 Javascript
python cx_Oracle的基础使用方法(连接和增删改查)
2017/11/19 Python
详解将Python程序(.py)转换为Windows可执行文件(.exe)
2019/07/19 Python
Python 实例方法、类方法、静态方法的区别与作用
2019/08/14 Python
解决django xadmin主题不显示和只显示bootstrap2的问题
2020/03/30 Python
canvas学习笔记之绘制简单路径
2019/01/28 HTML / CSS
全球销量第一生发产品:Viviscal
2017/12/21 全球购物
您附近的水疗和健康场所:Spafinder(美国)
2019/07/05 全球购物
类的核心特性有哪些
2014/01/01 面试题
思想汇报范文
2013/11/04 职场文书
运动会演讲稿
2014/05/07 职场文书
新闻传播专业求职信
2014/07/22 职场文书
毕业证明书
2015/06/19 职场文书
2019年最新版见习人员管理制度!
2019/07/08 职场文书
python如何为list实现find方法
2022/05/30 Python