我正在尝试使用GuidedLDA来实现一段代码,但是我不理解我的文本数据需要采用哪种格式才能正常工作。教程代码从模块本身上传了一个数据集,而我已经从熊猫数据框中提取了文本数据,使用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给了我很多错误,因为我无法匹配其中使用的数据集的结构。
我尝试过: -将我的语料库更改为数组以获得形状
X =语料库
将我的语料库构建为BoW模型
使用DictVectorized
这是在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:“列表”对象没有属性“形状”
当X = np.array(corpus [0]):
X.shape >>>(36,7)
此形状太小。 教程代码的形状为(8447,3012),总和为1221626。
然后我收到此错误:
-> 47 print('主题{}:{}'。format(str(i),''.join(topic_words))) TypeError:序列项0:预期的str实例,找到numpy.int32
在尝试将文本数据集转换为类似于本教程代码中使用的文档术语矩阵的某种稀疏数组时,我还遇到了其他错误:
ValueError:没有足够的值可解包(预期2,得到1)
TypeError:无法根据规则“安全”将数组数据从dtype('float64')转换为dtype('int64')