PS:我非常有幸请到一位IT女神,为我们分享自然语言处理的相关实践,希望大家踊跃使用图灵搜索或者关注图灵搜索微信平台,获取女神的第一手技术分享。
主题词提取算法LDA -- Latent Dirichlet Allocation
在自然语言处理中,文本的主题词提取一直都是重要的技术之一。在不清楚语言的语法和结构的情况下,我们一般可以按照统计学的方式来操作。从最简单的单一图模型开始
Unigram Model
我们可以将一片文档认为是像高中概率课里装彩球的袋子,而词汇就是彩色的球。将所有的词当做一池子彩球,每一个词汇都有一个颜色(可以有很多相同颜色的球在池中。那么一篇文章可以被看做是一个袋子,那么这个袋子的概率就是组成它的所有词的概率的乘机:
它的图模型为:
II.Unigram的组合
当我们想知道,这篇文章的主题的时候,就等于为原来池子里面的球又加上了话题分割,认为某词在不同主题下的概率也不同,那么原来这袋子词又可以表示为:
在图模型中就有了Z,作为词们(小球们)的条件:
III. LDA
然而,研究出LDA的大牛们显然不满足于用这么简单的模型来描述概率的奥妙,所以他们又为主题的概率,文章词量,词由主题生成的概率等加上了不同的概率模型,将文档的概率模型扩充成下面这个样子:
其中的分布就是服从狄利克雷分布(Dirichlet)的,也就是我们LDA中间那个神一样的D。主题Z便是由以θ为参数的多项式分布生成出来的,这个狄利克雷分布就是用来描述分布之上的分布。
╮(╯▽╰)╭这又是后话了,如果小伙伴有兴趣可以来信探讨。先来瞧瞧,维基百科上它长这个样子:
好了,大牛们把模型搞到这么复杂之后他们自己也不会优化了,这又涉及到凸优化的,最大似然的问题。。。咱们先放放。。。
于是咱们万能的工程师出现了,公式不行,咱们一步一步试嘛,连续的不行,咱们采样嘛。所以就诞生了LDA家族中最朴实的一员:GibbsLDA。它采用Monte Carlo的方式进行了采样(亲,不要查字典了,这个词是蒙特卡洛,是个城市,也是无监督学习中非常重要的算法)
GibbsLDA
这个算法几百行代码就可以实现,网上也有很多实例。就给大家介绍一 个很好用的C++工具包:GibbsLDA++。代码包可以在这里下到:http://sourceforge.net/projects/gibbslda/
安装
如果你的电脑里面有g++环境,那么直接解压缩后在目录下make即可 ,可能会有一些基础头文件需要引入: #include <cstdlib> #include <cstdio>
实例
我们可以直接跑一下它现有的示例文件: models/casestudy/trndocs.dat
如果有自己想训练的数据集可以按照这个文档做预处理。第一行是训练集中文章的条数,从第二行开始是经过切词处理的文本,一行为一个文章。
进入terminal,直接输入:
./lda -est -alpha 0.5 -beta 0.1 -ntopics 100 –niters 1000 -savestep 100 -twords 20 -dfile models/casestudy/trndocs.dat
其中:
- -est 是从头开始训练模型,
- -alpha是对图中α 参数的选择(可选),
- -beta是对图中β参数的选择(可选),
- –niters 是模型训练需要循环采样的次数(可选),
- -savestep 是第几步的模型需要被存储下来(可选),由于没有一个比较 好的停止条件,我理解这样的方式是可以减小一些过拟合的危险。
- -twords是top多少的词汇用来表示一个topic(可选),
- -dfile 是表示训练集的路径。
可选的参数在程序中都已设定好了default值
结果
- GIBBSLDA++会在同一路径下生成多个模型文件:
- <model_name>.others: 中存储的是训练参数,就是我们刚刚输入进去的那些。。。
- <model_name>.phi: 中存储的是,词在话题下的分布,p(wordw|topict)
- <model_name>.theta:中存储的是,话题在文章下的分布,p(topict|documentd)
- <model_name>.tassign:中存储的是,在训练集中,给每个词都分配哪个话题。每个文章都会有一个这样的list:<wordij>:<topic of wordij>
- <model_file>.twords: 这里,就是当时我们定义的,对于每个话题,最有可能含有的词。
Reference:
[1] Latent Dirichlet Allocation(LDA) - David M.Blei http://www.xperseverance.net/blogs/2012/03/17/
[2] Dirichlet distribution, Wikipedia, https://en.wikipedia.org/wiki/Dirichlet_distribution
[3] GibbsLDA++, Xuan-Hieu Phan, A C/C++ Implementation of Latent Dirichlet Allocation (LDA) using Gibbs Sampling for Parameter Estimation and Inference, http://gibbslda.sourceforge.net/
相关推荐
Python中的LDA(Latent Dirichlet Allocation,潜在狄利克雷分配)是一种主题模型,常用于文本挖掘和自然语言处理领域。这个压缩包“python-LDA-master.rar”似乎包含了一个Python实现LDA的项目,可能包括源代码、...
本资源摘要信息是关于深度学习与自然语言处理的第三次大作业,主要介绍了LDA模型的应用和实现细节。 深度学习与自然语言处理 深度学习是机器学习的一个分支,通过模拟人脑神经网络的结构和功能来进行学习和推理。...
DF-LDA(Distance-Focused Latent Dirichlet Allocation)是一种基于概率的主题模型,它是Latent Dirichlet...如果你是数据科学家或自然语言处理领域的研究者,了解和掌握DF-LDA将有助于提升你在文本分析任务中的效果。
人工智能_自然语言处理_主题分析_LDA(python函数接口封装实现(较简单)).py
在IT领域,尤其是在数据分析和机器学习中,降维处理是一项重要的技术,用于处理高维度的数据。本主题聚焦于“基于PCA-LDA光谱数据的降维处理”,这涉及到两种广泛使用的统计学方法:主成分分析(PCA)和线性判别分析...
标题“lda-c-dist”可能指的是LDA(Latent Dirichlet Allocation)模型在图像或文本分类中的应用。LDA是一种主题模型,常用于文本数据的分析,它能挖掘出文本中隐藏的主题结构。然而,这里的“c-dist”可能是指分类...
"LDA-R代码_lda_"这一标题暗示我们将讨论如何使用R语言来实现LDA模型,特别是针对手机用户评论数据进行主题分析。 LDA是一种统计模型,它假设文档是由多个主题混合生成的,而每个主题又由一组概率分布的词汇构成。...
1. `main.m`:这是主程序文件,它通常包含整个2D-LDA流程的入口点,调用其他函数进行数据预处理、模型训练和测试等操作。 2. `tdfda.m`:可能代表“Two-Dimensional Fisher Discriminant Analysis”,即2D-LDA算法的...
总的来说,2D-LDA是一种强大的工具,能够有效地减少数据维度,提高分类性能。通过MATLAB实现,我们可以方便地进行实验和调试,以优化模型参数并适应不同的数据集。无论你是学术研究还是工业应用,理解并熟练运用2D-...
总的来说,Python实现的LDA主题模型为处理和理解大规模文本数据提供了强大工具,广泛应用于社交网络分析、异常检测等多领域,通过对压缩包中“python-LDA-核心技术--LDA主题模型”的学习,可以深入理解和掌握这一...
资源分类:Python库 所属语言:Python 使用前提:需要解压 资源全名:lda-1.0.3-cp27-none-win_amd64.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
标题中的“lda-LDA”指的是Latent Dirichlet Allocation(潜在狄利克雷分配),这是一种在自然语言处理领域广泛应用的概率模型。LDA是一种主题模型,主要用于发现文本数据中的隐藏主题结构。在这里,"数学八卦"可能...
资源分类:Python库 所属语言:Python 资源全名:lda-0.3.0-cp27-none-win_amd64.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
而"r-lda"可能是一个实现R-LDA算法的代码文件,可能是用某种编程语言(如Python、R或MATLAB)编写的,用户可以通过这个文件了解R-LDA的具体实现过程,包括如何设置正则化参数,如何进行训练和预测等。 综上所述,...
质量很高的一个PCA-LDA特征降维代码,附一个LDA简单学习实例。
自然语言处理(NLP)——LDA模型:对电商购物评论进行情感分析项目源码+数据集 应用 LDA是一种非监督机器学习技术,可以用来识别大规模文档集(document collection)或语料库(corpus)中潜藏的主题信息。 使用了词袋...
python库。 资源全名:lda-0.3.0-cp33-none-win_amd64.whl
《Python自然语言处理实战》是一本深入探讨Python在NLP(自然语言处理)领域的实践应用的书籍。PDF版本为读者提供了方便的电子阅读体验,同时附带的代码资源则可以帮助读者更好地理解和应用书中的理论知识。这个...
总的来说,《Python中文自然语言处理基础与实战》涵盖了从基础到高级的NLP内容,通过实践案例帮助读者掌握Python在NLP领域的应用。无论你是初学者还是有经验的开发者,这个教程都能提供宝贵的知识和经验。在学习过程...