LDA详解

article/2025/11/10 14:18:23

【几个问题待解决:1.LDA的先计算联合概率体现在哪里 2.对于theta 的采样的理解,下文中的theta1 ,theta2等其实是指theta向量中的第一个,第二个等,也就是不同文章的不同单词的主题,固定其他,分别重新从计算的概率分布再次抽取主题】

LDA是一种非监督机器学习技术,可以用来识别大规模文档集(document collection)或语料库(corpus)中潜藏的主题信息。它采用了词袋(bag of words)的方法,这种方法将每一篇文档视为一个词频向量,从而将文本信息转化为了易于建模的数字信息。但是词袋方法没有考虑词与词之间的顺序,因此我们可以考虑对于语料库的表示采用tf-idf的方式表示。

1. 输入:LDA的最小单元输入是文档,不管文档里有多少个字

2. 模型参数:

\theta:是针对每个文档都有一个主题的概率分布,这时得到参数\theta ,是一个K维的向量,K是主题个数

\phi:V*K的矩阵,其中,K是主题个数,V是词库里的单词个数,矩阵中的每个位置是该单词分为某个主题的概率

(注意:LDA时无监督算法,不需要标注,数据放到模型中会自动学习每个文档的主题分布和主题的词分布,也就是模型参数)

3. 假设:

每个文档属于多个主题。

 为了更好的理解LDA是一个贝叶斯模型,我们类比LDA和朴素贝叶斯,LDA不像朴素贝叶斯那样,每个文档只有一个主题,就是概率最大的主题,这里每个文档都有一个对应主题的概率分布,这就意味着LDA是一个Soft Classifying,而不是Hard Classifying

同样,这也类似于K-Means和GMM,K-Means也是根据对一个数据点只将其分类为概率最大的类别,而GMM则是对一个数据点所有可能的类别进行判断,这是模型设计就决定的特点。

4. LDA的生成过程

理解生成模型一定要理解它的生成过程。

首先明确我们的目标是使用LDA模型生成一个文档,第一步是选定主题,根据文档的主题分布抽取单个或多个主题,其次生成单词,根据抽取的主题和参数\phi生成单词(这里注意:选择主题和选择主题下的单词并不是就一定选择概率最大的,只可以说概率越大的越有可能被选择到)

 1)定义变量:

K:主题个数

N:文档个数

Ni:文档i中包含的单词个数

模型参数:\thetai和\phi

超参数:\alpha 和 \beta

隐含变量:Zij和Wij

2)四个依赖关系

\alpha -->  \theta: 服从狄利克雷分布,是 \theta --> Zij的共轭先验

\theta --> Zij:服从多项式分布

\beta--> \phi:服从狄利克雷分布,是 \phi --> Wij的共轭先验

\phi --> Wij:服从多项式分布

整个生成过程只有Wij是已知的,可以观测到的,\alpha 和 \beta又是人为设定的超参数,因此,我们未知的参数就是\theta \phi还有Z,因为贝叶斯模型最终要计算的就是后验概率,这个很难估计,我们将使用MCMC中很经典的Gibbs Sampling来计算,也就是计算P(\theta\phi,Z|\alpha\beta,W)因为一下子采样

三个参数较为困难,因此我们将三个参数展开,(\theta1,\theta2,\theta3,…,\phi1,\phi2,\phi3,…,Z1,…),对于Gibbs Sampling,我们先采样 \theta1,假定其他都是已知的,然后求解 \theta2,假定其他都是已知的,以此类推,这就是Gibbs Sampling,这个过程类似于Lasso中的Coordinate Descent

接下来就是计算:

A:首先就是 \thetai的采样

计算需要先根据Markov Blanket的规则提取与  \thetai相关的变量,分别是\alpha和Z

根据Gibbs采样,问题是:P(\thetai|\alpha,Z,W,\beta\phi),但由于只有\alpha和Z和 \thetai有关,因此问题简化为:  P(\thetai|\alpha,Z),要求解这个后验概率,我们根据后验=先验*似然,也就是:

得到:

  P(\thetai|\alpha,Z)\propto    P(\thetai|\alpha )*  P(Z|\thetai)

因为 P(\thetai|\alpha )是服从狄利克雷分布的,而 P(Z|\thetai)是服从多项式分布的,因此P(\thetai|\alpha,Z)也是服从狄利克雷分布的,根据狄利克雷分布的公式,我们得到:

  P(\thetai|\alpha )= \frac{1}{B\left ( \alpha \right )}\prod_{k=1}^{K}\theta _{ik}^{\alpha _{k-1}}*\prod_{j=1}^{Ni}\prod_{k=1}^{K}\theta _{ik}^{I\left ( Z_{ij} = k \right )}

其中,I为指示函数

提取公共的部分也就是连乘的k,式子变成了:

\frac{1}{B\left ( \alpha \right )}\prod_{k=1}^{K} \theta _{ik}^{\alpha _{k-1}+\prod_{j=1}^{Ni}I\left ( Z_{ij} = k \right )}

这个式子又可以还原为Dir分布的表达式,

Dir\left ( \alpha +\sum_{j=1}^{N_{i}}I\left ( Z_{ij}=k \right ) \right )

其中,\sum_{j=1}^{N_{i}}I\left ( Z_{ij}=k \right )表示为在第i个文章里,有多少个单词被分类为主题1

注意:这个P的概率分布指的是\theta的概率分布,而它又是服从的\alpha,也就是上边公式中的\alpha,倘若原本的超参数\alpha根据经验设定为\alpha =(1,1,1,……,1)(这里需要注意的是,\alpha的维度是K维的,也就是主题个数),那么通过不断的训练,样本量的增加,那么\theta会在\alpha人为设定的初始值的条件下不断进行更新从而最终收敛,\theta = \left ( 1+n_{i1},1+n_{i2},1+n_{i3},..., 1+n_{ik} \right )(n_{ik}就是代表第i个文章里,有多少个单词被分类为第k个主题)

B.采样Zij(注意:在训练时,先训练Zij,首先对于每个文章中的每个单词根据根据超参数alpha分随机分配一个主题,然后分别对每个单词再次随机抽样一个新的主题,更新统计它们的主题和文章单词的矩阵(注意这个矩阵是一个中间变量,用于记录每个文章中每个单词的主题),并更新主题的概率分布,依次遍历整个样本集,这是迭代一次的结果,根据设定的迭代次数进行迭代更新,最终得到最后的文章每个单词的主题,然后才会更新\theta\phi参数,其实记录文章单词和主题分布的矩阵就相当于\theta的作用,只是在代码中最后更新,并需要归一化) 

首先,我们依然是根据关系图,提取出和Zij有关的变量\theta, W,\phi

P\left ( Z_{ij}=k|\theta _{i} ,\phi _{k} ,W_{ij}\right )\propto P\left ( Z_{ij}=k|\theta _{i} \right )*P\left ( W_{ij}|Z_{ij}=k,\phi _{k}\right )

右边式子的第一项其实就是\theta参数的具体的某个值,\thetaik;第二项是参数\phi,在某个主题下产生某个单词Wij的概率,因此式子变为:

\propto \theta _{ik}*\phi _{k,W_{ij}}


C.采样\phi

过程类似于 \thetai的采样,其也是Dir分布,这里就不再具体解释。这里需要注意\phi的共轭先验是\beta的Dir分布,注意\beta\phi都是V维的向量,V是词库的大小。

在代码实现层面:我们需要人为的给定超参数\alpha\beta的值,其次我们还需要给定文章需要属于的主题个数K,K的确定可以采用Perplexity进行确定。

【理解无监督】

LDA是对于给定的数据集X,X中的每个样本,也就是一条数据代表一个文章,我们预先对于文章中的每个词汇根据预先给定的主题分布参数\theta的先验\alpha分配一个主题,然后进行训练,训练过程中随着样本的增加,不断的更新\theta,最终收敛

【从生成式模型理解LDA】

所谓生成模型,就是说,我们认为一篇文章的每个词都是通过“以一定概率选择了某个主题,并从这个主题中以一定概率选择某个词语”这样一个过程得到。文档到主题服从多项式分布,主题到词服从多项式分布。

一般来说,产生式模型希望通过一个产生过程来帮助读者理解一个模型。这个产生过程本质是描述一个联合概率分布的分解过程。也就是说,这个过程是一个虚拟过程,真实的数据往往并不是这样产生的。这样的产生过程是模型的一个假设,一种描述。任何一个产生过程都可以在数学上完全等价一个联合概率分布。LDA 的产生过程描述了文档以及文档中文字的生成过程。

【LDA是一个典型的贝叶斯模型】

1.不是点估计,不一定选取概率最大的,而是得到概率分布

2.我们在其中加入的先验是针对模型参数加入了一个先验,这就用到了共轭先验,简化了运算,像是多项式分布的共轭先验是狄利克雷分布,二项式分布的共轭先验是Beta分布


http://chatgpt.dhexx.cn/article/s8G5GNWj.shtml

相关文章

LDA的通俗理解

1.PLSA模型 在讲解LDA模型之前,与LDA模型最为接近的便是下面要阐述的这个pLSA模型,给pLSA加上贝叶斯框架,便是LDA。 1.1什么是pLSA模型 我们假定一篇文档只由一个主题生成,可实际中,一篇文章往往有多个主题&#xff…

LDA模型详解

LDA是自然语言处理中非常常用的一个主题模型,全称是隐含狄利克雷分布(Latent Dirichlet Allocation),简称LDA。作用是将文档集中每篇文档的主题以概率分布的形式给出,然后通过分析分到同一主题下的文档抽取其实际的主题…

机器学习——LDA(线性判别分析)与人脸识别

忆如完整项目/代码详见github:https://github.com/yiru1225(转载标明出处 勿白嫖 star for projects thanks) 目录 系列文章目录 一、LDA的概念与原理 1.LDA简介 2.LDA算法模型 3.LDA的不足与优化 二、LDA运用于人脸识别 1.预处理 1…

线性判别分析(LDA)详解

入门小菜鸟,希望像做笔记记录自己学的东西,也希望能帮助到同样入门的人,更希望大佬们帮忙纠错啦~侵权立删。 目录 一、LDA简介 二、数学原理(以二分类为例子) 1、设定 2、每一类的均值和方差 3、目标函数 4、目标…

LDA算法——线性判别

目录 一、前言 二、什么是LDA? 三、LDA原理 1.二分类问题 2.多分类问题 3.几点说明 四、算法实现 一、前言 之前我们已经介绍过PCA算法,这是一种无监督的降维方法,可以将高维数据转化为低维数据处理。然而,PCA总是能适用吗&…

主题模型:LDA原理详解与应用

LDA算法简介: LDA是一种基于贝叶斯思想的无监督的聚类算法,广泛用于文本聚类,文本分析,文本关键词等场景。具体的,算法 的输入是一个文档的集合D{d1, d2, d3, ... , dn},同时还需要主题Topic的类别数量m&a…

LDA主题模型简介及Python实现

一、LDA主题模型简介 LDA主题模型主要用于推测文档的主题分布,可以将文档集中每篇文档的主题以概率分布的形式给出根据主题进行主题聚类或文本分类。 LDA主题模型不关心文档中单词的顺序,通常使用词袋特征(bag-of-word feature)来…

制作属于自己的个人博客-超详细教程

SpringBoot个人博客 一.博客效果预览 博客首页预览 博客详情预览 博客评论区预览 博客底部栏预览 关于页面预览 二.博客效果在线预览 http://blog.ShaoxiongDu.top 三.项目技术 后端SpringBoot框架 分为控制层(Controller) 业务层(Service) 数据持久层(Dao) 按照Spring…

如何搭建个人博客

新的安装方式:(强烈推荐,简单方便) 利用dockernginx配置halo博客 先碎碎念一下,最近在学习springboot项目,在b站跟着up主研究如何写一个简易的博客来着,后来发现可以直接简易的搭建一个博客(都不用写代码&a…

使用 nodejs 搭建个人博客

"使用nodejs搭建自己的个人博客" 说明运行后端 node 模块后端框架采用的是 express 框架进行接口构建,具体解释如下:数据库参数配置评论邮箱提示付费文件下载配置(支付宝)评论语句检测 关于跨域问题的解决 说明 使用no…

超详细图解:如何使用 WordPress搭建一个个人博客?

前两天我用WordPress 给自己搭建了一个网站,整个过程非常的顺利,体验非常地好,于是我就整个过程、以及其中的一些搭建心得,记录下来。 如果你也正好有搭建个人网站的想法,那么本文会给你一个参考,也许看了这…

个人博客网站的设计与实现

/ 前话 / 纯手工敲代码,代码结构简单,divcss布局html静态个人博客首页网页设计,dreamwaver和hb都可以编辑,文件结构包含了css、fonts、images、js和html,运用html5技术,包括nav标签、header标签和footer标签…

个人博客系统毕业设计开题报告

本文给出的是本科生个人博客系统的毕业设计开题报告,仅供参考!(具体模板和要求按照自己学校给的要求) 毕业设计开题报告 一、选题意义二、博客系统概述三 、毕业设计研究方案四、功能结构图五、进度安排六、参考文献 一、选题意义…

基于HTML个人博客网站项目的设计与实现——个人博客作品展示6页 HTML+CSS

Web前端开发技术 描述 网页设计题材,DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 个人博客网站 | 个人主页介绍 | 个人简介 | 个人博客设计制作 | 等网站的设计与制作 | 大学生个人HTML网页设计作品 | HTML期末大学生网页设计作业 HTML:结构 CSS&…

HTML制作个人网页制作(简单静态HTML个人博客网页作品)

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

个人主页博客网页设计制作HTML5+CSS大作业——清新春暖花开个人博客网站(6页)

HTML5CSS大作业——清新春暖花开个人博客网站(6页) 常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、 茶叶、 家居、 酒店、 舞蹈、 动漫、 明星、 服装、 体育、 化妆品、 物流、 环保、 书籍、 婚纱、 军事、 游戏、 节日、 戒烟、 电影、 摄…

如何使用HTML制作个人网站(如何搭建个人博客)

📂文章目录 一、👨‍🎓网站题目二、✍️网站描述三、📚网站介绍四、🌐网站演示五、⚙️ 网站代码🧱HTML结构代码💒CSS样式代码 六、🥇 如何让学习不再盲目七、🎁更多干货…

10分钟搭建一个免费个人博客网站

一个程序员怎么能不拥有自己的博客,本文让10分钟快速搭建部署好自己的博客 准备工作 有Gitee账号有安装git会 markdown 编写文档Node.js 版本 > 8.6 博客采用VuePress搭建,Gitee部署,接下来,5步搞定。 1.创建项目 创建项目…

用html制作学生个人博客,网页制作论坛(学生个人网页制作代码)

许多开发人员认为擅长设计是一种天生的能力,而创造力是与生俱来的。但是设计是一项可以像其他任何东西一样学习的技能。你不必天生就可以创建一个漂亮的网站的艺术家,这需要实践。在身边的小伙伴的博客,自己的网站来看,很多人都是用了开源后台的网站模板,熟不知局限太大,…

个人网站、个人博客的设计案例,仅供参考

关于网站的内容,我也是纠结了好久,我这里说的是网站建设的内容。个人网站,大多数人还是做个博客,想着能平时写点内容,发点文章,图片,一些简短的分享什么的。 好,想到就做。 我做了…