主题模型初学者指南[Python]

作者: Datartisan数据工匠 | 来源:发表于2016-11-24 10:44 被阅读2711次

    引言

    近年来涌现出越来越多的非结构化数据,我们很难直接利用传统的分析方法从这些数据中获得信息。但是新技术的出现使得我们可以从这些轻易地解析非结构化数据,并提取出重要信息。

    主题模型是处理非结构化数据的一种常用方法,从名字中就可以看出,该模型的主要功能就是从文本数据中提取潜在的主题信息。主题模型不同于其他的基于规则或字典的搜索方法,它是一种无监督学习的方法。

    主题可以由语料库中的共现词项所定义,一个好的主题模型的拟合结果应该如下所示——“health”、“doctor”、“patient”、“hospital”构成医疗保健主题,而“farm”、“crops”、“wheat”则构成农业主题。

    主题模型的适用领域有:文档聚类、信息提取和特征选择。比如,纽约时报利用主题模型的结果来提升文章推荐引擎的功能。许多专家将主题模型应用到招聘领域中,利用主题模型来提取工作要求中的潜在信息,并用模型的拟合结果来匹配候选人。此外,主题模型还被用于处理大规模的非结构化数据,如邮件、顾客评论和用户社交数据。

    32ed

    如果你不熟悉主题模型的话,那么本文将告诉你主题模型的原理以及如何利用Python来构建主题模型。

    目录

    • LDA(Latent Dirichlet Allocation) 模型
      • LDA 模型的参数
    • Python 实现过程
      • 数据准备
      • 数据清洗与预处理
      • 计算文档词频矩阵
      • 构建 LDA 模型
      • 拟合结果
    • 建议
      • 频数过滤法
      • 标记过滤法
      • Batch Wise LDA
    • 特征选择

    LDA 模型

    我们可以用多种方法来处理文本数据,比如 TF 和 IDF 方法。LDA模型是最流行的主题模型,我们接下来将详细介绍 LDA 模型。

    LDA 模型假设文档是由一系列主题构成的,然后再从这些主题中依据相应的概率分布生成词语。给定一个文档数据集,LDA 模型主要用于识别文档中的主题分布情况。

    LDA 模型是一种矩阵分解技术,在向量空间模型中,任何语料都能被表示成一个文档词频矩阵。如下所示,矩阵中包含 N 篇文档,M 个词语,矩阵中的数值表示词语在文档中出现的频率。

    33ed

    LDA 模型将上述的文档词频矩阵转换成两个低维的矩阵—— M1 和 M2。其中 M1 表示文档主题矩阵,M2 表示主题词语矩阵,它们的维度分别是 N*K 和 K*M,K 表示文档中主题的个数,M 表示词语的数量。

    34ed

    需要注意的是,上述两个矩阵提供了文档主题和主题词语的初始分布情况,LDA 模型通过抽样的方法来更新这两个矩阵。该模型通过更新文档中每个词语的主题归属情况来调整模型的参数值 p1 和 p2,其中 $p_1 = p(\frac{topic_t}{document_d})$,$p_2 = p(\frac{word_w}{topic_t})$。经过一系列的迭代计算后,LDA 模型达到收敛状态,此时我们即可得到一组最佳参数值。

    LDA 模型的参数

    超参数 alpha 和 beta —— alpha 表示文档—主题密度,beta 则表示主题—词语密度,其中 alpha 值越大表示文档中包含更多的主题,而更大的 beta 值则表示主题中包含更多的词语。

    主题个数——我们可以利用 KL 散度得分来计算最佳的主题个数,由于这部分内容过于学术,我将不详细介绍这些内容,有兴趣的读者可以参阅相关文献(http://link.springer.com/chapter/10.1007%2F978-3-642-13657-3_43)。

    主题中的词数——这个参数取决于你的真实需求,如果你的目标是提取主题信息,那么你最好选择较多的词语。如果你的目标是提取特征,那么你应该选择较少的词项。

    迭代次数—— LDA 算法的迭代次数

    Python 实现

    数据准备

    以下是一些示例数据:

    35ed

    数据清洗与预处理

    数据清洗是文本建模分析过程中的一个重要环节,在这个过程中我们将移除标点符号、停止词并规整数据集:

    36ed

    计算文档词频矩阵

    37ed

    构建 LDA 模型

    38ed

    拟合结果

    39ed

    建议

    主题模型的拟合结果完全取决于语料库中的特征项,而语料是由一个稀疏的文档词频矩阵所构成的。降低该矩阵的维度可以提升主题模型的拟合结果,根据我的个人经验,主要有以下几个降维方法:

    频数过滤法

    我们可以按照词语的频数进行排序,然后保留频数较高的词语并将频数较低的词语剔除掉。此外我们还可以借助探索性分析的方法来决定如何设置阈值。


    40ed

    标记过滤法

    通常情况下,标记过滤法的效果优于频数过滤法。主题模型通过词语的共现情况来反映主题信息,然而在每个主题中并不是所有的词语都是同等重要的。我们可以将这些无关紧要的词语剔除掉,提升模型的拟合效果。

    41ed

    Batch Wise LDA

    为了提取出文档中最重要的主题信息,我们可以将语料库分割成一系列固定大小的子集。然后我们可以对每个子集数据构建多个 LDA 模型,出现次数最多的主题就是该文档中最重要的主题信息。

    特征选择

    有些时候,我们还可以利用 LDA 模型来选择特征。以文本分类问题为例,如果训练集中包含多个类别的文档,我们可以首先构建 LDA 模型,然后剔除掉不同类别文档中共同出现的主题信息,剩余的特征即为有助于提升文本分类模型的准确率。

    结语

    到此为止,我们已经介绍完主题模型了,我希望本文能够帮你了解如何处理文本数据。如果你想加深对主题模型的理解,那么我建议你最好亲自练习下本文的代码并检查模型的拟合结果。

    如果你觉得本文对你有帮助的话,你可以将此文分享给你的朋友。

    company

    原文链接:https://www.analyticsvidhya.com/blog/2016/08/beginners-guide-to-topic-modeling-in-python/

    原文作者:Shivam Bansal

    译者:Fibears

    相关文章

      网友评论

        本文标题:主题模型初学者指南[Python]

        本文链接:https://www.haomeiwen.com/subject/skltuttx.html