基于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(lambdap: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\timesembeding\_dim][vocab_size×embeding_dim]的形式.其中一共包含vocab_sizevocab\_sizevocab_size个单词,每个单词的维度是embed_dimembed\_dimembed_dim,我们把这样一个矩阵输入就行了.
之后,我们要做的其实就是将word_to_indexword\_to\_indexword_to_index这个矩阵搞出来,这里的单词转下标的矩阵,就是联系embeding_vectorembeding\_vectorembeding_vector和word_listword\_listword_list这两个矩阵的中间者.我们在输入到torch.nn.Embedding中之前,需要先通过word_to_indexword\_to\_indexword_to_index将单词转换成embeding_vectorembeding\_vectorembeding_vector的下标就可以了.
以上这篇基于pytorch预训练的词向量用法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。