基于pytorch 预训练的词向量用法详解
作者:kejizuiqianfang 发布时间:2021-04-04 21:35:37
如何在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 的下标就可以了.
来源:https://blog.csdn.net/kejizuiqianfang/article/details/100825156
猜你喜欢
- 1.ROOT_URLCONF = '总路由所在路径(比如untitled.urls)'<===默认情况是这样根路由的路
- PHP 中的 Interface 是一种非常重要的特性,它允许开发人员定义一组规范或者约束,以确保类之间的互操作性和兼容性。在本文中,我们将
- 人脸图像特征提取方法(一)HOG特征提取1、HOG简介Histogram of Oriented Gridients,缩写为HOG,是目前计
- 原始数据在这里1.观察数据首先,用Pandas打开数据,并进行观察。import numpy import pandas as pdimpo
- 只想回答一个问题: 当编译器要读取obj.field时, 发生了什么?看似简单的属性访问, 其过程还蛮曲折的. 总共有以下几个step: 1
- 前言python本身使用 \ 来转义一些特殊字符,比如在字符串中加入引号的时候s = 'i\'m superman'
- getattr()函数是Python自省的核心函数,具体使用大体如下:获取对象引用getattrGetattr用于返回一个对象属性,或者方法
- type()动态语言和静态语言最大的不同,就是函数和类的定义,不是编译时定义的,而是运行时动态创建的。比方说我们要定义一个Hello的cla
- 这篇文章主要介绍了Python JSON编解码方式原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要
- 本文实例为大家分享了Python Opencv基于透视变换的图像矫正,供大家参考,具体内容如下一、自动获取图像顶点变换(获取图像轮廓顶点矫正
- 例子一:Python用WMI模块获取windowns系统的硬件信息:硬盘分区、使用情况,内存大小,CPU型号,当前运行的进程,自启动程序及位
- 很早就在这里看到过解决方案,与嗷嗷讨论后发现这个方案还是很可靠的。当然,唯一的缺点就是每一个属性都要去Hack,但我在很多实践中,只用‘修正
- 简单用py写了一个贪吃蛇游戏,有单人、双人模式,比较简单,适合初学者练手。本上每行重要的语句都有注释,做了什么事一目了然这里介绍双人模式单人
- 今天给大家分享一个简单的python脚本,使用python进行http的接口测试,脚本很简单,逻辑是:读取excel写好的测试用例,然后根据
- 简介在php中,类型的继承使用extends关键字,而且最多只能继承一个父类,php不支持多继承。class MyClass {
- 今天在 ajaxian 上看到一篇文章,名为 Five Ajax Anti-pattern ,觉得讲得比较有道理,现粗略翻译一下,加一些自己
- kruskal算法基本思路:先对边按权重从小到大排序,先选取权重最小的一条边,如果该边的两个节点均为不同的分量,则加入到最小生成树,否则计算
- 本文只是几年前学习的tkinter的时候写的测试程序,十分之简陋,只是学习用,没什么其他用处。学习一下莫烦Python的tkinter教程,
- python判断一个变量是否已经设置的方法:可以使用locals()函数来进行判断。locals()函数会以字典类型返回当前位置的全部局部变
- 需求:启动程序后,让用户输入工资,然后打印商品列表允许用户根据商品编号购买商品用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒可随时