Können wir die Vorteile des Transfer-Lernens beim Training von word2vec-Modellen nutzen?


13

Ich suche nach vorab trainierten Gewichten für bereits trainierte Modelle wie Google News-Daten usw. Es fiel mir schwer, ein neues Modell mit einer ausreichenden Datenmenge (10 GB usw.) für mich selbst zu trainieren. Ich möchte also vom Transferlernen profitieren, bei dem ich vorab trainierte Ebenengewichte erhalten und diese Gewichte für meine domänenspezifischen Wörter neu trainieren kann. Auf jeden Fall wird es im Training relativ weniger Zeit in Anspruch nehmen. Jede Art von Hilfe wird sehr geschätzt. Danke im Voraus :)

Antworten:


10

Ja, Sie können von vorgefertigten Modellen profitieren. Am bekanntesten ist das von GoogleNewsData geschulte Modell, das Sie hier finden.

Vorab trainierte Wort- und Phrasenvektoren https://drive.google.com/file/d/0B7XkCwpI5KDYNlNUTTlSS21pQmM/edit?usp=sharing

Anschließend können Sie die Vektoren mit gensim im Binärformat in Ihr Modell laden, wie unten gezeigt.

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

Hier ist ein anderes vorgefertigtes Modell für die englische Wikipedia:

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

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

Verwendung eines vorgefertigten Modells

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

Sie können auch Stanford NLP Glove verwenden

Hier ist eine großartige Zusammenstellung von vorgefertigten word2vec-Modellen.

Einige zusätzliche vortrainierte Modelle:

Mehr zu Gensim und Code hier: https://radimrehurek.com/gensim/models/word2vec.html

Quora Forum mit ähnlichen Fragen


2
Okay, das ist eine großartige Information, gute Arbeit. Aber kann ich vorab trainierte Modellebenengewichte verwenden, um ein neues Modell zu initialisieren und dieses Modell dann mit meinen Sätzen weiter abzustimmen?
Nomiluks

@Nomi Ja. Aus [gensim documentation] ( radimrehurek.com/gensim/models/word2vec.html ), sobald Sie das Modell geladen haben,model = Word2Vec.load(fname) # you can continue training with the loaded model!
Guru

1
Der Dokumentationslink oben erwähnt: "ANMERKUNG: Es ist unmöglich, die aus dem C-Format geladenen Vektoren weiter zu trainieren, da versteckte Gewichte, Vokabularhäufigkeit und der Binärbaum fehlen."
Vorreiter

3

Verteilte Darstellungen (Glove), die auf dem Training auf einem großen Korpus basieren, sind direkt von der Stanford NLP-Gruppe erhältlich. Sie können diese Worteinbettungen direkt in Ihrer Anwendung verwenden (anstatt 1 heißen codierten Vektoren zu verwenden und dann das Netzwerk zu trainieren, um die Einbettungen zu erhalten). Wenn Ihre Aufgabe nicht zu speziell ist, funktionieren diese Einbettungen in der Praxis gut.

m×VVm


Aber ich möchte mein neues word2vec-Modell mit vorgefertigten Modellgewichten initialisieren. Ist es möglich, bereits vorab trainierte Modell-Layer-Gewichte zu verwenden, um ein neues Modell zu initialisieren? Nach der Initialisierung möchte ich das Modell mit neuen Sätzen trainieren. ist es möglich?
Nomiluks

Ja, du kannst. Allerdings glaube ich nicht, dass die Gewichtsmatrix öffentlich verfügbar ist
wabbit

Ja, richtig ...? Wenn wir ein Modell selbst trainieren und versuchen, über die Gensim-Bibliothek auf die trainierten Modellgewichte zuzugreifen. Ist es möglich
Nomiluks

Ich bin mir nicht sicher, was Gensim angeht, aber da es ein zu optimierender Parameter ist, sollte es die meiste Software zulassen
wabbit

@HrishikeshGanu Funktioniert dieser Link noch? github.com/idio/wiki2vec/raw/master/torrents/… Quelle: github.com/idio/wiki2vec
Anish

1

Schauen Sie sich dieses Papier an [PDF] . Das Hauptaugenmerk liegt auf der NER-Aufgabe, aber die Idee ist dieselbe: Nehmen Sie vorab trainierte word2vec-Vektoren und passen Sie sie für eine bestimmte Anwendung an.

Viele gängige, auf neuronalen Netzen basierende Anwendungen für NLP beginnen häufig mit vorab trainierten Vektoren. Zum Beispiel tut ein kürzlich veröffentlichtes Papier [PDF] (NER- und POS-Tagging-Aufgaben) genau dies.


-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)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.