2016-01-31 1 views
7

Я использую предварительно подготовленные новости набор данные Google для получения векторов слов с помощью библиотеки Gensim в питонеВозможно ли повторное обучение модели word2vec (например, GoogleNews-vectors-negative300.bin) из состава предложений в python?

model = Word2Vec.load_word2vec_format('GoogleNews-vectors-negative300.bin', binary=True) 

После загрузки модели я преобразование подготовки обзоров приговора слов в векторы

#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]) 

Во word2Vec процесс я получаю много ошибок для слов в моем корпусе, которые не входят в модель. Проблема заключается в том, как я могу переучивать уже подготовленную модель (например, GoogleNews-vectors-negative300.bin '), чтобы получить словарные векторы для этих недостающих слов.

Ниже то, что я пробовал: Обученные новую модель от подготовки предложений, которые я имел

# 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"]) 

Он работал! но проблема в том, что у меня есть действительно небольшой набор данных и меньше ресурсов для обучения большой модели.

Второй способ, который я рассматриваю, - расширить уже обученную модель, такую ​​как GoogleNews-vectorectors-negative300.bin.

model = Word2Vec.load_word2vec_format('GoogleNews-vectors-negative300.bin', binary=True) 
sentences = gensim.models.word2vec.LineSentence("restaurantSentences") 
model.train(sentences) 

Можно и в том, что хороший способ использования, пожалуйста, помогите мне

+0

Возможный дубликат [Обновить gensim word2vec model] (http://stackoverflow.com/questions/22121028/update-gensim-word2vec-model) – ksindi

ответ

1

Некоторые люди работают над расширением gensim, чтобы интерактивное обучение.

Пара GitHub выдвижные запросы вы можете следить за прогрессом в этой работе:

Похоже, это улучшение может позволить обновление GoogleNews-vectors- отрицательная модель300.bin.

+0

Это отличная новость, ... Я хочу, чтобы я мог заниматься онлайн-обучением, и я просто жду этого :) –

0

это возможно, если модель строитель не завершил обучение модели. в питоне это:

model.sims(replace=True) #finalize the model 

если модель не завершить это идеальный способ иметь модель с большим набором данных.

1

Это, как я технически решить вопрос:

Подготовка ввода данных с предложением Iterable от Радим Rehurek: https://rare-technologies.com/word2vec-tutorial/

sentences = MySentences('newcorpus') 

Настройка модели

model = gensim.models.Word2Vec(sentences) 

, пересекающих словарь с слова вектора google

model.intersect_word2vec_format('GoogleNews-vectors-negative300.bin', 
           lockf=1.0, 
           binary=True) 

Наконец выполнение модели и обновление

model.train(sentences) 

ноты предупреждение: С содержательной точки зрения, это, конечно, весьма спорно ли корпус, вероятно, будет очень мало на самом деле может «улучшить» Google wordvectors, обученный на массивном корпусе ...

+1

Ваш комментарий предполагает, что этот метод предназначен для «улучшения» Google векторы слов. [Документация] (https://radimrehurek.com/gensim/models/word2vec.html) предполагает, что на самом деле он использует векторы Google для улучшения вашей модели, а не наоборот. * (Никакие слова не добавляются к существующей лексике, но пересекающиеся слова принимают вес файла, а непересекающиеся слова остаются в силе.) * Я попробовал свой метод и проверил размер корпуса моей модели. В нем отражены новые данные обучения, а не Новости Google. – lgallen

+0

Вы правы - может быть, термин _ для улучшения здесь вводит в заблуждение. Что делает код, он обновляет слова из нового корпуса и возвращает вам это. –

Смежные вопросы