基于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

标签:pytorch,预训练,词向量
0
投稿

猜你喜欢

  • Python中BeautifulSoup模块详解

    2023-07-21 21:53:15
  • python 监测内存和cpu的使用率实例

    2022-07-03 23:49:49
  • Python包,__init__.py功能与用法分析

    2021-06-17 22:19:54
  • pandas数据分组和聚合操作方法

    2023-09-07 05:15:44
  • TensorFlow2.1.0安装过程中setuptools、wrapt等相关错误指南

    2023-07-30 10:28:08
  • 提升Python运行速度的5个小技巧

    2021-07-28 20:25:24
  • 详解PyTorch预定义数据集类datasets.ImageFolder使用方法

    2022-01-30 20:15:07
  • 利用ASP输出excel文件一例

    2008-06-06 13:18:00
  • Java与Python之间使用jython工具类实现数据交互

    2023-10-06 18:44:09
  • Oracle中pivot函数图文实例详解

    2023-07-12 22:13:49
  • 对PyQt5基本窗口控件 QMainWindow的使用详解

    2021-08-27 21:47:22
  • LyScript实现计算片段Hash并写出Excel的示例代码

    2021-11-20 18:41:45
  • asp实现ACCESS数据库加密方法

    2008-04-18 12:33:00
  • WEB2.0网页制作标准教程(10)自适应高度

    2008-02-19 19:21:00
  • Python使用pyshp库读取shapefile信息的方法

    2023-07-27 04:56:36
  • php下使用iconv需要注意的问题

    2023-11-23 03:05:09
  • 基于Python3.6+splinter实现自动抢火车票

    2021-04-27 21:58:15
  • Python交互式图形编程的实现

    2021-09-04 18:19:15
  • 两组字符串数据比较合并相同数据

    2008-07-31 17:27:00
  • 用户体验杂谈

    2011-10-21 21:09:08
  • asp之家 网络编程 m.aspxhome.com