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

https://www.jianshu.com/p/04e3bf995b26

 
 

引言

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

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

主题可以由语料库中的共现词项所定义,一个好的主题模型的拟合结果应该如下所示——“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

作者:Datartisan数据工匠 链接:https://www.jianshu.com/p/04e3bf995b26 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

要成功地进行Xilinx Zynq-7000 SoC的集成开发,你将需要熟悉TLZ7xH-EVM开发板的硬件特性以及相应的软件编程。在此,我们推荐参考以下资源《创龙TLZ7xH-EVM开发板:Xilinx Zynq-7000双核Cortex-A9+Kintex-7》,这将为你的项目提供详尽的支持。 参考资源链接:[创龙TLZ7xH-EVM开发板:Xilinx Zynq-7000双核Cortex-A9+Kintex-7](https://wenku.csdn.net/doc/80nyorov3y) 首先,在硬件编程方面,你需要了解开发板的硬件架构和资源。TLZ7xH-EVM开发板集成了双核ARM Cortex-A9处理器和Kintex-7 FPGA。你应该首先阅读Zynq-7000开发板规格书,了解各个硬件接口和信号引脚的详细信息。根据你的项目需求,进行硬件资源配置,包括配置处理器的时钟频率、电源管理、存储接口以及外设接口等。 其次,在软件编程方面,Xilinx提供了Vivado和SDK套件,用于硬件逻辑设计和软件应用开发。在Vivado中,你需要完成硬件平台的设计和生成,包括创建项目、综合、实现和生成比特流文件。完成硬件设计后,你可以通过Xilinx SDK进行软件编程,创建应用程序和驱动,以与硬件平台交互。编写代码时,你需要参考开发板提供的Demo程序,这些示例程序展示了如何加载和运行用户代码。 确保你具备相关的硬件编程经验,以及掌握至少一种用于嵌入式开发的编程语言,如C/C++。在软件开发过程中,你还需要了解操作系统的选择和配置,比如使用PetaLinux等。 集成开发成功的关键在于硬件和软件的紧密配合,这通常需要进行多次迭代和调试。使用TLZ7xH-EVM开发板上的调试接口,比如JTAG和串口,进行代码调试和性能分析。 在开发过程中,不妨利用创龙科技提供的技术支持和服务,及时解决开发中遇到的问题。此外,你可以利用公司提供的增值服务平台,如定制化开发、培训等,进一步提升开发效率和产品品。 综上所述,通过阅读相关规格书,使用Vivado和SDK进行硬件设计和软件编程,结合创龙科技的技术支持,你将能够高效地完成Zynq-7000 SoC的集成开发任务。对于那些希望深入学习和探索更多高级功能和技巧的读者,我们再次推荐《创龙TLZ7xH-EVM开发板:Xilinx Zynq-7000双核Cortex-A9+Kintex-7》,这份资料不仅帮助你入门,还将引导你掌握更深层次的知识。 参考资源链接:[创龙TLZ7xH-EVM开发板:Xilinx Zynq-7000双核Cortex-A9+Kintex-7](https://wenku.csdn.net/doc/80nyorov3y)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值