利用gensim进行LDA主题模型实验
第一部分:基于语料的LDA实验
前文所述,我们已经获得了经过分词的纯文本语料库.zh.seg.utf.txt。经过去除停止词的处理后,我们得以进行LDA实验。
gensim库同样提供了直接对压缩包进行抽取并保存为稀疏矩阵的脚本,名为make_。通过在bash环境中运行相关命令,我们可以轻松查看其使用方法。考虑到运行时间可能会较长,具体详情可查阅gensim官方网站。运行结束后,我们会得到以mm后缀命名的Matrix Market格式保存的稀疏矩阵。
接着,我们利用tfidf.mm以及wordids.txt文件来训练LDA模型。在训练过程中,我们指定参数num_topics=100,即训练模型将识别出100个主题。通过print_topics和print_topic函数,我们可以查看各主题下的词分布情况。我们还能够通过save/load功能进行模型的保存和加载,以备后续使用。
对于新的文档,经过转换为bag-of-word形式后,即可进行主题预测。模型的差异主要源于主题数量的设定以及语料本身的特点。由于语料为全领域语料,其主题分布并不明显,且此次实验中使用的语料未进行停止词去除处理,所得结果虽差强人意,但仍有其价值。
第二部分:基于Sogou新闻语料的LDA实验
Sogou实验室为我们提供了丰富的中文语料下载资源,其中包括全网新闻数据SogouCA。该数据集涵盖了2012年6月—7月期间国内、国际、体育、社会、娱乐等18个频道的新闻数据,提供了URL和正文信息。
在数据处理阶段,由于数据为Ascii格式,容易出现乱码情况,我们使用iconv命令将其转成utf8编码。由于XML文件处理需要顶级tag,我们使用sed命令在文件首行前插入标签,在尾行后插入标签。
为防止出现XMLSyntaxError: internal error: Huge input lookup错误,我们设置XMLParser参数huge_tree=True。经过preprocess.py脚本的处理,我们得到train训练语料。分词并去除停止词后,即可开始LDA实验。
实验结果及应用
经过长时间的训练,我们可以使用ldamulticore来进行加速。整体效果不错,从结果中可以看出,2008年的新闻主题主要围绕、、经济等方面。得到的LDA模型可用于主题预测,给定新的文档可以预测其主题分布,从而可用于文档分类。在训练文档中,每个词都会被分配一个主题。通过将这种主题信息用于paper的Topic Word Embedding,我们能在一定程度上解决一词多义的问题。