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


13

我正在寻找已经训练有素的模型(如Google新闻数据等)的预训练权重。我发现很难为自己训练出具有足够数量(10 GB等)数据的新模型。因此,我想从转移学习中受益,在转移学习中,我将能够获得预训练的层权重并在我的领域特定单词上对那些权重进行重新训练。因此,肯定会减少培训时间。任何帮助将不胜感激。提前致谢 :)

Answers:


10

是的,您可以利用预先训练的模型。最著名的是经过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')

您也可以使用Stanford NLP手套

这是预训练的word2vec模型的出色汇编。

一些其他的预训练模型:

有关gensim和代码的更多信息,请访问:https://radimrehurek.com/gensim/models/word2vec.html

Quora论坛有类似问题


2
好的,这是一项非常有用的信息。但是,我可以使用预先训练的模型图层权重来初始化新模型,然后使用句子进一步调整该模型吗?
Nomiluks

@Nomi是的。从[gensim文档](radimrehurek.com/gensim/models/word2vec.html)中,一旦加载模型,model = Word2Vec.load(fname) # you can continue training with the loaded model!
Guru

1
上面的文档链接提到:“注意:由于缺少隐藏的权重,词汇频率和二叉树,因此无法继续训练从C格式加载的向量。”
开拓者

3

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

m×VVm


但是,我想使用预先训练的模型权重来初始化新的word2vec模型。是否可以使用已经预先训练的模型层权重来初始化新模型。初始化后,我想用新句子训练该模型。可能吗?
Nomiluks

是的你可以。但是我不认为权重矩阵是公开可用的
wabbit

是的,对吗...?如果我们自己训练模型,并尝试使用Gensim库访问训练后的模型权重。是否可能
Nomiluks

不确定gensim,但由于它是要优化的参数,大多数软件应允许使用
wabbit


1

看看本文[PDF]。主要重点是关于NER任务,但思想是相同的-接受预先训练的word2vec向量并将其调整为适合特定的应用。

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


-1
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)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.