É possível treinar novamente um modelo word2vec (por exemplo, GoogleNews-vectors-negative300.bin) a partir de um corpus de frases em python?
Estou usando o conjunto de dados de notícias do Google pré-treinado para obter vetores de palavras usando a biblioteca Gensim em python
model = Word2Vec.load_word2vec_format('GoogleNews-vectors-negative300.bin', binary=True)
Depois de carregar o modelo, estou convertendo as revisões de treinamento das palavras de sentença em vetores
#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 o processo word2Vec, recebo muitos erros para as palavras do meu corpus, que não estão no modelo. O problema é como posso treinar o modelo já pré-treinado (por exemplo, GoogleNews-vectors-negative300.bin '), a fim de obter vetores de palavras para essas palavras ausentes.
A seguir, é o que tentei: Treinei um novo modelo a partir de frases de treinamento que eu tinha
# 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"])
Funcionou! mas o problema é que tenho um conjunto de dados muito pequeno e menos recursos para treinar um modelo grande.
A segunda maneira que eu estou olhando é estender o modelo já treinado, como GoogleNews-vectors-negative300.bin.
model = Word2Vec.load_word2vec_format('GoogleNews-vectors-negative300.bin', binary=True)
sentences = gensim.models.word2vec.LineSentence("restaurantSentences")
model.train(sentences)
É possível e é uma boa maneira de usar, por favor me ajude