一.LDA模型介绍
Latent Dirichlet Allocation (LDA) 是一种生成式概率模型,常用于主题模型。其主要目的是从大量文档中自动提取隐藏的主题。LDA假设每个文档由多个主题组成,每个主题由一组词汇以不同的概率分布组成。LDA模型通过以下步骤工作:
-
文档生成过程:
- 每个文档被视为若干主题的混合。
- 每个主题由一组单词组成,且这些单词以不同的概率出现。
- 通过不断迭代,LDA模型能够推断出这些隐藏的主题及其相关的词汇分布。
-
模型训练:
- LDA模型使用EM算法(Expectation-Maximization)进行参数估计,寻找最优的主题-词分布和文档-主题分布。
-
应用场景:
- LDA模型常用于文本分类、信息检索、推荐系统等领域,能够帮助理解大规模文本数据的潜在结构和主题分布。
二.代码展示(对两会政策的主题提取)
from sklearn.feature_extraction.text import CountVectorizer from sklearn.decomposition import LatentDirichletAllocation import pandas as pd # Load the Excel file with policy names excel_path = '/mnt/data/fkn.xlsx' df_policies = pd.read_excel(excel_path) # Display the first few rows of the dataframe df_policies.head() # Extract policy names policy_names = df_policies['政策名称'].astype(str) # Vectorize the policy names using CountVectorizer vectorizer = CountVectorizer(max_df=0.95, min_df=2, token_pattern=r'[\u4e00-\u9fa5]+') policy_matrix = vectorizer.fit_transform(policy_names) # Fit the LDA model lda = LatentDirichletAllocation(n_components=5, random_state=42) lda.fit(policy_matrix) # Extract topics n_top_words = 10 feature_names = vectorizer.get_feature_names_out() # Function to display topics def display_topics(model, feature_names, n_top_words): topics = {} for topic_idx, topic in enumerate(model.components_): topic_words = [feature_names[i] for i in topic.argsort()[:-n_top_words - 1:-1]] topics[f"Topic {topic_idx + 1}"] = ', '.join(topic_words) return topics # Get the topics topics = display_topics(lda, feature_names, n_top_words) # Convert the topics to a DataFrame df_topics = pd.DataFrame(topics.items(), columns=['Topic', 'Top Words']) # Save the topics to an Excel file topics_output_path = '/mnt/data/policy_topics.xlsx' df_topics.to_excel(topics_output_path, index=False) # Confirm the path of the saved topics topics_output_path