【NLP】文本分类

n-gram 的局限性

n-gram 只能对于填空这样的通顺性问题做出推测,但是没有办法完全解决句子的语义问题,从而无法实现文本的分类
文本的分类,就是将文本在语义的理解下划分到特定的主题下

手工规则

如一些垃圾过滤系统,需要人工制定规则
准确率往往很高,但是维护规则的成本很大

机器学习

本质上就是学习一个文档到文档类别的映射函数,需要人工分好类的文本作为训练数据,所以是有监督学习
分为学习器和分类器,学习器学习手工标注的数据集并输出训练好的分类器,分类器对于实际需要分类的文档进行分类,选择对应的文档类别进行输出

Step1 预处理

依据文本的具体形式来确定:

  1. 去除 HTML 标签
  2. Stop-words 停用词:高频的词如冠词,介词往往包含着较少的信息
  3. Word stemming 词干:词的后缀与变形处理,将具有相同词义的词进行合并

Step2 文本表示

什么是最好的文本表示方法?

最常用的一种文本表示方法:VSM

VSM(vector space model 向量空间模型)
将文本表示为由词条构成的向量,理论上假设词条之间互相独立,文本可以认为是一种词的集合(词袋)
e.g.在一段文章中按照词频统计出现最多的词,然后进行相关分类
建立文档词条矩阵 A = ( a i k ) A=(a_{ik}) A=(aik)
每个文档表示为由词构成的列向量
a i k a_{ik} aik表示词 k 在文档 i 中的权重
引入符号:
(1) f i k f_{ik} fik词条 k 在文档 i 中出现的次数
(2) n k n_{k} nk词条 k 在文档集合中出现的总次数
(3)N 文档集合包含的文档个数
(4)M 预处理后文档集合包括的词条个数

词的权重

布尔权重:如果词在文档中出现,权重为 1,否则为 0
词条频次权重:使用词条在文档中出现的次数作为权重
逆文档频次:考虑包含某词条的文档个数, α ∝ 1 n k \alpha \propto \frac{1}{n_k} αnk1
tf * idf 权重:同时考虑词条频次和逆文档频次, α i k = f i k log ⁡ ( N n k ) \alpha_{ik} = f_{ik}\log (\frac{N}{n_k}) αik=fiklog(nkN)
tfc 权重:在 tf-idf 基础上对文档长度进行正则化
α i k = f i k log ⁡ ( N n k ) ∑ j = 1 M [ f i j log ⁡ ( N n j ) ] 2 \alpha_{ik} = \frac{f_{ik}\log (\frac{N}{n_k})}{\sqrt{\sum\limits_{j=1}^M[f_{ij}\log (\frac{N}{n_j})]^2}} αik=j=1M[fijlog(njN)]2 fiklog(nkN)
ltc 权重:将词条频次进行对数化处理,减少绝对频次的巨大差异可能带来的影响
f i k f_{ik} fik f i j f_{ij} fij换成 log ⁡ ( f i k + 1 ) \log(f_{ik}+1) log(fik+1) log ⁡ ( f i j + 1 ) \log(f_{ij}+1) log(fij+1)
熵权重:
对于一个词条 k,其信息熵为 1 + 1 log ⁡ ( N ) ∑ j = 1 N f j k n k log ⁡ ( f j k n k ) 1+\frac{1}{\log (N)}\sum\limits_{j=1}^N\frac{f_{jk}}{n_k}\log (\frac{f_{jk}}{n_k}) 1+log(N)1j=1Nnkfjklog(nkfjk)
特殊情况时,如果在所有文档中出现的频数相等,则熵为-1;如果只在一个文档中出现,则熵为 0
熵权重就是在词条的信息熵前乘上对数化词条频次
log ⁡ ( f i k + 1 ) ∗ ( 1 + 1 log ⁡ ( N ) ∑ j = 1 N f j k n k log ⁡ ( f j k n k ) ) \log(f_{ik}+1)*(1+\frac{1}{\log (N)}\sum\limits_{j=1}^N\frac{f_{jk}}{n_k}\log (\frac{f_{jk}}{n_k})) log(fik+1)(1+log(N)1j=1Nnkfjklog(nkfjk))

Step3 分类模型

最近邻分类器

定义两个样本点之间的距离函数,并将新的样本划分到距离其最近的样本所在的类别中
问题:容易过度拟合数据,比如将错误的数据或者噪声按照定义分类进了对应的组,或是由于其最近邻是噪声而错误分类到了原本不属于新数据的组别

k 近邻分类器

k-nearest neighbour classifier(KNN)
为一个新样本点找到最近的 k 个近邻,然后将其划分到这 k 个中所属最多的类别中
训练过程:
给定一个需要训练的实例 x n x_n xn,选出对应 k 个最近实例,返回 y ^ ( x q ) ← arg ⁡ max ⁡ v ∈ V ∑ i = 1 k γ ( v , y ( x i ) ) \hat y(x_q) \leftarrow \arg \max\limits_{v\in V}\sum\limits^k_{i=1}\gamma(v,y(x_i)) y^(xq)argvVmaxi=1kγ(v,y(xi))
其中 V 为各点对应的集合, γ ( a , b ) \gamma(a,b) γ(a,b)只有在 a=b 时等于 1,else 等于 0
red:k 不可以太高也不可以太低
可以采用验证集来选择合适的 k,距离计算可以采用欧式距离或者余弦距离,采用树结构或者压缩近邻来储存数据
以下是一个较准确的余弦距离说明:
https://blog.csdn.net/hy592070616/article/details/122271927

朴素贝叶斯

通过先验事件的知识来预测未来事件
p ( c k ∣ x i ) = p ( x i ∣ c k ) p ( c k ) p ( x i ) p(c_k|x_i)=\frac{p(x_i|c_k)p(c_k)}{p(x_i)} p(ckxi)=p(xi)p(xick)p(ck)
xi 是 training data,ck 是 hypothesis,那么 p(xi|ck)就是预测可能性
具有条件独立性,即 p ( x 1 , x 2 ∣ c ) = p ( x 1 ∣ c ) × p ( x 2 ∣ c ) p(x_1,x_2|c) = p(x_1|c)\times p(x_2|c) p(x1,x2c)=p(x1c)×p(x2c)

以邮件分类为例

已有训练数据:训练文章 X i X_i Xi,n 种文章种类 c k c_k ck,所有文章中共包括 M 个词,每个词 在第n 个种类下的个数 t i j = t 11 → t n m t_{ij} = t_{11} \to t_{nm} tij=t11tnm
1

给定一个 email xi,由最大化后验概率:
c ^ = arg ⁡ max ⁡ k ( p ( c k ∣ x i ) ) = arg ⁡ max ⁡ k ( p ( c k ) p ( x i ∣ c k ) p ( x i ) ) \hat c=\arg \max_k (p(c_k|x_i))=\arg \max_k (\frac{p(c_k)p(x_i|c_k)}{p(x_i)}) c^=argmaxk(p(ckxi))=argmaxk(p(xi)p(ck)p(xick))
= arg ⁡ max ⁡ k ( p ( c k ) p ( x i ∣ c k ) ) = arg ⁡ max ⁡ k ( log ⁡ p ( c k ) + log ⁡ p ( x i ∣ c k ) ) =\arg \max_k (p(c_k)p(x_i|c_k))=\arg \max_k(\log p(c_k)+\log p(x_i|c_k)) =argmaxk(p(ck)p(xick))=argmaxk(logp(ck)+logp(xick))
= arg ⁡ max ⁡ k ( log ⁡ p ( c k ) + log ⁡ ∏ j = 1 M p ( t j ∣ c k ) n i j ) =\arg \max_k(\log p(c_k)+\log \prod\limits_{j=1}^M p(t_j|c_k)^{n_{ij}}) =argmaxk(logp(ck)+logj=1Mp(tjck)nij)
nij 就是词tj 在 email xi 中的个数
根据朴素贝叶斯假设,email类别与词的出现位置无关
已知类别 ck 时 tj 出现的概率
2

可能存在的问题:数据稀疏&过拟合
使用 laplace 平滑: P ^ = N ( X i = x i , C = c i ) + 1 N ( C = c i ) + k \hat P = \frac{N(X_i = x_i,C=c_i)+1}{N(C=c_i)+k} P^=N(C=ci)+kN(Xi=xi,C=ci)+1

Step4 评价指标

一般评价

使用训练集进行训练,使用测试集进行测试,在测试集上的准确度来描述模型的准确度

n 倍交叉验证

把数据分成不交叉的五等分,其中一份做测试,另外四份做训练,独立的进行五轮,将这五轮的平均性能作为模型的性能

保留测试

在训练集进行训练,在验证集调整参数,在测试集进行模型评价

混淆矩阵

3
4

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

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

相关文章

Spring实现数据库读写分离(MySQL实现主从复制)

目录 1、背景 2、方案 2.1 应用层解决: 2.2 中间件解决 3、使用Spring基于应用层实现 3.1 原理 3.2 DynamicDataSource 3.3 DynamicDataSourceHolder 3.4 DataSourceAspect 3.5 配置2个数据源 3.5.1 jdbc.properties 3.5.2 定义连接池 3.5.2 定义DataSource 3.6…

静态IP地址:网络通信的稳定之锚

在数字化时代,网络通信是企业运营和个人生活不可或缺的一部分。而在这个过程中,IP地址扮演着至关重要的角色。静态IP地址,作为一种特殊的网络配置,为网络通信提供了稳定性和可靠性。本文将从五个方面深入探讨静态IP地址的重要性、…

vue3 自定义组件

在项目中,我们会遇到一些没有现成的组件,那这个时候我们就需要自己去写一个满足我们需求的组件。 比如,我需要一个上下排布,上面显示标题,下面显示内容的组件。封装完成后方便复用。 1、布局组件 我定义一个上下结构的…

finallyshell激活-支持所有版本(老版 + 最新版) + 所有平台(mac + windows)

一:打开finally shell的激活页面 二:点击离线激活 三:复制机器码,然后执行一下代码 原文:大哥原文,但是这个大佬是用java实现的,执行因为依赖的问题一直报错 基于以上问题,所以使…

线程池的一些问题

核心线程数1.最大线程5.队列5.存活时间10s 1.场景一 如果核心线程数.被一直占用得不到释放.新进来1个任务.会怎么样?答: 会在队列中中死等. 只要进来的任务.不超过队列的长度,就会一直挡在队列中死等 package com.lin;import java.util.concurrent.Executors; import java.u…

ApiHug - 闭门造车, 出门合辙

🤗 ApiHug {Postman|Swagger|Api...} 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱,有温度,有质量,有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace The Nex…

flutter开发实战-JSON和序列化数据

flutter开发实战-JSON和序列化数据 大多数移动应用都需要与 web 服务器通信,同时在某些时候轻松地存储结构化数据。当创造需要网络连接的应用时,它迟早需要处理一些常见的 JSON。使用Json时候,可以使用json_serializable 一、引入json_anno…

微服务架构:注册中心 Eureka、ZooKeeper、Consul、Nacos的选型对比详解

微服务架构(Microservices Architecture)是一种基于服务拆分的分布式架构模式,旨在将复杂的单体应用程序拆分为一组更小、更独立的服务单元。这些服务单元可以独立开发、测试、部署,并使用不同的技术栈和编程语言。它们通过轻量级…

Golang | Leetcode Golang题解之第92题反转链表II

题目&#xff1a; 题解&#xff1a; func reverseBetween(head *ListNode, left, right int) *ListNode {// 设置 dummyNode 是这一类问题的一般做法dummyNode : &ListNode{Val: -1}dummyNode.Next headpre : dummyNodefor i : 0; i < left-1; i {pre pre.Next}cur :…

StarRocks 【新一代MPP数据库】

1、StarRocks 1.1、StarRocks 简介 StarRocks 是新一代极速全场景 MPP (Massively Parallel Processing&#xff0c;MPP数据库是一种基于大规模并行处理技术的数据库系统&#xff0c;旨在高效处理大量数据。) 数据库。StarRocks 的愿景是能够让用户的数据分析变得更加简单和敏…

房产销售系统,基于 SpringBoot+Vue+MySQL 开发的前后端分离的房产销售系统设计实现

目录 一. 前言 二. 功能模块 2.1. 用户功能模块 2.2. 管理员功能模块 2.3. 销售经理功能模块 2.4. 前台首页功能模块 三. 部分代码实现 四. 源码下载 一. 前言 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身…

day08|字符串题目part01

相关题目&#xff1a; ● 344.反转字符串 ● 541. 反转字符串II ● 卡码网&#xff1a;54.替换数字 ● 151.翻转字符串里的单词 ● 卡码网&#xff1a;55.右旋转字符串 344.反转字符串—双指针的应用 力扣链接 思路&#xff1a;创建两个指针分别指向头部和尾部&#xff0c;首…