文本分类常见面试篇
📝通俗解释:文本分类是自然语言处理(NLP)中最基础的任务之一,简单来说就是让计算机根据文字内容判断它属于哪个类别,比如判断一条评论是"好评"还是"差评"。
一、文本分类任务有哪些应用场景?
文本分类是机器学习中常见的监督学习任务之一,常见的应用场景包括:
- 情感分类:判断文本的情感倾向(正面/负面/中性)
- 新闻分类:将新闻文章按类别分组(体育、财经、科技等)
- 主题分类:识别文本讨论的主题
- 问答匹配:判断问题与答案是否匹配
- 意图识别:识别用户的意图(如询问、投诉、建议等)
- 垃圾邮件检测:识别是否为垃圾邮件
📝通俗解释:就像图书馆管理员把书籍按类别摆放,文本分类就是让计算机自动做这个分类工作。比如邮箱自动把垃圾邮件分到垃圾箱,就是典型的文本分类应用。
分类任务根据数据集的标签情况,可分为:
- 二分类:只有两个类别(如垃圾邮件/正常邮件)
- 多分类:有多个互斥的类别(如新闻分类:体育/财经/科技/娱乐)
- 多标签分类:一个文本可能属于多个类别(如一篇文章同时涉及"科技"和"数码")
二、文本分类的具体流程?
文本分类的流程一般包括:文本预处理 → 特征提取 → 文本表示 → 分类输出
训练集 → [文本预处理 → 特征提取 → 文本表示] → 分类器 → 类别输出1. 文本预处理
- 分词:将句子切分成单词/词组
- 去停用词:去除无意义的词(如"的"、"了"、"是")
- 其他处理:大小写统一、去除特殊字符等
📝通俗解释:就像做饭前要洗菜、切菜一样,文本预处理就是把原始文字整理成计算机更容易处理的格式。
常用分词工具:jieba、HanLP、哈工大LTP、北大pkuseg等
2. 特征提取与文本表示
- 将文本转换为计算机能理解的数值向量(词向量)
- 方法:TF-IDF、Word2Vec、GloVe、BERT等
3. 分类器
- 使用机器学习或深度学习模型进行分类
- 常用模型:朴素贝叶斯、SVM、TextCNN、BERT等
三、FastText的分类过程?FastText的优点?
FastText的分类过程
- 输入:将文本切分为词(或子词)
- 词向量获取:将每个词转换为词向量
- 平均池化:对所有词向量取平均,得到句子表示
- 线性分类:通过线性分类器(Softmax)输出类别
📝通俗解释:想象把一篇文章的所有词向量像积木一样堆在一起,然后取平均高度,这个"平均高度"就代表了这篇文章,再根据这个特征来分类。
输入的词向量可以是预先训练好的,也可以随机初始化,随分类任务一起训练。
FastText的优点
| 优点 | 说明 |
|---|---|
| 速度快 | 在保持精度的前提下,大幅提升训练和测试速度 |
| 无需预训练词向量 | 会自己训练词向量,减少对外部资源的依赖 |
| 层级Softmax | 使用层级Softmax(Hierarchical Softmax)提升效率 |
| 子词特征 | 采用char-level的n-gram作为附加特征,能处理未登录词 |
📝通俗解释:FastText就像一个"快餐"分类器,虽然结构简单,但速度快、效果好,特别适合大规模文本分类任务。它的子词特性还能处理拼写错误或新词汇。
四、TextCNN进行文本分类的过程?
TextCNN的核心思想是捕捉局部特征,对于文本来说,局部特征就是由若干单词组成的滑动窗口(类似于N-gram)。
📝通俗解释:TextCNN就像用不同大小的"放大镜"去扫描句子,每个放大镜能同时看到2个、3个或4个单词,通过这种方式捕捉相邻单词的组合含义。
TextCNN架构图
输入层 → 卷积层 → 池化层 → 全连接层 → 分类输出具体过程
输入层
- 将句子转换为 $n \times k$ 的句子矩阵($n$为句子长度,$k$为词向量维度)
- 采用双通道形式:一个通道使用预训练好的词向量(静态),另一个通道的词向量可训练(动态)
卷积层
- 使用不同大小的卷积核(filter_size)进行一维卷积
- 常用filter_size:(2,3,4),每个size有多个filter
- 卷积操作提取不同位置的N-gram特征
池化层
- 使用1-max pooling:从每个feature map中提取最大值
- 作用:将不同长度的句子转换为定长表示
全连接层
- 接softmax层,输出每个类别的概率
- 可加入Dropout防止过拟合
📝通俗解释:整个过程就像,先把句子切成小片(输入),用不同大小的"滤镜"提取特征(卷积),然后只保留每个位置最重要的特征(池化),最后综合所有信息做出判断(全连接)。
五、TextCNN可以调整哪些参数?
1. 输入词向量表征
- 选择词向量预训练方式:Word2Vec、GloVe、BERT等
- 是否使用双通道
📝通俗解释:就像选择用什么"颜料"来画图,不同的词向量模型会给文字赋予不同的"含义"。
2. 卷积核大小(filter_size)
- 合理范围:1~10
- 句子较长时可考虑使用更大的卷积核
- 可以组合多个不同大小的卷积核
📝通俗解释:卷积核大小决定了每次看几个词。小的卷积核看得很细,大的卷积核看得很广,组合使用效果往往更好。
3. 特征图个数(feature map)
- 常用范围:100~600
- 考虑因素:训练时间与精度的权衡
- 特征图过多可能过拟合,可加强正则化
4. 激活函数
- 常用:ReLU、tanh
📝通俗解释:激活函数就像"开关",决定哪些特征要"激活"传递给下一层。
5. 池化策略
- 1-max pooling:表现最佳,适用于大多数任务
- k-max pooling:保留Top-K个最大值,适用于复杂任务
6. 正则化
- Dropout:建议尝试小的dropout率(<0.5)
- L2正则化:限制权重过大
六、文本分类任务使用的评估指标有哪些?
基础指标
| 指标 | 公式 | 说明 |
|---|---|---|
| 准确率(Accuracy) | $\frac{TP+TN}{TP+TN+FP+FN}$ | 预测正确的比例 |
| 精确率(Precision) | $\frac{TP}{TP+FP}$ | 预测为正类中实际为正类的比例 |
| 召回率(Recall) | $\frac{TP}{TP+FN}$ | 实际正类中被预测正确的比例 |
| F1分数 | $\frac{2 \times P \times R}{P+R}$ | 精确率和召回率的调和平均 |
📝通俗解释:
- 精确率:预测"是垃圾邮件"的那些里面,有多少真的是垃圾邮件?
- 召回率:所有真正的垃圾邮件里,有多少被正确找出来了?
- F1:精确率和召回率的综合得分
其他重要指标
- ROC曲线:展示不同阈值下真阳性率与假阳性率的关系
- AUC:ROC曲线下的面积,越接近1越好
- 混淆矩阵:直观展示各类别的预测情况
📝通俗解释:就像考试成绩一样,准确率是"总分考得好",精确率是"预测高分的学生真的高分",召回率是"所有高分学生都被找到了"。不同场景侧重点不同,比如医疗诊断更看重召回率(不漏诊)。
致谢
来源:[AiGC面试宝典] - 知识星球
📝总结:文本分类是NLP的基础任务,面试中常问的包括:流程理解、FastText原理、TextCNN架构、参数调优、评估指标等。掌握这些内容,能够应对大部分文本分类相关的面试问题。