基于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 相关文章推荐
TensorFlow入门使用 tf.train.Saver()保存模型
Apr 24 Python
使用NumPy和pandas对CSV文件进行写操作的实例
Jun 14 Python
python绘制圆柱体的方法
Jul 02 Python
Python学习笔记之抓取某只基金历史净值数据实战案例
Jun 03 Python
如何通过雪花算法用Python实现一个简单的发号器
Jul 03 Python
详解python 中in 的 用法
Dec 12 Python
一文了解python 3 字符串格式化 F-string 用法
Mar 04 Python
jupyter notebook实现显示行号
Apr 13 Python
CentOS 7如何实现定时执行python脚本
Jun 24 Python
Python面向对象实现方法总结
Aug 12 Python
pandas apply多线程实现代码
Aug 17 Python
python selenium 获取接口数据的实现
Dec 07 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和.net中des加解密的实现方法
2013/02/27 PHP
PHP函数之日期时间函数date()使用详解
2013/09/09 PHP
php自定义加密与解密程序实例
2014/12/31 PHP
创建无限极分类树型结构的简单方法
2017/06/20 PHP
PHPCrawl爬虫库实现抓取酷狗歌单的方法示例
2017/12/21 PHP
jquery星级插件、支持页面中多次使用
2012/03/25 Javascript
jquery图片延迟加载 前端开发技能必备系列
2012/06/18 Javascript
Javascript中的异步编程规范Promises/A详细介绍
2014/06/06 Javascript
在JavaScript中使用JSON数据
2016/02/15 Javascript
KnockoutJS 3.X API 第四章之数据控制流if绑定和ifnot绑定
2016/10/10 Javascript
jquery实现刷新随机变化样式特效(tag标签样式)
2017/02/03 Javascript
python爬取安居客二手房网站数据(实例讲解)
2017/10/19 Javascript
jQuery实现鼠标响应式淘宝动画效果示例
2018/02/13 jQuery
webpack本地开发环境无法用IP访问的解决方法
2018/03/20 Javascript
Vue中的v-for指令不起效果的解决方法
2018/09/27 Javascript
Vue.js@2.6.10更新内置错误处机制Fundebug同步支持相应错误监控
2019/05/13 Javascript
Python基于scrapy采集数据时使用代理服务器的方法
2015/04/16 Python
Django实现图片文字同时提交的方法
2015/05/26 Python
在Django的视图(View)外使用Session的方法
2015/07/23 Python
Python+OpenCV实现车牌字符分割和识别
2018/03/31 Python
Python将字符串常量转化为变量方法总结
2019/03/17 Python
Django操作session 的方法
2020/03/09 Python
python Socket网络编程实现C/S模式和P2P
2020/06/22 Python
Python模块常用四种安装方式
2020/10/20 Python
Debenhams百货英国官方网站:Debenhams UK
2016/07/12 全球购物
印度化妆品购物网站:Nykaa
2018/07/22 全球购物
手工制作的意大利礼服鞋:Ace Marks
2018/12/15 全球购物
开门红主持词
2014/04/02 职场文书
《春笋》教学反思
2014/04/15 职场文书
艺术教育实施方案
2014/05/03 职场文书
空气环保标语
2014/06/12 职场文书
相亲活动方案
2014/08/26 职场文书
汽车4S店前台接待岗位职责
2015/04/03 职场文书
旅游安全责任协议书
2016/03/22 职场文书
python程序的组织结构详解
2021/12/06 Python
nginx代理实现静态资源访问的示例代码
2022/07/07 Servers