是否有可能从python的句子语料库中重新训练word2vec模型(例如GoogleNews-vectors-negative300.bin)?

时间:2016-01-31 18:17:52

标签: python nlp gensim word2vec

我使用预先培训的Google新闻数据集,通过在python中使用Gensim库来获取单词向量

model = Word2Vec.load_word2vec_format('GoogleNews-vectors-negative300.bin', binary=True)

加载模型后,我将训练评论句子单词转换为向量

#reading all sentences from training file
with open('restaurantSentences', 'r') as infile:
x_train = infile.readlines()
#cleaning sentences
x_train = [review_to_wordlist(review,remove_stopwords=True) for review in x_train]
train_vecs = np.concatenate([buildWordVector(z, n_dim) for z in x_train])

在word2Vec过程中,我的语料库中的单词出现了很多错误,这些错误不在模型中。问题是我如何重新训练已预先训练好的模型(例如GoogleNews-vectors-negative300.bin'),以获得那些遗失单词的单词向量。

以下是我的尝试: 训练了我训练过的新模型

# Set values for various parameters
num_features = 300    # Word vector dimensionality                      
min_word_count = 10   # Minimum word count                        
num_workers = 4       # Number of threads to run in parallel
context = 10          # Context window    size                                                                                    
downsampling = 1e-3   # Downsample setting for frequent words

sentences = gensim.models.word2vec.LineSentence("restaurantSentences")
# Initialize and train the model (this will take some time)
print "Training model..."
model = gensim.models.Word2Vec(sentences, workers=num_workers,size=num_features, min_count = min_word_count, 
                      window = context, sample = downsampling)


model.build_vocab(sentences)
model.train(sentences)
model.n_similarity(["food"], ["rice"])

有效!但问题是我有一个非常小的数据集和较少的资源来训练一个大型模型。

我正在研究的第二种方法是扩展已经训练过的模型,例如GoogleNews-vectors-negative300.bin。

model = Word2Vec.load_word2vec_format('GoogleNews-vectors-negative300.bin', binary=True)
sentences = gensim.models.word2vec.LineSentence("restaurantSentences")
model.train(sentences)

是否可能并且这是一种好用的方法,请帮助我

3 个答案:

答案 0 :(得分:3)

这就是我在技术上解决问题的方法:

使用可从Radim Rehurek迭代的句子准备数据输入:https://rare-technologies.com/word2vec-tutorial/

sentences = MySentences('newcorpus')  

设置模型

model = gensim.models.Word2Vec(sentences)

将词汇与谷歌词向量相交

model.intersect_word2vec_format('GoogleNews-vectors-negative300.bin',
                                lockf=1.0,
                                binary=True)

最后执行模型并更新

model.train(sentences)

警告提示:从实质的角度来看,一个可能非常小的语料库是否能够真正“改善”在大规模语料库中训练的Google词语,这当然是值得商榷的。

答案 1 :(得分:1)

有些人一直致力于扩展gensim以允许在线培训。

一些GitHub拉取请求您可能希望观察该努力的进展:

看起来这种改进可能允许更新GoogleNews-vectors-negative300.bin模型。

答案 2 :(得分:1)

如果模型构建者没有完成模型训练,则可能。 在python中它是:

model.sims(replace=True) #finalize the model

如果模型没有最终确定,那么使用大型数据集的模型是一种完美的方法。