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

第七章 文本表示:主题表示(二)

目录

前置案例——文本的表示与应用

一、概念介绍

二、向量空间模型

三、主题模型LDA

四、词嵌入模型Embding

五、 哈希模型--Simhash

三、主题模型LDA

传统的向量空间模型是一种显式的文本表示方法,无法深入捕获文本中隐含的语义关系。以潜在语义分析(latent semantic analysis,LSA)、概率潜在语义分析(probabilistic latent semantic analysis,PLSA)和潜在狄利克雷分布(latent Dirich-let allocation,LDA)为代表的主题模型,旨在挖掘文本中隐含的主题(topic)或概念(concept),可以在一定程度上捕获多义性(polysemy)和同义性(synonyms),从而部分地解决一词多义和一义多词问题。同时,主题提供了一种高维文本数据维数的约减方法,将传统的向量空间模型中的高维稀疏向量转化为低维稠密向量,以缓解维数灾难问题。

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

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

词袋假设:文档中的词序无关,单词的顺序不会影响主题建模。

主题生成假设:每个文档由若干主题混合生成,每个单词对应于某个主题。

主题分布与词分布:每篇文档的主题分布服从一个狄利克雷分布;每个主题的词分布也服从一个狄利克雷分布。

实现过程详解

(1)输入准备

输入:一组未标注的文本文档(语料库)。

预处理:分词、去停用词、词干化(如使用NLTK或jieba)。

(2)模型参数设定

K:预设的主题数量(需人工指定,可通过困惑度或一致性评分调优)。

α(alpha):文档-主题分布的先验参数,控制文档中主题的稀疏性。

β(beta):主题-词语分布的先验参数,控制主题中词语的稀疏性。

(3)生成过程(简化版)

LDA认为文档是按如下方式“生成”的:

1)对所有预设主题,分别从狄利克雷分布中采样得到每个主题的词分布(全局共享)。

2)为每篇文档从狄利克雷分布中采样,得到该文档专属的主题分布(如 [0.6, 0.3, 0.1])。

3)对文档中的每个词:

从当前文档的主题分布中随机选择一个主题;

从该主题对应的词分布中随机选择一个词输出

实际训练时,LDA 使用反向推断(如Gibbs采样或变分推断)从已有文本中还原这些分布。

(4)输出结果

文档-主题矩阵:每篇文档在K个主题上的概率分布。

主题-词语矩阵:每个主题下Top-N高概率词语列表,用于解释主题含义。

代码如下:

from gensim import corpora, models texts = [ ['人工智能', '学习', '机器', '算法'], ['猫', '宠物', '狗', '动物'], ['机器', '学习', '模型', '训练'], ['水果', '苹果', '香蕉', '营养'] ] dictionary = corpora.Dictionary(texts) corpus = [dictionary.doc2bow(text) for text in texts] lda_model = models.LdaModel( corpus, id2word=dictionary, num_topics=2, passes=20, random_state=42, # 固定随机种子 alpha='auto', # 自动学习α eta='auto' # 自动学习β ) # 打印主题-词语分布 print("主题-词语分布:") for topic_id, topic in lda_model.print_topics(num_words=4): print(f"主题 {topic_id}: {topic}") # 查看文档-主题分布 print("\n文档-主题分布:") for i, doc in enumerate(corpus): doc_topics = lda_model.get_document_topics(doc) print(f"文档 {i}: {doc_topics}")

运行结果如下:

主题-词语分布: 主题 0: 0.136*"宠物" + 0.136*"猫" + 0.136*"动物" + 0.136*"狗" 主题 1: 0.132*"学习" + 0.131*"机器" + 0.079*"训练" + 0.079*"水果" 文档-主题分布: 文档 0: [(0, np.float32(0.02778941)), (1, np.float32(0.9722106))] 文档 1: [(0, np.float32(0.92947286)), (1, np.float32(0.07052716))] 文档 2: [(0, np.float32(0.027789496)), (1, np.float32(0.97221047))] 文档 3: [(0, np.float32(0.027792636)), (1, np.float32(0.97220737))]

优点:可解释性强,主题可通过Top词直观命名;适合文档聚类、内容推荐等宏观分析任务。

局限:依赖词频统计,无法捕捉上下文语义;对一词多义处理能力有限(如“苹果”手机 vs 水果);对短文本效果差,因统计信号不足。

http://www.cnnetsun.cn/news/4087669.html

相关文章:

  • 保时捷日内瓦新车解析:电动性能与燃油精粹的平行进化
  • NCM转MP3只需一次拖拽:ncmdump让加密歌曲重获自由
  • 基于计算机视觉的体感控制器Quaddle:零硬件门槛实现机器人控制
  • Qwen3.8-Max 开源超大杯正式发布,如何让 AI 无感切换新模型
  • 基于Minimax官方Skill的导演Skill开发:从编排思维到工程实践
  • 大模型产品评估,别把调用量当成效果
  • 自动驾驶伦理标准:从电车难题到算法决策的技术实现与挑战
  • Re:Linux系统篇(五十七)线程篇 · 十:基于环形缓冲的生产者消费者模型与信号量
  • 零基础学 AI 漫剧(建议收藏)
  • JMETER连接DM8
  • 1.从零开始的单片机生活-LED篇
  • AI智能体时代:构建可审计、可复现的科研新范式
  • Windows Defender 移除实战指南:三档深度拆解,从关弹窗到打造纯净安装镜像
  • 把CPU装进TPU:AI芯片开始为Agent设计
  • iPad 选购避坑指南,四款机型核心差异与真实场景匹配
  • fre:ac 免费开源音频转换器完整指南:从CD抓轨到批量转码的实战手册
  • 论文复现总卡在数据预处理?非科班转AI这半年,AWS基础知识课帮我拆掉了第一块绊脚石
  • 【单片机毕业设计】基于 STM32/51 单片机矩阵按键式称重计价仪设计 基于 STM32/51 单片机的农产品智能称重计价装置设计(021103)
  • HTML5 Word Cloud 的国际化实现:web-l10n 多语言支持全解析
  • Redis OM Spring 索引注解完全指南:@Indexed/@Searchable/@GeoIndexed 一文掌握
  • 服务排障,日志要能还原一次请求
  • MES系统核心功能解析:生产车间数字化转型的关键支撑
  • 【初学者必看】Java的8种基础数据类型(附运算符优先级表)
  • Sigrity仿真全流程实战(SOC + 4G + MCU)
  • 嵌入式椭圆曲线加密实战指南:一文读懂 micro-ecc 如何守住资源受限设备的密钥安全
  • scrcpy 零基础投屏指南:10 分钟把安卓手机搬上电脑大屏
  • RaBitQ 量化技术实战解密:用每维 1 比特的压缩把亿级向量检索速度拉高一个数量级
  • 新员工如何快速接手项目?AI平台辅助上下文理解与文档重建
  • 深入Glance代码预览:Chroma语法高亮引擎如何让100+语言源码优雅呈现
  • dotnet 进阶篇