【自然语言处理】Topic Coherence You Need to Know(主题连贯度详解)

news2024/9/29 22:19:58

Topic Coherence You Need to Know

皮皮,京哥 皮皮,京哥 皮皮,京哥 C o m m u n i c a t i o n   U n i v e r s i t y   o f   C h i n a Communication\ University\ of\ China Communication University of China

在大多数关于主题建模的文章中,常用主题连贯度(Topic Coherence,主题一致性)或主题连贯度指标(Topic Coherence Metrics)来表示整体主题的可解释性,用于评估主题的质量。

但是,该指标到底指什么?它是如何衡量主题的可解释性的?该值是否越大越好?本文将就这些问题做出解答。

1.主题建模

主题建模将文本数据集分解为主题和单词这两个分布来进行解释。一般基于以下假设:

  • 一个文档由几个主题组成
  • 一个主题由一组单词组成

因此,可以将主题建模算法理解为一种数学上的统计模型,用于推断哪些主题更能代表数据。

简单来说,主题可以被描述为单词的集合,例如 [ball, cat, house] 和 [airplane, clouds]。但实际上,算法要做的是为我们词汇表中的每个单词分配一个给定主题的参与值。具有高参与值的单词可以被视为该主题的代表。

在这里插入图片描述

2.评估主题

主题建模算法基于数学和统计学。但站在人的视角,数学上最优的主题并不一定是最好的主题。

例如,根据主题建模算法得到以下两个主题:

  • Topic 1catdoghometoy(可能是个好的主题)
  • Topic 2supernursebrick(可能是个比较糟的主题)

从人的视角来看,第一个主题要比第二个主题更连贯,但对于算法而言,它们可能拥有相同的指标。

构建的主题应该是易于理解的。因此,盲目地遵循主题模型算法背后的数学原理可能会误导我们,并生成无意义的主题。

正因如此,主题评估工作通常需要人工参与,例如阅读每个主题中最重要的单词,查看与每个文档相关的主题。但是,对于具有数千个主题的大规模数据集,此任务可能非常耗时且不切实际。它还需要有关数据集领域的先验知识,并且可能需要专家意见。

主题连贯度试图以 独特、客观且易于评估的数字 来代表对主题的 高质量人类感知

3.如何计算主题连贯性

通常,连贯性指的是 合作特征。如果一组论点相互印证,我们可以认为它们是连贯的。

此处,主题连贯性指的是文本集(称为参考语料库,reference corpus支持 主题的程度。它从参考语料中提取统计数据和概率,并特别关注单词的上下文,计算主题连贯性分数。这也说明主题连贯性度量不仅取决于主题本身,还取决于参考语料。

在这里插入图片描述
Röder, M. 等人在论文《Exploring the Space of Topic Coherence Measures》中提出了主题连贯性度量的一般结构如下:

在这里插入图片描述
该结构由不同的独立模块组合而成,每个模块都执行特定的任务。

可以把计算主题连贯性度量看做是一个管道(Pipeline),它接收主题和参考语料作为输入,并输出一个代表 整体主题连贯性 的值。该过程模拟了人类对主题进行评估。

3.1 Segmentation

该模块负责创建用来评估主题连贯性的单词子集。

假设 W W W 包含了主题 t t t 的前 n n n 个最重要的单词 { w 1 , w 2 , … , w n } \{w_1, w_2, …, w_n\} {w1,w2,,wn},对 W W W 的进行分割,得到子集对 S S S

在这里插入图片描述
W ∗ W^* W 用于对 W ′ W^{'} W 进行确认。下一小节将会结合实例对此进行介绍。简单来说,分割可以理解为如何 混合 主题中的单词,以进行后面的评估步骤。

例如,S-one-one 表示对不同的词进行配对。此种模式下,模型对主题中任意两个词之间的关系感兴趣。所以,若 W W W { ‘ c a t ’ , ‘ d o g ’ , ‘ t o y ’ } \{‘cat’, ‘dog’, ‘toy’\} {cat,dog,toy},则有:

在这里插入图片描述
S-one-all 则表示将每个词与其他所有词配对。此种模式下,连贯性分数将基于单个词与主题中其余词之间的关系。应用于 W W W,则有:

在这里插入图片描述

3.2 Probability Calculation

例如,假设我们对两种不同的概率感兴趣:

  • P ( w ) P(w) P(w):词 w w w 出现的概率
  • P ( w 1   a n d   w 2 ) P(w1\ and\ w2) P(w1 and w2):词 w 1 w1 w1 w 2 w2 w2 出现的概率

针对这些概率有不同的计算方法,例如:

  • P b d Pbd Pbd b d bd bd 代表 boolean document): P ( w ) P(w) P(w) 表示包含单词 w w w 的文档数除以文档总数, P ( w 1   a n d   w 2 ) P(w1\ and\ w2) P(w1 and w2) 表示包含单词 w 1 w1 w1 w 2 w2 w2 的文档数除以文档总数。
  • P b s Pbs Pbs b s bs bs 代表 boolean sentence),该方法与 P b d Pbd Pbd 方法类似,但它考虑的是单词在句子中的出现次数,而不是文档中的出现次数。
  • P s w Psw Psw s w sw sw 代表 sliding window),它考虑的是单词在文本滑动窗口中出现的次数。

3.3 Confirmation Measure

该步骤是计算主题连贯性的核心。用从 P P P 中得到的概率在 S S S 上计算确认度量,即用从语料库计算的概率来量化两个子集之间的 关系

此步骤会计算 W ∗ W^{*} W W ′ W^{'} W 的支持程度。因此,如果 W ′ W^{'} W 中的词与 W ∗ W^{*} W 中的词相关联(例如,经常出现在同一文档中),则确认度会很高。

在这里插入图片描述
上图中,确认度量 m m m 应用于每一个子集对,并输出确认分数。有两种不同类型的确认措施:

  • 直接确认措施:这些度量通过直接使用子集 W ′ W^{'} W W ∗ W^{*} W 以及概率来计算确认值。例如:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 间接确认措施:间接确认措施不会直接根据 W ′ W^{'} W W ∗ W^{*} W 计算分数。它们计算 W ′ W^{'} W 中的单词和 W W W 中所有其他单词的直接确认度量 m m m,构建了一个度量向量,如下图所示。再对 W ∗ W^{*} W 进行相同的处理。最后以这两个向量之间的相似性(例如,余弦相似性)作为最后的确认度量结果。

在这里插入图片描述
在这里插入图片描述
例如,为了计算 ( ‘ c a t ’,‘ d o g ’ ) (‘cat’,‘dog’) (catdog) 的确认度量,首先计算每个元素和主题中所有单词的确认度量 m m m ,创建一个确认度量向量。然后,最终的确认措施是这两个向量之间的相似性。

在这里插入图片描述
该过程表明了直接方法的一些缺点。例如,catdog 这两个词可能永远不会在我们的数据集中出现,但它们可能经常与 toypetscute 这些词一起出现。使用直接方法,这两个词的确认分数较低,但使用间接方法,相似性可能会很突出,因为它们出现在相似的上下文中。

3.4 Aggregation

此处会将上一步计算的所有值聚合成一个值,即最终的主题连贯性分数。聚合方法可以是 算术平均数、中位数、几何平均数 等。

在这里插入图片描述

3.5 小结

回顾一下上述步骤。

  • 有一个待评估的主题
  • 选择一个参考语料库
  • 找到主题中最重要的前 n n n 个词,记为 W W W
  • W W W 分割成子集对 S S S
  • 利用参考语料库,使用技术 P P P 计算单词概率
  • 使用确认度量 m m m 来评估每个子集对之间的关系
  • 汇总得到一个最终数字,即主题连贯性得分

在这里插入图片描述
在多个主题的情况下,最终结果是单个主题连贯性的平均值。
在这里插入图片描述

4.Gensim中的模型

Gensim 提供了四种计算主题连贯性的方法:u_massc_vc_ucic_npmi

在这里插入图片描述

在原论文中,作者已经详细说明了这些模型是如何构建的。

在这里插入图片描述
C_NPMI 为例:

  • Segmentation:采用 S-one-one 的方法,即在成对的词上计算确认度。
  • Probability Calculation:使用方法 P s w ( 10 ) Psw(10) Psw(10)。滑动窗口的大小为 10 10 10
  • Confirmation Measure:确认措施是归一化逐点互信息(NPMI)。

在这里插入图片描述

  • Aggregation:利用算术平均值进行聚合。

C_V 方法同理:

  • Segmentation:采用 S-one-set 的方法,即确认度量将在一个词和集合 W W W 的对上计算。
  • Probability Calculation:使用方法 P s w ( 110 ) Psw(110) Psw(110)。滑动窗口大小为 110 110 110
  • Confirmation Measure:该步使用间接确认措施。使用度量 m n l r m_{nlr} mnlr,将每对元素的单词与 W W W 的所有其他单词进行比较。最终得分是两个度量向量之间的余弦相似度。
  • Aggregation:利用算术平均值进行聚合。

5.实践

import pandas as pd
import re

import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.datasets import fetch_20newsgroups

from gensim.models.coherencemodel import CoherenceModel
from gensim.corpora.dictionary import Dictionary
texts, _ = fetch_20newsgroups(subset='all', remove=('headers', 'footers', 'quotes'), return_X_y=True )
tokenizer = lambda s: re.findall('\w+', s.lower() )
texts = [tokenizer(t) for t in  texts]

在 Gensim 中计算 Coherence 非常简单,只需要创建一组主题并传递文本即可。

# Creating some random topics
topics = [ ['space', 'planet', 'mars', 'galaxy'],
           ['cold', 'medicine', 'doctor', 'health', 'water'],
           ['cats', 'health', 'keyboard', 'car', 'banana'],
           ['windows', 'mac', 'computer', 'operating', 'system'] ]

# Creating a dictionary with the vocabulary
word2id = Dictionary(texts)

# Coherence model
cm = CoherenceModel(topics=topics, 
                    texts=texts,
                    coherence='c_v',  
                    dictionary=word2id)

coherence_per_topic = cm.get_coherence_per_topic()

.get_coherence_per_topic() 方法返回每个主题的连贯性值。

topics_str = ['\n '.join(t) for t in topics]
data_topic_score = pd.DataFrame(data=zip(topics_str, coherence_per_topic), columns=['Topic', 'Coherence'])
data_topic_score = data_topic_score.set_index('Topic')

fig, ax = plt.subplots(figsize=(2,6))
ax.set_title("Topics coherence\n $C_v$")
sns.heatmap(data=data_topic_score, annot=True, square=True,
            cmap='Reds', fmt='.2f',
            linecolor='black', ax=ax )
plt.yticks(rotation=0)
ax.set_xlabel('')
ax.set_ylabel('')
fig.show()

在这里插入图片描述

6.总结

主题连贯性是衡量一个主题质量的重要标准。本文中,我们深入探讨了主题连贯性的基本结构和数学原理。通过 SegmentationProbability CalculationConfirmation MeasureAggregation 等步骤计算主题连贯性。并通过代码实例了解了如何在 Gensim 中计算主题连贯性。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JSP实现数据传递与保存(一)

学习目标: 理解JSP内置对象的概念 掌握request和response的使用 掌握转发和重定向的区别 掌握out对象的使用 学习内容: 1.HTML页面转成JSP页面 HTML页面转成JSP页面一般有两种方式 方式1:直接修改HTML页面 1)直接在HTM…

QT+OpenGL模板测试和混合

QTOpenGL模板测试和混合 本篇完整工程见gitee:QtOpenGL 对应点的tag,由turbolove提供技术支持,您可以关注博主或者私信博主 模板测试 当片段着色器处理完一个片段之后,模板测试会开始执行。和深度测试一样,它可能会丢弃片段&am…

Win11的两个实用技巧系列之Win11怎么找回Win7照片查看器

Win11怎么找回Win7照片查看器? Win11旧版照片查看器的切换方法Win11怎么找回Win7照片查看器?用习惯了win7的照片查看器,想要在win11中使用,该怎么启用旧版照片查看器呢?下面我们就来看看Win11旧版照片查看器的切换方法Win11系统启…

c++之二叉树【进阶版】

前言 在c语言阶段的数据结构系列中已经学习过二叉树,但是这篇文章是二叉树的进阶版,因为首先就会讲到一种树形结构“二叉搜索树”,学习二叉搜索树的目标是为了更好的理解map和set的特性。二叉搜索树的特性就是左子树键值小于根,右…

【JVM】运行时数据区与对象的创建流程

4、运行时数据区 4.1、运行时数据区介绍 运行时数据区也就是JVM在运⾏时产生的数据存放的区域,这块区域就是JVM的内存区域,也称为JVM的内存模型——JMM 堆空间(线程共享):存放new出来的对象 元空间(线程共…

3,预初始化(一)(大象无形9.2)

正如书中所说,预初始化流程由FEngineLoop::PreInit()所实现 主要处理流程 1,设置路径:当前程序路径,当前工作目录路径,游戏的工程路径 2,设置标准输出:设置GLog系统输出的设备,是输出到命令行…

web自动化测试-执行 JavaScript 脚本

JavaScript 是一种脚本语言,有的场景需要使用 js 脚本注入辅助我们完成 Selenium 无法做到的事情。 当 webdriver 遇到无法完成的操作时,可以使用 JavaScript 来完成,webdriver 提供了 execute_script() 方法来调用 js 代码。 执行 js 有两种…

Leetcode.2385 感染二叉树需要的总时间

题目链接 Leetcode.2385 感染二叉树需要的总时间 Rating : 1711 题目描述 给你一棵二叉树的根节点 root,二叉树中节点的值 互不相同 。另给你一个整数 start。在第 0分钟,感染 将会从值为 start的节点开始爆发。 每分钟,如果节点…

一文3000字从0到1实现基于requests框架接口自动化测试项目实战(建议收藏)

requests库是一个常用的用于http请求的模块,它使用python语言编写,在当下python系列的接口自动化中应用广泛,本文将带领大家深入学习这个库 Python环境的安装就不在这里赘述了,我们直接开干。 01、requests的安装 windows下执行…

大数据常见应用场景及架构改进

大数据常见应用场景及架构改进大数据典型的离线处理场景1.大数据数据仓库及它的架构改进2.海量数据规模下的搜索与检索3.新兴的图计算领域4.海量数据挖掘潜在价值大数据实时处理场景大数据典型的离线处理场景 1.大数据数据仓库及它的架构改进 对于离线场景,最典型…

磷脂-聚乙二醇-丙烯酸酯;DSPE-PEG-AC试剂说明;DSPE-PEG-Acrylate科研用

中文名称:磷脂-聚乙二醇-丙烯酸酯 丙烯酸酯-聚乙二醇-磷脂 简称:DSPE-PEG-AC;DSPE-PEG-Acrylate 溶剂:溶于部分常规有机溶剂 PEG分子量:1000;2000;3400;5000等等 注意事项:避免…

JavaSE02-JVM、JRE、JDK

文章目录一、JVM、JRE、JDK区别二、JDK的安装和配置1.JDK安装2.测试验证3.环境变量配置3.1 配置JAVA_HOME系统变量3.2 配置Path环境变量再最前面加上: %JAVA_HOME%\bin一、JVM、JRE、JDK区别 JVM(Java Virtual Machine),Java虚拟…

jar包和AAR包

以前在使用 Eclipse 开发 Android 时,如果想代码打包,只有 jar 包一个方法,但是 jar包 只能把 Java 文件代码打包进去,如果要使用一个有布局和资源的库的话,除了将 jar 放入 libs 外,还要引入相关的资源和配置文件&…

详解一个TCP连接的建立与销毁

目录 🌲 图解TCP三次握手建立连接 TCP数据报结构 TCP连接的建立(三次握手) 最后的说明 🌲 详细分析TCP数据的传输过程 🌲 图解TCP四次握手断开连接 🌲 图解TCP三次握手建立连接 TCP(Tran…

【模拟集成电路】宽摆幅压控振荡器(VCO)设计

鉴频鉴相器设计(Phase Frequency Detector,PFD)前言一、VCO工作原理二、VCO电路设计VCO原理图三、压控振荡器(VCO)测试VCO测试电路图瞬态测试(1)瞬态输出(2)局部放大图&a…

【Java】Spring Boot项目的创建和使用

文章目录SpringBoot的创建和使用1. 什么是Spring Boot?为什么要学Spring Boot?2. Spring Boot项目的优点3. Spring Boot 项目的创建3.1 使用idea创建3.2 接下来创建Spring Boot项目4. 项目目录介绍和运行4.1 运行项目4.2 输出内容5. 总结SpringBoot的创建…

nyist最终淘汰赛第一场

我出的题喜欢吗 我要水题解所以每一篇题解都分一个博客 A 题解链接: Atcoder abc257 E_霾まる的博客-CSDN博客 构造贪心题 在本次淘汰赛中较难 B 题解链接: atcoder abc217 D_霾まる的博客-CSDN博客 STL二分题, 当然你可以数组二分, 相对麻烦一点 在本次淘汰赛中较简单…

学习 Python 之 Pygame 开发魂斗罗(二)

学习 Python 之 Pygame 开发魂斗罗(二)魂斗罗的需求开始编写魂斗罗1. 搭建主类框架2. 设置游戏运行遍历和创建窗口3. 获取窗口中的事件4. 创建角色5. 完成角色更新函数魂斗罗的需求 魂斗罗游戏中包含很多个物体,现在要对这些物体进行总结 类…

【RabbitMQ笔记02】消息队列RabbitMQ七种模式之最简单的模式

这篇文章,主要介绍RabbitMQ消息队列中七种模式里面最简单的使用模式。 目录 一、消息队列的使用 1.1、消息队列七种模式 1.2、最简单的模式使用 (1)引入依赖 (2)编写生产者 (3)编写消费者…

Enhanced ShockBurst (ESB)原文翻译

自我学习为主,同时也为所需要的提供一份资料 官方地址 增强型ShockBurst(ESB)是一种支持双向数据包通信的基本协议,包括数据包缓冲、数据包确认和丢失数据包的自动重传。ESB以低功耗提供无线通信,并且实现的代码量小且…