LDA算法并提取这份数据集中各个文档的主题

news2024/12/23 9:30:46

任务描述:现有一份“网易新闻语料”数据集,请尝试用Python或Java实现LDA算法并提取这份数据集中各个文档的主题,并显示出来(可参考下图的输出结果,可网上拷贝代码,但需对算法以及代码有一定的基本了解),其中,附件5中“news.dat”为“网易新闻语料”,包含了2043个文档,附件6为停止词列表(主要用于删除news.dat中的无效词,避免对主题提取的干扰)。

代码如下:

import jieba
import pickle
from gensim import corpora, models

# 1. 准备数据
with open('./Dateset/news.dat', 'r', encoding='utf-8') as f:
    documents = f.readlines()

with open('./Dateset/stopword.txt', 'r', encoding='gbk') as f:
    stopwords = [line.strip() for line in f.readlines()]
#
# 2. 数据预处理
texts = []
for doc in documents:
    words = jieba.lcut(doc) #有关jieba.lcut 参见https://blog.csdn.net/liujingwei8610/article/details/121758179
    words = [word for word in words if word not in stopwords]
    texts.append(words)
# with open("texts.pkl", "wb") as f:
#     pickle.dump(texts, f)
# with open("texts.pkl", "rb") as f:
#     texts = pickle.load(f)
# 3. 构建词袋模型
dictionary = corpora.Dictionary(texts) #字典封装了规范化单词与其整数 ID 之间的映射。 简单来说,将每个字符串(词/词组)映射为不同数字
corpus = [dictionary.doc2bow(text) for text in texts] #dictionary.doc2bow(text) Convert `document` into the bag-of-words (BoW) format = list of `(token_id, token_count)` tuples.

# 4. 训练LDA模型
lda_model = models.LdaModel(corpus, num_topics=10, id2word=dictionary)
# #
# with open("lda_model.pkl", "wb") as f:
#     pickle.dump(lda_model, f)
# with open("lda_model.pkl", "rb") as f:
#     lda_model = pickle.load(f)
# 5. 提取主题
topics = []
for doc in corpus:
    topic = lda_model.get_document_topics(doc,minimum_probability = 0.000001) #minimum_probability 避免概率过低,取不到足够的主题词
    topics.append(topic)

# 6. 显示主题结果
print("10个文档的主题分布")
topicList=[]
for i, topic in enumerate(topics):
    print(f"第 {i+1}个文档的前10个主题:")
    for t in topic:
        topicList.append(t[1])
    print(topicList)
    topicList.clear()
print()

完成一轮
for doc in documents:
    words = jieba.lcut(doc) #有关jieba.lcut 参见https://blog.csdn.net/liujingwei8610/article/details/121758179
    words = [word for word in words if word not in stopwords]
    texts.append(words)
texts内容如下:

完成 corpus = [dictionary.doc2bow(text) for text in texts] 后如下图。转换结果相当于每篇文章中的词频率统计。
说明:dictionary.doc2bow(text) Convert `document` into the bag-of-words (BoW) format = list of `(token_id, token_count)` tuples.

lda_model = models.LdaModel(corpus, num_topics=10, id2word=dictionary)
这里使用的Lda模型为发表于NIPS的论文:Online Learning for Latent Dirichlet Allocation
这里做简单介绍:  传统的LDA模型参见: 一文详解LDA主题模型 - 知乎 (zhihu.com)

《Online Learning for Latent Dirichlet Allocation》是一篇关于在线学习的隐含狄利克雷分配(Latent Dirichlet Allocation,简称LDA)的论文。
     该论文主要介绍了一种在线学习的方法,用于在大规模文本数据集上进行LDA模型的训练和推断。传统的LDA算法需要将整个数据集加载到内存中进行批量处理,而在线学习的方法可以逐步处理数据,适用于数据量大、不断增长的场景。
     论文中提出了一种基于变分推断的在线LDA算法,通过引入一些技巧和近似方法,实现了高效的在线学习和参数更新。该方法可以在不断到达新文档时,动态地更新模型参数,同时保持对历史文档的推断结果。
     论文还介绍了在线LDA算法的推导过程、参数更新规则以及实验结果。通过在多个大规模文本数据集上进行实验,论文验证了在线LDA算法的有效性和可扩展性,对于处理大规模文本数据集和动态数据流具有重要的意义。

主题提取部分结果如下: 

10个文档的主题分布
第 1个文档的前10个主题:
[0.01087394, 0.00019692296, 0.7152148, 0.00019692726, 0.00019692296, 0.00019694411, 0.00019694012, 0.15501586, 0.00019697643, 0.11771379]
第 2个文档的前10个主题:
[0.85160214, 6.795004e-05, 0.009034262, 6.7951565e-05, 6.795004e-05, 6.795801e-05, 6.795616e-05, 0.07648344, 0.044096787, 0.018443592]
第 3个文档的前10个主题:
[0.00025585885, 0.000102130005, 0.00010215806, 0.0001021321, 0.000102130005, 0.000102141545, 0.00010213848, 0.005841021, 0.86980826, 0.12348203]
第 4个文档的前10个主题:
[0.0006572597, 0.0006570946, 0.00065728865, 0.00065710756, 0.0006570946, 0.0006571689, 0.0006571418, 0.00065724866, 0.0006572691, 0.9940853]
第 5个文档的前10个主题:
[0.09089063, 5.748639e-05, 0.42282772, 5.748767e-05, 5.748639e-05, 5.7492874e-05, 5.749149e-05, 0.14581433, 0.03272865, 0.30745125]
第 6个文档的前10个主题:
[0.01268742, 4.7202997e-05, 0.2854256, 4.7204012e-05, 4.7202997e-05, 4.720842e-05, 4.720712e-05, 0.36365467, 0.04033447, 0.29766187]
第 7个文档的前10个主题:
[0.004294038, 6.870105e-05, 0.08180204, 6.8702626e-05, 6.870105e-05, 6.87093e-05, 6.870766e-05, 0.7040278, 6.871957e-05, 0.2094639]
第 8个文档的前10个主题:
[0.6133319, 0.0004353154, 0.23381416, 0.00043532476, 0.0004353154, 0.0004353643, 0.0004353534, 0.0004354392, 0.0004440389, 0.14979775]
第 9个文档的前10个主题:
[0.00048655766, 0.00048641532, 0.40117988, 0.00048642544, 0.00048641532, 0.0004864658, 0.00048645603, 0.521131, 0.00048655254, 0.07428386]
第 10个文档的前10个主题:
[0.017286241, 6.7313216e-05, 0.031750664, 6.7314664e-05, 6.7313216e-05, 6.732086e-05, 6.7319226e-05, 0.45735896, 0.012209379, 0.48105815]
第 11个文档的前10个主题:
[0.00032338154, 0.0003232927, 0.7388656, 0.00032329932, 0.0003232927, 0.00032332516, 0.00032331893, 0.074141674, 0.00032338157, 0.18472938]

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

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

相关文章

《从零开始的Java世界》01基本程序设计

《从零开始的Java世界》系列主要讲解Javase部分,从最简单的程序设计到面向对象编程,再到异常处理、常用API的使用,最后到注解、反射,涵盖Java基础所需的所有知识点。学习者应该从学会如何使用,到知道其实现原理全方位式…

Python 逢七拍手小游戏1.0

"""逢七拍手游戏介绍:逢七拍手游戏的规则是:从1开始顺序数数,数到有7,或者是7的倍数时,就拍一手。例如:7、14、17......70......知识点:1、循环语句for2、嵌套条件语句if/elif/e…

【前段基础入门之】=>HTML结构进阶【列表;表格;表单】

前言 在上一章节中,我们学习了讲述了 html 中的一些常用排版标签,以及一些文本标签和超链接等相关知识。本章节将重点给大家带来 HTML 中【列表,表格,表单】的使用讲解。 目录 列表有序列表无序列表自定义列表 表格表格的基本结构…

在项目中使用Service Worker 与 PWA

小册 这是我整理的学习资料,非常系统和完善,欢迎一起学习 现代JavaScript高级小册 深入浅出Dart 现代TypeScript高级小册 linwu的算法笔记📒 引言 最近next项目有使用pwa技术,使用起来也不复杂,目前浏览器的兼容…

【hadoop3.x】一 搭建集群调优

一、基础环境安装 https://blog.csdn.net/fen_dou_shao_nian/article/details/120945221 二、hadoop运行环境搭建 2.1 模板虚拟机环境准备 0)安装模板虚拟机,IP 地址 192.168.10.100、主机名称 hadoop100、内存 4G、硬盘 50G 1)hadoop100…

MongoDB基础详解

一、MongoDB概述 MongoDB 是一个基于 分布式文件存储 的开源 NoSQL 数据库系统,由 C 编写的。MongoDB 提供了 面向文档 的存储方式,操作起来比较简单和容易,支持“无模式”的数据建模,可以存储比较复杂的数据类型,是一…

MySQL的general日志

起因是一个客户的MySQL数据的data目录下会生成一个 名为ubuntu.log的日志且文件占用空间极大,平均每2周500G,所以才产生了处理该问题的想法。后来查询了相关资料其实就是一般日志开启了,但是又未指定其路径及名称所以就会一头雾水。 MySQL的g…

关于华为笔记本谷歌浏览器(chrome)默认启动页为360搜索的解决方法

一、简介 好久没打开谷歌浏览器,近期发现谷歌浏览器的启动是360搜素,现象比较常见,一开始以为是被各种病毒或插件拦截,经过很多尝试方法: 修改浏览器启动页设置【无效】修改快捷方式的“目标位置”属性【无效】修改&…

MySQL:码包安装mysql(5.6.51)

我们去下载mysql源码安装包和cmake包 安装mysql的时候需要使用到cmake,其次我们还要使用yum安装一些环境 yum -y install ncurses-devel gcc-c gcc openssl* perl* 下载mysql源码包 http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.51.tar.gzhttp://mirrors.s…

WebRTC之丢包重传协议

丢包处理可以使用FEC前向纠错、NACK丢包重传。上一篇文章咱们介绍过前向纠错,现在来探讨丢包重传。首先是接收端发送基于RTCP反馈的请求,发送端收到请求后重传指定packet包。 1、重传包格式 重传包的格式由RTP头、OSN、原始payload数据组成。OSN表示原…

Prometheus+Grafana实现监控报警

文章目录 一、PrometheusGrafana实现监控报警1.1 各项服务端口1.2 说明 二、部署2.1 展示 一、PrometheusGrafana实现监控报警 Prerequired K8s集群 1.1 各项服务端口 Service版本DescriptionPortNode-exporter1.6.1采集机器的各项监控指标9100Pushgatewayv1.6.2可手动push…

goadmin 学习笔记

1.安装命令行 Following three steps to run it. Note: now you can quickly start by doing like this. $ go install github.com/GoAdminGroup/admlatest $ mkdir new_project && cd new_project $ adm init Or (use adm whose version higher or equal than v1.…

给yarn/npm包管理设置代理加速nodejs依赖下载的方法

由于墙内网络干扰屏蔽国外网络的原因&#xff0c;在国内下载nodejs依赖是非常缓慢的。 所以为了解决这个问题&#xff0c;必须设置代理&#xff0c;具体方法如下&#xff1a; NPM设置代理&#xff1a; npm config set proxy<http_proxy> NPM删除代理&#xff1a; npm c…

Zookeeper-集群介绍与核心理论

Zookeeper集群 4.Zookeeper集群4.1) 介绍4.2) 核心理论 4.Zookeeper集群 4.1) 介绍 Leader选举&#xff1a; Serverid&#xff1a;服务器ID。比如有三台服务器&#xff0c;编号分别是1,2,3。编号越大在选择算法中的权重越大。Zxid&#xff1a;数据ID。服务器中存放的最大数据…

【力扣每日一题】2023.9.24 LRU缓存

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 这又是一道程序设计类的题目&#xff0c;要我们实现LRU缓存的get和put操作。 简单说一下LRU缓存是什么&#xff0c;在我看来就是实用主义…

2023年kali linux安装中文输入法

apt-get install fcitx 安装输入法框架 apt-get install fcitx-googlepinyin 安装谷歌输入法 reboot &#xff0c;重启系统重启之后右上有个小键盘点击里面的配置 添加google输入法 把Google pinyin上移置顶 验证输入法【CtrlSpace 切换输入法】

vue3 - Element Plus暗黑模式适配、切换及自定义颜色

GitHub Demo 地址 在线预览 Element Plus 2.2.0 版本开始支持暗黑模式&#xff0c;启用方式参考 Element Plus 官方文档 - 暗黑模式 demo通过Element Plus和VueUse 的 useDark 方法实现具有自动数据持久性的响应式暗黑模式。 安装 npm install element-plus --save npm in…

【owt】vs2022 + v141 : 查看WINDOWSSDKDIR

confmfc改为vs2022 + v141 构建 去掉这几个boost库,一样可以链接ok libboost_system-vc141-mt-sgd-x32-1_67.lib libboost_date_time-vc141-mt-sgd-x32-1_67.lib libboost_random-vc141-mt-sgd-x32-1_67.libSDK不在2022或者2017 里面? WINDOWSSDKDIR 在哪里? ##

设计模式之观察者(发布订阅)模式

观察者模式定义了一种一对多的依赖关系&#xff0c;让多个观察者对象同事监听某一个主题对象。这个主题对象在状态发生变化时&#xff0c;会通知所有观察者对象&#xff0c;使它们能够自动更新自己 class Program{static void Main(string[] args){ConcreteSubject concreteSu…

[管理与领导-101]:IT人对高情商的误解?什么是高情商?

目录 前言&#xff1a; 一、人的心理架构 1.1 心理的基本过程 1.2 心理架构 1.3 冰山模型 1.4 IT人不同角度看人的能力层次 二、什么是智商和专业技能 2.1 什么是智商 2.2 什么是专业技能&#xff1a;表层 2.3 IT技术人员的智商和专业技能的重要性 2.4 IT技术人员的…