使用 Gensim 在 LSI 之后显示文档到主题的映射

Display document to topic mapping after LSI using Gensim

我不熟悉将 LSI 与 Python 和 Gensim + Scikit-learn 工具结合使用。我能够使用来自 Scikit-learn 和 Gensim 库的 LSI 在语料库上实现主题建模,但是,当使用 Gensim 方法时,我无法显示文档列表到主题映射。

这是我使用 Scikit-learn LSI 成功显示文档到主题映射的作品:

tfidf_transformer = TfidfTransformer()
transformed_vector = tfidf_transformer.fit_transform(transformed_vector)
NUM_TOPICS = 14
lsi_model = TruncatedSVD(n_components=NUM_TOPICS)
lsi= nmf_model.fit_transform(transformed_vector)

topic_to_doc_mapping = {}
topic_list = []
topic_names = []

for i in range(len(dbpedia_df.index)):
    most_likely_topic =  nmf[i].argmax()

    if most_likely_topic not in topic_to_doc_mapping:
        topic_to_doc_mapping[most_likely_topic] = []

    topic_to_doc_mapping[most_likely_topic].append(i)

    topic_list.append(most_likely_topic)
    topic_names.append(topic_id_topic_mapping[most_likely_topic])

dbpedia_df['Most_Likely_Topic'] = topic_list
dbpedia_df['Most_Likely_Topic_Names'] = topic_names

print(topic_to_doc_mapping[0][:100])

topic_of_interest = 1
doc_ids = topic_to_doc_mapping[topic_of_interest][:4]
for doc_index in doc_ids:
    print(X.iloc[doc_index])


使用 Gensim 我无法继续显示文档到主题的映射:

processed_list = []
stop_words = set(stopwords.words('english'))
lemmatizer = WordNetLemmatizer()

for doc in documents_list:
    tokens = word_tokenize(doc.lower())
    stopped_tokens = [token for token in tokens if token not in stop_words]
    lemmatized_tokens = [lemmatizer.lemmatize(i, pos="n") for i in stopped_tokens]
    processed_list.append(lemmatized_tokens)
    
term_dictionary = Dictionary(processed_list)
document_term_matrix = [term_dictionary.doc2bow(document) for document in processed_list]

NUM_TOPICS = 14
model = LsiModel(corpus=document_term_matrix, num_topics=NUM_TOPICS, id2word=term_dictionary)
lsi_topics = model.show_topics(num_topics=NUM_TOPICS, formatted=False)
lsi_topics

如何在此处显示文档到主题的映射?

为了从经过训练的 LsiModel 中获取文档的表示(表示为 bag-of-words)作为主题向量,您使用 Python dict-style bracket-accessing (model[bow]).

例如,要获取训练数据中第一项的主题,您可以使用:

first_doc = document_term_matrix[0]
first_doc_lsi_topics = model[first_doc]

您还可以像在培训中一样提供文档列表,以一次性获取整个批次的 LSI 主题。例如:

all_doc_lsi_topics = model[document_term_matrix]