当前位置: 首页 > news >正文

算法系列——无监督学习——13.LDA

一、概述

LDA(Latent Dirichlet Allocation,隐含狄利克雷分布)是一种降维算法,适用于文本建模。一篇新闻文本可能会有一个诸如“体育”或“教育”等的主题,也可能有多个主题。使用LDA可以将文本中的单词作为输入,为其分配多个主题。

LDA是一种用于自然语言处理等的算法。该算法可以根据文本中的单词找出潜在的主题,并描述每个文本是由什么主题组成的,还可以用于说明一个文本不只有一个主题,而是有多个主题。 例如,一篇真实的新闻文本可能包含多个主题,如“体育”和“教育”等,使用LDA就可以很好地描述这种新闻文本。

为了便于理解,我们来思考几个具体的例子。对以下5个例句应用LDA,结果会是什么样 呢?假设这些例句中的主题数为2。

1. We go to school on weekdays.
2. I like playing sports.
3. They enjoyed playing sports in school.
4. Did she go there after school?
5. He read the sports columns yesterday.
我们可以将主题看作单词的概率分布。推测出的主题A和主题B的单词的概率分布如图所示,school是主题A的代表性单词,sports是主题B的代表性单词。此外,也可以推测文本中包含的主题的比例,从而以主题的概率分布(主题分布)描述各文本。如图所示,LDA可以利用主题分布和单词分布创建文本数据。

具体做法是基于文本的主题分布选择主题,之后基于主题的单词分布选择文本中的单词。重复这一操作,就能得到生成文本的模型。下面的“算法说明”部分将介绍如何根据输入数据计算主题分布和单词分布。
1. 基于文本的主题分布为单词分配主题。
2. 基于分配的主题的单词分布确定单词。
3. 对所有文本中包含的单词执行步骤1和步骤2的操作。

二、算法说明

LDA通过以下步骤计算主题分布和单词分布。

1. 为各文本的单词随机分配主题。

2. 基于为单词分配的主题,计算每个文本的主题概率。

3. 基于为单词分配的主题,计算每个主题的单词概率。

4. 计算步骤2和步骤 3中的概率的乘积,基于得到的概率,再次为各文本的单词分配主题。

5. 重复步骤2 ~ 步骤4的计算,直到收敛。

根据步骤4中计算得到的概率,为各文本的单词分配主题。由于步骤2中确定了文本的主题概率,所以在同一个文本内,某些主题被选中的可能性较大。另外,同一个文本中的单词往往被选为同一主题。通过重复这样的计算,文本分配到特定主题的概率就会增加。同时,由于与每个主题相关联的单词更容易被选中,所以单词作为代表主题的词的概率也会增加。

三、示例代码

下面使用scikit-learn实现基于LDA的主题模型的创建。我们使用一个名为20 Newsgroups的 数据集,这个数据集是20个主题的新闻组文本的集合,每个文本属于一个主题。

from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.decomposition import LatentDirichletAllocation
# 使用remove去除正文以外的信息
data = fetch_20newsgroups(remove=('headers', 'footers', 'quotes'))
max_features = 1000
# 将文本数据变换为向量
tf_vectorizer = CountVectorizer(max_features=max_features,
stop_words='english')
tf = tf_vectorizer.fit_transform(data.data)
n_topics = 20
model = LatentDirichletAllocation(n_components=n_topics)
model.fit(tf)
print(model.components_)  # 各主题包含的单词的分布
print(model.transform(tf))  # 使用主题描述的文本

四、详细说明

使用主题描述文本
下面我们仔细看一下刚刚在“算法说明”部分训练的LDA的结果。下图按照概率从高到低的顺序列出了每个主题分布中的单词,由此我们可以知道哪些单词代表主题。

例如,主题16是关于体育的,主题18是关于计算机的……我们可以根据主题中包含的单词来解释主题。

另一些主题要么只包含数值,要么包含的都是一些不能表达主题的没有特指的单词,如下图所示。这些结果乍一看很难解释,下面通过停用词(为了提高精度而排除在外的单词)来对其进行改进。

接下来,我们来看一下文本的主题分布。下图所示为某文本的主题分布图。由于它包含了较多主题18的成分,可以断定这是关于计算机的文本。这个文本的实际主题是comp.sys.mac.hardware,是关于苹果公司的Mac的文本。

如果只用单词来描述文本的特征,就很难直观地理解,但通过LDA,我们就能够用主题来描述文本的特征。
 

 

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

相关文章:

  • 在 Windows 上安装 WSL Ubuntu 的完整避坑指南:从报错到成功运行
  • 深入理解 React useLayoutEffect:精准掌控 DOM 更新时机
  • vscode中REST Client插件
  • 3-1 Git分布式版本控制特性探讨
  • Ansible(8)——循环与条件任务
  • 10-MySQL-性能优化思路
  • web前端 html常用标签
  • Java 设计模式:策略模式详解
  • 使用 Fabric.js 构建一个在线白板组件(支持绘图 / 拖拽 / 导出)
  • 【含文档+PPT+源码】微信小程序的线上茶叶交易商城的设计与实现
  • 批处理脚本bat丨遍历一个包含项目名称的数组,并对每个文件中的项目执行 git pull 操作 (一键拉很多文件的代码)
  • AI智能体生态革命:谷歌A2A协议如何重塑未来十年? ——当“安卓模式”撞上AI Agent,一场没有硝烟的战争开始了
  • 支付宝SEO全攻略:小程序搜索优化的系统方法与实践指南
  • Python文件操作完全指南:从基础到高级应用
  • 一文读懂WPF布局
  • 深度解读分销小程序商城源码系统:从搭建到运营的关键指南​​​​
  • IntelliJ IDEA 中安装和使用通义灵码 AI 编程助手教程
  • 第一部分——Docker篇 第五章 容器编排
  • 汽车知识杂志社汽车知识编辑部汽车知识杂志2025年第4期目录
  • 2020 CCF CSP-S2.函数调用
  • IP属地和所在地不一致什么意思?怎么换成另外一个地方的
  • 【MATLAB第114期】基于MATLAB的SHAP可解释神经网络分类模型(敏感性分析方法)
  • [ctfshow web入门] web40
  • 【Kubernetes】Kubernetes 如何进行日志管理?Fluentd / Loki / ELK 适用于什么场景?
  • vue辅助工具(vue系列二)
  • MySQL8.0.31安装教程,附pdf资料和压缩包文件
  • 【Grok 大模型深度解析】第一期:技术溯源与核心突破
  • openEuler 24.03安装docker,docker compose
  • arthas之profiler火焰图基本使用和实践
  • Elasticsearch 向量数据库,原生支持 Google Cloud Vertex AI 平台