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的形式

为了讲述方便, 这里定义出下面几个矩阵

e m b e d i n g _ v e c t o r : 表 示 词 向 量 , 每 行 是 一 个 词 的 词 向 量 , 有 多 少 行 就 说 明 有 多 少 单 词 w o r d _ l i s t : 表 示 单 词 列 表 , 里 面 就 是 单 词 w o r d _ t o _ i n d e x : 这 个 矩 阵 将 w o r d _ l i s t 中 的 单 词 和 e m b e d i n g _ v e c t o r 中 的 位 置 对 应 起 来 \begin {aligned} embeding\_vector &: 表示词向量, 每行是一个词的词向量, 有多少行就说明有多少单词 \\ word\_list &: 表示单词列表, 里面就是单词 \\ word\_to\_index &: 这个矩阵将word\_list中的单词和 embeding\_vector中的位置对应起来 \end {aligned} embeding_vectorword_listword_to_index:,,:,:word_listembeding_vector

  其实embeding_vector是一个numpy矩阵, 当然你看到了, 实际输入到pytorch的时候, 是需要转换成tensor类型的. 这个矩阵是什么样子的呢? 其中这个矩阵是 [ v o c a b _ s i z e × e m b e d i n g _ d i m ] [vocab\_size \times embeding\_dim] [vocab_size×embeding_dim] 的形式. 其中一共包含 v o c a b _ s i z e vocab\_size vocab_size 个单词, 每个单词的维度是 e m b e d _ d i m embed\_dim embed_dim, 我们把这样一个矩阵输入就行了.

  之后, 我们要做的其实就是将 w o r d _ t o _ i n d e x word\_to\_index word_to_index 这个矩阵搞出来, 这里的单词转下标的矩阵, 就是联系 e m b e d i n g _ v e c t o r embeding\_vector embeding_vector w o r d _ l i s t word\_list word_list 这两个矩阵的中间者. 我们在输入到torch.nn.Embedding中之前, 需要先通过 w o r d _ t o _ i n d e x word\_to\_index word_to_index 将单词转换成 e m b e d i n g _ v e c t o r embeding\_vector embeding_vector 的下标就可以了.

  • 23
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
PyTorch中,向量是用来表示文本中的语的向量化表示。PyTorch提供了多种方法和工具来生成向量。 首先,可以使用训练向量模型,如Word2Vec、GloVe等。这些模型通过在大规模语料库上训练,将语映射到固定维度的向量空间中,使得具有相似语义的向量空间中距离较近。PyTorch中可以加载这些训练向量模型,并用它们来初始化模型中的向量层。这样做的好处是可以利用训练的语义信息,提高模型性能。 其次,可以使用PyTorch自带的nn.Embedding层来生成向量。nn.Embedding层将汇表中的每个映射到一个固定维度的稠密向量中。在模型训练过程中,向量会随着梯度的反向传播进行更新。nn.Embedding层可以根据需要设置向量的维度大小、汇表的大小等参数。 最后,可以根据自己的需求和数据特点,自定义生成向量的方法。例如,可以使用袋模型(Bag of Words)将语表示成固定长度的向量,或者使用深度学习模型,如循环神经网络(RNN)、长短时记忆网络(LSTM)等,通过模型的隐藏层输出作为向量。 在文本生成任务中,向量的生成扮演着重要的角色。通过将文本中的每个语映射成向量表示,可以将文本转化为机器能够处理的数值形式。这样可以实现文本的向量化表示,并利用机器学习或深度学习模型进行文本生成任务,如文本分类、机器翻译、自动对话系统等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值