gensim 导入model方法
gensim 导入word2vec模型
使用KeyedVector.load_word2vec_format() ,这样将模型加载到一个keyvector实例中
import gensim
model = gensim.models.KeyedVectors.load_word2vec_format('vectors.bin', binary=True)
此处导入了 word2vec的模型,vectors.bin是模型文件
- 如果是glove文件应该怎么办呢
如果我们的glove文件是一个txt文件,那么就需要将它转成word2vec的形式
import gensim
glove_file = 'test_glove.txt'
word2vec_file = 'word2vec.txt'#这是转换后的文件名
from gensim.scripts.glove2word2vec import glove2word2vec
glove2word2vec(glove_file, word2vec_file )
# 加载转化后的文件
model = KeyedVectors.load_word2vec_format(tmp_file) #这样就可以将glove文件加载
- 也可以将glove文件保存使用save_word2vec_format保存词向量文件
model.wv.save_word2vec_format("model.bin", binary=True)
下次加载时,直接从model.bin中获取即可。
gensim 构建pytorch的预训练embedding
- 首先,一般可以统计出我们的训练语料的词表vocab,将它与gensim加载的词表求交集,这样可以减少embedding的大小
- 导入pytorch nn.embedding的代码
def creat_embedding():#注意要先确定好训练语料里面有的单词
word_vectors =torch.randn([vocab_size,300])# 这里的vocab_size 是指 训练语料的vocabsize
word_to_idx = train_word2idx
word_vectors[1,:] = torch.zeros([1,300]) # 这里是让 第1个向量成为0向量,此处是<pad>
for i in range(2,vocab_size):
word = train_idx2word[i]
if word in wvmodel:
vector = wvmodel[word]
word_vectors[i,:] = torch.from_numpy(vector)
print(word_vectors.size())
#embedding = nn.Embedding.from_pretrained(word_vectors)
#embedding.weight.requires_grad = True
return word_vectors,word_to_idx #最终输出一个词表和一个arrary 用于输入embedding
最后使用nn.Embedding.from_pretrained(weight) weight 需要是tensor