文本分类(Text Classification) 是NLP最基础的任务之一,目标是将文本划分到预定义的一个或多个类别中。文本分类应用非常广泛,包括情感分析、新闻分类、主题分类、意图识别、问答匹配等。
根据标签的不同,文本分类可以分为:二分类、多分类、多标签分类。
文本分类的一般流程包括:文本预处理 → 特征提取 → 文本表示 → 分类输出。

常见预处理步骤:
常用分词工具:jieba、HanLP、哈工大LTP、北大pkuseg等。
分类过程:
优点:
fastText是一个非常轻量快速的文本分类算法,适合大规模语料的快速训练和预测。
核心思想:卷积神经网络的核心思想是捕捉局部特征,对于文本来说,局部特征就是由若干单词组成的滑动窗口,类似于N-gram。CNN能够自动地对N-gram特征进行组合和筛选,获得不同抽象层次的语义信息。
网络结构:

n × k 的词向量矩阵,n是句子长度,k是词向量维度。通常采用双通道:一个通道预训练词向量固定不变,另一个通道词向量随训练更新。filter_size=(2,3,4))提取不同长度的n-gram特征,每个卷积核输出多个特征图。池化层:使用1-max pooling,将每个特征图池化为一个值,这样不管句子多长,输出都是固定长度的向量。
输出层:最后接一层全连接的softmax层,输出每个类别的概率。
大模型时代,文本分类可以用提示学习(Prompt Learning)来做:
多标签分类是指每个样本可以同时属于多个类别,而不只是一个类别。比如一篇文章可以同时属于"科技"和"AI"两个标签。
二元相关性(Binary Relevance):对每个标签单独训练一个二分类器,预测时每个分类器输出是否属于该标签。简单但没有考虑标签之间的相关性。
标签 powerset:将每个标签组合看成一个新类别,转化为多分类问题。但标签组合数量指数增长,不适合标签多的场景。
层级分类:构建标签树,从上到下逐层分类,利用标签层次结构。
基于Transformer的方法:直接输出标签序列,将多标签分类转化为序列生成问题。
文本分类常用的评估指标包括:
F1 = 2 * P * R / (P + R)
类别不平衡是文本分类中常见问题,可以通过以下方法解决:
文本分类的一般流程是什么?
文本分类一般流程:文本预处理(分词、去停用词等)→ 特征提取 → 文本表示 → 分类模型输出。预处理是基础,特征表示决定了模型能达到的上限,分类模型逼近这个上限。
介绍一下TextCNN的原理和结构。
TextCNN用卷积神经网络提取文本n-gram特征。结构包括:输入层(词向量矩阵)→ 卷积层(多个不同大小卷积核提取不同n-gram)→ 池化层(1-max pooling得到固定长度表示)→ 全连接softmax输出分类概率。核心思想是通过卷积自动提取重要的局部n-gram特征。
fastText的优点是什么?它有哪些关键优化?
fastText非常快,训练速度比深度学习快很多,精度也不错。不需要预训练词向量,可以自己学习。关键优化:(1) 层级Softmax,减少计算量;(2) n-gram特征,捕捉字符级信息,对拼写错误和生僻词鲁棒。适合大规模语料的快速训练。
TextCNN中卷积核大小代表什么?为什么通常用多个不同大小的卷积核?
卷积核大小表示一次看几个词,大小为k的卷积核对应k-gram特征。不同大小卷积核能提取不同长度n-gram的特征,比如大小2提取二元语法,大小3提取三元语法,组合多个卷积核能捕捉更多不同范围的特征,所以效果更好。
多分类和多标签分类有什么区别?
比如新闻分类一篇文章只能是"政治"或"体育"是多分类;一篇文章可以同时打上"AI"、"科技"两个标签是多标签分类。
文本分类任务中类别不平衡怎么处理?
数据层面:过采样少数类、欠采样多数类;模型层面:给少数类更高的损失权重、使用焦点损失Focal Loss、集成学习、生成少数类样本等方法。
大模型做文本分类和传统CNN/RNN方法相比有什么优势?
大模型在预训练阶段学到了丰富的通用语言知识,泛化能力强,特别是在小样本场景下优势明显。大模型能理解上下文语义,处理复杂的语言现象,效果通常比传统方法好。缺点是计算量大,部署成本高。
TextCNN为什么用1-max pooling而不是其他池化方法?
1-max pooling取每个特征图的最大值,只保留最重要的特征,不管输入句子多长,都能输出固定长度向量,计算简单,效果也很好。对于文本分类任务,我们只需要知道某个特征是否出现,不需要知道位置,1-max足够了。