Я пытаюсь реализовать фрагмент кода с использованием GuidedLDA, но я не понимаю, в каком формате должны работать мои текстовые данные. Код руководства загружает набор данных из самого модуля, в то время как я извлек свои текстовые данные из моего pandas dataframe, создал корпус и словарь, используя gensim, и все еще не могу сделать его функциональным.
Не могли бы вы объяснить, как я могу структурировать свои текстовые данные в набор данных разреженного массива, используемый в моделях LDA (я думаю, что матрица терминов документа?), Чтобы я мог использовать модуль GuidedLDA?
Первоначально я следовал этому руководству, чтобы выполнить анализ LDA для текстовых данных:
https://www.machinelearningplus.com/nlp/topic-modeling-gensim-python/
После того, как я захотел улучшить его, я хотел использовать начальные темы для его адаптации. Итак, я нашел этот урок:
https://medium.freecodecamp.org/how-we-changed-unsupervised-lda-to-semi-supervised-guidedlda-e36a95f3a164
Но GuidedLDA давал мне так много ошибок, потому что я не могу сопоставить структуру набора данных, использованного в нем.
Я пытался:
- превращение моего корпуса в массив, чтобы получить форму
Это учебный код, найденный здесь https://medium.freecodecamp.org/how-we-changed-unsupervised-lda-to-semi-supervised-guidedlda-e36a95f3a164:
X = guidedlda.datasets.load_data(guidedlda.datasets.NYT)
vocab = guidedlda.datasets.load_vocab(guidedlda.datasets.NYT)
word2id = dict((v, idx) for idx, v in enumerate(vocab))
print(X.shape)
print(X.sum())
model = guidedlda.GuidedLDA(n_topics=5, n_iter=100, random_state=7,
refresh=20)
model.fit(X)
topic_word = model.topic_word_
n_top_words = 8
for i, topic_dist in enumerate(topic_word):
topic_words = np.array(vocab)[np.argsort(topic_dist)][:-
(n_top_words + 1): - 1]
print ('Topic {}: {}'. format (i, '' .join (topic_words))) *
Мой код:
# Create Dictionary
id2word = corpora.Dictionary(processed_sums_bigrams)
# Create Corpus (list of documents)
texts = processed_sums_bigrams
# Term Document Frequency
corpus = [id2word.doc2bow(text) for text in texts]
X = corpus
vocab = id2word
print(X.shape)
print(X.sum())
Когда X = корпус или id2word:
AttributeError: у объекта 'list' нет атрибута 'shape'
Когда X = np.array (корпус [0]):
X.shape >>> (36,7)
Эта форма слишком мала.
Форма учебного кода (8447, 3012) и сумма 1221626.
Тогда я получаю эту ошибку:
-> 47 print ('Topic {}: {}'. Format (str (i), '' .join (topic_words)))
Ошибка типа: элемент последовательности 0: ожидаемый экземпляр str, найдено numpy.int32
Я также столкнулся с другими ошибками в моих попытках превратить мой текстовый массив данных в некий разреженный массив, который напоминает матрицу терминов документа, использованную в учебном коде, включая:
ValueError: недостаточно значений для распаковки (ожидается 2, получено 1)
TypeError: Невозможно привести данные массива из dtype ('float64') к dtype ('int64') в соответствии с правилом 'safe'