LDA 指南

article/2025/11/10 14:15:25

『本文转自:https://wdxtub.com/2017/05/03/lda-guide/』

LDA 作为文本分析中非常有用的算法,无论是在学术界还是工业界都已被广泛运用。本文是写给自己的 LDA 理解指南。


更新历史

  • 2017.05.03: 完成初稿

关于 LDA 算法,网上的资料不胜枚举,除了 wiki,我最推荐 《 LDA 漫游指南》。那么为什么我还要自己写一篇呢?一是加深理解,二是给出我在工作中应用 LDA 的一些思考。

基础知识

我们首先需要知道的是,LDA 是一种无监督机器学习技术,用来识别大规模文档集或语料库中潜在隐藏的主题信息。具体是怎么识别主题的呢?LDA 中最小单位是词,并假定每个词是由一个潜在隐藏的主题中抽取出来的。

当然,本文不会涉及具体的推导(用 mathjax 敲这些公式太痛苦了)。我们用上帝视角来还原整个过程:

  1. 拿到一篇文章,文章是由『词』组成的
  2. 因为开了上帝视角,我们能够一眼看出每个『词』所属的『主题』
  3. 又因为开了上帝视角,我们在知道了每个『词』所属的『主题』之后,就可以判断出这篇文章所对应的『主题』了。

那么 LDA 在这里做了什么?其实就是通过概率和计算,帮我们开了这么个上帝视角。如果对具体的推导感兴趣,可以参阅最后的链接。

应用场景

因为每个文章会被『划归』到某个『主题』中,所以我们可以:

  • 相似文档发现,具体到产品中可以是『相关新闻』『类似文章』
  • 自动打标签,具体步骤为:分词 - 词性标注 - 去掉副词、介词 - LDA 训练 - 获取主题相关词,这些相关词即为标签
  • 新闻个性化推荐,具体步骤为:用 LDA 得到文章 Topic - 用 LR 进行点击预测 - 推荐同 Topic 最可能点击(且未点击)的新闻。另一种可能的方式是(不需要 LR):记录用户的点击偏好(比如最常看哪类 topic) - 推荐这个 topic 中 topK 的文章(这个方法更加简答)

主题打分

因为 LDA 生成的主题是没有排序的,所以我们可以把显著的、有特色的主题排到前面,而将不明意义的主题往后面排。

注:这个在客服行业中非常有用,因为有时候会需要从大量的客服日志中提取出通用的 FAQ 问题并建立知识库,如果有这么一个排序,就可以减少人工评判的工作量。

算法的核心思路是当前 topic 的概率分本与垃圾分布的距离。如果你跟我一样用 gensim 这个 python 包的话,那么下面这几个函数需要重点留意:

 

get_document_topics(bow, minimum_probability=None, minimum_phi_value=None, per_word_topics=False)

Return topic distribution for the given document bow, as a list of (topic_id, topic_probability) 2-tuples.

Ignore topics with very low probability (below minimum_probability).

If per_word_topics is True, it also returns a list of topics, sorted in descending order of most likely topics for that word. It also returns a list of word_ids and each words corresponding topics’ phi_values, multiplied by feature length (i.e, word count)

get_term_topics(word_id, minimum_probability=None)

Returns most likely topics for a particular word in vocab.

get_topic_terms(topicid, topn=10)

Return a list of (word_id, probability) 2-tuples for the most probable words in topic topicid.

Only return 2-tuples for the topn most probable words (ignore the rest).

这里我们需要计算两个距离:

  1. topic -> doc 距离。主要看文章分布是不是过于平均
  2. topic -> word 距离。主要看关键词排序是不是过于平均

topic -> doc 距离

我们先由前面的 get_document_topics 获取到每个 document 对应 topic,然后转换成每个 topic 对应的 document。因为每个 document 对应到 topic 是有一个概率的,我们需要归一化一下,这里举个例子就清楚了。

 

# 假设 topic A 中只有四篇文章

doc1 - 属于 topic A 的概率是 0.9

doc2 - 属于 topic A 的概率是 0.8

doc3 - 属于 topic A 的概率是 0.7

doc4 - 属于 topic A 的概率是 0.6

# 那么 topic A -> doc 的概率分布向量经过归一化后是

# 这里的 3 = 0.9 + 0.8 + 0.7 + 0.6,保证这个向量每个元素相加最后等于 1 即可

[0.9/3, 0.8/3, 0.7/3, 0.6/3]

# 我们需要跟下面这个背景噪音向量进行比较

# 这里 4 是文章的数目

[1/4, 1/4, 1/4, 1/4]

然后我们只要计算这两个向量之间的距离即可,各类距离的计算方法可以看这里,KL divergence, Cosine, 皮尔逊相关度之类的都可以,距离越大,主题越有特色。

topic -> word 距离

我们先由 get_topic_terms 获取 topic -> word 的概率分布,然后我们计算出词向量,具体我们还是看例子

 

# 假设 Topic A 有 4 个关键词(可以自己设置,这里只是一个例子)

word1 0.30

word2 0.25

word3 0.25

word4 0.20

# 转化成向量比之前的要简单

[0.3, 0.25, 0.25, 0.2]

# 我们需要跟下面这个背景噪音向量进行比较

# 这里 4 是该 topic 下词的数目

[1/4, 1/4, 1/4, 1/4]

然后我们只要计算这两个向量之间的距离即可,各类距离的计算方法可以看这里,KL divergence, Cosine, 皮尔逊相关度之类的都可以,距离越大,主题越有特色。(和前面一样的只是复制粘贴一下)。

最终得分是一个加权的排序,我们的公式是

 

 

FinalScore=a \times Topic2DocScore+b \times Topic2WordScore

这里的 a 和 b 可以根据需要自己调整。

写在最后

抛开原理不谈,其实 LDA 的具体应用更多是在给出一个排序的依据,无论是相似还是推荐,本质都是排序(只是排序的标准不同),而在这个排序的过程中所给出的隐含 topic,如果可以加以利用,就能得到意想不到的效果。

参考链接

  • LDA 漫游指南
  • 主题模型-LDA浅析

http://chatgpt.dhexx.cn/article/FI4xMbVR.shtml

相关文章

LDA

关于降维算法 机器学习领域中所谓的降维就是指采用某种映射方法,将原高维空间中的数据点映射到低维度的空间中。降维的本质是学习一个映射函数 f : x->y,其中x是原始数据点的表达,目前最多使用向量表达形式。 y是数据点映射后的低维向量表…

LDA详解

【几个问题待解决:1.LDA的先计算联合概率体现在哪里 2.对于theta 的采样的理解,下文中的theta1 ,theta2等其实是指theta向量中的第一个,第二个等,也就是不同文章的不同单词的主题,固定其他,分别…

LDA的通俗理解

1.PLSA模型 在讲解LDA模型之前,与LDA模型最为接近的便是下面要阐述的这个pLSA模型,给pLSA加上贝叶斯框架,便是LDA。 1.1什么是pLSA模型 我们假定一篇文档只由一个主题生成,可实际中,一篇文章往往有多个主题&#xff…

LDA模型详解

LDA是自然语言处理中非常常用的一个主题模型,全称是隐含狄利克雷分布(Latent Dirichlet Allocation),简称LDA。作用是将文档集中每篇文档的主题以概率分布的形式给出,然后通过分析分到同一主题下的文档抽取其实际的主题…

机器学习——LDA(线性判别分析)与人脸识别

忆如完整项目/代码详见github:https://github.com/yiru1225(转载标明出处 勿白嫖 star for projects thanks) 目录 系列文章目录 一、LDA的概念与原理 1.LDA简介 2.LDA算法模型 3.LDA的不足与优化 二、LDA运用于人脸识别 1.预处理 1…

线性判别分析(LDA)详解

入门小菜鸟,希望像做笔记记录自己学的东西,也希望能帮助到同样入门的人,更希望大佬们帮忙纠错啦~侵权立删。 目录 一、LDA简介 二、数学原理(以二分类为例子) 1、设定 2、每一类的均值和方差 3、目标函数 4、目标…

LDA算法——线性判别

目录 一、前言 二、什么是LDA? 三、LDA原理 1.二分类问题 2.多分类问题 3.几点说明 四、算法实现 一、前言 之前我们已经介绍过PCA算法,这是一种无监督的降维方法,可以将高维数据转化为低维数据处理。然而,PCA总是能适用吗&…

主题模型:LDA原理详解与应用

LDA算法简介: LDA是一种基于贝叶斯思想的无监督的聚类算法,广泛用于文本聚类,文本分析,文本关键词等场景。具体的,算法 的输入是一个文档的集合D{d1, d2, d3, ... , dn},同时还需要主题Topic的类别数量m&a…

LDA主题模型简介及Python实现

一、LDA主题模型简介 LDA主题模型主要用于推测文档的主题分布,可以将文档集中每篇文档的主题以概率分布的形式给出根据主题进行主题聚类或文本分类。 LDA主题模型不关心文档中单词的顺序,通常使用词袋特征(bag-of-word feature)来…

制作属于自己的个人博客-超详细教程

SpringBoot个人博客 一.博客效果预览 博客首页预览 博客详情预览 博客评论区预览 博客底部栏预览 关于页面预览 二.博客效果在线预览 http://blog.ShaoxiongDu.top 三.项目技术 后端SpringBoot框架 分为控制层(Controller) 业务层(Service) 数据持久层(Dao) 按照Spring…

如何搭建个人博客

新的安装方式:(强烈推荐,简单方便) 利用dockernginx配置halo博客 先碎碎念一下,最近在学习springboot项目,在b站跟着up主研究如何写一个简易的博客来着,后来发现可以直接简易的搭建一个博客(都不用写代码&a…

使用 nodejs 搭建个人博客

"使用nodejs搭建自己的个人博客" 说明运行后端 node 模块后端框架采用的是 express 框架进行接口构建,具体解释如下:数据库参数配置评论邮箱提示付费文件下载配置(支付宝)评论语句检测 关于跨域问题的解决 说明 使用no…

超详细图解:如何使用 WordPress搭建一个个人博客?

前两天我用WordPress 给自己搭建了一个网站,整个过程非常的顺利,体验非常地好,于是我就整个过程、以及其中的一些搭建心得,记录下来。 如果你也正好有搭建个人网站的想法,那么本文会给你一个参考,也许看了这…

个人博客网站的设计与实现

/ 前话 / 纯手工敲代码,代码结构简单,divcss布局html静态个人博客首页网页设计,dreamwaver和hb都可以编辑,文件结构包含了css、fonts、images、js和html,运用html5技术,包括nav标签、header标签和footer标签…

个人博客系统毕业设计开题报告

本文给出的是本科生个人博客系统的毕业设计开题报告,仅供参考!(具体模板和要求按照自己学校给的要求) 毕业设计开题报告 一、选题意义二、博客系统概述三 、毕业设计研究方案四、功能结构图五、进度安排六、参考文献 一、选题意义…

基于HTML个人博客网站项目的设计与实现——个人博客作品展示6页 HTML+CSS

Web前端开发技术 描述 网页设计题材,DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 个人博客网站 | 个人主页介绍 | 个人简介 | 个人博客设计制作 | 等网站的设计与制作 | 大学生个人HTML网页设计作品 | HTML期末大学生网页设计作业 HTML:结构 CSS&…

HTML制作个人网页制作(简单静态HTML个人博客网页作品)

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

个人主页博客网页设计制作HTML5+CSS大作业——清新春暖花开个人博客网站(6页)

HTML5CSS大作业——清新春暖花开个人博客网站(6页) 常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、 茶叶、 家居、 酒店、 舞蹈、 动漫、 明星、 服装、 体育、 化妆品、 物流、 环保、 书籍、 婚纱、 军事、 游戏、 节日、 戒烟、 电影、 摄…

如何使用HTML制作个人网站(如何搭建个人博客)

📂文章目录 一、👨‍🎓网站题目二、✍️网站描述三、📚网站介绍四、🌐网站演示五、⚙️ 网站代码🧱HTML结构代码💒CSS样式代码 六、🥇 如何让学习不再盲目七、🎁更多干货…

10分钟搭建一个免费个人博客网站

一个程序员怎么能不拥有自己的博客,本文让10分钟快速搭建部署好自己的博客 准备工作 有Gitee账号有安装git会 markdown 编写文档Node.js 版本 > 8.6 博客采用VuePress搭建,Gitee部署,接下来,5步搞定。 1.创建项目 创建项目…