首页 > 编程语言 >【深度学习】最强算法模型之:潜在狄利克雷分配(LDA)

【深度学习】最强算法模型之:潜在狄利克雷分配(LDA)

时间:2024-03-27 12:31:13浏览次数:25  
标签:LDA 狄利克 主题 单词 算法 分布 文档 屌丝

潜在狄利克雷分配

1、引言

小屌丝:鱼哥, 给我讲一讲LDA
小鱼:LDA? 你指的是?

小屌丝:就是算法模型的LDA啊, 你想啥?
小鱼:哦,哦, 那就好,
小屌丝:你告诉我,你想啥了?
小鱼:不滴, 我就不
小屌丝:…你就说吧,我又不是外人
小鱼:…把耳朵凑过来,这只能悄悄说
在这里插入图片描述

小屌丝:鱼哥,你这… 咱不开车行不
小鱼:… 最近健身,骑自行车呢
小屌丝: … 我差点信了
在这里插入图片描述

小鱼:… 不扯了,咱还是开始 LDA吧。
小屌丝:那可不。

2、潜在狄利克雷分配

2.1 定义

潜在狄利克雷分配(LDA)是一种生成概率模型,用于集合(如文档集合或语料库)的离散数据(如文档中的单词)的集合中发现潜在的结构。

在LDA中,每个文档被视为由多个主题的混合生成,而每个主题又是由词汇表中单词的特定概率分布所定义。

2.2 原理

LDA的核心原理在于假设文档是由潜在的主题混合而成的,而每个主题则由一组单词的概率分布来定义。

LDA通过最大化文档的似然性来估计这些主题和它们的单词分布。

在文档生成过程中,首先根据主题分布选择一个主题,然后根据该主题的单词分布生成一个单词。

这个过程在文档中重复进行,直到生成完整的文档。

2.3 算法公式

LDA的数学表达涉及概率图模型中的节点和边,以及相应的条件概率分布。

具体来说,LDA定义了一个文档集合中每篇文档的主题分布 ( θ ) (θ) (θ),每个主题的单词分布 ( φ ) (φ) (φ),以及文档的生成过程。

LDA的主要公式包括:

  • 主题分布θ的先验分布: D i r i c h l e t ( α ) Dirichlet(α) Dirichlet(α)
  • 单词分布φ的先验分布: D i r i c h l e t ( β ) Dirichlet(β) Dirichlet(β)
  • 文档中第n个词的主题分布: z n   M u l t i n o m i a l ( θ ) z_n ~ Multinomial(θ) zn​ Multinomial(θ)
  • 给定主题z_n,文档中第n个词的单词分布:KaTeX parse error: Double subscript at position 22: …Multinomial(φ_z_̲n)

其中, α α α和 β β β是超参数,分别控制主题分布单词分布稀疏性

在这里插入图片描述

2.4 代码示例

# -*- coding:utf-8 -*-
# @Time   : 2024-01-21
# @Author : Carl_DJ

'''
实现功能:
    使用Python的gensim库实现LDA主题模型的
'''

import gensim  
from gensim import corpora  
from pprint import pprint  
  
# 假设我们有一些文档数据  
documents = [  
    "这是第一个文档。",  
    "这是第二个文档,与第一个文档相似。",  
    "第三个文档与前两个文档不同,讨论的是另一个主题。",  
]  
  
# 创建文本语料库  
texts = [[text for text in doc.split()] for doc in documents]  
dictionary = corpora.Dictionary(texts)  
corpus = [dictionary.doc2bow(text) for text in texts]  
  
# 使用LDA模型  
lda_model = gensim.models.LdaModel(corpus=corpus, id2word=dictionary, num_topics=2, random_state=100, update_every=1, chunksize=100, passes=10, alpha='auto', per_word_topics=True)  
  
# 打印主题  
pprint(lda_model.print_topics())  
  
 
# 获取文档的主题分布  
doc_topics = lda_model[corpus]  
for i, doc_topic in enumerate(doc_topics):  
    print(f"文档 {i} 的主题分布: {doc_topic}")  
  


  • 打印主题 运行结果
#输出结果示例  
[(0, '0.237*"文档" + 0.196*"第一个" + 0.179*"这是" + 0.145*"相似" + 0.100*"第二个"'),  
(1, '0.263*"另一个" + 0.251*"主题" + 0.226*"讨论" + 0.140*"是" + 0.120*"不同"')]  
  • 获取文档的主题分布运行结果
# 输出结果示例  
 文档 0 的主题分布: [(0, 0.9999911059222225)]  
 文档 1 的主题分布: [(0, 0.9999999999999997)]  
 文档 2 的主题分布: [(1, 0.9999999999999998)]

3、总结

潜在狄利克雷分配(LDA)是一种强大的无监督学习算法,它能够通过发现文档集合中的隐藏主题和主题分布,有效地揭示文档集合的内在结构。LDA的灵活性使其成为主题建模、文档分类、信息检索等多个任务中的理想选择。

LDA的核心在于它的生成式模型框架,该框架允许我们同时建模文档的主题混合和每个主题下的单词分布。通过最大化文档的似然性,LDA能够学习到这些分布,进而揭示出文档中的主题信息。

在实际应用中,LDA通常需要配合适当的预处理步骤(如分词、停用词去除、词干提取等)以及后续处理步骤(如主题可视化、主题解释等)来达到最佳效果。

此外,LDA的性能也受到一些因素的影响,如主题数量的选择、超参数的设定以及语料库的大小和质量等。

我是小鱼

  • CSDN 博客专家
  • 阿里云 专家博主
  • 51CTO博客专家
  • 企业认证金牌面试官
  • 多个名企认证&特邀讲师等
  • 名企签约职场面试培训、职场规划师
  • 多个国内主流技术社区的认证专家博主
  • 多款主流产品(阿里云等)测评一、二等奖获得者

关注小鱼,学习【机器学习】&【深度学习】知识,不再迷路。

标签:LDA,狄利克,主题,单词,算法,分布,文档,屌丝
From: https://blog.csdn.net/wuyoudeyuer/article/details/136848567

相关文章

  • 数据结构-排序算法(Java实现)
    1.插入排序1.1基本思想把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列。1.2图解 1.3原理解析第一趟:一组数据可以分为有序序列和无序序列, i表示无序序列的第一个元素,j表示有序序列的......
  • 前缀和算法讲解(二)
    首先,大家看一下一维的前缀和:https://blog.csdn.net/hjyowl/article/details/136580832?spm=1001.2014.3001.5502今天,我们讲解一下二维的前缀和.先看题:输入一个 n 行 m 列的整数矩阵,再输入 q 个询问,每个询问包含四个整数 x1,y1,x2,y2,表示一个子矩阵的左上角坐标和右下......
  • 2024年人工智能、算法与自动化工程国际学术会议(ICAIAAE 2024)
    【会议简介】   2024年人工智能、算法与自动化工程国际学术会议将汇聚来自世界各地的顶尖学者,共同探讨人工智能、算法与自动化工程领域的尖端技术和发展趋势。会议将围绕深度学习、机器学习算法和自动化系统设计等多个主题展开,展示最新的研究成果,推动技术创新和产业应......
  • 【蓝桥杯选拔赛真题48】C++九进制回文数 第十四届蓝桥杯青少年创意编程大赛 算法思维
    目录C++九进制回文数一、题目要求1、编程实现2、输入输出二、算法分析三、程序编写四、程序说明五、运行结果六、考点分析七、推荐资料C++九进制回文数第十四届蓝桥杯青少年创意编程大赛C++选拔赛真题一、题目要求1、编程实现提示信息:回文数:反向排列与原......
  • 图像缩放算法最近邻插值法
    最近邻插值是一种简单且常用的图像缩放算法。它基于以下原理:对于目标图像中的每个像素,找到在原始图像中对应的最近的像素点,并将其灰度值赋给目标像素。具体实现步骤如下:计算目标图像与原始图像的尺寸比例关系,即缩放因子。缩放因子可以根据目标图像的宽度和高度与原始图像的......
  • 图像缩放算法双线性插值法
    双线性插值法是一种常用的图像缩放算法,它可以通过对原始图像中的像素进行加权平均来计算目标图像中的像素值。相比最近邻插值,双线性插值可以更准确地估计像素之间的灰度值。具体实现步骤如下:计算目标图像与原始图像的尺寸比例关系,即缩放因子。缩放因子可以根据目标图像的宽......
  • 代码随想录算法训练营第五十八天|● 739. 每日温度 ● 496.下一个更大元素 I
    每日温度 题目链接:739.每日温度-力扣(LeetCode)思路:很容易想到暴力解法。但超时也是很轻松的。classSolution{public:vector<int>dailyTemperatures(vector<int>&temperatures){//stack<int>dd;intdd=1;vector<int>result(tempe......
  • 算法模板收集 (截至2024.3.26)
    准备线下比赛用的模板,会一直更新,但更新频率不高。找个代码托管平台放一下或许更合适,不过暂时没心思做这个。小提示:点击任意标题旁边的“显示目录导航”,再点击右上角的图钉可以固定目录。约定:所有区间操作都是在闭区间上进行的。编译器要支持gnu++11标准基本框......
  • NLP自然语言处理—主题模型LDA案例:挖掘人民网留言板文本数据|附代码数据
    全文链接:http://tecdat.cn/?p=2155最近我们被客户要求撰写关于NLP自然语言处理的研究报告,包括一些图形和统计输出。随着网民规模的不断扩大,互联网不仅是传统媒体和生活方式的补充,也是民意凸显的地带。领导干部参与网络问政的制度化正在成为一种发展趋势,这种趋势与互联网发展的时......
  • 「杂文」蒙特卡洛树搜索算法实现黑白棋 AI
    目录写在前面实验内容实验要求实验环境实验原理蒙特卡洛方法(MonteCarlomethod)蒙特卡洛树搜索(MonteCarlotreesearch)代码结构Infomation.pyBoard.pyNode.pyAI.pyWidget.py代码写在最后写在前面人工智能实验报告。妈的我真的不会写实验报告,感觉一堆屁话妈的下棋下不过爆搜,感......