LDA主题模型——原理和模型(二)

news/2024/12/21 10:19:21/文章来源:https://www.cnblogs.com/haohai9309/p/18613461

主题模型是用于发现文档集合中隐含主题的统计模型,主题可以定义为“文档集中具有相同词境的词的集合模式”。主题模型克服了传统信息检索中文档相似度计算方法的缺点,并且能够在海量互联网数据中自动寻找出文字间的语义主题。最著名的主题模型是LDA(Latent Dirichlet Allocation)潜在狄利克雷分配模型,其核心思想是将每篇文档视为多个主题的概率混合,而每个主题则由词汇的概率分布构成。LDA通过建立文档-主题分布与主题-词分布,利用概率推断方法(如变分推断或Gibbs采样)对参数进行估计,从而自动识别文档中最有代表性的主题集合。例如,在一组新闻文本中,LDA可以发现诸如“经济”、“体育”、“科技”等主题,每个主题通过一组高频词来表示。这使得LDA能够在无监督学习的环境下,对文档进行主题建模,具有较高的可解释性和实用性。LDA模型已被广泛应用于文本分类、推荐系统、情感分析等任务,极大地提高了大规模文本数据的自动化处理能力。

一、LDA模型的基本原理

Latent Dirichlet Allocation(文档主题生成模型简称LDA),用于识别文档集中潜在的主题词信息。它可以将文档集中每篇文档的主题按照概率分布的形式给出,它是一种无监督学习算法,在训练时不需要手工标注的训练集,需要的仅仅是文档集以及指定主题的数量\(k\)即可。此外LDA的另一个优点则是,对于每一个主题均可找出一些词语来描述它。它也可以被称为一个三层贝叶斯概率模型,其中包含词,主题和文档。它的中心思想是一篇文章的每个词都是通过一定概率选择了某个主题,并从这个主题中以一定概率选择某个词语。它的特点是文档到主题服从多项式分布,主题到词服从多项式分布。

LDA是一种生成式概率主题模型,广泛用于文本主题挖掘,其核心思想是将文档视为多个主题的混合,而每个主题则由特定词汇的概率分布表示。LDA是一种典型的词袋模型,即它认为一篇文档是由一组词构成的一个集合,词与词之间没有顺序以及先后的关系。一篇文档可以包含多个主题,文档中每一个词都由其中的一个主题生成。所谓词袋模型,是将一篇文档,我们仅考虑一个词汇是否出现,而不考虑其出现的顺序。在词袋模型中,“我喜欢你”和“你喜欢我”是等价的。与词袋模型相反的一个模型是n-gram,n-gram考虑了词汇出现的先后顺序。

1.1 LDA模型结构

LDA(Latent Dirichlet Allocation)是一种三层贝叶斯概率模型,包含词、主题和文档三个层次。它基于词袋模型的假设,通过词汇共现关系分析文本中的主题分布。例如,一篇文档可能包含“人工智能”、“算法”、“深度学习”和“自动化”等词汇,通过LDA分析,这些词可能构成一个科技创新主题,主题分布可以帮助研究者将文档分类到相关类别。词汇共现关系是LDA的核心,指的是在特定语境中,词汇之间由于语义关联在文本中同时出现。比如,在描述气候变化的文本中,“全球变暖”、“碳排放”、“节能减排”和“绿色能源”可能构成一个主题,通过LDA建模,这些主题分布可以用于深入挖掘文本的语义结构,为自动文档分类和内容推荐等任务提供支持。

1.2 LDA模型假设

LDA对文本数据有以下几个基本假设:

  • 词袋假设:文档中的词序无关,单词的顺序不会影响主题建模。
  • 主题生成假设:每个文档由若干主题混合生成,每个单词对应于某个主题。
  • 主题分布与词分布
    • 每篇文档的主题分布服从一个狄利克雷分布
    • 每个主题的词分布也服从一个狄利克雷分布

1.3 LDA的优势和应用

LDA(潜在狄利克雷主题模型)具有显著的优势和广泛的应用。

LDA的优势
可解释性强:LDA通过词汇的概率分布来直观地表示主题,使得主题建模结果易于理解和分析,用户可以清晰地看到每个主题由哪些高频词构成。
无监督学习:LDA无需标注数据,能在大规模文本数据中自动挖掘潜在的主题结构,降低人工干预和标注成本。
灵活性高:LDA模型具有很高的扩展性,可以根据实际需求演变为动态主题模型(DTM)、层次主题模型(HLDA)等变体,适应更多复杂场景。
LDA的应用
文本主题建模:LDA可从文档集合中自动发现潜在主题,为文档结构化分析提供支持。
信息检索:通过主题建模对文档聚类,LDA能有效地提升搜索引擎的性能,并为用户推荐相关信息。
推荐系统:LDA被用于新闻推荐、个性化推送中,通过识别用户兴趣主题,将内容精准匹配给目标用户。
文本分类与聚类:LDA通过主题分布将文档按内容分组,提升文本分类效果,有助于自然语言处理任务。
情感分析:在情感分析中,LDA可辅助识别情感主题,提取用户的情绪表达。
学术分析:LDA可以对论文集合进行主题建模,揭示研究领域的热点和趋势。
LDA凭借其可解释性、无监督学习的优势和灵活的建模能力,在文本挖掘、推荐系统、信息检索等领域发挥了重要作用,成为自然语言处理的重要工具。

二、LDA数学模型

LDA(Latent Dirichlet Allocation)数学模型是一个概率生成模型,基于文档-主题和主题-词的分层结构,用于发现文档集合中的隐藏主题。下面给出LDA的详细数学表示。

2.1 LDA的符号定义

  • \(D\):文档集合的总数。
  • \(K\):主题的数量。
  • \(V\):词汇表中不同词的数量。
  • \(N_d\):文档 \(d\) 中单词的总数。
  • \(w_{d, n}\):文档 \(d\) 中位置 \(n\) 处的单词。
  • \(z_{d, n}\):文档 \(d\) 中单词 \(w_{d, n}\) 所对应的主题。
  • \(\theta_d\):文档 \(d\) 的主题分布,服从狄利克雷分布 \(\text{Dirichlet}(\alpha)\)
  • \(\phi_k\):主题 \(k\) 的词分布,服从狄利克雷分布 \(\text{Dirichlet}(\beta)\)
  • \(\alpha\):文档主题分布的超参数。
  • \(\beta\):主题词分布的超参数。

2.2 LDA的生成过程

LDA是一个生成式概率模型,假设文档是通过以下过程生成的:

  • 为每个主题 \(k\) 生成词分布
    每个主题 \(k\) 的词分布 \(\phi_k\) 服从一个狄利克雷分布:

    \[\phi_k \sim \text{Dirichlet}(\beta), \quad k = 1, 2, \dots, K \]

  • 为每篇文档 \(d\) 生成主题分布
    每篇文档的主题分布 \(\theta_d\) 服从狄利克雷分布:

    \[\theta_d \sim \text{Dirichlet}(\alpha), \quad d = 1, 2, \dots, D \]

  • 对文档 \(d\) 中的每个单词 \(n\) 进行生成

    • 从文档主题分布 \(\theta_d\) 中采样一个主题 \(z_{d, n}\)

      \[z_{d, n} \sim \text{Multinomial}(\theta_d) \]

    • 从主题 \(z_{d, n}\) 对应的词分布 \(\phi_{z_{d, n}}\) 中采样一个单词 \(w_{d, n}\)

      \[w_{d, n} \sim \text{Multinomial}(\phi_{z_{d, n}}) \]

2.3 LDA的概率表示

LDA模型的完整概率联合分布可以表示为:

\[p(\theta, \phi, z, w | \alpha, \beta) = \prod_{k=1}^K p(\phi_k | \beta) \prod_{d=1}^D p(\theta_d | \alpha) \prod_{n=1}^{N_d} p(z_{d, n} | \theta_d) p(w_{d, n} | \phi_{z_{d, n}}) \]

根据生成过程:

  • \(p(\phi_k | \beta)\):主题 \(k\) 的词分布,服从狄利克雷分布。
  • \(p(\theta_d | \alpha)\):文档 \(d\) 的主题分布,服从狄利克雷分布。
  • \(p(z_{d, n} | \theta_d)\):单词对应的主题分布,服从多项分布。
  • \(p(w_{d, n} | \phi_{z_{d, n}})\):给定主题下单词的分布,服从多项分布。

2.4 LDA的目标

在LDA中,观测到的是文档集合中每篇文档的单词 \(w\),而文档的主题分布 \(\theta\)、主题的词分布 \(\phi\) 和单词的主题分配 \(z\) 是隐藏变量。LDA的目标是对后验分布进行推断:

\[(\theta, \phi, z | w, \alpha, \beta) = \frac{p(\theta, \phi, z, w | \alpha, \beta)}{p(w | \alpha, \beta)} \]

其中分母 \(p(w | \alpha, \beta)\) 是观测数据的边缘似然,计算该值需要对所有隐藏变量进行积分求和,因此难以直接求解。

2.5 LDA的推断方法

由于LDA的后验分布无法解析,常用的方法包括:

  • 变分推断:通过变分分布近似后验分布,最小化KL散度。
  • Gibbs采样:一种马尔可夫链蒙特卡洛(MCMC)方法,通过迭代地对条件分布采样,逼近后验分布。

例如,Gibbs采样中,固定其他变量,更新单词主题分配 \(z_{d, n}\)

\[p(z_{d, n} = k | w, z_{-d, n}, \alpha, \beta) \propto (n_{d, k}^{-n} + \alpha_k) \frac{n_{k, v}^{-n} + \beta_v}{n_{k}^{-n} + \sum_v \beta_v} \]

其中:

  • \(n_{d, k}^{-n}\):文档 \(d\) 中除当前单词外主题 \(k\) 的个数。
  • \(n_{k, v}^{-n}\):主题 \(k\) 中词 \(v\) 的个数。
  • \(n_{k}^{-n}\):主题 \(k\) 中所有词的个数。

LDA通过词袋模型假设,对文档集合建模,挖掘文档中的潜在主题。其核心是基于狄利克雷分布构建文档-主题和主题-词的概率生成过程,并通过推断方法求解隐藏变量。

三、LDA主题模型案例

LDA主题模型主要用于推测文档的主题分布,可以将文档集中每篇文档的主题以概率分布的形式给出,根据主题进行主题聚类或文本分类。LDA主题模型不关心文档中单词的顺序,通常使用词袋特征(bag-of-word feature)来代表文档。为理解LDA模型,我们需要先了解LDA的生成模型,LDA认为一篇文章是怎么形成的呢?LDA模型认为主题可以由一个词汇分布来表示,而文章可以由主题分布来表示。比如有两个主题,美食美妆。LDA说两个主题可以由词汇分布表示,他们分别是:

  • 美食:\(\{面包:0.4,火锅:0.5,眉笔:0.03,腮红:0.07\}\)
  • 美妆:\(\{眉笔:0.4,腮红:0.5,面包:0.03,火锅:0.07\}\)

同样,对于两篇文章,LDA认为文章可以由主题分布这么表示:

  • 《美妆日记》\(\{美妆:0.8,美食:0.1,其他:0.1\}\)
  • 《美食探索》\(\{美食:0.8,美妆:0.1,其他:0.1\}\)

所以想要生成一篇文章,可以先以一定的概率选取上述某个主题,再以一定的概率选取那个主题下的某个单词,不断重复这两步就可以生成最终文章。在LDA模型中,一篇文档生成的方式如下:

  • 从狄利克雷分布 \(\alpha\) 中取样生成文档 \(i\) 的主题分布 \(\theta_i\)
  • 从主题的多项式分布 \(\theta_i\) 中取样生成文档 \(i\)\(j\) 个词的主题 \(z_{i,j}\)
  • 从狄利克雷分布 \(\beta\) 中取样生成主题 \(z_{i,j}\) 对应的词语分布 \(\phi_{z_{i,j}}\)
  • 从词语的多项式分布 \(\phi_{z_{i,j}}\) 中采样最终生成词语 \(w_{i,j}\)
    其中,类似Beta分布是二项式分布的共轭先验概率分布,而狄利克雷分布(Dirichlet分布)是多项式分布的共轭先验概率分布。

如果我们要生成一篇文档,它里面的每个词语出现的概率为:

\[p(\text{词语}|\text{文档})=\sum_{\text{主题}} p(\text{词语}|\text{主题})\times p(\text{主题}|\text{文档}) \]

这个概率公式可以用矩阵表示:

其中“文档-词语”矩阵表示每个文档中每个单词的词频,即出现的概率;“主题-词语”矩阵表示每个主题中每个单词的出现概率;“文档-主题”矩阵表示每个文档中每个主题出现的概率。看到文章推断其隐藏的主题分布,就是建模的目的。换言之,人类根据文档生成模型写成了各类文章,然后丢给了计算机,相当于计算机看到的是一篇篇已经写好的文章。现在计算机需要根据一篇篇文章中看到的一系列词归纳出当篇文章的主题,进而得出各个主题各自不同的出现概率:主题分布。

四、LDA主题模型的Python实现

from gensim import corpora, models# 1. 构建语料库
corpus = [['human', 'interface', 'computer'],['survey', 'user', 'computer', 'system', 'response', 'time'],['eps', 'user', 'interface', 'system'],['system', 'human', 'system', 'eps'],['user', 'response', 'time'],['trees'],['graph', 'trees'],['graph', 'minors', 'trees'],['graph', 'minors', 'survey']
]# 2. 创建词典
dictionary = corpora.Dictionary(corpus)# 3. 将语料库转换为词袋模型格式
bow_corpus = [dictionary.doc2bow(text) for text in corpus]# 4. 训练LDA模型
lda_model = models.LdaModel(corpus=bow_corpus, id2word=dictionary, num_topics=3, passes=10, random_state=42)# 5. 输出每个主题及其相关词汇
print("主题分布如下:\n")
for topic_id, topic in lda_model.print_topics(num_topics=3, num_words=5):print(f"主题 {topic_id}: {topic}")# 6. 对语料库中的文档进行主题分布预测
print("\n文档的主题分布:\n")
for doc_id, doc in enumerate(bow_corpus):doc_topics = lda_model.get_document_topics(doc)print(f"文档 {doc_id}: {doc_topics}")
主题分布如下:
主题 0: 0.208*"system" + 0.160*"user" + 0.112*"response" + 0.112*"time" + 0.112*"eps"
主题 1: 0.194*"human" + 0.194*"interface" + 0.189*"computer" + 0.047*"trees" + 0.047*"eps"
主题 2: 0.256*"graph" + 0.256*"trees" + 0.179*"minors" + 0.103*"survey" + 0.026*"human"文档的主题分布:
文档 0: [(0, 0.08732061), (1, 0.8290471), (2, 0.08363236)]
文档 1: [(0, 0.89714205), (1, 0.052957624), (2, 0.049900293)]
文档 2: [(0, 0.85143244), (1, 0.08151097), (2, 0.06705658)]
文档 3: [(0, 0.8516888), (1, 0.081270255), (2, 0.06704097)]
文档 4: [(0, 0.83216006), (1, 0.08410535), (2, 0.08373458)]
文档 5: [(0, 0.16690755), (1, 0.16742644), (2, 0.665666)]
文档 6: [(0, 0.11126231), (1, 0.11158561), (2, 0.7771521)]
文档 7: [(0, 0.08346356), (1, 0.08373914), (2, 0.8327973)]
文档 8: [(0, 0.08604128), (1, 0.084003665), (2, 0.82995504)]

总结

LDA(潜在狄利克雷主题模型)是一种生成式概率模型,旨在发现文档集合中的隐藏主题结构。它假设每篇文档是多个主题的混合,而每个主题由词汇的概率分布表示,即文档是主题上的概率分布,主题是单词上的概率分布。LDA通过建立文档-主题分布和主题-词分布,利用贝叶斯推断方法(如变分推断或Gibbs采样)估计参数,从而从数据中自动推断主题分布。LDA模型广泛应用于文本分类、主题提取、推荐系统等领域,能够高效地揭示文本数据中的潜在语义信息。

参考资料

  1. 主题模型-LDA
  2. 主题模型LDA(Latent Dirichlet Allocation)初探
  3. LDA主题模型简介及Python实现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/856256.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LDA主题模型——贝叶斯分布与其共轭(一)

img { display: block; margin-left: auto; margin-right: auto } table { margin-left: auto; margin-right: auto } 贝叶斯分布理论是统计推断的重要分支,其核心思想是利用贝叶斯定理,将先验知识与新观测数据结合,从而动态更新对未知参数的认识。这一理论框架以概率为基础…

pytest+requests+allure测试框架中,如何实现用例的数据驱动取出来的数据同步到fixture中,作为参数使用

1、在 pytest 中,如果你有多个数据驱动的 fixture 和测试用例,并希望确保它们的数据同步传递(即每个 fixture 和测试用例的数据对是一一对应的),你可以使用 pytest.mark.parametrize 来参数化测试函数和 fixture。为了确保 fixture 和测试函数中的数据同步传递,可以将它们…

webman: 使用模板引擎twig

一,安装 $ composer require twig/twig 二,配置 config/view.php <?php /*** This file is part of webman.** Licensed under The MIT License* For full copyright and license information, please see the MIT-LICENSE.txt* Redistributions of files must retain th…

读图数据库实战笔记09性能与反模式

性能与反模式1. 熵 1.1. 熵是物理学上的一个术语,本质上是一个系统“内在的混乱程度”​ 1.2. 是我们的敌人 2. 执行缓慢的遍历 2.1. 和关系数据库一样,图数据库对于执行缓慢的操作并不陌生 2.2. 图也有帮助诊断问题的工具2.2.1. 解释一个遍历会做什么2.2.2. 分析一个遍历做了…

广义少镜头分割的视觉提示:一种多尺度方法

广义少镜头分割的视觉提示:一种多尺度方法 5.5.1 多尺度方法概述 基于注意力的变换器模型的出现,由于其优越的泛化和传递特性,在各种任务中得到了广泛的应用。最近的研究表明,当得到适当的提示时,这些模型对于少镜头推理来说是极好的。然而,对于语义分割等密集预测任务,…

专著推荐《AI芯片开发核心技术详解》、《智能汽车传感器:原理设计应用》

专著推荐《AI芯片开发核心技术详解》、《智能汽车传感器:原理设计应用》由清华大学出版社资深编辑赵佳霓老师策划编辑的新书《AI芯片开发核心技术详解》已经出版,京东、淘宝天猫、当当等网上,相应陆陆续续可以购买。该书强力解析AI芯片的核心技术开发,内容翔实、知识点新颖…

【圆圆的日语教室】日语入门总复习

总复习 文字篇发音篇单词篇四季星期数字国家职业喜好家庭成员外来语儿歌篇 五十音图之歌 小星星 动物之歌 星期之歌 大大的栗子树下 数字歌 哆啦 A 梦之歌 狗狗巡警会话篇

【圆圆的日语教室】日语入门第6课-自我介绍(1)很高兴认识你

第六课——自我介绍(1)很高兴认识你 日语中汉字的两种读音方式音读:根据 当时 传过去的汉字的汉语读音发展得来的不同朝代传过去的读音可能不同,所以一个汉字可能有多种音读吴:南北朝时期、汉:隋唐时期、唐:宋元明清时期例子“明”字:训读:汉字的含义所对应的日语原本…

【圆圆的日语教室】日语入门第7课-自我介绍(2)深入交流

第七课——自我介绍(2)深入交流 介绍国家 常用单词我来自から:表示时间空间上的起点,“从” 来 ました:来(常规) まいりました:来(礼貌、自谦) 两种“来”的说法都可以。介绍职业 常用单词 圆圆带读運転手:司机 弁護士:律师我是介绍喜好 常用单词喜好问答介绍家庭 …

【圆圆的日语教室】日语入门第8课-片假名

第八课——片假名 片假名的书写あ 行あ:先写横折,然后在下面再写一撇 い:单人旁 う:宝盖头,先写一点一竖,然后第三笔拖长一点か 行か:“力”,平假名少了一点,平假名比较圆润,片假名横平竖直。 キ:平假名上面的部分,第一笔短横,第二笔长横。 ク:“久”少了最后一笔…

【圆圆的日语教室】日语入门第5课-长音促音拨音+日常问候

第五课——长音/促音/拨音+日常问候 长音 长音的发音方式 日语中 1 个假名是 1 拍。 所谓的一拍:双掌相对,留出一定距离。一拍的时间大概是从击掌到还原的时间。 短音:一拍清音、浊音、半浊音、拗音都是一拍长音:两拍长音不是读两遍,而是把一个假名的发音拖长一拍。长音的…

有哪些靠谱的卖课平台

随着数字化时代的来临,知识付费与线上教育正迎来新的机遇与挑战。在这个背景下,如何选择一个靠谱而高效的在线卖课平台至关重要。接下来,本文将以专业、多角度的分析探讨当前一些广受教育工作者认可的卖课平台,包括自媒体平台和第三方专业在线教育平台。希望通过本文的内容…