Сегодня я только начал писать сценарий, который готовит модели LDA на больших корпусах (минимум 30M предложений) с использованием библиотеки gensim. Вот текущий код, который я использую:Память эффективного обучения LDA с использованием библиотеки gensim
from gensim import corpora, models, similarities, matutils
def train_model(fname):
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)
dictionary = corpora.Dictionary(line.lower().split() for line in open(fname))
print "DOC2BOW"
corpus = [dictionary.doc2bow(line.lower().split()) for line in open(fname)]
print "running LDA"
lda = gensim.models.ldamodel.LdaModel(corpus=corpus, id2word=dictionary, num_topics=100, update_every=1, chunksize=10000, asses=1)
работает этот скрипт на небольшой корпусе (2Е предложения), я понял, что нужно около 7GB оперативной памяти. И когда я пытаюсь запустить его на больших корпусах, он терпит неудачу из-за проблемы с памятью. Проблема, очевидно, связано с тем, что я загружающего корпус, используя следующую команду:
corpus = [dictionary.doc2bow(line.lower().split()) for line in open(fname)]
Но, я думаю, что нет никакого другого пути, потому что мне нужно это для вызова метода LdaModel():
lda = gensim.models.ldamodel.LdaModel(corpus=corpus, id2word=dictionary, num_topics=100, update_every=1, chunksize=10000, asses=1)
Я искал решение этой проблемы, но не нашел ничего полезного. Я бы предположил, что это должна быть общая проблема, поскольку мы в основном обучаем модели на очень больших корпусах (обычно в документах по википедии). Таким образом, это должно быть уже решение для этого.
Любые идеи по этой проблеме и ее решение?