2016-01-31 14 views
7

Sto usando pre-addestrato notizie set di dati di Google per ottenere vettori di parole utilizzando biblioteca Gensim in pythonÈ possibile ri-formare un modello word2vec (ad esempio GoogleNews-vettori-negative300.bin) da un corpus di frasi in python?

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

Dopo aver caricato il modello che sto convertendo parole recensioni formazione di frase in vettori

#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]) 

Durante word2Vec processo ottengo molti errori per le parole nel mio corpus, che non sono nel modello. Il problema è come posso riqualificare il modello già pre-addestrato (ad esempio GoogleNews-vettori-negative300.bin '), al fine di ottenere i vettori di parole per quelle parole mancanti.

seguito è quello che ho provato: addestrato un nuovo modello da frasi di formazione che ho avuto

# 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"]) 

Ha funzionato! ma il problema è che ho un set di dati veramente piccolo e meno risorse per addestrare un modello di grandi dimensioni.

In secondo luogo, quello che sto guardando è estendere il modello già addestrato come GoogleNews-vettori-negative300.bin.

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

E 'possibile ed è che un buon modo per utilizzare, ti prego di aiutarmi

+0

Possibile duplicato di [Aggiorna gensim word2vec model] (http://stackoverflow.com/questions/22121028/update-gensim-word2vec-model) – ksindi

risposta

1

Alcune persone hanno lavorato per estendere gensim per consentire la formazione on-line.

Un paio richieste GitHub tiro si potrebbe desiderare di guardare per progressi su quello sforzo:

Sembra che questo miglioramento potrebbe consentire l'aggiornamento delle GoogleNews-vectors- modello negative300.bin.

+0

questa è una grande notizia, ... Vorrei poter fare un corso di formazione online e sto solo aspettando che :) –

0

è possibile se il builder del modello non ha finalizzato il training del modello. in python che è:

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

se il modello non finalizzare è un modo perfetto per avere il modello con ampio set di dati.

1

Questo è come mi tecnicamente risolto il problema:

Preparazione immissione dei dati con sentenza iterabile da Radim Rehurek: https://rare-technologies.com/word2vec-tutorial/

sentences = MySentences('newcorpus') 

Impostazione del modello di

model = gensim.models.Word2Vec(sentences) 

Intersecando il vocabolario con i vettori delle parole di google

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

Infine eseguire il modello e l'aggiornamento

model.train(sentences) 

Una nota di avvertimento: Da un punto di vista sostanziale, è ovviamente altamente discutibile se un corpus probabile che sia molto piccolo può effettivamente "migliorare" il Google wordvector addestrati su un corpus massiccio ...

+1

Il tuo commento suggerisce che questo metodo è progettato per "migliorare" Google vettori di parole. [La documentazione] (https://radimrehurek.com/gensim/models/word2vec.html) suggerirebbe che utilizza effettivamente i vettori di Google per migliorare il tuo modello, non il contrario. * (Non vengono aggiunte parole al vocabolario esistente, ma le parole intersecanti adottano i pesi del file e le parole non intersecanti vengono lasciate in pace.) * Ho provato il metodo e controllato le dimensioni corporee del mio modello. Riflette i nuovi dati di allenamento, non Google News. – lgallen

+0

Hai ragione - forse il termine _per migliorare_ è fuorviante qui. Che cosa fa il codice aggiorna le parole del nuovo corpus e ti restituisce quelle. –

Problemi correlati