python做什么模型_主题模型初学者指南[Python]

引言

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

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

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

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

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

目录LDA(Latent Dirichlet Allocation) 模型LDA 模型的参数

Python 实现过程数据准备

数据清洗与预处理

计算文档词频矩阵

构建 LDA 模型

拟合结果

建议频数过滤法

标记过滤法

Batch Wise LDA

特征选择

LDA 模型

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

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

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

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

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

LDA 模型的参数

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

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

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

Python 实现

数据准备

以下是一些示例数据:

数据清洗与预处理

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

计算文档词频矩阵

构建 LDA 模型

拟合结果

建议

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

频数过滤法

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

标记过滤法

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

Batch Wise LDA

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

特征选择

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

结语

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

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

***

原文作者:Shivam Bansal

译者:Fibears

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/532053.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python实现队列_Python学习教程:用队列实现栈

接着上一期跟大家说的用栈实现队列,这期的Python学习教程跟大家讲用队列实现栈题目:使用队列实现栈的下列操作:push(x) – 元素 x 入栈pop() – 移除栈顶元素top() – 获取栈顶元素empty() – 返回栈是否为空Implement the following operati…

vue 点击li 中的img 怎么不冒泡_Vue全解

一.Vue实例内存图:1.把Vue的实例命名为vm,vm对象封装了对视图的所有操作包括数据读写、事件绑定、DOM更新2.vm的构造函数是Vue,按照ES6的说法vm所属的类是Vue3.options是new Vue的参数一般称为选项或构造选项1.options里面有什么英文文档搜op…

python布局管理_Python基础=== Tkinter Grid布局管理器详解

本文转自:https://www.cnblogs.com/ruo-li-suo-yi/p/7425307.html 箬笠蓑衣Grid(网格)布局管理器会将控件放置到一个二维的表格里。主控件被分割成一系列的行和列,表格中的每个单元(cell)都可以放置一个控件。注意:不要试图在一个主…

python面向对象类_python面向对象-类和对象

一. 类的定义class类名():代码#定义类classWasher():defwash(self):print("洗衣服")注意:类名要满足标识符命名规则,同时遵循大驼峰命名习惯。二. 创建对象对象名 类名()#创建对象w Washer()#调用方法w.wash() #洗衣服三. selfself指的是调用…

vant部署_vant ui rem配置流程

参考地址 https://www.cnblogs.com/WQLong/p/7798822.html1.下载lib-flexible使用的是vue-cliwebpack,通过npm来安装的npm i lib-flexible --save2.引入lib-flexible在main.js中引入lib-flexibleimport ‘lib-flexible/flexible‘3.设置meta标签通过meta标签&#…

terminal services 找不到_电脑局域网中查看不到其他计算机或无法连接的解决办法...

在办公环境中,电脑经常需要打开网络,进行一些文件共享的操作,但是有时会出现很多无法共享的情况,之前有一篇文章讲过解决办法,今天再来将一下具体无法共享的错误提示和相对应的处理方法,主要有以下几种情况…

如何避免mysql回表查询_mysql如何避免回表查询

《迅猛定位低效SQL?》留了一个尾巴:select id,name where name‘shenjian‘select id,name,sexwhere name‘shenjian‘多查询了一个属性,为何检索过程完全不同?什么是回表查询?什么是索引覆盖?如何实现索引…

python爬虫开发数据库设计入门经典_Python3实现的爬虫爬取数据并存入mysql数据库操作示例...

本文实例讲述了Python3实现的爬虫爬取数据并存入mysql数据库操作。分享给大家供大家参考,具体如下:爬一个电脑客户端的订单。罗总推荐,抓包工具用的是HttpAnalyzerStdV7,与chrome自带的F12类似。客户端有接单大厅,罗列…

python中multiply函数_python中numpy库内multiply()、dot()和 * 三种乘法运算的区别小计...

首先,导入函数包:import numpy as np1.np.multiply()函数:数组:(点对点)对应位置元素相乘矩阵:对应位置元素相乘示例:A np.array([[1,2],[3,4]])B np.array([[1,3],[2,4]])A_mat np.mat(A)B_mat np.mat(B)A_B_mult…

安装python3.6.1_如何安装python3.6.1/

如何在win7下安装Python及配置1、首先,从搜索python官载适合自己电脑python版本。2标右击桌面“计算机”择打开菜单栏中的性”。3、WindowsXP时,在新弹出的属性窗口,选择“高级”->“环境变量”。Windows7是,在新弹出的属性窗口…

编程入门python java和c语言_学习编程适不适合从Python入门?哪种语言更适合入门?...

本文对比了C语言和Python语言,分析它们作为编程入门语言各自的利弊,并给出了我推荐的编程学习道路。我本身已经入门了Python脚本语言,在进阶C语言和JAVA语言后,Python重学就轻松很多,几个小时就拾起了忘记的语法&#…

mysql 备份 一张表_mysql 备份表的一个方法

#--- start# 新建表create table sp2_match_comment_tmp like sp2_match_comment; # 这种方式 外键索引,触发器不会在新表中有,要自己添加LOCK TABLES sp2_match_comment write, sp2_match_comment AS smc2 read, sp2_match_comment_tmp write;# 导出最新…

springmvc的工作原理_SpringMVC工作原理

1 简介SpringMVC框架是以请求为驱动,围绕Servlet设计,将请求发给控制器,然后通过模型对象,分派器来展示请求结果视图。其中核心类是DispatcherServlet,它是一个Servlet,顶层是实现的Servlet接口。2 运行原理…

java逻辑运算符_Java逻辑运算符

Java逻辑运算符Java逻辑运算符包含下面6中符号:&& 与 ;&& 与 前后两个操作数必须都是true才返回true,否则返回false& 不短路与 ; & 不短路与 表达式都会执行到|| 或; || 或 只要两个操作数中有一个是tru…

跨站点请求伪造_十大常见web漏洞——跨站点请求伪造(CSRF)

CSRF介绍什么是CSRF呢?我们直接看例子。https://mp.toutiao.com/profile_v3/graphic/preview?dodelete&pgc_id6829574701128352260这个URL是头条删除pgc_id为6829574701128352260的一篇文章的连接,通过执行这个URL用户就可以删除这篇文章。首先攻击…

java多线程队列_java多线程消费者生产者模式(BlockingQueue 通过阻塞队列实现)

import java.util.concurrent.BlockingQueue;import java.util.concurrent.LinkedBlockingQueue;/*** Created with IntelliJ IDEA.* User: csx* Date: 4/24/14* Time: 9:56 AM* To change this template use File | Settings | File Templates.** 生产者与消费者模型中&#x…

unique函数_C++核心准则C.35:基类的析构函数必须满足的条件

C.35: A base class destructor should be either public and virtual, or protected and nonvirtual基类的析构函数要么是公开的虚函数,要么是保护的非虚函数Reason(原因)To prevent undefined behavior. If the destructor is public, then calling code can atte…

java jta 例子_Java事务处理全解析(八)——分布式事务入门例子(Spring+JTA+Atomikos+Hibernate+JMS)...

在本系列先前的文章中,我们主要讲解了JDBC对本地事务的处理,本篇文章将讲到一个分布式事务的例子。请通过以下方式下载github源代码:本地事务和分布式事务的区别在于:本地事务只用于处理单一数据源事务(比如单个数据库)&#xff0…

python连接redis哨兵_Python redis.sentinel方法代码示例

本文整理汇总了Python中redis.sentinel方法的典型用法代码示例。如果您正苦于以下问题:Python redis.sentinel方法的具体用法?Python redis.sentinel怎么用?Python redis.sentinel使用的例子?那么恭喜您, 这里精选的方法代码示例或…

交换两个数组 差最小 java_如何交换两个等长整形数组使其数组和的差最小(C和java实现)...

1 importjava.util.Arrays;23 /**4 *5 *authorAdministrator6 *7 */8 public classTestUtil {9 private int[] arrysMin null;1011 private int[] arrysMax null;1213 private int matchNum 0;1415 private boolean hasMatched false;1617 /**18 * 返回数组的所有元素的总和…