所有超参数集中在
config.py:词表大小、序列长度、Embedding 维度、卷积核尺寸、学习率、Batch Size、Epochs 等,修改一处全局生效。NLP 课程实践 · 深圳职业技术大学
TextCNN · TextRNN · 朴素贝叶斯 — 三种架构对比 · 头条新闻 6 分类
针对中文新闻自动分类场景,设计并实现了 三种不同架构 的文本分类模型进行横向对比:从传统的 朴素贝叶斯 到深度学习的 TextCNN 和 TextRNN。覆盖完整的 NLP 流程——分词、词向量构建、模型训练、评估与可视化,最终通过模块化 Config 统一管理超参数,一键切换模型和训练策略。
使用 今日头条客户端 新闻分类数据集:包含 6 个类别(体育、财经、房产、家居、教育、科技),每个类别约 2,000 条短文本。经过 Jieba 分词 + 停用词过滤 + 词频统计后构建词表,保留高频 Top N 词汇作为特征空间。
| 架构 | 类型 | 核心思想 | 准确率 | 训练速度 |
|---|---|---|---|---|
| 朴素贝叶斯 | 统计 ML | 基于词频先验概率的贝叶斯推断,假设特征条件独立 | ~78% | 快 |
| TextCNN | 深度学习 | 多尺寸卷积核并行提取 n-gram 局部特征 + MaxPooling | ~91% | 中 |
| TextRNN | 深度学习 | 双向 LSTM 捕捉长距离语义依赖 + 全连接分类层 | ~89% | 慢 |
使用 sklearn.naive_bayes.MultinomialNB,将 TF-IDF 加权后的词频向量作为输入。实现简单、无需 GPU、可解释性强——可直接查看每个类别的高贡献词。但受限于"特征独立"假设,无法捕捉词序和上下文关系。
基于 TensorFlow / Keras 实现。核心设计:使用 2、3、4 三种尺寸 的卷积核同时扫描文本序列,分别捕捉双词、三词、四词的局部特征组合,经 GlobalMaxPooling 保留最强信号后拼接,最后通过 Softmax 输出 6 类概率。参数量少、训练稳定、效果最优。
同样基于 TensorFlow / Keras,使用双向 LSTM 对 Embedding 后的序列建模。BiLSTM 能同时关注上下文两个方向的语义信息,理论上比 CNN 更适合序列建模。但实际效果略低于 TextCNN(本数据集中短文本占比高,局部特征更有效),且训练耗时约为 TextCNN 的 2.5 倍。
config.py:词表大小、序列长度、Embedding 维度、卷积核尺寸、学习率、Batch Size、Epochs 等,修改一处全局生效。model = create_model('textcnn', config) 一行切换架构,无需修改训练和评估代码。trainable=True),词表按词频截断在 45,600 处,显著优于随机初始化。EarlyStopping + ModelCheckpoint,自动保存验证集最优模型权重。| 指标 | 朴素贝叶斯 | TextCNN | TextRNN |
|---|---|---|---|
| 准确率 | 78.3% | 91.2% | 89.1% |
| F1 (Macro) | 0.77 | 0.91 | 0.89 |
| 训练时间 / Epoch | <1s | ~12s | ~30s |
| 推理延迟 (单条) | ~0.5ms | ~2ms | ~4ms |
| GPU 需求 | 否 | 建议 | 建议 |
| 模块 | 技术 |
|---|---|
| 分词 & 预处理 | Jieba · 停用词表 |
| 传统模型 | sklearn · MultinomialNB · TF-IDF |
| 深度学习 | TensorFlow · Keras · Embedding · Conv1D · LSTM |
| 评估 & 可视化 | Matplotlib · scikit-learn metrics · 混淆矩阵 |
| 模型管理 | EarlyStopping · ModelCheckpoint · Config 模块 |