[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-83399":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":15,"stars7d":16,"stars30d":16,"stars90d":15,"forks30d":15,"starsTrendScore":15,"compositeScore":17,"rankGlobal":10,"rankLanguage":10,"license":10,"archived":18,"fork":18,"defaultBranch":19,"hasWiki":20,"hasPages":18,"topics":21,"createdAt":10,"pushedAt":10,"updatedAt":30,"readmeContent":31,"aiSummary":10,"trendingCount":15,"starSnapshotCount":15,"syncStatus":32,"lastSyncTime":33,"discoverSource":34},83399,"text_classification","Happy-Chen-CH\u002Ftext_classification","Happy-Chen-CH","This is a text classification project based on the \"Category News\" feature of Toutiao. Initially, we used the random forest algorithm, then upgraded to FastText, and finally built a new text classification model using a BERT pre-trained model with an added fully connected layer.There may still contain several bugs—let's work together to fix them.","",null,"Python",101,4,1,0,40,63.1,false,"main",true,[22,23,24,25,26,27,28,29],"ai","bert","distilbert","fasttext-python","python","random-forest-classifier","tensorflow","text-classification","2026-06-12 04:01:41","# 🗂️ Chinese News Text Classification | 中文新闻文本分类（bert预训练模型太大了传不上来，需要自己去官网下载哦）\n\n[![Python](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPython-3.8+-blue.svg)](https:\u002F\u002Fwww.python.org\u002F)\n[![PyTorch](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPyTorch-1.x-red.svg)](https:\u002F\u002Fpytorch.org\u002F)\n[![Transformers](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F🤗-Transformers-orange.svg)](https:\u002F\u002Fhuggingface.co\u002F)\n[![FastText](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FFastText-0.9-yellowgreen.svg)](https:\u002F\u002Ffasttext.cc\u002F)\n[![License](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-green.svg)](LICENSE)\n\n一个基于多种方法的中文新闻标题分类项目，支持**传统机器学习、深度学习、模型蒸馏**三条技术路线，覆盖从工程落地到学术实验的完整实践。\n注：Bert_project和random_forest_and_fasttext这两个实现文本分类的方案都是经过我运行验证没问题的，但是经过蒸馏后的那个实现方案好像有点问题，欢迎各位大佬来修改！\n这是csdn更具体的讲解地址：https:\u002F\u002Fblog.csdn.net\u002F2301_81954099\u002Farticle\u002Fdetails\u002F161665457?spm=1001.2014.3001.5502\n这是我的csdn个人主页：https:\u002F\u002Fblog.csdn.net\u002F2301_81954099?spm=1000.2115.3001.5343\n\n## ✨ 特性\n\n- 🔬 **四种方法，三套方案**：覆盖传统 ML (TF-IDF + 随机森林)、浅层神经网络 (FastText)、深层预训练模型 (BERT) 以及知识蒸馏 (BERT → TextCNN)\n- 📊 **大规模中文语料**：18 万条训练数据 + 1 万验证 + 1 万测试，10 个新闻类别\n- 🚀 **模型量化部署**：PyTorch 动态量化使 BERT 模型体积从 390MB 压缩至 146MB\n- 🌐 **Flask API 服务**：提供开箱即用的 RESTful 推理接口\n- 📦 **知识蒸馏实践**：Hinton 知识蒸馏方法，将大模型知识迁移至轻量模型\n- 🖥️ **多设备支持**：兼容 CUDA \u002F MPS (Apple Silicon) \u002F CPU，自动检测最佳设备\n\n## 📁 项目结构\n\n```\ntext_classification\u002F\n├── randomforest_and_fasttext\u002F      # 传统机器学习方案\n│   ├── data\u002F                       # 数据集 & 停用词表\n│   │   ├── train.txt               # 训练集 (18万条)\n│   │   ├── dev.txt                 # 验证集 (1万条)\n│   │   ├── test.txt                # 测试集 (1万条)\n│   │   └── class.txt               # 10个类别名称\n│   ├── model\u002F                      # 训练好的 FastText 模型\n│   ├── analysis.py                 # 数据探索性分析 (EDA)\n│   ├── preprocess.py               # 数据预处理 (FastText 格式)\n│   ├── random_forest.py            # TF-IDF + 随机森林\n│   ├── FastText-Train.py           # FastText 训练 (基础版)\n│   ├── FastText-Train2.py          # FastText 训练 (增强 autotune)\n│   ├── app.py                      # Flask 推理服务\n│   └── test.py                     # API 客户端测试脚本\n│\n├── Bert_project\u002F                   # BERT 深度方案\n│   ├── data\u002F\n│   │   ├── bert_pretrain\u002F          # 中文 BERT 预训练权重\n│   │   │   ├── pytorch_model.bin   # 预训练模型 (393MB)\n│   │   │   ├── bert_config.json    # 模型配置\n│   │   │   └── vocab.txt           # 词表 (21128 tokens)\n│   │   └── data1\u002F                  # 训练\u002F验证\u002F测试数据\n│   ├── src\u002F\n│   │   ├── models\u002Fbert.py          # BERT 模型定义\n│   │   ├── run.py                  # 标准训练入口\n│   │   ├── run1.py                 # 训练 + 动态量化\n│   │   ├── train_eval.py           # 训练\u002F评估\u002F测试逻辑\n│   │   ├── utils.py                # 数据集构建 & 迭代器\n│   │   ├── predict.py              # 命令行单条推理\n│   │   ├── app.py                  # Flask 推理服务 (量化模型)\n│   │   ├── demo.py                 # API 客户端示例\n│   │   └── saved_dict\u002F             # 训练好的模型权重\n│   │       ├── bert.pt             # 原始模型 (390MB)\n│   │       └── bert_quantized.pt   # 量化模型 (146MB)\n│\n└── Bert_distil\u002F                    # 知识蒸馏方案\n    ├── data\u002F\n    │   ├── bert_pretrain\u002F          # 中文 BERT 预训练权重 (教师)\n    │   └── data\u002F                   # 训练数据 + char级词表\n    ├── src\u002F\n    │   ├── models\u002F\n    │   │   ├── bert.py             # BERT 教师模型\n    │   │   └── textCNN.py          # TextCNN 学生模型\n    │   ├── run.py                  # 训练入口 (--task trainbert \u002F train_kd)\n    │   ├── train_eval.py           # 标准训练 + 知识蒸馏训练\n    │   └── utils.py                # 数据集构建\n```\n\n## 🧠 方法详解\n\n### 1. TF-IDF + 随机森林\n\n| 维度 | 说明 |\n|------|------|\n| **特征工程** | jieba 分词 → 去停用词 → TF-IDF 向量化 |\n| **分类器** | scikit-learn RandomForestClassifier (多核并行) |\n| **优势** | 训练快速，无需 GPU，可解释性强 |\n| **文件** | [random_forest.py](randomforest_and_fasttext\u002Frandom_forest.py) |\n\n### 2. FastText\n\n| 维度 | 说明 |\n|------|------|\n| **分词** | jieba 中文分词 |\n| **模型** | fastText 监督学习，2-gram 词特征 |\n| **调参** | autotune 自动超参搜索 (lr, dim, ws, epoch, minCount) |\n| **规模** | 训练后模型约 370MB |\n| **推理** | Flask REST API (`POST \u002Fv1\u002Fmain_server\u002F`) |\n| **文件** | [FastText-Train2.py](randomforest_and_fasttext\u002FFastText-Train2.py), [app.py](randomforest_and_fasttext\u002Fapp.py) |\n\n### 3. BERT (全量微调)\n\n| 维度 | 说明 |\n|------|------|\n| **预训练模型** | 中文 BERT (12层, 768维, 21128 词表) |\n| **分类头** | `BERT Encoder → Linear(768, 10)` |\n| **序列长度** | 32 tokens (CLS 前置，padding\u002Ftruncation) |\n| **优化器** | AdamW (lr=5e-5, weight_decay=0.01) |\n| **量化** | PyTorch 动态量化 (int8), 支持 QNNPACK \u002F FBGEMM |\n| **模型压缩** | 390MB → 146MB (量化后) |\n| **设备** | CUDA \u002F MPS (Apple Silicon) \u002F CPU 自动适配 |\n| **文件** | [run.py](Bert_project\u002Fsrc\u002Frun.py), [run1.py](Bert_project\u002Fsrc\u002Frun1.py) |\n\n### 4. 知识蒸馏 (BERT → TextCNN)\n\n| 维度 | 说明 |\n|------|------|\n| **教师模型** | 预训练中文 BERT (同方案3) |\n| **学生模型** | TextCNN (char级 embedding, 多尺度卷积核 2\u002F3\u002F4, 256 filters) |\n| **蒸馏损失** | KLDivLoss (T=2, α=0.8 软硬目标加权) |\n| **教师输出** | 离线预计算，降低训练开销 |\n| **学生参数** | embed_dim=300, dropout=0.5, lr=1e-3, 3 epochs |\n| **文件** | [run.py](Bert_distil\u002Fsrc\u002Frun.py), [train_eval.py](Bert_distil\u002Fsrc\u002Ftrain_eval.py) |\n\n## 📊 数据集\n\n数据集来自中文新闻标题语料，共 **20 万条**标注数据：\n\n| 集合 | 样本数 | 比例 |\n|------|--------|------|\n| 训练集 (train) | 180,000 | 90% |\n| 验证集 (dev) | 10,000 | 5% |\n| 测试集 (test) | 10,000 | 5% |\n\n**10 个分类类别**：\n\n| 编号 | 类别 | 英文 |\n|------|------|------|\n| 0 | 财经 | finance |\n| 1 | 房产 | realty |\n| 2 | 股票 | stocks |\n| 3 | 教育 | education |\n| 4 | 科技 | science |\n| 5 | 社会 | society |\n| 6 | 政治 | politics |\n| 7 | 体育 | sports |\n| 8 | 游戏 | game |\n| 9 | 娱乐 | entertainment |\n\n数据格式（tab 分隔）：\n```\n\u003Csentence>\\t\u003Clabel_id>\n```\n\n## 🚀 快速开始\n\n### 环境要求\n\n- Python 3.8+\n- PyTorch 1.x\n- Transformers (HuggingFace)\n- fastText\n- jieba\n\n### 安装依赖\n\n```bash\n# 创建虚拟环境 (推荐使用 conda)\nconda create -n textcls python=3.8\nconda activate textcls\n\n# 安装依赖\npip install torch numpy pandas scikit-learn tqdm transformers fasttext jieba flask icecream\n```\n\n### 方式一：传统机器学习\n\n```bash\n# 1. 数据探索\ncd randomforest_and_fasttext\npython analysis.py\n\n# 2. 预处理数据\npython preprocess1.py\n\n# 3. 训练 FastText\npython FastText-Train2.py\n\n# 4. 或训练随机森林\npython random_forest.py\n\n# 5. 启动 Flask 推理服务\npython app.py\n\n# 6. 测试 API\npython test.py\n```\n\n### 方式二：BERT 全量微调\n\n```bash\ncd Bert_project\u002Fsrc\n\n# 训练\npython run.py --model bert\n\n# 训练 + 量化\npython run1.py\n\n# 命令行单条推理\npython predict.py\n\n# 启动 Flask 推理服务\npython app.py\n\n# API 测试\npython demo.py\n```\n\n### 方式三：知识蒸馏\n\n```bash\ncd Bert_distil\u002Fsrc\n\n# 先训练 BERT 教师模型\npython run.py --task trainbert\n\n# 蒸馏训练 TextCNN 学生模型\npython run.py --task train_kd\n```\n\n## 🔧 API 接口\n\n两个子项目均提供 Flask RESTful 推理服务：\n\n### FastText 服务 (端口 5000)\n\n```python\nimport requests\n\nurl = \"http:\u002F\u002F127.0.0.1:5000\u002Fv1\u002Fmain_server\u002F\"\ndata = {\"uid\": \"AI-20-202204\", \"text\": \"雷佳音获飞天奖\"}\nresp = requests.post(url, data=data)\nprint(resp.text)  # 输出预测类别\n```\n\n### BERT 量化模型服务\n\n```python\nimport requests\n\nurl = \"http:\u002F\u002F127.0.0.1:5000\u002Fpredict\"\ndata = {\"text\": \"雷佳音获飞天奖\"}\nresp = requests.post(url, json=data)\nprint(resp.json())\n```\n\n## 🧪 模型对比\n\n| 方法 | 参数量 | 模型大小 | 推理速度 | 适用场景 |\n|------|--------|----------|----------|----------|\n| Random Forest | — | — | ⚡ 极快 | 离线批量分类 |\n| FastText | ~ | ~370MB | ⚡ 快 | 实时服务 (轻量) |\n| BERT | 110M | 390MB | 🐢 慢 | 高精度场景 |\n| BERT (量化) | 110M | 146MB | 🚀 较快 | 精度与速度折中 |\n| TextCNN (蒸馏) | ~2M | 小 | ⚡ 快 | 移动端\u002F边缘部署 |\n\n## 📝 注意事项\n\n1. **路径配置**：项目中部分代码包含硬编码的绝对路径，使用前请根据实际路径修改对应配置类中的 `data_path`、`save_path` 等变量\n2. **模型文件**：预训练 BERT 权重 (`pytorch_model.bin`, ~393MB) 和训练好的模型权重 (`bert.pt`, `bert_quantized.pt`, fasttext `.bin` 文件) 体积较大，建议通过 Git LFS 管理或添加至 `.gitignore`\n3. **设备兼容**：BERT 项目已针对 Apple Silicon (MPS) 做了适配，MPS 环境下自动跳过 CUDA 特有设置\n4. **重复数据**：`Bert_project\u002Fdata\u002Fdata1\u002F` 和 `Bert_distil\u002Fdata\u002Fdata\u002F` 包含相同数据集，可按需统一为共享数据目录\n\n## 🤝 贡献\n\n欢迎提交 Issue 和 Pull Request！\n\n## 📄 License\n\nMIT License\n\n---\n\n> 💡 **学习建议**：本项目适合作为 NLP 入门到进阶的实战案例，建议按 **FastText → BERT → 知识蒸馏** 的顺序学习，逐步理解从传统方法到深度学习再到模型压缩的完整技术演进路线。\n",2,"2026-06-11 04:11:05","CREATED_QUERY"]