文本分类(一) | (1) 任务定义

项目Github地址

近年来,文本的数量呈指数增长,为了能在许多应用中准确地对文本进行分类,需要对机器学习方法有更深入的了解。许多机器学习方法在自然语言处理方面都取得了突破性的结果。这些学习算法的成功取决于其拟合数据中存在的非线性关系的能力。然而,寻找一种普适、通用的文本分类技术对研究人员来说仍然是一个巨大的挑战。

在文本分类专栏系列博客中,我将系统的介绍如何搭建一个完整的文本分类系统,包括数据预处理、主要方法的原理介绍和实现细节、实验结果与分析、网页Demo的构建以及项目文件的组织方式。

目录

1. 问题定义

2. 文本分类系统的类型

3. 文本分类流程

4. 总结


1. 问题定义

在过去的几十年中,文本分类问题在许多实际应用中得到了广泛的研究和解决。 文本分类技术在信息检索、信息过滤、推荐系统、情感分析以及推荐系统等多个领域都有广泛的应用。文本分类任务是指根据已经定义好的类别标签对现有的一段文本进行标注的任务。一般来说,文本数据集包含一系列长短不一的文本片段,如D = \{X_1,X_2,...,X_N\},其中X_i代表一个数据点或文本片段,每个X_i包含s个句子,每个句子又包含w_s个单词,每个单词又可以包含l_w个字符。每个数据点X_i都用一组 k 个不同离散值索引中的类别标签进行标记。

2. 文本分类系统的类型

  • 按照分类文本规模来划分

1)文档级别:算法输出整个文档对应的类别。

2)段落级别:算法输出一个单独的段落 (文档的一部分)对应的类别。

3)句子级别:算法输出一个单独的句子 (段落的一部分) 对应的类别。

4)子句级别:算法输出一个单独的子句 (句子的一部分) 对应的类别。

  • 按照算法输出来划分

1)二分类:待分类文本数据集只有两个类别标签,此时(输出层)一般采用 sigmoid 激活函数和二分类交叉熵损失。

2)多分类:待分类文本数据集有 n(n > 2) 个类别标签,每个文本对应 n 个 类别标签中的一个,此时(输出层)一般采用 softmax 激活函数和多分类交叉熵损失。

3)多标签分类:待分类文本数据集有 n(n > 2) 个类别标签,每个文本对应 n 个类别标签中的一个或多个(数量不固定),此时(输出层)一般采用 sigmoid 激活函数和二分类交叉熵损失。

具体可以查看我的另一篇博客二分类、多分类与多标签分类的区别与损失函数,以及PyTorch中分类问题的损失函数

 

3. 文本分类流程

文本分类系统的流程如下图所示:

1)特征提取:一般来说,文本是非结构化数据,不能直接输入分类器进行分类。 所以,我们首先要把这些非结构化文本序列转换为结构化特征空间。在文本数据预处理或数据清洗后,可以采用一些形式化特征提取方法。特征提取的常用技术有 TF、TF-IDF、Word2Vec、GloVe以及最近非常火的预训练语言模型Bert(ERNIE、XLNet、AlBert等)。

2)降维:使用传统机器学习算法时,一般使用TF-IDF提取结构化特征,作为分类器的输入,当词典非常大时,提取的特征空间维数会非常高,为了降低算法的时间和空间复杂度,会使用一些方法对特征空间进行缩减;当然对于一些基于深度学 习的算法,一般采用低维稠密词向量来进行文本表示,降维方法使用比较少。常用的降维方法包括主成份分析、线性判别分析、非负矩阵分解 , 以及一些无监督特征提取降维的技术 (自编码器、t-SNE、随机投影)。

3)分类算法:选择一个好的分类器是文本分类系统流程中最重要的一步。首先是一些传统的机器学习算法,如 k-NN、逻辑回归、朴素贝叶斯、SVM、决策树 以及一些集成方法等,这些算法一般使用TF-IDF提取的结构化特征作为输入 (可能会使用一些降维手段,对特征维度进行缩减);还有就是一些深度学习算法,基于CNN的文本分类算法(TextCNN、DPCNN等)、基于RNN的文本分类算法(多层双向LSTM/GRU、多层双向LSTM/GRU with Attention、Hierarchical Attention Networks等)、基于Self Attention的文本分类算法 (使用Transformer Encoder、Bert(ERNIE、XLNet、AlBert等)等预训练语言模型)。

4)评估指标:文本分类系统流程的最后一步是算法评估。理解模型的运行方式或效果对于文本分类方法的使用和开发至关重要。有许多方法可用于评估文本分类算法。分类准确率是最简单的评估方法,但不适用于类别不平衡的数据集。对于文本分类算法还有一些其他的评估方法,如Fβ − score、MCC、ROC 和 AUC。一般多分类使用F1-score(weighted F1-score或macro F1-score),二分类使用AUC。对于各种分类(2分类、多分类)评估指标的原理介绍及在Sklearn中的使用可以查看我的另一篇博客2分类、多分类问题评价指标以及在sklearn中的使用

 

4. 总结

本文本分类专栏,之后将实现一些基于深度学习的分类算法,主要是一些基于CNN和RNN的模型,包括Fast-Text、TextCNN、DPCNN、RCNN、多层双向LSTM/GRU以及多层双向LSTM/GRU with Attention这六个模型(之后的博客会详细介绍这些模型的原理和实现细节)。之后还会拓展一些基于预训练语言模型的分类模型。

推荐一篇关于文本分类的综述,内容非常全面(长达68页),对一些预处理及特征提取方法配以源码实现:文本分类综述

这是我个人写的文本分类算法综述:个人文本分类综述

 

发布了365 篇原创文章 · 获赞 714 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/sdu_hao/article/details/103594403