Czy możemy skorzystać z transferu nauki podczas szkolenia modeli word2vec?

13

Chcę znaleźć wstępnie wyważone ciężary już wyszkolonych modeli, takich jak dane Google News itp. Trudno mi było wyszkolić nowy model z wystarczającą ilością danych (10 GB itp.) Dla siebie. Chcę więc skorzystać z nauki transferu, w której mógłbym uzyskać wstępnie wyszkolone wagi warstw i ponownie wyćwiczyć te ciężary na słowach specyficznych dla mojej domeny. Zdecydowanie zajmie to mniej czasu na treningu. Każda pomoc będzie mile widziana. Z góry dziękuję :)

Nomiluks
źródło

Odpowiedzi:

10

Tak, możesz skorzystać ze wstępnie wyszkolonych modeli. Najbardziej znanym jest model przeszkolony w GoogleNewsData, który można znaleźć tutaj.

Wstępnie przeszkolone wektory słów i fraz https://drive.google.com/file/d/0B7XkCwpI5KDYNlNUTTlSS21pQmM/edit?usp=sharing

Następnie możesz załadować wektory w formacie binarnym do swojego modelu za pomocą gensim, jak pokazano poniżej.

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

Oto inny gotowy model dla angielskiej Wikipedii:

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

Źródło: https://github.com/idio/wiki2vec/

Korzystanie z gotowego modelu

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

Możesz także użyć rękawicy Stanford NLP

Oto świetna kompilacja wstępnie wyszkolonych modeli word2vec.

Niektóre dodatkowe wstępnie przeszkolone modele:

Więcej informacji na temat gensim i kodu tutaj: https://radimrehurek.com/gensim/models/word2vec.html

Forum Quora z podobnymi pytaniami

Guru
źródło
2
Dobra, to świetna informacja, dobra robota. Ale czy mogę użyć wstępnie wyuczonych wag modeli do zainicjowania nowego modelu, a następnie dostrajania tego modelu za pomocą moich zdań?
Nomiluks,
@Nomi Tak. Z [dokumentacja gensim] ( radimrehurek.com/gensim/models/word2vec.html ), po załadowaniu modelu,model = Word2Vec.load(fname) # you can continue training with the loaded model!
Guru
1
Powyższy link do dokumentacji wspomina: „UWAGA: Dalsze szkolenie wektorów załadowanych z formatu C jest niemożliwe, ponieważ brakuje ukrytych wag, częstotliwości słownictwa i drzewa binarnego.”
pionier
3

Rozproszone reprezentacje (rękawiczki) oparte na szkoleniu na dużym korpusie są bezpośrednio dostępne z grupy Stanford NLP. Możesz użyć tych osadzeń słów bezpośrednio w swojej aplikacji (zamiast używać 1 wektorów zakodowanych na gorąco, a następnie szkolić sieć, aby uzyskać osadzanie). Jeśli Twoje zadanie nie jest zbyt wyspecjalizowane, rozpoczęcie od tego zestawu osadzeń będzie działać dobrze w praktyce.

Będzie to zaoszczędzić od szkolenia dodatkowego liczbę parametrówm×V , gdzie jest słownictwo wielkość i jest wymiarem przestrzeni osadzającego chcesz do projektu.mVm

wabbit
źródło
Ale chcę zainicjować mój nowy model word2vec przy pomocy wstępnie wyszkolonych wag modelu. Czy do zainicjowania nowego modelu można użyć już wstępnie przeszkolonych wag warstw modelu Po inicjalizacji chcę trenować ten model z nowymi zdaniami. Czy to możliwe?
Nomiluks,
Tak, możesz. Jednak nie sądzę, aby macierz wag była dostępna publicznie
wabbit
Tak, prawda ...? Jeśli sami wytrenujemy model i spróbujemy uzyskać dostęp do wyważonych wag modelu za pomocą biblioteki Gensim. Czy to możliwe
Nomiluks,
Nie jestem pewien co do gensim, ale ponieważ jest to parametr, który należy zoptymalizować, większość programów powinna na to pozwolić
wabbit,
@HrishikeshGanu Czy ten link nadal działa? github.com/idio/wiki2vec/raw/master/torrents/… Źródło: github.com/idio/wiki2vec
Anish
1

Spójrz na ten artykuł [PDF] . Główny nacisk kładziony jest na zadanie NER, ale pomysł jest ten sam - weź wstępnie przeszkolone wektory word2vec i dostosuj je do konkretnej aplikacji.

Wiele popularnych aplikacji NLP opartych na sieci neuronowej często zaczyna się od wstępnie przeszkolonych wektorów. Na przykład właśnie najnowszy artykuł [PDF] (zadania znakowania NER i POS) właśnie to robi.

Vladislavs Dovgalecs
źródło
-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)
Alan Yang
źródło