我们可以在训练 word2vec 模型时利用迁​​移学习的好处吗?

数据挖掘 机器学习 大数据 word2vec
2021-09-25 03:19:46

我正在寻找已经训练过的模型(如Google 新闻数据等)的预训练权重。我发现很难为自己训练一个拥有足够数量(10 GB 等)数据的新模型。因此,我想从迁移学习中受益,在这种学习中,我可以获得预训练的层权重,并在我的领域特定单词上重新训练这些权重。因此,肯定会花费相对较少的时间进行培训。任何形式的帮助将不胜感激。提前致谢 :)

4个回答

是的,您可以利用预训练模型。最著名的一个是您可以在此处找到的经过 GoogleNewsData 训练的模型。

预训练的词和短语向量https://drive.google.com/file/d/0B7XkCwpI5KDYNlNUTTlSS21pQmM/edit?usp=sharing

然后,您可以使用 gensim 在模型中加载二进制格式的向量,如下所示。

>>> model = Word2Vec.load_word2vec_format('/tmp/vectors.txt', binary=False)  # C text format
>>> model = Word2Vec.load_word2vec_format('/tmp/vectors.bin', binary=True)  # C binary format

这是英语维基百科的不同预建模型:

https://github.com/idio/wiki2vec/raw/master/torrents/enwiki-gensim-word2vec-1000-nostem-10cbow.torrent

来源:https ://github.com/idio/wiki2vec/

使用预建模型

Get python 2.7
Install gensim: pip install gensim
uncompress downloaded model: tar -xvf model.tar.gz
Load model in gensim:
from gensim.models import Word2Vec
model = Word2Vec.load("path/to/word2vec/en.model")
model.similarity('woman', 'man')

你也可以使用斯坦福 NLP 手套

这是预训练的 word2vec 模型的精彩汇编。

一些额外的预训练模型:

更多关于 gensim 和代码的信息: https ://radimrehurek.com/gensim/models/word2vec.html

有类似问题的知乎论坛

基于大型语料库训练的分布式表示(Glove)可直接从斯坦福 NLP 小组获得。您可以直接在您的应用程序中使用这些词嵌入(而不是使用 1 个热编码向量,然后训练网络以获取嵌入)。如果您的任务不是太专业,则从这组嵌入开始将在实践中很好地工作。

它将使您免于培训×参数数量是词汇量和 是您要投影到的嵌入空间的维度。

看看这篇论文[PDF]主要关注的是 NER 任务,但想法是相同的——采用预先训练的 word2vec 向量并将它们调整为特定的应用程序。

许多常见的基于神经网络的 NLP 应用程序通常从预训练的向量开始。例如,最近的一篇论文[PDF](NER 和 POS 标记任务)就是这样做的。

from gensim.models import Word2Vec 
# Word2Vec is full model which is trainable but takes larger memory

from gensim.models import KeyedVectors  
# KeyedVectors is reduced vector model which is NOT trainable but takes less memory

model = KeyedVectors.load_word2vec_format('GoogleNews-vectors-negative300.bin', binary=True) #load pretrained google w2v 

sen1 = 'w1 w2 w3'    
sen2 = 'word1 word2 word3'    
sentences = [[word for word in sen1.split()],[word for word in sen2.split()]]    
total_examples = model_2.corpus_count    

model_2 = Word2Vec(size=300, min_count=1) #initiate a full model    
model_2.build_vocab(sentences) #add words in training dataset

#load words from pretrained google dataset    
model_2.build_vocab([list(model.vocab.keys())], update=True)    
model_2.intersect_word2vec_format('GoogleNews-vectors-negative300.bin', binary=True, lockf=1.0)

#retrain pretrained w2v from new dataset    
model_2.train(sentences, total_examples=total_examples, epochs=model_2.iter)