csdn博客推荐系统实战-5文本聚类-话题模型LDA

2023-10-27

话题模型topic model是自然语言处理领域里面热门的一个技术,可以用来做很多的事情,例如相似度比较,关键词提取,分类,还有就是具体产品业务上的事了,总之可以干很多的事情。今天不会讲LDA模型的很多细节和原理,没有满屏的数学公式,只讲一讲LDA模型是个什么东西,简单的原理,用什么技术实现的LDA,以及LDA能做什么开发和LDA在实现中的一些问题。

什么是主题

对于一篇新闻报道,看到里面讲了昨天NBA篮球比赛,用大腿想都知道它的主题是关于体育的。为什么大腿会那么聪明呢?这时大腿会回答因为里面出现了“科比”、“湖人”等等关键词。那么好了,我们可以定义主题是一种关键词集合,如果另外一篇文章出现这些关键词,我们可以直接判断他属于某种主题。但是,亲爱的读者请你想想,这样定义主题有什么弊端呢?按照这种定义,我们会很容易给出这样的条件:一旦文章出现了一个球星的名字,那么那篇文章的主题就是体育。可能你马上会骂我在瞎说,然后反驳说不一定,文章确实有球星的名字,但是里面全部在讲球星的性丑闻,和篮球没半毛钱关系,此时主题是娱乐还差不多。所以一个词不能硬性地扣一个主题的帽子,如果说一篇文章出现了某个球星的名字,我们只能说有很大概率他属于体育的主题,但也有小概率属于娱乐的主题。于是就会有这种现象:同一个词,在不同的主题背景下,它出现的概率是不同的。并且我们都可以基本确定,一个词不能代表一种主题,那么到底什么才是主题呢?耐不住性子的同学会说,既然一个词代表不了一种主题,那我就把所有词都用来代表一种主题,然后你自己去慢慢意会。没错,这样确实是一种完全的方式,主题本来就蕴含在所有词之中,这样确实是最保险的做法,但是你会发现这样等于什么都没做。老奸巨猾的LDA也是这么想的,但他狡猾之处在于它用非常圆滑手段地将主题用所有词汇表达出来。怎么个圆滑法呢?手段便是概率。LDA认为天下所有文章都是用基本的词汇组合而成,此时假设有词库V={v1,v2,....,vn},那么如何表达主题k呢?LDA说通过词汇的概率分布来反映主题!多么狡猾的家伙。

我们举个例子来说明LDA的观点。假设有词库{科比,篮球,足球,奥巴马,希拉里,克林顿}

假设有两个主题{体育,政治}

LDA说体育主题:{科比:0.3,篮球:0.3,足球:0.3,奥巴马:0.03,希拉里:0.03,克林顿:0.04}(数字代表某个词的出现概率),

而政治主题: {科比:0.03,篮球:0.03,足球:0.04,奥巴马:0.3,希拉里:0.3,克林顿:0.3}

LDA就是这样说明什么是主题的。

文章在讲什么

给你一篇文章读,然后请你简要概括文章在讲什么,你可能会这样回答:80%在讲政治的话题,剩下15%在讲娱乐,其余都是废话。这里大概可以提炼出三种主题:政治,娱乐,废话。对于某一篇文章,很有可能里面不止在讲一种主题,而是几种主题混在一起的。

LDA是一种可以从文档中提炼主题模型,文章和主题之间并不一定是一一对应的,也就是说,文章可以有多个主题,一个主题可以在多篇文章之中。

假设现在有K个主题,有M篇文章,那么每篇文章里面不同主题的组成比例应该是怎样的呢?由于上一小节我们知道不能硬性的将某个词套上某个主题,那么这里我们当然不能讲某个主题套在某个文章中,也就是有这样的现象:同一个主题,在不同的文章中,他出现的比例(概率)是不同的,文档和主题之间的关系和主题和词汇的关系是多么惊人的类似!

举个例子,假设现在有两篇文章:《体育快讯》,《娱乐周报》

有三个主题 体育,娱乐,废话

那么《体育快讯》是这样的:[废话,体育,体育,体育,体育,....,娱乐,娱乐]

《娱乐周报》是这样的:[废话,废话,娱乐,娱乐,娱乐,....,娱乐,体育]

一篇文章在讲什么,通过不同的主题比例就可以概括得出。

文章是如何生成的

LDA认为,每个主题会对应一个词汇分布,而每个文档会对应一个主题分布,那么一篇文章是如何被写出来的呢?读者可能会说靠灵感+词汇。LDA脸一沉,感觉完蛋,灵感是什么玩意?LDA苦思冥想,最后没办法,想了个馊主意,它说 灵感=随机

这也是没办法中的办法。因此对于某一篇文章的生产过程是这样的:

  1. 确定主题和词汇的分布
  2. 确定文章和主题的分布
  3. 随机确定该文章的词汇个数N
  4. 如果当前生成的词汇个数小于N执行第5步,否则执行第6步
  5. 由文档和主题分布随机生成一个主题,通过该主题由主题和词汇分布随机生成一个词,继续执行第4步
  6. 文章生成结束

只要确定好两个分布(主题与词汇分布,文章与主题分布),然后随机生成文章各个主题比例,再根据各个主题随机生成词,词与词之间的顺序关系被彻底忽略了,这就是LDA眼中世间所有文章的生成过程!聪明的读者肯定觉得LDA完全就是一个骗子,这样认为文章的生成未免也太过天真了吧。然而事实就是如此,这也是为什么说LDA是一个很简单的模型。幸好我们这是用LDA来做主题分析,而不是用来生成文章,而从上上节的分析我们知道,主题其实就是一种词汇分布,这里并不涉及到词与词的顺序关系,所以LDA这种BOW(bag of words)的模型也是有它的简便和实用之处的。

Latent Dirichlet Allocation(LDA)隐含主题模型

LDA是一种三层贝叶斯模型,三层分别为:文档层、主题层和词层。

该模型基于如下假设:
1)整个文档集合中存在k个互相独立的主题;
2)每一个主题是词上的多项分布;
3)每一个文档由k个主题随机混合组成;
4)每一个文档是k个主题上的多项分布;
5)每一个文档的主题概率分布的先验分布是Dirichlet分布;

6)每一个主题中词的概率分布的先验分布是Dirichlet分布。

文档的生成过程如下:
1)对于文档集合M,从参数为β的Dirichlet分布中采样topic生成word的分布参数φ;
2)对于每个M中的文档m,从参数为α的Dirichlet分布中采样doc对topic的分布参数θ;

3)对于文档m中的第n个词语W_mn,先按照θ分布采样文档m的一个隐含的主题Z_m,再按照φ分布采样主题Z_m的一个词语W_mn。

LDA数学分析

省略,网上有很多讲数学分析的,有兴趣的去看看吧,满屏的数学公式,那酸爽,味道好极了

https://blog.csdn.net/aws3217150/article/details/53840029

https://blog.csdn.net/baidu_18607797/article/details/40511755

https://blog.csdn.net/sinat_26917383/article/details/52233341

LDA模型能做什么

在NLP中用处还很大的。

自动发现大量文本中的规律性。首先概率主题模型提出一个“主题”的概念,可以自动发现主题,并且将主题相关的词语列出来。比如对大量科学论文进行LDA建模,可以将生物相关的主题发掘出来,并且给出主题词如“动物”、“植物”、“基因”。并且这个发现过程是非监督的,不需要人工干预的,很适合处理海量网络文本信息。

降维。对于一篇文档如果很长的话,比如有几万字,如果我们使用文档的词语作为信息处理的单元,显然信息量太大,相当于一个上万维的向量,必须要进行信息维度的降维。而LDA主题模型正是一个良好的降维模型。比如我们将主题定为100个,对文档进行建模,就可以将一篇文档的信息降成100维。

衡量文档之间的语义相似性。对于一篇文档,我们求出来的主题分布可以看作是对它的一个抽象表示。对于概率分布,我们可以通过一些距离公式(比如KL距离)来计算出两篇文档的语义距离,从而得到它们之间的相似度。

多义词。回想最开始的例子,“苹果”可能是水果,也可能指苹果公司。通过我们求出来的“词语-主题”概率分布,我们就可以知道“苹果”都属于哪些主题,就可以通过主题的匹配来计算它与其他文字之间的相似度。

排除文档噪音。一般来说,文档中的噪音往往处于次要主题中,我们可以把它们忽略掉,只保持文档中最主要的主题。

LDA开源库

1.Gensim:Python,实现模型,LDA,Dynamic Topic Model,Dynamic Influence Model,HDP,LSI,Random Projections,深度学习的word2vec,paragraph2vec。

官网地址:http://radimrehurek.com/gensim/index.html 

github代码地址:https://github.com/piskvorky/gensim

2.Shuyo:Python,实现模型,LDA,Dirichlet Process Gaussian Mixture Model,online HDP,HDPLDA,Interactive Topic Model,Labeled LDA

github代码地址:https://github.com/shuyo/iir/tree/master/lda
3.arongdari:Python,实现模型,LDA,Correlated Topic Model,Relational topic model,Author-Topic model,HMM-LDA,Discrete Infinite logistic normal,Supervised Topic Model,Hierarchical Dirichlet process,Hierarchical Dirichlet scaling process
地址:https://github.com/arongdari/python-topic-model
4.ahmaurya:Python,实现模型,Topic Over Time
github代码地址:https://github.com/ahmaurya/topics_over_time
5.Blei实验室的代码:Python,实现模型,online lda,online HDP,turbo topic model,topic model visualization engine,实现语言,C,实现模型,correlated topic model,discrete infinite logistic normal,HLDA,lda,实现语言C++,实现模型,ctr,class-slda,Dynamic Topic model and the influence model,实现语言R,实现模型 lda
github代码地址:http://www.cs.columbia.edu/~blei/topicmodeling_software.html

LDA使用注意

1.LDA不是万能的,只用LDA解决问题,要看数据样本数据样本质量好,LDA效果就好,反之就不好,切记切记!

2.要训练一个主题模型用于预测,数据量要足够大,足够大,够大,大

3.想要主题划分的更细或突出专业主题,需要专业的词典

4.主题数的确定没有特别突出的方法,更多需要经验!

5.文章内容要长,不长的话也要想办法加长,不适合短文本,非要做的话用,twitter lda!

6.应用场景要靠谱。分类等任务还是要有监督的,不太适合无监督的方法。基于内容的推荐应用,LDA是OK的!

7.如果LDA效果不好,可以看看LDA各种衍生的算法模型,没准会有惊喜!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

csdn博客推荐系统实战-5文本聚类-话题模型LDA 的相关文章

  • 主题模型--LSA

    利用SVD分解 行代表单词在每篇文档中出现的次数 xff0c 列代表一篇文档中出现词语的分布 矩阵A选取其中特征值较大的r个并排序 xff0c 这样USVT就可以近似表示矩阵A 对于矩阵U xff0c 每一列代表一个潜语义 xff0c 这个
  • 基于LDA的文本主题聚类Python实现

    LDA简介 LDA xff08 Latent Dirichlet Allocation xff09 是一种文档主题生成模型 xff0c 也称为一个三层贝叶斯概率模型 xff0c 包含词 主题和文档三层结构 所谓生成模型 xff0c 就是说
  • Linear Discriminant Analysis(LDA)

    好久没有整理最近的一些算法了 xff0c 今天趁着跑数据的过程整理一下LDA算法 该算法在很多地方都有使用 xff1a 语音识别 xff0c 说话人识别等等 xff0c 那么今天在这里就为大家详细介绍一下 xff0c 最终把matlab代码
  • 推荐系统实战5——EasyRec 在DSSM召回模型中添加负采样构建CTR点击平台

    推荐系统实战5 EasyRec 在DSSM召回模型中添加负采样构建CTR点击平台 学习前言 EasyRec仓库地址 DSSM实现思路 一 DSSM整体结构解析 二 网络结构解析 1 Embedding层的构建 2 网络层的构建 3 相似度计
  • 学习Topic Model(主题模型)--Latent Dirichlet Allocation(LDA) 的一些摘要

    主题模型是文本挖掘领域非常流行的方法 在文档分类 聚类中都 有大量的应用 实际上 LDA的训练过程很简单 只需要简单的计算就可以得到结果 Blei 2003 原始的LDA论文中使用的是变分法推导 用EM算法求解 方法比较难以理解 并且EM算
  • 【毕业设计】基于Spark的海量新闻文本聚类(新闻分类)

    文章目录 0 前言 1 项目介绍 2 实现流程 3 开发环境 4 java目录功能介绍 5 scala目录功能介绍 5 1 求TF IDF 5 2 调用K means模型 5 3 评价方式 6 聚类结果 7 最后 0 前言 Hi 大家好 这
  • 【自然语言处理】主题建模评估:连贯性分数(Coherence Score)

    主题建模评估 连贯性分数 Coherence Score 1 主题连贯性分数 主题连贯性分数 Coherence Score 是一种客观的衡量标准 它基于语言学的分布假设 具有相似含义的词往往出现在相似的上下文中 如果所有或大部分单词都密切
  • Latent Dirichlet Allocation(LDA)主题模型理论

    LDA是给文本建模的一种方法 属于生成模型 生成模型是指该模型可以随机生成可观测的数据 LDA可以随机生成一篇由N个主题组成的文章 通过对文本的建模 可以对文本进行主题分类 判断相似度等 LDA通过将文本映射到主题空间 即认为一篇文章有若干
  • 基于机器学习的情绪识别算法matlab仿真,对比SVM,LDA以及决策树

    目录 1 算法理论概述 2 部分核心程序 3 算法运行软件版本 4 算法运行效果图预览 5 算法完整程序工程 1 算法理论概述 情绪识别是一种重要的情感分析任务 旨在从文本 语音或图像等数据中识别出人的情绪状态 如高兴 悲伤 愤怒等 本文介
  • 推荐系统实战2——EasyRec 推荐框架环境配置

    推荐系统实战2 EasyRec 推荐框架环境配置 学习前言 先验条件 EasyRec仓库地址 EasyRec环境配置 一 EasyRec的下载 二 EasyRec的初始化 三 EasyRec的安装 四 一些额外的情况 学习前言 EasyRe
  • gensim TransformedCorpus数据高效转换为数组

    是否有比下面的逐行方法更直接或更有效的方法将主题概率数据从 gensim interfaces TransformedCorpus 对象获取到 numpy 数组 或者 pandas 数据帧 from gensim import models
  • Gensim LDA 中的主题明智文档分布

    python 有没有办法映射属于某个主题的文档 例如 主要是 主题 0 的文档列表 我知道有多种方法可以列出每个文档的主题 但我该如何反过来呢 Edit 我正在使用以下 LDA 脚本 doc set for file in files ne
  • 文本聚类主题建模效率低下

    我尝试使用 LDA 进行文本聚类 但它没有给我不同的聚类 下面是我的代码 Import libraries from gensim import corpora models import pandas as pd from gensim
  • 构造 ClassDict 的预期参数为零(对于 pyspark.ml.linalg.SparseVector)

    我正在努力创建一个 LDA 模型 这是我到目前为止所做的 创建一个一元组并将数据帧转换为 RDD 基于这个帖子 https databricks prod cloudfront cloud databricks com public 402
  • python中使用numpy数组出现内存错误

    我收到此代码的以下错误 model lda LDA n topics 15 n iter 50 random state 1 model fit X topic word model topic word print type topic
  • 使用 Python 可视化 LDA 模型

    我有一个 LDA 模型 包含 10K 文档中 10 个最常见的主题 现在它只是对每个主题的单词及其相应概率分布的概述 我想知道 python 是否有可用的东西来可视化这些主题 pyLDAvis https pypi python org p
  • 使用gensim加载LdaMallet模型并对未见过的文档进行分类的正确方法

    在我的项目中 我使用Python库gensim https radimrehurek com gensim models wrappers ldamallet html用于主题建模 文本提取 我尝试加载经过训练的 LdaMallet 模型来
  • Gensim LDA 主题分配

    我希望使用 LDA 将每个文档分配给一个主题 现在我意识到您得到的是 LDA 主题的分布 然而 正如您从下面最后一行看到的 我将其分配给最有可能的主题 我的问题是这样的 我必须跑lda corpus 有点第二次为了获得这些主题 是否有其他内
  • 从 R 主题模型中的 DocumentTermMatrix 中删除空文档?

    我正在使用 R 中的 topicmodels 包进行主题建模 我正在创建一个 Corpus 对象 进行一些基本的预处理 然后创建一个 DocumentTermMatrix corpus lt Corpus VectorSource vec
  • Jupyter Notebook 输出中仅部分显示图表

    我正在尝试获取一个类似于此链接中显示的 2 的 PyLDAvis 图 您可以立即看到它 主题间距离图和前 30 个最显着的术语 http nbviewer jupyter org github bmabey hacker news topi

随机推荐

  • 查看Eclipse版本号及各个版本区别

    1 找到eclipse安装目录 2 进入readme文件夹 打开readme eclipse html 3 readme eclipse html呈现的第二行即数字版本号 如 Eclipse Project Release Notes Re
  • Idea集成Yapi插件自动生成接口文档

    1 Idea安装插件 easy yapi 2 安装后重启Idea 3 打开settings 在Other Settings下打开EasyApi菜单 配置Yapi服务器地址 只需要对应的ip与端口即可 不需要具体那个项目 4 打开对应需要生成
  • Spring Boot 2,吃透这份阿里P8纯手打Java面经

    如何使用Elasticsearch 安装Elasticsearch https www elastic co cn downloads elasticsearch 这里我们选择的是6 2 2版本的ES 因为我在spring data ela
  • 百度Q4及全年财报:百度智能云强化AI优势,文心一言将推动云市场格局洗牌

    北京时间2月22日 百度 NASDAQ BIDU HKEX 9888 发布了截至2022年12月31日的第四季度及全年未经审计的财务报告 2022年 百度实现营收1236 75亿元 归属百度的净利润 非美国通用会计准则 206 8亿元 同比
  • 初学者必会的100个编程代码

    这是本文的目录 前言 1 for循环中的else条件 2 数字求和 3 随机数生成 4 将列表中的所有元素作为参数传递给函数 5 获取列表的所有中间元素 6 使用一行代码赋值多个变量 7 Python清空列表 8 通过Enum枚举同一标签或
  • Android中Fragment的hide和show的一些技巧

    我们App中主页是四个Fragment 通过RadioGroup的onCheckChanged来调用show和hide实现主页面Fragment的切换 此时就有一个问题就是 我们需要知道每一个Fragment的生命周期 此时就可以重写 Ov
  • 接受拖放文件

    需要重载类的WM DROPFILE消息 接受拖放的文件并显示路径与文件名的示例 void CYuEdit OnDropFiles HDROP hDropInfo TODO Add your message handler code here
  • linux-vsprintf.c

    linux kernel vsprintf c 对参数产生格式化的输出 C 1991 Linus Torvalds vsprintf c Lars Wirzenius Linus Torvalds Wirzenius wrote this
  • Java一个属性依赖于另外一个属性的值

    一个java类中的一个属性最开始需要从另外一个属性的值得到 现在举例如下 最简单的例子 判断是否成功 Data ApiModel description 返回结果集 public class ReturnResult
  • 人工神经网络的基本模型,神经网络解剖学模型图

    神经网络是什么 神经网络可以指向两种 一个是生物神经网络 一个是人工神经网络 生物神经网络 一般指生物的大脑神经元 细胞 触点等组成的网络 用于产生生物的意识 帮助生物进行思考和行动 人工神经网络 Artificial Neural Net
  • plsql显示不出来服务器,求救:PLSQL调用webservice服务器端获取不到值

    我使用的是UTL DBWS包去调用webservice 现在我测试可以通过调用 但是发现服务器端获取不到值我贴下我的代码 create or replace procedure pro trig test is service utl db
  • 5-Java 泛型

    5 泛型 泛型的本质是参数化类型 也就是说所操作的数据类型被指定为一个参数 5 1 泛型方法 在调用时可以接收不同类型的参数 每一个类型参数声明部分包含一个或多个类型参数 参数间用逗号隔开 类型参数能被用来声明返回值类型 泛型方法体的声明和
  • 50个java编程程序之四

    程序 31 题目 将一个数组逆序输出 import java util public class lianxi31 public static void main String args Scanner s new Scanner Syst
  • python对字符串进行加密_python学习:实现将字符串进行加密

    题目描述 1 对输入的字符串进行加解密 并输出 2加密方法为 当内容是英文字母时则用该英文字母的后一个字母替换 同时字母变换大小写 如字母a时则替换为B 字母Z时则替换为a 当内容是数字时则把该数字加1 如0替换1 1替换2 9替换0 其他
  • UE4 图表插件使用文档

    UE4图表插件使用文档 插件概述 插件获取 插件演示 插件配置 插件使用 创建图表控件 控件调节属性 备注 插件概述 SCUI插件是一套UnrealEngine的UMG图表插件 初衷是为了快速制作智慧城市项目 解决复杂数据展示的难点 简化数
  • 蓝色版去水印小程序源码+接口

    介绍 蓝色版小程序源码 接口 网盘下载地址 http kekewangLuo net edaLtfZJUE40 图片
  • C++在线五子棋对战(网页版)项目:websocket协议

    目标 认识理解websocket协议 websocket切换过程和websocket协议格式 认识和学会使用websocketpp库常用接口 了解websocketpp库搭建服务器流程 认识和学会使用websocketpp库bin接口 最后
  • HTML标签marquee实现文字,图片等滚动效果

    HTML标签marquee实现文字 图片等滚动效果 页面的自动滚动效果 可由javascript来实现 也可以由一个html标签 就可以实现多种滚动效果 无需js控制 使用marquee标记不仅可以移动文字 也可以移动图片 表格等 语法 说
  • maven集成tomcat插件以及乱码解决

    Maven已经是Java的项目管理标配 如何在JavaEE开发使用Maven调用Web应用 是很多同学关心的问题 本文将介绍 Maven如何介绍Tomcat插件 Maven Tomcat插件现在主要有两个版本 tomcat maven pl
  • csdn博客推荐系统实战-5文本聚类-话题模型LDA

    话题模型topic model是自然语言处理领域里面热门的一个技术 可以用来做很多的事情 例如相似度比较 关键词提取 分类 还有就是具体产品业务上的事了 总之可以干很多的事情 今天不会讲LDA模型的很多细节和原理 没有满屏的数学公式 只讲一