使用主题模型和古老的人类推理进行无监督文本分类

一、说明

        我在日常工作中不断遇到的一项挑战是在无法访问黄金标准标签的情况下标记文本数据。这绝不是一项微不足道的任务,在本文中,我将向您展示一种相对准确地完成此任务的方法,同时保持管道的可解释性和易于调整。

        一些读者可能已经开始考虑使用基于变压器的零样本模型来完成此任务(或LLM),但在这里我将提出几个原因来说明为什么这可能会出现问题:

        ——零样本学习是一个黑匣子。理解提示/类标签选择的含义相当困难,而且您很少对所有看似随意的选择会影响什么有很好的直觉。
        — Transformer 和 LLM 速度慢且成本高。使用 OpenAI 的 API 需要花费大量金钱,而且由于速度相当慢而可能不切实际。您当然可以自行托管一个较小的变压器模型,但如果您希望事情变得敏捷且响应迅速(这通常是生产中的要求),它仍然需要大量计算资源。

        在这种情况下,我想说主题模型是一个非常合理的折衷方案。它们可能不如零样本变压器模型那么智能,并且您将必须做更多的体力劳动才能在实践中使用它们,但它们可以让您对过程进行更细粒度的控制,并给出更可解释的结果,更不用说性能优势了。

二、工作流程

        在本文中,我将引导您完成创建机器学习管道的工作流程,以使用主题模型和良好的旧冷硬算法规则来标记小说文本。

2.1 数据

        为了证明我的观点,我将做一些作弊,我将使用带标签的数据集来证明我提出的方法的有效性。不过,我只会使用标签进行评估,创建管道的整个过程将基于无监督学习和我们自己的人类直觉。该数据集有 20 个新闻组,您可以使用 scikit-learn 轻松加载。

pip install scikit-learn
from sklearn.datasets import fetch_20newsgroups
import numpy as npnewsgroups = fetch_20newsgroups(subset="all")
corpus = newsgroups.data# Sklearn gives the labels back as integers, we have to map them back to
# the actual textual label.
group_labels = [newsgroups.target_names[label] for label in newsgroups.target]print(np.unique(group_labels))
------------------------------------------------------------------
array(['alt.atheism', 'comp.graphics', 'comp.os.ms-windows.misc','comp.sys.ibm.pc.hardware', 'comp.sys.mac.hardware','comp.windows.x', 'misc.forsale', 'rec.autos', 'rec.motorcycles','rec.sport.baseball', 'rec.sport.hockey', 'sci.crypt','sci.electronics', 'sci.med', 'sci.space','soc.religion.christian', 'talk.politics.guns','talk.politics.mideast', 'talk.politics.misc','talk.religion.misc'], dtype='<U24')

假设我想根据文本是否与空间相关来标记文本,以便我们可以将无监督分类性能与实际标签进行比较。我什至会将数据分成训练集和测试集,这样我们就可以确保我们不会获知模型正在测试的信息(又名主题模型不会在测试中进行训练)放)。

from sklearn.model_selection import train_test_split
is_about_space = np.array(group_labels) == "sci.space"X_train, X_test, y_train, y_test = train_test_split(corpus, is_about_space)>

2.2 无监督模型

        我们可以使用topicwizard创建易于使用的主题管道,然后解释主题。

pip install topicwizard

        在 topicwizard 中创建主题管道被认为是将矢量化器和分解模型链接在一起。

        作为矢量化器,我们将使用 scikit-learn 内置的 CountVectorizer 并设置一些看起来合理的默认频率截止值,并将过滤英语停用词。

        我们将使用非负矩阵分解作为我们的主题模型,因为它非常快(训练和推理)并且通常工作得相当好。我将确定 30 个主题,这是一个完全任意的数字。

from sklearn.decomposition import NMF
from sklearn.feature_extraction.text import CountVectorizer
from topicwizard.pipeline import make_topic_pipeline# Setting up topic modelling pipeline
vectorizer = CountVectorizer(max_df=0.5, min_df=10, stop_words="english")
# NMF topic model with 20 topics
nmf = NMF(n_components=30)topic_pipeline = make_topic_pipeline(vectorizer, nmf)
topic_pipeline.fit(X_train)

2.3 模型解读

        topicwizard 附带了许多内置的可视化来解释主题模型。现在我们主要感兴趣的是哪些主题可能包含大部分与空间相关的单词。

        为此,我们将使用 topicwizard 的图形 API。首先,我们通过创建一组条形图来查看与每个主题最相关的单词。

from topicwizard.figures import topic_barchartstopic_barcharts(X_train, pipeline=topic_pipeline, top_n=5)

不幸的是,其中大部分都是垃圾,我们可能应该更好地清理数据集,但23_satellite_space_launch_nasa看起来相当有前途。

让我们看一下主题模型中的单词映射,以了解它们彼此之间的位置关系。

from topicwizard.figures import word_mapword_map(X_train, pipeline=topic_pipeline, top_n=5)

我们可以看到,有一组单词非常空旷,而且它们的位置也与某些与技术相关的单词非常接近。

我们还可以检查“space”和“astro”这两个词属于哪些主题,以及它们最接近的 20 个关联。我们只会显示前 8 个主题。

from topicwizard.figures import word_association_barchartfig = word_association_barchart(["space", "astro"],corpus=X_train,pipeline=topic_pipeline,n_association=20,top_n=8
)

        我们可以看到,到目前为止,最主要的主题是我们已经确定的主题,从现在开始,我将在我们的分析中只关注这一主题。

        让我们转换我们的训练语料库并查看该主题的重要性分布,以便我们可以选择合理的阈值。
首先,我将主题模型的输出设置为数据框,然后我们可以通过绘图直方图看到分布。

import plotly.express as pxtopic_pipeline.set_output(transform="pandas")topic_df = topic_pipeline.transform(X_train)
px.histogram(topic_df["23_satellite_space_launch_nasa"])

我们可以看到绝大多数文本都在0.1以下。我说我们尝试将阈值设置为 0.05,然后查看从中得到的随机文本样本。

topic_df["content"] = X_train
sample = topic_df[topic_df["23_satellite_space_launch_nasa"] > 0.05].content.sample(10)
for text in sample:print(text[:200])
From: CPKJP@vm.cc.latech.edu (Kevin Parker)
Subject: Insurance Rates on Performance Cars SUMMARY
Organization: Louisiana Tech University
Lines: 244
NNTP-Posting-Host: vm.cc.latech.edu
X-Newsreader: NN
From: pjs@euclid.JPL.NASA.GOV (Peter J. Scott)
Subject: Re: Did Microsoft buy Xhibition??
Organization: Jet Propulsion Laboratory, NASA/Caltech
Lines: 8
Distribution: world
Reply-To: pjs@euclid.jpl.na
From: ml@chiron.astro.uu.se (Mats Lindgren)
Subject: Re: Comet in Temporary Orbit Around Jupiter?
Organization: Uppsala University
Lines: 14
Distribution: world
NNTP-Posting-Host: chiron.astro.uu.seFrom: mike@gordian.com (Michael A. Thomas)
Subject: Re: The Role of the National News Media in Inflaming Passions
Organization: Gordian; Costa Mesa, CA
Distribution: ca
Lines: 13In article <1qjtmjIN
From: leech@cs.unc.edu (Jon Leech)
Subject: Space FAQ 04/15 - Calculations
Supersedes: <math_730956451@cs.unc.edu>
Organization: University of North Carolina, Chapel Hill
Lines: 334
Distribution: worl
From: wls@calvin.usc.edu (Bill Scheding)
Subject: Re: "Full page" PB screen
Organization: University of Southern California, Los Angeles, CA
Lines: 14
Distribution: world
NNTP-Posting-Host: calvin.usc
From: ghelf@violet.berkeley.edu (;;;;RD48)
Subject: Re: Soyuz and Shuttle Comparisons
Organization: University of California, Berkeley
Lines: 11
NNTP-Posting-Host: violet.berkeley.eduAre you guys ta
From: gsh7w@fermi.clas.Virginia.EDU (Greg Hennessy)
Subject: Re: Keeping Spacecraft on after Funding Cuts.
Organization: University of Virginia
Lines: 13In article <1r6aqr$dnv@access.digex.net> prb@
From: oeth6050@iscsvax.uni.edu
Subject: ****COMIC BOOK SALE****
Organization: University of Northern Iowa
Lines: 36Hello,my name is John and I have the following comic books for sale - plea
From: shafer@rigel.dfrf.nasa.gov (Mary Shafer)
Subject: Re: Inner Ear Problems from Too Much Flying?
Article-I.D.: rigel.SHAFER.93Apr6095951
Organization: NASA Dryden, Edwards, Cal.
Lines: 33
In-Reply
Hmm some of these texts do not seem to have much to do with space, let’s set a higher threshold.topic_df["content"] = X_train
sample = topic_df[topic_df["23_satellite_space_launch_nasa"] > 0.15].content.sample(10)
for text in sample:print(text[:200])

嗯,其中一些文本似乎与空间没有太大关系,让我们设置一个更高的阈值。

topic_df["content"] = X_train
sample = topic_df[topic_df["23_satellite_space_launch_nasa"] > 0.15].content.sample(10)
for text in sample:print(text[:200])
rom: gene@theporch.raider.net (Gene Wright)
Subject: NASA Special Publications for Voyager Mission?
Organization: The MacInteresteds of Nashville, Tn.
Lines: 12I have two books, both NASA Special P
From: 18084TM@msu.edu (Tom)
Subject: Billsats
X-Added: Forwarded by Space Digest
Organization: [via International Space University]
Original-Sender: isu@VACATION.VENARI.CS.CMU.EDU
Distribution: sci
Li
From: pww@spacsun.rice.edu (Peter Walker)
Subject: Re: The Universe and Black Holes, was Re: 2000 years.....
Organization: I didn't do it, nobody saw me, you can't prove a thing.
Lines: 28In article
From: da709@cleveland.Freenet.Edu (Stephen Amadei)
Subject: Project Help
Organization: Case Western Reserve University, Cleveland, Ohio (USA)
Lines: 17
NNTP-Posting-Host: hela.ins.cwru.eduHello, From: dbm0000@tm0006.lerc.nasa.gov (David B. Mckissock)
Subject: Washington Post Article on SSF Redesign
News-Software: VAX/VMS VNEWS 1.41    
Nntp-Posting-Host: tm0006.lerc.nasa.gov
Organization: NAS
From: u920496@daimi.aau.dk (Hans Erik Martino Hansen)
Subject: Commercials on the Moon
Organization: DAIMI: Computer Science Department, Aarhus University, Denmark
Lines: 16I have often thought abou
From: wb8foz@skybridge.SCL.CWRU.Edu (David Lesher)
Subject: Re: No. Re: Space Marketing would be wonderfull.
Organization: NRK Clinic for habitual NetNews abusers - Beltway Annex
Lines: 11
Reply-To: w
From: 18084TM@msu.edu (Tom)
Subject: Solid state vs. tube/analog
X-Added: Forwarded by Space Digest
Organization: [via International Space University]
Original-Sender: isu@VACATION.VENARI.CS.CMU.EDU
D
From: pgf@srl03.cacs.usl.edu (Phil G. Fraering)
Subject: Re: Gamma Ray Bursters. positional stuff.
Organization: Univ. of Southwestern Louisiana
Lines: 24belgarath@vax1.mankato.msus.edu writes:>  
From: rnichols@cbnewsg.cb.att.com (robert.k.nichols)
Subject: Re: Permanaent Swap File with DOS 6.0 dbldisk
Summary: PageOverCommit=factor
Organization: AT&T
Lines: 50In article <93059@hydra.gatech.

这些似乎确实与空间相关,所以让我们保留 0.15 作为阈值。

2.4 分类管道

        现在我们已经有了如何查看哪些文本与空间相关的规则,我们应该将这些知识合并到机器学习管道中,以便我们可以在未来的工作或生产中轻松使用。

        为此,我们将使用令人惊叹的人类学习库,您可以在其中创建基于规则的组件,甚至可以绘制东西(这真的很棒)。

        为此,我们必须冻结主题模型,以便在管道上调用 fit() 时不会对其进行训练

pip install human-learn
from hulearn.classification import FunctionClassifier
from sklearn.pipeline import make_pipeline# Creating rule for classifying something as a space document
def space_rule(df, threshold=0.15):return df["23_satellite_space_launch_nasa"] > threshold# Freezing topic pipeline
topic_pipeline.freeze = True
classifier = FunctionClassifier(space_rule)
cls_pipeline = make_pipeline(topic_pipeline, classifier).fit(X_train)

        我们现在有了一个与空间相关的文本的分类器,不是很漂亮吗?请记住,我们甚至还没有触及标签,只是使用了主题模型和我们自己的人类直觉。

三、评估

        为了检查这是否确实是一种有效的方法,让我们根据测试数据评估我们的分类管道。

from sklearn.metrics import classification_reporty_pred = cls_pipeline.predict(X_test)
print(classification_report(y_test, y_pred))
   precision    recall  f1-score   supportFalse       0.98      0.98      0.98      4475True       0.65      0.70      0.68       237accuracy                           0.97      4712macro avg       0.82      0.84      0.83      4712
weighted avg       0.97      0.97      0.97      4712

        考虑到我们对标签的查看绝对为零,并且数据集非常不平衡,这些结果非常好!

        我怀疑我们仍然可以调整这一点,并通过更干净的数据、更明智的主题模型选择和潜在的更多主题来获得更好的结果,以便我们可以捕获数据中的更多差异。

马顿·卡多斯

 

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

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

相关文章

(超详细)5-YOLOV5改进-添加A2Attention注意力机制

1、在yolov5/models下面新建一个A2Attention.py文件&#xff0c;在里面放入下面的代码 代码如下&#xff1a; import numpy as np import torch from torch import nn from torch.nn import init from torch.nn import functional as Fclass DoubleAttention(nn.Module):def …

MySQL 8查询语句之查询所有字段、特定字段、去除重复字段、Where判断条件

《MySQL 8创建数据库、数据表、插入数据并且查询数据》里边有我使用到的数据。 再使用下方的语句补充一些数据&#xff1a; insert into Bookbought.bookuser(id,username,userphone,userage,sex,userpassword) values (11,Book Break,22245678911,18,male,good#111); insert…

啥,凭什么Python中函数的返回值可以有多个?

你好&#xff0c;我是安然无虞。 文章目录 函数函数定义格式函数调用默认参数和变长参数默认参数变长参数 变量的作用域 函数 编程语言中的函数&#xff0c;是一段可以被重复使用的代码片段&#xff0c;使用函数能够减少冗余的代码。 函数定义格式 def 函数名(形参列表):函数…

行为型设计模式——策略模式

策略模式 策略模式非常简单&#xff0c;只需要将策略或者某个算法定义成一个类&#xff0c;然后传给需要使用的对象即可。**定义&#xff1a;**该模式定义了一系列算法&#xff0c;并将每个算法封装起来&#xff0c;使它们可以相互替换&#xff0c;且算法的变化不会影响使用算…

电力能源监测管理系统,在医院中有哪些作用?

随着经济全球化的发展&#xff0c;节能减排成为当前社会发展必须关注的问题。电力能源监测管理系统&#xff0c;可以分析电力管理能源的现状&#xff0c;并根据现状提出对应的策略&#xff0c;为快速高效建成绿色智能化医院提供有力支撑和技术保障。 医院能源管理现状 1、人力…

2024云服务器哪家好?阿里云、腾讯云、华为云

作为多年站长使市面上大多数的云厂商的云服务器都使用过&#xff0c;很多特价云服务器都是新用户专享的&#xff0c;本文有老用户特价云服务器&#xff0c;阿腾云atengyun.com有多个网站、小程序等&#xff0c;国内头部云厂商阿里云、腾讯云、华为云、UCloud、京东云都有用过&a…

数字集成系统设计——物理设计

目录 一、布局规划 1.1 规划 1.2 I/O单元 1.3 电源网络 1.3.1 要求 1.3.2 网络架构 1.3.3 混合信号芯片示例 1.4 布局 二、时钟分布 2.1 时钟偏斜 2.2 时钟分布网络 2.3 时钟树综合 2.4 时钟树收敛 三、布线与参数提取 3.1 布线(Routing) 3.2 布线规则示例 …

Handsfree_ros_imu:ROS机器人IMU模块ARHS姿态传感器(A9)Liunx系统Ubuntu20.04学习启动和运行教程

这个是篇学习 Handsfree_ros_imu 传感器的博客记录 官方教程链接见&#xff1a; https://docs.taobotics.com/docs/hfi-imu/ 产品功能 IMU 内有 加速度计&#xff0c;陀螺仪&#xff0c;磁力计这些传感器&#xff0c;通过固定 imu 到物体上后&#xff0c;可以获取物体在运动…

虚拟机Ubuntu网络配置

电脑有两个系统&#xff0c;windows系统和ubuntu系统&#xff0c;那网卡到底给哪一个用呢&#xff0c;所以要选择桥接模式&#xff0c;就可以共用网卡 但是我们电脑网卡&#xff0c;有线网卡&#xff0c;无线网卡&#xff0c;到底使用哪个网卡&#xff0c;所以选择桥接到自动或…

一文玩转Go语言中的面向对象编程~

温故而知新&#xff1a;什么是面向对象 面向对象&#xff08;Object-Oriented&#xff09;是一种计算机编程的方法和思想&#xff0c;它将程序中的数据&#xff08;对象&#xff09;和操作&#xff08;方法&#xff09;组织成一个个相互关联和交互的对象。对象是现实世界中的事…

Find My游戏手柄|苹果Find My技术与手柄结合,智能防丢,全球定位

游戏手柄是一种常见电子游戏机的部件&#xff0c;通过操纵其按钮等&#xff0c;实现对游戏虚拟角色的控制。随着游戏设备硬件的升级换代&#xff0c;现代游戏手柄又增加了&#xff1a;类比摇杆&#xff08;方向及视角&#xff09;&#xff0c;扳机键以及HOME菜单键等。现在的游…

活动 | Mint Blockchain 将于 2024 年 1 月 17 号启动 MintID 限量发行活动

MintID 是 Mint Blockchain 生态的超级权益卡&#xff0c;用于探索 NFT PASS 在未来各种应用场景下的可能性。MintID 将通过限时限量有价发售的方式对外释放&#xff0c;持有人将成为 Mint Blockchain 的核心权益用户。 MintID 总量&#xff1a;10,000 枚 铸造价格&#xff1a…