2016-12-01 2 views
1

Я пытаюсь построить модель фраз над большим корпусом, но я продолжаю спотыкаться об ошибке памяти. Сначала я попытался поместить весь свой корпус в большой генератор. Затем я попытался сохранить модель между каждым документом:Слияние двух моделей фраз Gensim

import codecs 
import gensim 
import os 
import random 
import string 
import sys 

def gencorp(file_path): 
    with codecs.open(file_path, 'rb',encoding="utf8") as doc : 
     for sentence in doc: 
      yield sentence.split() 

out_corpus_dir = "C:/Users/Administrator/Desktop/word2vec/1billionwords_corpus_preprocessed/" 
file_nb = 0 
bi_detector = gensim.models.Phrases() 
for file in os.listdir(out_corpus_dir): 
    file_nb += 1 
    file_path = out_corpus_dir+file 
    bi_detector.add_vocab(gencorp(file_path)) 
    bi_detector.save("generic_EN_bigrams_v%i"%(file_nb/10)) 
    bi_detector = gensim.models.Phrases.load("generic_EN_bigrams_v%i"%(file_nb/10)) 
bi_detector.save("generic_EN_bigrams") 

Но ни одно из этих решений работы. Однако generic_EN_bigrams_v0 генерируется и сохраняется. Так что мне интересно, смогу ли я обучать модели фраз для каждого документа, а затем найти способ их слияния.

Спасибо Вам за любую проницательность :)

ответ

0

согласно документации gensim «s, добавляющие предложения должно просто работать, и вы не должны иметь проблем с памятью, так как это обновлением только статистика. Поэтому эта незначительная модификация вашего кода должна заставить его работать, т. Е. Вам не нужно воссоздавать объект bi_detector.

import codecs 
import gensim 
import os 
import random 
import string 
import sys 

def gencorp(file_path): 
    with codecs.open(file_path, 'rb',encoding="utf8") as doc : 
     for sentence in doc: 
      yield sentence.split() 

out_corpus_dir = "C:/Users/Administrator/Desktop/word2vec/1billionwords_corpus_preprocessed/" 
file_nb = 0 
bi_detector = gensim.models.Phrases() 
for file in os.listdir(out_corpus_dir): 
    file_nb += 1 
    file_path = out_corpus_dir+file 
    bi_detector.add_vocab(gencorp(file_path)) 
    # The following two lines are not required. 
    # bi_detector.save("generic_EN_bigrams_v%i"%(file_nb/10)) 
    # bi_detector = gensim.models.Phrases.load("generic_EN_bigrams_v%i"%(file_nb/10)) 
bi_detector.save("generic_EN_bigrams")