基于pytorch 预训练的词向量用法详解

yipeiwu_com7年前Python基础

如何在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实现快速排序算法及去重的快速排序的简单示例

快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用。 该方法的基本思想是: 1.先从数列中取出一个数作为基准数。 2.分区过程,将比这个数大的数全放到它...

Python学习笔记之集合的概念和简单使用示例

本文实例讲述了Python学习笔记之集合的概念和简单使用。分享给大家供大家参考,具体如下: 集合 概念解释:一个包含唯一元素的可变和无序的集合数据类型。集合的一个用途是快速删除列表中的重...

Django中数据库的数据关系:一对一,一对多,多对多

Django中数据库的数据关系:一对一,一对多,多对多

一对一: 一对一的关系极为一个数据仅对应一个数据,用下图的结构图可以帮助理解: 下面用代码实现一下,首先要创建工程项目如下: 接着,我们定义模型: 来到models.py文件,创建两...

用不到50行的Python代码构建最小的区块链

用不到50行的Python代码构建最小的区块链

译者注:随着比特币的不断发展,它的底层技术区块链也逐步走进公众视野,引起大众注意。本文用不到50行的Python代码构建最小的数据区块链,简单介绍了区块链去中心化的结构与其实现原理。...

Python批量生成特定尺寸图片及图画任意文字的实例

Python批量生成特定尺寸图片及图画任意文字的实例

因为工作需要生成各种大小的图片,所以写了个小脚本,顺便支持了下图画文字内容。 具体代码如下: from PIL import Image, ImageDraw, ImageFont...