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 :)
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:
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')
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.
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
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.
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)
model = Word2Vec.load(fname) # you can continue training with the loaded model!
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.
quelle
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.
quelle
quelle