文档语料库的主题模型提取

在自然语言处理领域,非负矩阵分解NMF)和潜在狄利克雷分配(LDA)是两种常用的技术,用于从文档语料库中提取主题结构。这些模型可以帮助理解文档集合中的主题分布,以及每个主题中的关键词汇。本文将介绍如何在一个文档语料库上应用这两种技术,并展示如何使用Python和scikit-learn库来实现这些模型。

非负矩阵分解NMF)是一种将文档-词频矩阵分解为两个非负矩阵的乘积的方法。这种方法有两个不同的目标函数:Frobenius范数和广义Kullback-Leibler散度。后者等同于概率潜在语义索引。在本例中,将使用默认参数(n_samples / n_features / n_components),以确保示例在几十秒内可以运行。然而,如果增加问题的维度,需要注意NMF的时间复杂度是多项式的,而LDA的时间复杂度与样本数量和迭代次数成正比。

首先,需要加载数据集并提取特征。对于NMF,将使用TF-IDF特征,而对于LDA,将使用TF(词频)特征。TF-IDF是一种统计方法,用以评估一个词语对于一个文件集或一个语料库中的其中一份文件的重要性。TF代表词频,而IDF则是逆文档频率。通过这种方式,可以过滤掉一些无用的词汇,例如常见的英语单词、只出现在一个文档中的词或至少出现在95%文档中的词。

接下来,将使用Python代码来实现这些步骤。首先,需要导入必要的库,包括time、matplotlib.pyplot、sklearn.datasets、sklearn.decomposition和sklearn.feature_extraction.text。然后,将定义一些参数,如样本数量、特征数量、组件数量、顶级词汇数量和批次大小。还定义了一个函数plot_top_words,用于绘制每个主题的顶级词汇的条形图。

from time import time import matplotlib.pyplot as plt from sklearn.datasets import fetch_20newsgroups from sklearn.decomposition import NMF, LatentDirichletAllocation, MiniBatchNMF from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer n_samples = 2000 n_features = 1000 n_components = 10 n_top_words = 20 batch_size = 128 init = "nndsvda" def plot_top_words(model, feature_names, n_top_words, title): fig, axes = plt.subplots(2, 5, figsize=(30, 15), sharex=True) axes = axes.flatten() for topic_idx, topic in enumerate(model.components_): top_features_ind = topic.argsort()[-n_top_words:] top_features = feature_names[top_features_ind] weights = topic[top_features_ind] ax = axes[topic_idx] ax.barh(top_features, weights, height=0.7) ax.set_title(f"Topic {topic_idx + 1}", fontdict={"fontsize": 30}) ax.tick_params(axis="both", which="major", labelsize=20) for i in "top right left".split(): ax.spines[i].set_visible(False) fig.suptitle(title, fontsize=40) plt.subplots_adjust(top=0.90, bottom=0.05, wspace=0.90, hspace=0.3) plt.show()

在加载数据集并提取TF-IDF特征后,将使用NMF模型来拟合数据。首先使用Frobenius范数作为目标函数,然后使用广义Kullback-Leibler散度。对于LDA模型,将使用TF特征,并设置最大迭代次数为5。在每个模型拟合完成后,将调用plot_top_words函数来可视化每个主题的顶级词汇。

通过这种方式,可以直观地看到每个主题中的关键词汇,以及这些词汇的权重。这有助于理解文档语料库中的主题结构,以及不同主题之间的关系。此外,这些模型还可以用于其他自然语言处理任务,如文档分类、情感分析和信息检索。

相关文章
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485