基于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 相关文章推荐
win7 下搭建sublime的python开发环境的配置方法
Jun 18 Python
解决Python中由于logging模块误用导致的内存泄露
Apr 23 Python
python与sqlite3实现解密chrome cookie实例代码
Jan 20 Python
wxpython实现图书管理系统
Mar 12 Python
python 列表删除所有指定元素的方法
Apr 19 Python
Python cookbook(字符串与文本)针对任意多的分隔符拆分字符串操作示例
Apr 19 Python
Django 开发环境配置过程详解
Jul 18 Python
python3实现用turtle模块画一棵随机樱花树
Nov 21 Python
解析python 类方法、对象方法、静态方法
Aug 15 Python
python用Configobj模块读取配置文件
Sep 26 Python
详解Python+Selenium+ChromeDriver的配置和问题解决
Jan 19 Python
Python保存并浏览用户的历史记录
Apr 29 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
咖啡与水的关系
2021/03/03 冲泡冲煮
PHP调用全国天气预报数据接口查询天气示例
2019/02/20 PHP
laravel 解决Validator使用中出现的问题
2019/10/25 PHP
PHP设计模式之数据访问对象模式(DAO)原理与用法实例分析
2019/12/12 PHP
表单的一些基本用法与技巧
2006/07/15 Javascript
百度 popup.js 完美修正版非常的不错 脚本之家推荐
2009/04/17 Javascript
JQuery小知识
2010/10/15 Javascript
js 获取坐标 通过JS得到当前焦点(鼠标)的坐标属性
2013/01/04 Javascript
javascript中常用编程知识
2013/04/08 Javascript
javascript最基本的函数汇总
2015/06/25 Javascript
理解javascript对象继承
2016/04/17 Javascript
需要牢记的JavaScript基础知识
2016/09/25 Javascript
Angularjs 依赖压缩及自定义过滤器写法
2017/02/04 Javascript
Jquery把获取到的input值转换成json
2017/05/15 jQuery
vue 多入口文件搭建 vue多页面搭建的实例讲解
2018/03/12 Javascript
详解如何使用webpack打包JS
2018/06/21 Javascript
微信小程序实现用table显示数据库反馈的多条数据功能示例
2019/05/07 Javascript
JS深入学习之数组对象排序操作示例
2020/05/01 Javascript
python读写ini文件示例(python读写文件)
2014/03/25 Python
python如何使用正则表达式的前向、后向搜索及前向搜索否定模式详解
2017/11/08 Python
python机器学习之随机森林(七)
2018/03/26 Python
python django model联合主键的例子
2019/08/06 Python
对python中的装包与解包实例详解
2019/08/24 Python
Python散点图与折线图绘制过程解析
2019/11/30 Python
使用python模拟高斯分布例子
2019/12/09 Python
PyTorch和Keras计算模型参数的例子
2020/01/02 Python
Python模块相关知识点小结
2020/03/09 Python
python对一个数向上取整的实例方法
2020/06/18 Python
德国最大的服装、鞋子和配件在线商店之一:Outfits24
2019/07/23 全球购物
餐厅考勤管理制度
2014/01/28 职场文书
《油菜花开了》教学反思
2014/02/22 职场文书
小学生演讲稿大全
2014/04/25 职场文书
2014年药剂科工作总结
2014/11/26 职场文书
安全责任书
2015/01/29 职场文书
个人党性分析总结
2015/03/05 职场文书
Java死锁的排查
2022/05/11 Java/Android