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

 更新时间:2020年01月06日 10:29:36   作者:kejizuiqianfang  
今天小编就为大家分享一篇基于pytorch 预训练的词向量用法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

如何在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 预训练的词向量用法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • pytorch masked_fill报错的解决

    pytorch masked_fill报错的解决

    今天小编就为大家分享一篇pytorch masked_fill报错的解决,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • keras回调函数的使用

    keras回调函数的使用

    本文主要介绍了keras回调函数的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • python numpy中对ndarry按照index增删改查

    python numpy中对ndarry按照index增删改查

    这篇文章主要介绍了python numpy中对ndarry按照index增删改查,在numpy中的ndarry是一个数组,因此index就是位置下标,注意下标是从0开始,接下来一起进入下面文章了解详细内容吧
    2022-02-02
  • SymPy库关于矩阵的基本操作和运算

    SymPy库关于矩阵的基本操作和运算

    本文主要介绍了SymPy库关于矩阵的基本操作和运算,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • Python3字符串学习教程

    Python3字符串学习教程

    这篇文章主要介绍了Python3字符串学习教程,是Python入门学习中的基础知识,需要的朋友可以参考下
    2015-08-08
  • 如何使用conda和pip批量安装Python包

    如何使用conda和pip批量安装Python包

    这篇文章主要介绍了如何使用conda和pip批量安装Python包问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • Python类与实例的使用详解

    Python类与实例的使用详解

    面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同
    2022-08-08
  • NumPy中掩码数组的操作

    NumPy中掩码数组的操作

    本文主要介绍了NumPy中掩码数组的操作,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • python采集博客中上传的QQ截图文件

    python采集博客中上传的QQ截图文件

    这篇文章主要介绍了python采集博客中上传的QQ截图文件,因为文件名包含中文会在某些时候乱码,例如这件的文件名QQ截图20120926174732,所以需要采集出来修改掉,需要的朋友可以参考下
    2014-07-07
  • pygame时序模块time的具体使用

    pygame时序模块time的具体使用

    Pygame Time模块能够帮助你更好地控制帧率和时间,从而增强游戏的可玩性,本文主要介绍了pygame时序模块time的具体使用,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12

最新评论