使用 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]
我不熟悉将 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]