Я сталкиваюсь со следующей ошибкой при попытке обновить LdaModel моего gensim:
IndexError: индекс 6614 выходит за границы оси 1 с размером 6614
Я проверил, почему другие люди имели эту проблему в этой теме , но я использую тот же словарь от начала до конца, что было их ошибкой.
Поскольку у меня большой набор данных, я загружаю его порциями за порцию (используя pickle.load). Я строю словарь таким образом, итеративно, благодаря этому коду:
1015 *
fr_documents_lda = open("documents_lda_40_rails_30_ruby_full.dat", 'rb')
dictionary = Dictionary()
chunk_no = 0
while 1:
try:
t0 = time()
documents_lda = pickle.load(fr_documents_lda)
chunk_no += 1
dictionary.add_documents(documents_lda)
t1 = time()
print("Chunk number {0} took {1:.2f}s".format(chunk_no, t1-t0))
except EOFError:
print("Finished going through pickle")
break
После построения для всего набора данных, я тренирую модель таким же образом, итеративно, таким образом:
fr_documents_lda = open("documents_lda_40_rails_30_ruby_full.dat", 'rb')
first_iter = True
chunk_no = 0
lda_gensim = None
while 1:
try:
t0 = time()
documents_lda = pickle.load(fr_documents_lda)
chunk_no += 1
corpus = [dictionary.doc2bow(text) for text in documents_lda]
if first_iter:
first_iter = False
lda_gensim = LdaModel(corpus, num_topics=no_topics, iterations=100, offset=50., random_state=0, alpha='auto')
else:
lda_gensim.update(corpus)
t1 = time()
print("Chunk number {0} took {1:.2f}s".format(chunk_no, t1-t0))
except EOFError:
print("Finished going through pickle")
break
Я также пытался обновлять словарь в каждом чанке, т.е.
dictionary.add_documents(documents_lda)
прямо перед
corpus = [dictionary.doc2bow(text) for text in documents_lda]
в последнем куске кода. Наконец, я попытался установить для аргумента allow_update параметра doc2bow значение True. Ничего не работает.
К вашему сведению, размер моего окончательного словаря составляет 85 КБ. Размер моего словаря, построенного только из первого блока, составляет 10 КБ. Ошибка возникает на второй итерации, когда она переходит в условие else, при вызове метода update.
Ошибка выводится строкой expElogbetad = self.expElogbeta[:, ids]
, называемый gamma, sstats = self.inference(chunk, collect_sstats=True)
, сам называемый gammat = self.do_estep(chunk, other)
, сам называемый lda_gensim.update(corpus)
.
У кого-нибудь есть идеи, как это исправить или что происходит?
Заранее спасибо.