自然语言处理——文本分类
文本分类
- 传统机器学习方法
- 文本表示
- 向量空间模型
- 特征选择
- 文档频率
- 互信息
- 信息增益(IG)
- 分类器设计
- 贝叶斯理论:
- 线性判别函数
- 文本分类性能评估
- P-R曲线
- ROC曲线
将文本文档或句子分类为预定义的类或类别, 有单标签多类别文本分类和多标签多类别文本分类。
传统机器学习方法
文本表示
计算机进行文本理解,必须知道文本长什么样,文本的形式化表示是反映文本内容和区分不同文本的有效途径。
向量空间模型
向量空间模型(vector space model, VSM)由G. Salton 等人于1960s末期在信息检索领域提出,核心是将文本视为特征项的集合。特征项是VSM中最小的语言单元,可以是字、词、短语等。文本则表示为特征项的集合 ( 𝑡 1 , 𝑡 2 , … , 𝑡 𝑛 ) (𝑡_1,𝑡_2,…,𝑡_𝑛) (t1,t2,…,tn)
词语(词组或短语):若词语作为特征项,那么特征项的集合可视为一个词表。词表可从语料中统计获得,可看作一个词袋,向量空间模型被称为词袋模型(bag-of-words, BOW)
特征项权重:每个特征项在文本中的重要性不尽相同,用𝑤表示特征项𝑡的权重,相应地,文本可以表示为 ( 𝑡 1 : 𝑤 1 , 𝑡 2 : 𝑤 2 , … , 𝑡 𝑛 : 𝑤 𝑛 ) (𝑡_1:𝑤_1,𝑡_2:𝑤_2,…,𝑡_𝑛:𝑤_𝑛) (t1:w1,t2:w2,…,tn:wn)或 ( 𝑤 1 , 𝑤 2 , … , 𝑤 𝑛 ) (𝑤_1,𝑤_2,…,𝑤_𝑛) (w1,w2,…,wn)
如何计算特征项的权重?
- 布尔变量(是否出现)
- 词频
基于词频方法会有一个问题,如上图所示,像the这样子的词特征权重会比较大,但是实际上这些词在句子分析是效果甚微。 - 逆文档频率:定义为总的文档数/单词频率,让the这样子的词特征权重降为0.
- TF-IDF=tfi * idfi,tfi是词频,idfi是逆文档频率,这是目前最好的一个方法。
特征选择
文档频率
一个特征的文档频率是指在文档集中含有该特征的文档数目,假设 DF值低于某个域值的词条是低频词,它们不含或含有较少的类别信息, 将这样的词条从原始特征空间中除去,不但能够降低特征空间的维数,而且还有可能提高分类的精度。因此出现文档数多的特征词被保留的可能性大。
下面的两个条件概率表示在有了ti这个特征之后属于cj类别的概率,+1和+C是防止为0的变换(C表示类别的数量),即进行平滑处理。
互信息
互信息是关于两个随机变量互相依赖程度的一种度量
信息增益(IG)
IG衡量特征能够为分类系统带来多少信息
特征 𝑇 𝑖 𝑇_𝑖 Ti对训练数据集C的信息增益定义为集合C的经验熵H©与特征 𝑇 𝑖 𝑇_𝑖 Ti给定条件下C的经验条件熵 H ( C ∣ 𝑇 𝑖 ) H(C|𝑇_𝑖) H(C∣Ti)之差,即 I G ( C , T i ) = H ( C ) − H ( C ∣ T i ) IG(C,T_i)=H(C)-H(C|T_i) IG(C,Ti)=H(C)−H(C∣Ti)
分类器设计
监督学习:训练数据是人工标注的,用参数进行建模(构建目标函数),常见的监督学习模型有朴素贝叶斯、线性判别函数、支持向量机等等。
贝叶斯理论:
朴素贝叶斯假设:假设所有特征在给定类别的情况下是相互独立的,这意味着每个特征对分类结果的影响是独立的,与其他特征无关。
朴素贝叶斯分类模型中的参数估计:采用最大似然估计
线性判别函数
线性判别函数需要考虑两个方面:一个是考虑哪个分类面更优,一个是考虑选择哪个学习准则。常见的线性判别函数的学习准则有感知器准则、最小均方差、交叉熵等。
文本分类性能评估
假设一个文本分类任务共有M个类别,类别名称分别为 𝐶 1 , … , 𝐶 𝑀 𝐶_1,…,𝐶_𝑀 C1,…,CM。
在完成分类任务以后,对于每一类都可以统计出真正例、真负例、假正例和假负例四种情形的样本数目。
- 真正例 (True Positive, TP):模型正确预测为正例(即模型预测属于该类,真实标签属于该类)。
- 真负例 (True Negative, TN): 模型正确预测为负例(即模型预测不属该类,真实标签不属该类)。
- 假正例 (False Positive, FP):模型错误预测为正例(即模型预测属于该类,真实标签不属该类)。
- 假负例 (False Negative, FN):模型错误预测为负例(即模型预测不属该类,真实标签属于该类)。
其中需要稍微解释一下的是图中宏平均和微平均的计算方法,宏平均是先计算每个类别的指标(如Recall、Precision、F1 Score),然后对这些指标求算术平均值。它平等对待每个类别,不考虑类别样本数量的差异,所以宏平均只需要将正类和负类的各自指标值做一个平均即可。
但是微平均考虑了样本数量的差异性,汇总所有类别的TP、FP、FN,然后用这些总和来计算整体的指标。它更关注样本数量多的类别,因为样本多的类别对总的TP、FP、FN贡献更大。
注意:在二分类问题中,准确率 (Accuracy) 等于微平均 Recall、微平均 Precision 和微平均 F1 Score。
P-R曲线
通过调整分类器的阈值,将按输出排序的样本序列分割为两部分,大于阈值的预测为正类,小于阈值的预测为负类,从而得到不同的召回率和精确率。如设置阈值为0时,召回率为1;设置阈值为1时,则召回率为0。以召回率作为横轴、精确率作为纵轴,可以绘制出精确率-召回率(precision-recall, PR)曲线。
ROC曲线
以假正率(false positive rate)作为横坐标,以真正率(true positive rate)(即召回率)作为纵坐标,绘制出的曲线称为ROC(receiver operating characteristic)曲线。ROC曲线下的面积称为AUC(area under ROC curve),AUC曲线越靠近左上方越好。AUC值越大,说明分类器性能越好。
相关文章:

自然语言处理——文本分类
文本分类 传统机器学习方法文本表示向量空间模型 特征选择文档频率互信息信息增益(IG) 分类器设计贝叶斯理论:线性判别函数 文本分类性能评估P-R曲线ROC曲线 将文本文档或句子分类为预定义的类或类别, 有单标签多类别文本分类和多…...

高考志愿填报管理系统---开发介绍
高考志愿填报管理系统是一款专为教育机构、学校和教师设计的学生信息管理和志愿填报辅助平台。系统基于Django框架开发,采用现代化的Web技术,为教育工作者提供高效、安全、便捷的学生管理解决方案。 ## 📋 系统概述 ### 🎯 系统定…...

使用SSE解决获取状态不一致问题
使用SSE解决获取状态不一致问题 1. 问题描述2. SSE介绍2.1 SSE 的工作原理2.2 SSE 的事件格式规范2.3 SSE与其他技术对比2.4 SSE 的优缺点 3. 实战代码 1. 问题描述 目前做的一个功能是上传多个文件,这个上传文件是整体功能的一部分,文件在上传的过程中…...
【安全篇】金刚不坏之身:整合 Spring Security + JWT 实现无状态认证与授权
摘要 本文是《Spring Boot 实战派》系列的第四篇。我们将直面所有 Web 应用都无法回避的核心问题:安全。文章将详细阐述认证(Authentication) 与授权(Authorization的核心概念,对比传统 Session-Cookie 与现代 JWT(JS…...

软件工程 期末复习
瀑布模型:计划 螺旋模型:风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合:模块内部功能紧密 模块之间依赖程度小 高内聚:指的是一个模块内部的功能应该紧密相关。换句话说,一个模块应当只实现单一的功能…...

spring Security对RBAC及其ABAC的支持使用
RBAC (基于角色的访问控制) RBAC (Role-Based Access Control) 是 Spring Security 中最常用的权限模型,它将权限分配给角色,再将角色分配给用户。 RBAC 核心实现 1. 数据库设计 users roles permissions ------- ------…...
【FTP】ftp文件传输会丢包吗?批量几百个文件传输,有一些文件没有传输完整,如何解决?
FTP(File Transfer Protocol)本身是一个基于 TCP 的协议,理论上不会丢包。但 FTP 文件传输过程中仍可能出现文件不完整、丢失或损坏的情况,主要原因包括: ✅ 一、FTP传输可能“丢包”或文件不完整的原因 原因描述网络…...
es6+和css3新增的特性有哪些
一:ECMAScript 新特性(ES6) ES6 (2015) - 革命性更新 1,记住的方法,从一个方法里面用到了哪些技术 1,let /const块级作用域声明2,**默认参数**:函数参数可以设置默认值。3&#x…...

算法打卡第18天
从中序与后序遍历序列构造二叉树 (力扣106题) 给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。 示例 1: 输入:inorder [9,3,15,20,7…...

Visual Studio Code 扩展
Visual Studio Code 扩展 change-case 大小写转换EmmyLua for VSCode 调试插件Bookmarks 书签 change-case 大小写转换 https://marketplace.visualstudio.com/items?itemNamewmaurer.change-case 选中单词后,命令 changeCase.commands 可预览转换效果 EmmyLua…...

Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践
在 Kubernetes 集群中,如何在保障应用高可用的同时有效地管理资源,一直是运维人员和开发者关注的重点。随着微服务架构的普及,集群内各个服务的负载波动日趋明显,传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...

【深度学习新浪潮】什么是credit assignment problem?
Credit Assignment Problem(信用分配问题) 是机器学习,尤其是强化学习(RL)中的核心挑战之一,指的是如何将最终的奖励或惩罚准确地分配给导致该结果的各个中间动作或决策。在序列决策任务中,智能体执行一系列动作后获得一个最终奖励,但每个动作对最终结果的贡献程度往往…...

阿里云Ubuntu 22.04 64位搭建Flask流程(亲测)
cd /home 进入home盘 安装虚拟环境: 1、安装virtualenv pip install virtualenv 2.创建新的虚拟环境: virtualenv myenv 3、激活虚拟环境(激活环境可以在当前环境下安装包) source myenv/bin/activate 此时,终端…...
面试高频问题
文章目录 🚀 消息队列核心技术揭秘:从入门到秒杀面试官1️⃣ Kafka为何能"吞云吐雾"?性能背后的秘密1.1 顺序写入与零拷贝:性能的双引擎1.2 分区并行:数据的"八车道高速公路"1.3 页缓存与批量处理…...
xmind转换为markdown
文章目录 解锁思维导图新姿势:将XMind转为结构化Markdown 一、认识Xmind结构二、核心转换流程详解1.解压XMind文件(ZIP处理)2.解析JSON数据结构3:递归转换树形结构4:Markdown层级生成逻辑 三、完整代码 解锁思维导图新…...
【WebSocket】SpringBoot项目中使用WebSocket
1. 导入坐标 如果springboot父工程没有加入websocket的起步依赖,添加它的坐标的时候需要带上版本号。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dep…...

恶补电源:1.电桥
一、元器件的选择 搜索并选择电桥,再multisim中选择FWB,就有各种型号的电桥: 电桥是用来干嘛的呢? 它是一个由四个二极管搭成的“桥梁”形状的电路,用来把交流电(AC)变成直流电(DC)。…...

论文阅读:Matting by Generation
今天介绍一篇关于 matting 抠图的文章,抠图也算是计算机视觉里面非常经典的一个任务了。从早期的经典算法到如今的深度学习算法,已经有很多的工作和这个任务相关。这两年 diffusion 模型很火,大家又开始用 diffusion 模型做各种 CV 任务了&am…...

Neko虚拟浏览器远程协作方案:Docker+内网穿透技术部署实践
前言:本文将向开发者介绍一款创新性协作工具——Neko虚拟浏览器。在数字化协作场景中,跨地域的团队常需面对实时共享屏幕、协同编辑文档等需求。通过本指南,你将掌握在Ubuntu系统中使用容器化技术部署该工具的具体方案,并结合内网…...

实战设计模式之模板方法模式
概述 模板方法模式定义了一个操作中的算法骨架,并将某些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的前提下,重新定义算法中的某些步骤。简单来说,就是在一个方法中定义了要执行的步骤顺序或算法框架,但允许子类…...

【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...

Python训练营-Day26-函数专题1:函数定义与参数
题目1:计算圆的面积 任务: 编写一个名为 calculate_circle_area 的函数,该函数接收圆的半径 radius 作为参数,并返回圆的面积。圆的面积 π * radius (可以使用 math.pi 作为 π 的值)要求:函数接收一个位置参数 radi…...
【Kafka】Kafka从入门到实战:构建高吞吐量分布式消息系统
Kafka从入门到实战:构建高吞吐量分布式消息系统 一、Kafka概述 Apache Kafka是一个分布式流处理平台,最初由LinkedIn开发,后成为Apache顶级项目。它被设计用于高吞吐量、低延迟的消息处理,能够处理来自多个生产者的海量数据,并将这些数据实时传递给消费者。 Kafka核心特…...

Android写一个捕获全局异常的工具类
项目开发和实际运行过程中难免会遇到异常发生,系统提供了一个可以捕获全局异常的工具Uncaughtexceptionhandler,它是Thread的子类(就是package java.lang;里线程的Thread)。本文将利用它将设备信息、报错信息以及错误的发生时间都…...
人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型
在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重,适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解,并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...
绕过 Xcode?使用 Appuploader和主流工具实现 iOS 上架自动化
iOS 应用的发布流程一直是开发链路中最“苹果味”的环节:强依赖 Xcode、必须使用 macOS、各种证书和描述文件配置……对很多跨平台开发者来说,这一套流程并不友好。 特别是当你的项目主要在 Windows 或 Linux 下开发(例如 Flutter、React Na…...

C++_哈希表
本篇文章是对C学习的哈希表部分的学习分享 相信一定会对你有所帮助~ 那咱们废话不多说,直接开始吧! 一、基础概念 1. 哈希核心思想: 哈希函数的作用:通过此函数建立一个Key与存储位置之间的映射关系。理想目标:实现…...
WEB3全栈开发——面试专业技能点P7前端与链上集成
一、Next.js技术栈 ✅ 概念介绍 Next.js 是一个基于 React 的 服务端渲染(SSR)与静态网站生成(SSG) 框架,由 Vercel 开发。它简化了构建生产级 React 应用的过程,并内置了很多特性: ✅ 文件系…...

若依登录用户名和密码加密
/*** 获取公钥:前端用来密码加密* return*/GetMapping("/getPublicKey")public RSAUtil.RSAKeyPair getPublicKey() {return RSAUtil.rsaKeyPair();}新建RSAUti.Java package com.ruoyi.common.utils;import org.apache.commons.codec.binary.Base64; im…...

Linux 下 DMA 内存映射浅析
序 系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存,但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs() 等接口。 关于 dma_alloc_coherent 接口详细的代码讲解、调用流程,可以参考这篇文章,我觉得写的非常…...