文本分类(TFIDF/朴素贝叶斯分类器/TextRNN/TextCNN/TextRCNN/FastText/HAN)

本文主要是介绍文本分类(TFIDF/朴素贝叶斯分类器/TextRNN/TextCNN/TextRCNN/FastText/HAN),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 简介
  • TFIDF
  • 朴素贝叶斯分类器
    • 贝叶斯公式
    • 贝叶斯决策论的理解
    • 极大似然估计
    • 朴素贝叶斯分类器
  • TextRNN
  • TextCNN
  • TextRCNN
  • FastText
  • HAN
  • Highway Networks

简介

通常,进行文本分类的主要方法有三种:

  • 基于规则特征匹配的方法(如根据喜欢,讨厌等特殊词来评判情感,但准确率低,通常作为一种辅助判断的方法)
  • 基于传统机器学习的方法(特征工程 + 分类算法)
  • 给予深度学习的方法(词向量 + 神经网络)

自BERT提出以来,各大NLP比赛基本上已经被BERT霸榜了,但笔者认为掌握经典的文本分类模型原理还是十分有必要的。这一节,将对一些经典模型进行介绍,并在我的github中给出部分模型的实现。

TFIDF

TF-IDF(term frequency–inverse document frequency)是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。TF意思是词频(Term Frequency),IDF意思是逆文本频率指数(Inverse Document Frequency)。

TFIDF的主要思想是:如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。其统计公式如下:

\(tfidf_{i, j} = tf_{i, j} \times idf_{i, j}\)

其中,tf表示词频(Term Frequency),即词条在文档i中出现的频率;idf为逆向文件频率(Inverse Document Frequency),表示某个关键词在整个语料所有文章中出现的次数的倒数(该指标用于降低常用词的重要性)。

优点:能过滤掉一些常见的却无关紧要的词语,同时保留影响整个文本的重要词语。

缺点:不能有效反应特征词的分布情况,也没有体现词语的位置信息(通常文章首尾句词的重要性较高)。

朴素贝叶斯分类器

朴素贝叶斯分类器是文本分类常用的机器学习方法。贝叶斯分类器的核心思想就是贝叶斯决策论:贝叶斯决策论考虑如何基于某个先验分布下,使得平均风险最小的决策。该理论具有两个最两个关键的部分:先验分布和平均风险

贝叶斯公式

文本分类问题最简单的方法,就是通过对文本所包含的字词特征来对文本进行归类。假设类别为\(Y\),文本特征集合为\(X\),用概率统计的方法来表示,则我们需要求得条件概率\(P(Y|X)\)。如果我们将贝叶斯决策论的思想应用到该问题中,即我们熟知的贝叶斯公式:

\(P(Y|X) = \frac{P(Y)P(X|Y)}{P(X)}\)

其中,\(P(Y|X)\)为后验概率;\(P(X)\)\(P(Y)\)为先验概率。

我们可以将贝叶斯公式的右端拆成\(P(Y)\)\(\frac{P(X|Y)}{P(X)}\)乘积的形式,则我们可以将其理解为在X的条件下Y发生的概率,等于Y发生的概率乘以一个修正因子,若修正因子大于1,表明X条件的发生使得Y发生的概率变大了,修正因子小于1,则表明X条件使得Y发生个概率降低了。由于概率因子中,\(P(X)\)是一个确定值(可以通过统计得到),我们只需要确定条件概率\(P(X|Y)\),即可确定给定文本特征的情况下该条件概率分布,从而进行文本分类。

贝叶斯决策论的理解

假设我们的文本由N种可能的类别标记,即\(Y={c_1, c_2, ..., c_N}\),则我们可以由后验概率\(P(c_i|x)\)得到将样本\(x\)分类为\(c_i\)的条件风险(或称期望损失):

\(R(c_i|x)=\sum_{j=1}^{N}\lambda_{ij}P(c_j|x)\)

其中,\(\lambda_{ij}\)表示将\(c_i\)标记为\(c_j\)产生的损失
如果我们想要得到最优的分类,就需要使得每次标记的条件风险最小化,即最优条件风险:

\(h^*(x)=argmin_{c \in Y}R(c|x)\)

这就是贝叶斯判定准则,如果我们想使得分类错误率(1-正确分类率)最小,则只需令条件风险为:

\(R(c|x)=1 - P(c|x)\)

则最优条件风险简化为

\(h^*(x)=argmin_{c \in Y}R(c|x)=argmax_{c \in Y}P(c|x)\)

我们将贝叶斯公式带入其中,可得

\(h^*(x)=argmax_{c \in Y}P(c|x)=argmax_{c \in Y}\frac{P(c)P(x|c)}{P(x)}=argmax_{c \in Y}P(c)P(x|c)\)

综合以上讨论,当前求最小化分类错误率的问题转化成了最大化后验概率\(P(x|c)\)的问题。

极大似然估计

我们已经假设输入文本特征满足某种条件概率分布,接下来的关键是由观测到的文本特征对该条件概率分布进行参数估计,即极大似然估计。

极大似然估计源自于频率学派,他们认为参数虽然未知,但却是客观存在的规定值,因此,可以通过优化似然函数等准则确定参数数值。

假设\(D_c\)表示训练集中c类标签的样本集合,假设这些样本是独立同分布的。求解极大似然估计主要由如下几个步骤:

  • 由训练集的特征集合以及事先假设的概率分布函数,写出似然函数

\(P(D_c|\theta)=\prod_{x \in D_c}P(x|\theta)\)

  • 由于很多小概率的乘积会导致浮点数下溢出,我们对其求对数,将原来的乘积运算变为求和运算

\(L(\theta)=logP(D_c|\theta)=\sum_{x \in D_c}logP(x|\theta)\)

  • \(L(\hat \theta)\)取得极大值时,\(\theta\)的极大似然估计为\(\hat \theta\),即

\(\hat \theta = argmax_{\theta}L(\theta)\)

朴素贝叶斯分类器

从上一节可知,我们可以用极大似然的方法来估计我们需要的概率分布参数,接下来的关键就是我们如何从训练样本中准确估计出条件概率P(x|c)。我们知道文本之间的相互关系是十分复杂的,但为了简化模型复杂度从而更简单的估计出条件概率,朴素贝叶斯分类器做了“属性条件独立性假设”:对已知类别,假设所有属性相互独立,即假设每个属性独立的对分类结果发生影响,即

\(P(x|c)=\prod_{i=1}^{d}P(x_i|c)\)

有了条件概率的简化条件之后,我们很容易将贝叶斯准则改写为

\(h^*(x)=argmax_{c \in Y}P(c|x)=argmax_{c \in Y}P(c)\prod_{i=1}^{d}P(x_i|c)\)

上式即朴素贝叶斯的表达式。

接下来,我们从训练集中统计得到似然估计,令\(D_c\)表示训练集D中第c类样本组成的集合,先验概率\(P(c)\)的似然估计为:

\(P(c)=\frac{|D_c|}{|D|}\)

对于条件概率\(P(x|c)\),通常,我们假设该条件概率满足某种概率分布,在sklearn中有三种假设的分布:GuassianNB、MultinomialNB和BernoulliNB(分别假设为高斯分布、多项分布和伯努利分布,文本分类通常使用多项式分布),假设满足多项式分布,则条件概率为如下形式:

\(P(X=x_{jl}|Y=c_k) = \frac{x_{jl}+\lambda}{m_k+n\lambda}\)

其中,\(m_k\)是训练集中输出为第k类的样本个数,\(\lambda\)取1时即拉普拉斯平滑,目的是防止0概率估计的出现,而影响后验概率的计算结果。

总的来说,朴素贝叶斯分类的推导主要基于贝叶斯公式,决策方式为在“属性条件独立性假设”条件下的贝叶斯决策论,参数估计的方法为极大似然估计。

TextRNN

之前介绍过词向量以及三大特征提取器,这里就不再赘述了,深度学习模型无非就是用特征抽取器拼接起来的不同结构的神经网络模型,所以接下来的几个部分基本是对模型结构的简介。 首先我们来 看看用经典的LSTM/GRU实现文本分类模型的基本结构: 由上图可知,TextRNN仅仅是将Word Embedding输入到双向LSTM中,然后对最后一位的输出输入到全连接层中,在对其进行softmax分类即可。

TextCNN

对于TextCNN在上一篇文章中简单的提到过,这里再做一些简单的补充,其模型结构如下图所示:
www.wityx.com

上图很直观的展现了,与图像中的二维卷积不同,TextCNN中采用的是一维卷积,每个卷积核的大小为\(h \times k\)(h为卷积核的窗口大小,k为词向量的维度),文中采用了多种不同尺寸的卷积核,用以提取不同文本长度的特征(上图种可以看见,卷积核有h=2, 3, 4三种)

然后,作者对于卷积核的输出进行MaxPooling,目的是提取最重要的特征。将所有卷积核的输出通过MaxPooling之后拼接形成一个新向量,再将该向量输出到全连接层分类器(Dropout + Linear + Softmax)实现文本分类。

TextRCNN

这篇论文中描述稍微复杂了点,实际模型非常简单,该模型结构如下图所示:
www.wityx.com

该模型的主要思想如下:

  • 首先获得词向量表示\(e(w_i)\)
  • 其次将词向量通过双向RNN(实践中可以是LSTM或GRU)得到\(c_l(w_i)\)\(c_r(w_i)\)
  • \(c_l(w_i)\), \(e(w_i)\)以及\(c_r(w_i)\)拼接得到新的向量,将其输入到全连接网络对其进行整合,激活函数为tanh
  • 再将全连接网络的输出进行MaxPooling
  • 最后将其输入一个全连接分类器中实现分类

原文链接

FastText

FastText是Facebook于2016年发布的文本分类模型,其主要思想基于word2vec中的skip-gram模型(关于skip-gram模型参考我之前词向量的博客,这里也就不再赘述),在训练文本分类模型的同时,也将训练出字符级n-gram词向量。

通常认为,形态类似的单词具有相似的语义特征。而对于Word2Vec模型,其构建的语料库中,把不同的单词直接映射到独立的id信息,这样,使得不同单词之间的形态学信息完全丢失了,如英文中的“nation”和“national”,中文中的“上海市政府”和“上海市”。如果能够学习到形态学变换到单词特征的规则,我们可以利用这个规则来得到许多训练集中不可见的单词表示。

为了解决这个问题,FastText用字符级别的n-gram来表示一个单词或句子,如

中华人民共和国
bigram:中华 华人 人民 民共 共和 和国
trigram:中华人 华人民 人民共 民共和 共和国

得到了词的n-gram表征之后,我们可以用n-gram子词(subword)的词向量叠加来表示整个词语,词典则是所有词子词的并集。

其主要模型结构如下图所示,最后也采用了层次softmax的提速手段:
www.wityx.com

对比skip-gram模型,可以FastText的词典规模会更大,模型参数会更多。但每一个词的词向量都是子词向量的和,使得一些生僻词或未出现的单词能够从形态相近的单词中得到较好的词向量表示,从而在一定程度上能够解决OOV问题

原文链接

HAN

HAN的全称为Hierarchical Attention Network(分级注意网络),从字面意思就可以理解其是一个分层架构模型。该模型主要用于文档分类(长文本分类),其主要结构如下所示:
www.wityx.com

HAN主要由两个层次的模型架构:词级别和句级别,每个层次的模型都包括一个编码器和注意力模型两个部分,整个模型的细节如下:

  • 如上图所示,假设我们的文档中有\(L\)个句子,对于第二个句子,单词长度为\(T\)
  • 首先将单词输入Embedding层获取词向量
  • 将获取的词向量输入词编码器,即一个双向GRU,将两个方向的GRU输出拼接在一起得到词级别的隐向量\(h\)
  • 将词级别的隐向量通过一个单层感知机(MLP,实际上就是全连接神经网络,激活函数选用tanh),输出的结果可以看作是更高层次的隐向量表示:
    \(u_{it}=tanh(W_wu_{it}+b_w)\)
  • 随机初始化一个上下文向量\(u_w\)(随着训练不断优化),将该上下文向量\(u_w\)与高层次的隐向量表示\(u_{it}\)输入softmax,得到每个词与上下文向量的相似度表示:
    \(\alpha_{it}=\frac{exp(u_{it}^Tu_w)}{\sum_texp(u_{it}^Tu_w)}\)
  • 将上述相似度作为权重,对\(h_{it}\)加权求和得到句子级别的向量表示:
    \(s_i=\sum_t\alpha_{it}h_{it}\)
  • 对于句子级别的向量,我们用相类似的方法,将其通过编码层,注意力层,最后将文档中所有句子的隐向量表示加权求和,得到整个文档的文档向量\(v\),将该向量通过一个全连接分类器进行分类。

其实HAN中使用到的的Attention就是最常用的 Soft-Attention ,整个模型的结构就相当于TextRNN + Soft-Attention的叠加。,分别用来处理词级别和句子级别,对于短文本分类,我们只需借鉴词级别的模型即可。

原文链接

Highway Networks

门限神经网络(Gated Networks),在之前一篇文章中也提到过,主要是利用\(sigmoid\)函数“门限”的性质,来实现对信息流的自动控制的一种方法,Highway Networks就是一种典型的门限网络结构,这里也简单的介绍一下。

根据原文的定义,假设原来网络的输出为:
\[y = H(x, W_H)\]

其中\(H(·)\)表示非线性变换(可以设置为激活函数为relu的全连接层)。定义\(T(x, W_T) = sigmoid(W_T^Tx + b_T)\)文章的做法就是将其改进为:
\[y = H(x, W_H) \cdot T(x, W_T) + x \cdot (1-T(x, W_T))\]

则对于输出y,有:
\[y = \begin{cases} x, & if\ T(x, W_T) = 0 \\ H(x, W_H), & if \ T(x, W_T) = 1 \end{cases}\]

原文链接

https://blog.csdn.net/zhangph1229/article/details/52106301
https://www.kesci.com/home/project/5be7e948954d6e0010632ef2
https://zhuanlan.zhihu.com/p/32091937
https://zhuanlan.zhihu.com/p/64603089
https://zhuanlan.zhihu.com/p/24780258
https://zhuanlan.zhihu.com/p/32965521
https://zhuanlan.zhihu.com/p/63111928
https://zhuanlan.zhihu.com/p/53342715
https://zhuanlan.zhihu.com/p/44776747

这篇关于文本分类(TFIDF/朴素贝叶斯分类器/TextRNN/TextCNN/TextRCNN/FastText/HAN)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/519814

相关文章

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者

理解分类器(linear)为什么可以做语义方向的指导?(解纠缠)

Attribute Manipulation(属性编辑)、disentanglement(解纠缠)常用的两种做法:线性探针和PCA_disentanglement和alignment-CSDN博客 在解纠缠的过程中,有一种非常简单的方法来引导G向某个方向进行生成,然后我们通过向不同的方向进行行走,那么就会得到这个属性上的图像。那么你利用多个方向进行生成,便得到了各种方向的图像,每个方向对应了很多

Level3 — PART 3 — 自然语言处理与文本分析

目录 自然语言处理概要 分词与词性标注 N-Gram 分词 分词及词性标注的难点 法则式分词法 全切分 FMM和BMM Bi-direction MM 优缺点 统计式分词法 N-Gram概率模型 HMM概率模型 词性标注(Part-of-Speech Tagging) HMM 文本挖掘概要 信息检索(Information Retrieval) 全文扫描 关键词

用Pytho解决分类问题_DBSCAN聚类算法模板

一:DBSCAN聚类算法的介绍 DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的聚类算法,DBSCAN算法的核心思想是将具有足够高密度的区域划分为簇,并能够在具有噪声的空间数据库中发现任意形状的簇。 DBSCAN算法的主要特点包括: 1. 基于密度的聚类:DBSCAN算法通过识别被低密

PMP–一、二、三模–分类–14.敏捷–技巧–看板面板与燃尽图燃起图

文章目录 技巧一模14.敏捷--方法--看板(类似卡片)1、 [单选] 根据项目的特点,项目经理建议选择一种敏捷方法,该方法限制团队成员在任何给定时间执行的任务数。此方法还允许团队提高工作过程中问题和瓶颈的可见性。项目经理建议采用以下哪种方法? 易错14.敏捷--精益、敏捷、看板(类似卡片)--敏捷、精益和看板方法共同的重点在于交付价值、尊重人、减少浪费、透明化、适应变更以及持续改善等方面。

【python计算机视觉编程——8.图像内容分类】

python计算机视觉编程——8.图像内容分类 8.图像内容分类8.1 K邻近分类法(KNN)8.1.1 一个简单的二维示例8.1.2 用稠密SIFT作为图像特征8.1.3 图像分类:手势识别 8.2贝叶斯分类器用PCA降维 8.3 支持向量机8.3.2 再论手势识别 8.4 光学字符识别8.4.2 选取特征8.4.3 多类支持向量机8.4.4 提取单元格并识别字符8.4.5 图像校正

PMP–一、二、三模–分类–14.敏捷–技巧–原型MVP

文章目录 技巧一模14.敏捷--原型法--项目生命周期--迭代型生命周期,通过连续的原型或概念验证来改进产品或成果。每个新的原型都能带来新的干系人新的反馈和团队见解。题目中明确提到需要反馈,因此原型法比较好用。23、 [单选] 一个敏捷团队的任务是开发一款机器人。项目经理希望确保在机器人被实际建造之前,团队能够收到关于需求的早期反馈并相应地调整设计。项目经理应该使用以下哪一项来实现这个目标?

基于深度学习 卷积神经网络resnext50的中医舌苔分类系统

项目概述 本项目旨在通过深度学习技术,特别是利用卷积神经网络(Convolutional Neural Networks, CNNs)中的ResNeXt50架构,实现对中医舌象图像的自动分类。该系统不仅能够识别不同的舌苔类型,还能够在PyQt5框架下提供一个直观的图形用户界面(GUI),使得医生或患者能够方便地上传舌象照片并获取分析结果。 技术栈 深度学习框架:采用PyTorch或其他