基于pytorch与sklearn的中文文本分类代码集合,包括常见的传统机器学习与深度学习等模型,旨在帮助有需要的人更快上手实操,开箱即用。
实现的模型结构以下几类,具体的模型结构的讲解可以看下我的博客
这里使用的是一份公开的京东的用户评论的数据,类别:好评、差评,任务相对比较简单。为了统一数据格式,所以先用jieba分词器进行了分词,没有用领域词典、过滤停用词等。
数据集划分:
数据集 | 数据量 |
---|---|
训练集 | 2.4万 |
验证集 | 0.3万 |
测试集 | 0.3万 |
首先下载代码到本地,然后进入根目录,根据想要的模型运行相应的命令
git clone
cd
# 传统机器学习
bash scripts/run_ml_cls.sh
# 传统DNN深度学习
bash scripts/run_dnn_cls.sh
# 预训练语言模型
bash scripts/run_plm_cls.sh
#
传统机器学习的启动脚本(run_ml_cls.sh)中, 可以修改model_type参数来切换不同的模型
传统DNN模型的启动脚本(run_dnn_cls.sh)中, model_type 可以取值如下,如果样本不均衡,可以考虑使用focal loss或者指定各个类别的loss权重(线性简单的可以设置为另一个类别的个数,出现越少权重越大,可以参考cnn的设置方式)
基于预训练语言模型的启动脚本(run_plm_cls.sh), model_type 可以取值:
每训练100个step在开发集进行评估,选最好的模型在测试集上评估
模型 | acc | 备注 |
---|---|---|
决策树 | 93.40% | DecisionTreeClassifier |
随机森林 | 97.01% | RandomForestClassifier |
SVM | 97.20% | LinearSVC |
XGBOOST | 95.68% | xgb.XGBClassifier() |
TextCNN | 96.46% | 参考论文[1] |
TextLSTM | 95.71% | 参考论文[2] |
FastText | 93.76% | 参考论文[3] |
BERT-CLS | 98.99% | 参考论文[4] |
上表所有的模型结果都没有调参,所以无法精确的进行比较,但从趋势来看,传统机器学习对于简单的分类任务也一样可以取得和传统DNN类似的效果。另外BERT无需调优(也没什么可以调的),效果确实是最好的(要显卡)
[1] Kim Y. Convolutional neural networks for sentence classification[J]. arXiv preprint arXiv:1408.5882, 2014.
[2] Zhou C, Sun C, Liu Z, et al. A C-LSTM neural network for text classification[J]. arXiv preprint arXiv:1511.08630, 2015.
[3] Joulin A, Grave E, Bojanowski P, et al. Fasttext. zip: Compressing text classification models[J]. arXiv preprint arXiv:1612.03651, 2016.
[4] Reimers N, Gurevych I. Sentence-bert: Sentence embeddings using siamese bert-networks[J]. arXiv preprint arXiv:1908.10084, 2019.