hellen9527 / Pytorch-Chinese-Text-Classification

中文文本分类模型集成,包括cnn, lstm, bert等,开箱即用
Mozilla Public License 2.0
24 stars 3 forks source link

中文文本分类模型

LICENSE

基于pytorch与sklearn的中文文本分类代码集合,包括常见的传统机器学习与深度学习等模型,旨在帮助有需要的人更快上手实操,开箱即用。

介绍

实现的模型结构以下几类,具体的模型结构的讲解可以看下我的博客

  1. 传统机器学习,如:决策树、随机森林、线性SVM、xgboost
  2. 传统深度学习模型,如:TextCNN、TextLSTM、FastText
  3. 图神经网络模型,如:TextGCN (开发中)
  4. 基于预训练语言模型,如:BERT-CLS

环境

中文数据集

这里使用的是一份公开的京东的用户评论的数据,类别:好评、差评,任务相对比较简单。为了统一数据格式,所以先用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.

其他