Possiamo trarre vantaggio dall'uso dell'apprendimento di trasferimento durante l'addestramento di modelli word2vec?


13

Sto cercando di trovare pesi pre-allenati di modelli già addestrati come i dati di Google News ecc. Ho trovato difficile addestrare un nuovo modello con una quantità sufficiente (10 GB ecc.) Di dati per me stesso. Quindi, voglio trarre beneficio dall'apprendimento del trasferimento in cui sarei in grado di ottenere pesi di livello pre-allenati e riqualificare quei pesi sulle parole specifiche del mio dominio. Quindi, sicuramente ci vorrà relativamente meno tempo nell'allenamento. Qualsiasi tipo di aiuto sarà molto apprezzato. Grazie in anticipo :)

Risposte:


10

Sì, puoi usufruire di modelli pre-addestrati. Il più famoso è il modello addestrato di GoogleNewsData che puoi trovare qui.

Vettori pre-addestrati di parole e frasi https://drive.google.com/file/d/0B7XkCwpI5KDYNlNUTTlSS21pQmM/edit?usp=sharing

È quindi possibile caricare i vettori in formato binario nel modello utilizzando gensim come mostrato di seguito.

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

Ecco un modello pre-costruito diverso per Wikipedia in inglese:

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

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

Utilizzando un modello predefinito

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

Puoi anche usare Stanford NLP Glove

Ecco una grande raccolta di modelli word2vec pre-addestrati.

Alcuni modelli pre-addestrati aggiuntivi:

Maggiori informazioni su gensim e codice qui: https://radimrehurek.com/gensim/models/word2vec.html

Forum di Quora con domande simili


2
Va bene, questo è un ottimo pezzo di informazione buon lavoro. Ma, posso usare i pesi dei livelli di modelli pre-allenati per inizializzare un nuovo modello e quindi ottimizzare ulteriormente quel modello con le mie frasi?
Nomiluks

@Nomi Sì. Da [documentazione gensim] ( radimrehurek.com/gensim/models/word2vec.html ), una volta caricato il modello,model = Word2Vec.load(fname) # you can continue training with the loaded model!
Guru

1
Il link alla documentazione sopra menziona: "NOTA: è impossibile continuare ad addestrare i vettori caricati dal formato C perché mancano pesi nascosti, frequenza del vocabolario e albero binario".
pioniere

3

Rappresentazioni distribuite (Glove) basate sull'allenamento su un grande corpus sono disponibili direttamente dal gruppo PNL di Stanford. È possibile utilizzare tali incorporamenti di parole direttamente nell'applicazione (anziché utilizzare 1 vettori con codifica a caldo e quindi addestrare la rete per ottenere gli incorporamenti). Se il tuo compito non è troppo specializzato a partire da questo set di incorporamenti funzionerà bene nella pratica.

m×VVm


Ma voglio inizializzare il mio nuovo modello word2vec con pesi modello pre-allenati. È possibile utilizzare pesi di layer modello già pre-allenati per inizializzare un nuovo modello. Dopo l'inizializzazione voglio addestrare quel modello con nuove frasi. È possibile?
Nomiluks

Si, puoi. Tuttavia, non credo che la matrice dei pesi sia disponibile pubblicamente
wabbit il

Sì, vero ...? Se alleniamo noi stessi un modello e proviamo ad accedere ai pesi del modello addestrato usando la libreria Gensim. È possibile
Nomiluks

Non sono sicuro di Gensim ma poiché è un parametro da ottimizzare, la maggior parte dei software dovrebbe permetterlo
wabbit

@HrishikeshGanu Questo collegamento funziona ancora? github.com/idio/wiki2vec/raw/master/torrents/… Fonte: github.com/idio/wiki2vec
Anish

1

Dai un'occhiata a questo documento [PDF] . L'obiettivo principale è l'attività NER, ma l'idea è la stessa: prendere vettori word2vec pre-addestrati e adattarli per un'applicazione specifica.

Molte applicazioni comuni basate su reti neurali per la PNL iniziano spesso con vettori pre-addestrati. Ad esempio un documento molto recente [PDF] (attività di codifica NER e POS) fa proprio questo.


-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)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.