Bir word2vec modeli eğitirken transfer öğrenimini kullanmaktan yararlanabilir miyiz?


13

Google Haberler verileri vb. Gibi önceden eğitilmiş bir modelin önceden eğitilmiş ağırlıklarını bulmak istiyorum. Kendim için yeterli miktarda (10 GB vb.) Veri içeren yeni bir model geliştirmeyi zor buldum. Bu nedenle, önceden eğitilmiş katman ağırlıkları alabileceğim ve bu ağırlıkları alan adına özgü kelimelerim üzerinde yeniden eğitebileceğim transfer öğreniminden yararlanmak istiyorum. Bu nedenle, kesinlikle eğitimde nispeten daha az zaman alacaktır. Her türlü yardım son derece takdir edilecektir. Şimdiden teşekkürler :)

Yanıtlar:


10

Evet, önceden eğitilmiş modellerden yararlanabilirsiniz. En ünlü olanı burada bulabileceğiniz GoogleNewsData eğitimli modelidir.

Önceden eğitilmiş kelime ve ifade vektörleri https://drive.google.com/file/d/0B7XkCwpI5KDYNlNUTTlSS21pQmM/edit?usp=sharing

Daha sonra, aşağıda gösterildiği gibi gensim'i kullanarak vektörleri modelinizde ikili biçimde yükleyebilirsiniz.

>>> 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

İşte İngilizce Wikipedia için önceden oluşturulmuş farklı bir model:

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

Kaynak: https://github.com/idio/wiki2vec/

Önceden oluşturulmuş bir model kullanma

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 Eldiveni de kullanabilirsiniz

İşte önceden eğitilmiş word2vec modellerinin harika bir derlemesi.

Bazı önceden eğitilmiş modeller:

Gensim ve kod hakkında daha fazla bilgi için: https://radimrehurek.com/gensim/models/word2vec.html

Benzer sorulara sahip Quora forumu


2
Tamam, bu iyi bir bilgi. Ancak, önceden eğitilmiş modeller katman ağırlıklarını yeni bir model başlatmak ve ardından bu modeli cümlelerimle daha fazla ayarlamak için kullanabilir miyim?
Nomiluks

@Nomi Evet. [Gensim belgeleri] ' nden ( radimrehurek.com/gensim/models/word2vec.html ), modeli yükledikten sonra,model = Word2Vec.load(fname) # you can continue training with the loaded model!
Guru

1
Yukarıdaki belge bağlantısından bahsediliyor: "NOT: Gizli formatlar, kelime sıklığı ve ikili ağaç eksik olduğu için C biçiminden yüklenen vektörleri eğitmeye devam etmek imkansız."
trailblazer

3

Büyük bir cesetle ilgili eğitime dayanan dağıtılmış temsiller (Eldiven) doğrudan Stanford NLP grubundan edinilebilir. Bu kelime düğünlerini doğrudan uygulamanızda kullanabilirsiniz (1 sıcak kodlanmış vektör kullanmak ve ardından düğünleri almak için ağı eğitmek yerine). Göreviniz çok özel değilse, bu düğün seti ile başlamak pratikte iyi çalışır.

m×VVm


Ancak, yeni word2vec modelimi önceden eğitilmiş model ağırlıklarıyla başlatmak istiyorum. Yeni modeli başlatmak için önceden eğitilmiş model katman ağırlıklarını kullanmak mümkün mü? Başlatma işleminden sonra bu modeli yeni cümlelerle eğitmek istiyorum. mümkün mü?
Nomiluks

Evet yapabilirsin. Ancak ağırlık matrisinin halka açık olduğunu düşünmüyorum
wabbit

Evet, değil mi? Bir modeli kendimiz eğitirsek ve Gensim kütüphanesini kullanarak eğitilmiş model ağırlıklarına erişmeye çalışırsak. Mümkün mü
Nomiluks

Gensim hakkında emin değilim ama optimize edilecek bir parametre olduğundan çoğu yazılım buna izin vermelidir
wabbit

@HrishikeshGanu Bu bağlantı hala çalışıyor mu? github.com/idio/wiki2vec/raw/master/torrents/… Kaynak: github.com/idio/wiki2vec
Anish

1

Bu makaleye bir göz atın [PDF] . Ana odak NER görevi ile ilgilidir, ancak fikir aynıdır - önceden eğitilmiş word2vec vektörlerini alın ve belirli bir uygulama için uyarlayın.

NLP için birçok yaygın sinir ağına dayalı uygulama sıklıkla önceden eğitilmiş vektörlerle başlar. Örneğin çok yeni bir makale [PDF] (NER ve POS etiketleme görevleri) bunu yapar.


-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)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.