What is a good explanation of Latent Dirichlet Allocation

本文通过实例详细介绍了Latent Dirichlet Allocation (LDA) 主题模型的工作原理,包括其生成文档的过程及如何通过迭代算法学习主题表示。
25九/11 0

What is a good explanation of Latent Dirichlet Allocation


晚上在Quora溜达,看到了个问题,关于 LDA的,关于 寻找LDA的一个良好的解释
众人合力得到了一个很赞的解释,这里我把最直观的解释翻译(部分翻译,有的部分还是英语表达更好)过来吧,同时来在学习的过程中对概率的一些知识进行了回顾(概率学了居然都忘了,只有模糊的印象)

场景

假设有下面的句子集合
  • I ate a banana and spinach smoothie for breakfast
  • I like to eat broccoli and bananas.
  • Chinchillas and kittens are cute.
  • My sister adopted a kitten yesterday.
  • Look at this cute hamster munching on a piece of broccoli.

LDA是一种自动发现这些句子中包含的主题(topics)的方法。比如,给定这些句子和两个主题,LDA可能会产生下面的这些:

  • Sentences 1 and 2: 100% Topic A
  • Sentences 3 and 4: 100% Topic B
  • Sentence 5: 60% Topic A, 40% Topic B
  • Topic A: 30% broccoli, 15% bananas, 10% breakfast, 10% munching, ... (at which point, you could interpret topic A to be about food)
  • Topic B: 20% chinchillas, 20% kittens, 20% cute, 15% hamster, ... (at which point, you could interpret topic B to be about cute animals)

问题是,LDA如何做发现这些的?

LDA Model

仔细来说,LDA使用混合的主题来代表文档(documents),这些主题将文档中的词(words)按照概率划分到不同的主题。LDA做了如下的假设,当你写文档的是,你会做如下的事情
  • Decide on the number of words N the document will have (say, according to a Poisson distribution).
  • Choose a topic mixture for the document (according to a Dirichlet distribution over a fixed set of K topics). For example, assuming that we have the two food and cute animal topics above, you might choose the document to consist of 1/3 food and 2/3 cute animals.
  • Generate each word in the document by:
  • ....First picking a topic (according to the multinomial distribution that you sampled above; for example, you might pick the food topic with 1/3 probability and the cute animals topic with 2/3 probability).
  • ....Then using the topic to generate the word itself (according to the topic's multinomial distribution). For instance, the food topic might output the word "broccoli" with 30% probability, "bananas" with 15% probability, and so on.

考虑到这种生成(generate)文档的模型,LDA试图从文档追溯一些topics,很可能是这些topics生成了这些文档。

样例

举个例子,根据上述model,当产生某个特定文档D的时候,你会这么做:
  • Decide that D will be 1/2 about food and 1/2 about cute animals.
  • Pick 5 to be the number of words in D.
  • Pick the first word to come from the food topic, which then gives you the word "broccoli".
  • Pick the second word to come from the cute animals topic, which gives you "panda".
  • Pick the third word to come from the cute animals topic, giving you "adorable".
  • Pick the fourth word to come from the food topic, giving you "cherries".
  • Pick the fifth word to come from the food topic, giving you "eating".
上述流程其实就是模拟人写文档的一个过程,这个由LDA model生成的文档为"broccoli panda adorable cherries eating"(LDA是一系列words的模型)

学习(ML)

首先假定有一个文档集合,已经选择了K个topics用于发现,希望使用LDA来学习出每个文档的主题表示(topic representation),以及每个主题相关的词(words)。怎么做呢?一种方法如下(collapsed Gibbs sampling):
  • Go through each document, and randomly assign each word in the document to one of the K topics.(对每个文档,将每个word随机赋予某个topic)
  • Notice that this random assignment already gives you both topic representations of all the documents and word distributions of all the topics (albeit not very good ones).(这种随机赋值也是一种学习的结果,不过我们需要去改进,方法就是迭代)
  • So to improve on them, for each document d...
  • ....Go through each word w in d...
  • ........And for each topic t, compute two things: 1) p(topic t | document d) = the proportion of words in document d that are currently assigned to topic t, and 2) p(word w | topic t) = the proportion of assignments to topic t over all documents that come from this word w. Reassign w a new topic, where you choose topic t with probability p(topic t | document d) * p(word w | topic t) (according to our generative model, this is essentially the probability that topic t generated word w, so it makes sense that we resample the current word's topic with this probability). (Also, I'm glossing over a couple of things here, such as the use of priors/pseudocounts in these probabilities.)(计算文档属于某topic的概率p(t|d)以及word属于topic的概率p(w|t),然后根据这个来计算当把某word w赋予一个新的topic的时候的概率,即p(t|d)*p(w|t))
  • ........In other words, in this step, we're assuming that all topic assignments except for the current word in question are correct, and then updating the assignment of the current word using our model of how documents are generated.(每次计算某word属于某topic概率的时候,假定其他word的topic是确定的,)
  • After repeating the previous step a large number of times, you'll eventually reach a roughly steady state where your assignments are pretty good. So use these assignments to estimate the topic mixtures of each document (by counting the proportion of words assigned to each topic within that document) and the words associated to each topic (by counting the proportion of words assigned to each topic overall).(迭代直到收敛,使用最后的值来表示每个文档的主题表示,以及每个topic 的words表示)
这个学习过程有点多,因此稍稍解释了一下,这个过程和PageRank很像吧,都是开始随机赋值,然后更新值,迭代直到收敛。

相关概率知识

看的过程中发现自己的概率都忘光了,于是看得时候把相应的概念在wiki上翻了出来,虽没都看透,但起码有个感性的理解了
狄利克雷分布是一个连续多随机变量分布,理解这个需要了解下面的知识
先验概率:简称先验,一个不确定量p的先验,是一个人在没有考虑数据的时候对于p的不确定性的判断,是这样一个概率分布。一个简单的例子是,假如p是选民会选A的比例,p的先验概率不能考虑民意调查,即选民不参考其他会影响他的vote的data。
对应的,后验概率如下:
后验概率是把相关的data考虑进去的条件概率,后验概率分布是从一次实验中得到的不确定量p的分布,再进一步,共轭先验。
假如概率先验分布 p(θ)和后验分布 p(θ| x)的分布是同一种分布,那么这就叫共轭分布,而该先验称为共轭先验。如 p(θ)是服从高斯分布的,而 p(θ| x)也是服从高斯分布的,那么这两个分布成为共轭分布。
这上述几个概念都是属于贝叶斯统计的
贝叶斯统计是统计的一个分支,在贝叶斯统计中,关于现实世界的真实状态的证据都是用贝叶斯概率http://en.wikipedia.org/wiki/Bayesian_probability来表达的,贝叶斯概率是关于概率的一种不同的解释,属于置信概率的范畴。概率的贝叶斯解释可以看作是逻辑的延伸,使得可以对不确定量进行推理。

参考文献:

源码来自:https://pan.quark.cn/s/7a757c0c80ca 《在Neovim中运用Lua的详尽教程》在当代文本编辑器领域,Neovim凭借其卓越的性能、可扩展性以及高度可定制的特点,赢得了程序开发者的广泛青睐。 其中,Lua语言的融入更是为Neovim注入了强大的活力。 本指南将深入剖析如何在Neovim中高效地运用Lua进行配置和插件开发,助你充分发挥这一先进功能的潜力。 一、Lua为何成为Neovim的优选方案经典的Vim脚本语言(Vimscript)虽然功能完备,但其语法结构与现代化编程语言相比显得较为复杂。 与此形成对比的是,Lua是一种精简、轻量且性能卓越的脚本语言,具备易于掌握、易于集成的特点。 因此,Neovim选择Lua作为其核心扩展语言,使得配置和插件开发过程变得更加直观和便捷。 二、安装与设置在Neovim中启用Lua支持通常十分简便,因为Lua是Neovim的固有组件。 然而,为了获得最佳体验,我们建议升级至Neovim的最新版本。 可以通过`vim-plug`或`dein.vim`等包管理工具来安装和管理Lua插件。 三、Lua基础在着手编写Neovim的Lua配置之前,需要对Lua语言的基础语法有所掌握。 Lua支持变量、函数、控制流、表(类似于数组和键值对映射)等核心概念。 它的语法设计简洁明了,便于理解和应用。 例如,定义一个变量并赋值:```lualocal myVariable = "Hello, Neovim!"```四、Lua在Neovim中的实际应用1. 配置文件:Neovim的初始化文件`.vimrc`能够完全采用Lua语言编写,只需在文件首部声明`set runtimepath^=~/.config/nvim ini...
基于STM32 F4的永磁同步电机无位置传感器控制策略研究内容概要:本文围绕基于STM32 F4的永磁同步电机(PMSM)无位置传感器控制策略展开研究,重点探讨在不使用机械式位置传感器的情况下,如何通过算法实现对电机转子位置和速度的精确估算与控制。文中结合STM32 F4高性能微控制器平台,采用如滑模观测器(SMO)、扩展卡尔曼滤波(EKF)或高频注入法等先进观测技术,实现对电机反电动势或磁链的实时估算,进而完成磁场定向控制(FOC)。研究涵盖了控制算法设计、系统建模、仿真验证(可能使用Simulink)以及在嵌入式平台上的代码实现与实验测试,旨在提高电机驱动系统的可靠性、降低成本并增强环境适应性。; 适合人群:具备一定电机控制理论基础和嵌入式开发经验的电气工程、自动化及相关专业的研究生、科研人员及从事电机驱动开发的工程师;熟悉C语言和MATLAB/Simulink工具者更佳。; 使用场景及目标:①为永磁同步电机驱动系统在高端制造、新能源汽车、家用电器等领域提供无位置传感器解决方案的设计参考;②指导开发者在STM32平台上实现高性能FOC控制算法,掌握位置观测器的设计与调试方法;③推动电机控制技术向低成本、高可靠方向发展。; 其他说明:该研究强调理论与实践结合,不仅包含算法仿真,还涉及实际硬件平台的部署与测试,建议读者在学习过程中配合使用STM32开发板和PMSM电机进行实操验证,以深入理解控制策略的动态响应与鲁棒性问题。
先看效果: https://pan.quark.cn/s/21391ce66e01 企业级办公自动化系统,一般被称为OA(Office Automation)系统,是企业数字化进程中的关键构成部分,旨在增强组织内部的工作效能与协同水平。 本资源提供的企业级办公自动化系统包含了详尽的C#源代码,涉及多个技术领域,对于软件开发者而言是一份极具价值的参考资料。 接下来将具体介绍OA系统的核心特性、关键技术以及在实践操作中可能涉及的技术要点。 1. **系统构造** - **三层构造**:大型OA系统普遍采用典型的三层构造,包含表现层、业务逻辑层和数据访问层。 这种构造能够有效分离用户交互界面、业务处理过程和数据存储功能,从而提升系统的可维护性与可扩展性。 2. **C#编程语言** - **C#核心**:作为开发语言,C#具备丰富的类库和语法功能,支持面向对象编程,适用于开发复杂的企业级应用。 - **.NET Framework**:C#在.NET Framework环境中运行,该框架提供了大量的类库与服务,例如ASP.NET用于Web开发,Windows Forms用于桌面应用。 3. **控件应用** - **WinForms**或**WPF**:在客户端,可能会使用WinForms或WPF来设计用户界面,这两者提供了丰富的控件和可视化设计工具。 - **ASP.NET Web Forms/MVC**:对于Web应用,可能会使用ASP.NET的Web Forms或MVC模式来构建交互式页面。 4. **数据库操作** - **SQL Server**:大型OA系统通常采用关系型数据库管理系统,如SQL Server,用于存储和处理大量数据。 - **ORM框架**:如Ent...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值