Я рад, что вы нашли мой пост, и мне жаль, что он не сработал для вас.Я столкнулся с этой ошибкой по нескольким причинам, главным образом из-за того, что в Java не было установлено свойство и путь не вызывал переменные среды.
Поскольку ваш код работает с меньшим набором данных, я сначала посмотрю на ваши данные.Маллет является привередливым в том, что он принимает только самые чистые данные, которые он, возможно, попал в нуль, пунктуацию или число с плавающей точкой.
Вы взяли размер выборки из своего словаря или передали весь набор данных?
Это в основном то, что он делает: предложение в слова - слова в числа - затем подсчитывается для частоты, как:
[(3, 1), (13, 1), (37,1)]
Слово 3 («помощь») появляется 1 раз.Слово 13 («оплата») появляется 1 раз.Слово 37 («учетная запись») появляется 1 раз.
Затем ваш LDA просматривает одно слово и оценивает его с точки зрения того, как часто оно встречается со всеми другими словами в словаре, и это происходит для всего словаря, поэтомуесли вы позволите ему взглянуть на миллионы и миллионы слов, он очень быстро рухнет.
Вот как я реализовал мушкел и сжал свой словарь, не включая стемпинг или другие этапы предварительной обработки:
# we create a dictionary of all the words in the csv by iterating through
# contains the number of times a word appears in the training set.
dictionary = gensim.corpora.Dictionary(processed_docs[:])
count = 0
for k, v in dictionary.iteritems():
print(k, v)
count += 1
if count > 10:
break
# we want to throw out words that are so frequent that they tell us little about the topic
# as well as words that are too infrequent >15 rows then keep just 100,000 words
dictionary.filter_extremes(no_below=15, no_above=0.5, keep_n=100000)
# the words become numbers and are then counted for frequency
# consider a random row 4310 - it has 27 words word indexed 2 shows up 4 times
# preview the bag of words
bow_corpus = [dictionary.doc2bow(doc) for doc in processed_docs]
bow_corpus[4310]
os.environ['MALLET_HOME'] = 'C:\\mallet\\mallet-2.0.8'
mallet_path = 'C:\\mallet\\mallet-2.0.8\\bin\\mallet'
ldamallet = gensim.models.wrappers.LdaMallet(mallet_path, corpus=bow_corpus, num_topics=20, alpha =.1,
id2word=dictionary, iterations = 1000, random_seed = 569356958)
Также я бы разделил ваш ldamallet на отдельную ячейку, так как время компиляции медленное, особенно для набора данных такого размера.Я надеюсь, что это помогло, дайте мне знать, если вы все еще сталкиваетесь с ошибками:)