基于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采用requests库模拟登录和抓取数据的简单示例
Jul 05 Python
python使用pil库实现图片合成实例代码
Jan 20 Python
python3+PyQt5实现支持多线程的页面索引器应用程序
Apr 20 Python
django 外键model的互相读取方法
Dec 15 Python
利用selenium爬虫抓取数据的基础教程
Jun 10 Python
Python绘制堆叠柱状图的实例
Jul 09 Python
opencv导入头文件时报错#include的解决方法
Jul 31 Python
树莓派安装OpenCV3完整过程的实现
Oct 10 Python
Python IDE环境之 新版Pycharm安装详细教程
Mar 05 Python
Tensorflow之梯度裁剪的实现示例
Mar 08 Python
使用npy转image图像并保存的实例
Jul 01 Python
Python的三个重要函数详解
Jan 18 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 中的输出缓冲
2006/12/21 PHP
php生成文件
2007/01/15 PHP
php将session放入memcached的设置方法
2014/02/14 PHP
php无限分类使用concat如何实现
2015/11/05 PHP
PHP中递归的实现实例详解
2017/11/14 PHP
MacOS下PHP7.1升级到PHP7.4.15的方法
2021/02/22 PHP
jQuery 技巧小结
2010/04/02 Javascript
Javascript简单实现可拖动的div
2013/10/22 Javascript
js中回调函数的学习笔记
2014/07/31 Javascript
使用命令对象代替switch语句的写法示例
2015/02/28 Javascript
javascript定义类和类的实现实例详解
2015/12/01 Javascript
JS组件系列之Bootstrap table表格组件神器【二、父子表和行列调序】
2016/05/10 Javascript
jquery组件WebUploader文件上传用法详解
2020/10/23 Javascript
MvcPager分页控件 适用于Bootstrap
2017/06/03 Javascript
Vue中的slot使用插槽分发内容的方法
2018/03/01 Javascript
Vue+Element实现网页版个人简历系统(推荐)
2019/12/31 Javascript
vue Cli 环境删除与重装教程 - 版本文档
2020/09/11 Javascript
vue中使用router全局守卫实现页面拦截的示例
2020/10/23 Javascript
关于vue 项目中浏览器跨域的配置问题
2020/11/10 Javascript
详解vue3中组件的非兼容变更
2021/03/03 Vue.js
[02:43]中国五虎出征TI3视频
2013/08/02 DOTA
python抓取百度首页的方法
2015/05/19 Python
spark dataframe 将一列展开,把该列所有值都变成新列的方法
2019/01/29 Python
Pandas读取并修改excel的示例代码
2019/02/17 Python
利用python在大量数据文件下删除某一行的例子
2019/08/21 Python
Django Admin后台添加数据库视图过程解析
2020/04/01 Python
python--shutil移动文件到另一个路径的操作
2020/07/13 Python
深入分析python 排序
2020/08/24 Python
关于Python字符编码与二进制不得不说的一些事
2020/10/04 Python
详解Python利用configparser对配置文件进行读写操作
2020/11/03 Python
HTML5 Canvas概述
2009/08/26 HTML / CSS
Agoda台湾官网:国内外订房2折起
2018/03/20 全球购物
娇韵诗Clarins意大利官方网站:法国天然护肤品牌
2020/03/11 全球购物
上课睡觉万能检讨书
2015/02/17 职场文书
毕业生政审意见范文
2015/06/04 职场文书
2016年优秀共产党员先进事迹材料
2016/02/29 职场文书