Home

Awesome

<div style="font-size: 1.5rem;"> <a href="./README.md">中文</a> | <a href="./docs/readme_en.md">English</a> </div> </br> <h1 align="center">OpenTextClassification</h1> <div align="center"> <a href="https://github.com/catqaq/OpenTextClassification"> <img src="https://pic4.zhimg.com/80/v2-f63d74cf9859eea57b0a78c9da00c9f3_720w.webp" alt="Logo" height="210"> </a> <p align="center"> <h3>Open text classification for you, Start your NLP journey</h3> <a href="https://github.com/catqaq/OpenTextClassification/graphs/contributors"> <img alt="GitHub Contributors" src="https://img.shields.io/github/contributors/catqaq/OpenTextClassification" /> </a> <a href="https://github.com/catqaq/OpenTextClassification/issues"> <img alt="Issues" src="https://img.shields.io/github/issues/catqaq/OpenTextClassification?color=0088ff" /> </a> <a href="https://github.com/catqaq/OpenTextClassification/discussions"> <img alt="Issues" src="https://img.shields.io/github/discussions/catqaq/OpenTextClassification?color=0088ff" /> </a> <a href="https://github.com/catqaq/OpenTextClassification/pulls"> <img alt="GitHub pull requests" src="https://img.shields.io/github/issues-pr/catqaq/OpenTextClassification?color=0088ff" /> <a href="https://github.com/catqaq/OpenTextClassification/stargazers"> <img alt="GitHub stars" src="https://img.shields.io/github/stars/catqaq/OpenTextClassification?color=ccf" /> </a> <br/> <em>开源实现 / 简单 / 全面 / 实践 </em> <br/> <a href="https://zhuanlan.zhihu.com/p/596112080/"><strong>文章解读</strong></a> · <a href="https://zhuanlan.zhihu.com/p/617133715?"><strong>视频解读</strong></a> </p> </p> </div>

功能免费,代码开源,大家放心使用,欢迎贡献!

最新讯息

OpenNLP计划

我们是谁?

我们是羡鱼智能【xianyu.ai】,主要成员是一群来自老和山下、西湖边上的咸鱼们,塘主叫作羡鱼,想在LLMs时代做点有意义的事!我们的口号是:做OpenNLP和OpenX!希望在CloseAI卷死我们之前退出江湖!

也许有一天,等到GPT-X发布的时候,有人会说NLP不存在了,但是我们想证明有人曾经来过、热爱过!在以ChatGPT/GPT4为代表的LLMs时代,在被CloseAI卷死之前,我们发起了OpenNLP计划,宗旨是OpenNLP for everyone!

OpenTextClassification项目

OpenTextClassification项目为OpenNLP计划的第一个正式的开源项目,旨在Open NLP for everyone!在以ChatGPT/GPT4为代表的LLMs时代,在被OpenAI卷死之前,做一点有意义的事情!未来有一天,等到GPT-X发布的时候,或许有人会说NLP不存在了,但是我们想证明有人曾来过!

开发计划

本项目的开发宗旨,打造全网最全面和最实用的文本分类项目和教程。如果有机会,未来希望可以做成开箱即用的文本分类工具,文本分类任务非常特殊,大部分情况下被认为是简单且基础的,然而却很难找到比较通用的文本分类工具,往往都是针对具体任务进行训练和部署。在NLP逐渐趋于大一统的今天,这一点非常不优雅,而且浪费资源。:*Open text classification for you, Start your NLP journey!*

简要的开发计划

  1. 【P3】支持中英双语的文本分类:100%,也欢迎支持其他语种
  2. 【P0】支持多种文本分类模型:基本完成,欢迎补充
    1. 浅层文本分类模型:done
    2. 【P1】DNN类模型:已支持常见模型
    3. 【P0】transformer类模型:Bert/ERNIE等
    4. 【P0】prompt learning for Text Classification:TODO
    5. 【P0】ChatGPT for Text Classification:TODO
  3. 【P1】支持多标签文本分类:
    1. 多种多标签分类loss:done,如有遗漏,欢迎补充
    2. 复杂的多标签分类:比如层次化等,TODO
  4. 【P0】支持不同的文本分类数据集/任务:文本分类任务又多又散,这是好事儿也是坏事儿。欢迎基于本项目报告各种数据集上的效果
  5. 【P4】支持简明易用的文本分类API:终极目标为实现一个足够通用和强大的文本分类模型,并实现自然语言交互的文本分类接口text_cls(text, candidate_labels)->label,给定文本和候选类别(有默认值),输出文本所属的类别;同时支持可无成本或尽可能小的成本向特定领域泛化

加入我们

OpenNLP计划的其他内容尚在筹备中,暂时只开源了本项目。欢迎大家积极参与OpenTextClassification的建设和讨论,一起变得更强!

加入方式:

使用步骤

1.克隆本项目

git clone https://github.com/catqaq/OpenTextClassification.git

2.数据集下载和预处理

请自行下载数据集,将其放到data目录下,数据统一处理成text+label格式,以\t或逗号分隔。有空我再来补一个自动化脚本,暂时请自行处理或者参考preprocessing.py。

最好将数据统一放到data目录下,比如data/dbpedia,然后分3个子目录,input存放原始数据集(你下载的数据集),data存放预处理后的格式化的数据集(text-label格式),saved_dict存放训练结果(模型和日志等)。

3.运行示例

经过测试的开发环境如下,仅供参考,差不多的环境应该都可以运行。

根据自己的需要选择模块运行,详见下一节。

python run.py

运行示例

1.运行DNN/transformers类模型做文本分类

python run.py

2.运行传统浅层机器学习模型做文本分类

python run_shallow.py

3.运行DNN/transformers类模型做多标签文本分类

python run_multi_label.py

下表是直接运行demo的参考结果:

运行环境:python3.6 + T4

demo数据集示例模型Acc耗时备注
run.pyTHUCNews/cnTextCNN89.94%~2mins
run_multi_label.pyrcv1/enbert61.04%~40mins其他指标见运行结果
run_shallow.pyTHUCNews/cnNB89.44%105.34 ms

结果展示:持续更新中

笔者提供了从浅到深再到多标签的详细实验结果,可供大家参考。但受限于时间和算力,很多实验可能未达到最优,望知悉!因此,非常欢迎大家积极贡献,补充相关实验、代码和新的模型等等,一起建设OpenTextClassification。

暂时只提供部分汇总的结果,详细的实验结果及参数等我有空再补,比较多,需要一些时间整理。

1.传统浅层文本分类模型

DataModeltokenizer最小词长Min_dfngrambinaryUse_idfTest acc备注
THUCNews/cnLRlcut12(1,1)FalseTrue90.61%C=1.0, max_iter=1000 词表61549; train score: 94.22% valid score: 89.84% test score: 90.61% training time: 175070.97 ms
MultinomialNB(alpha=0.3)lcut12(1,1)FalseTrue89.86%词表61549; training time: 94.18ms
ComplementNB(alpha=0.8)lcut12(1,1)FalseTrue89.88%词表61549; training time: 98.31ms
SVC(C=1.0)lcut12(1,1)FalseTrue81.49%词表61549; 维度200 training time: 7351155.59 ms train score: 85.95% valid score: 80.07% test score: 81.49%
DTlcut12(1,1)FalseTrue71.19%max_depth=None training time: 149216.53 ms train score: 99.97% valid score: 70.57% test score: 71.19%
xgboostlcut12(1,1)FalseTrue90.08%XGBClassifier(n_estimators=2000,eta=0.3,gamma=0.1,max_depth=6,subsample=1,colsample_bytree=0.8, nthread=10) training time: 1551260.28 ms train score: 99.00% valid score: 89.34% test score: 90.08%
KNNlcut12(1,1)FalseTrue85.17%k=10 training time: 21.24 ms train score: 89.05% valid score: 84.53% test score: 85.17%
dbpedia/enLRNone22(1,1)FalseTrue98.26%C=1.0, max_iter=100 词表237777 training time: 220177.59 ms train score: 98.85% valid score: 98.19% test score: 98.26%
MultinomialNB(alpha=1.0)None22(1,1)FalseTrue95.35%training time: 786.24 ms train score: 96.36% valid score: 95.34% test score: 95.35%
ComplementNB(alpha=1.0)None22(1,1)FalseTrue93.73%training time: 805.69 ms train score: 95.30% valid score: 93.79% test score: 93.73%
SVC(C=1.0)None22(1,1)FalseTrue94.67%维度200; max_iter=100 training time: 144163.81 ms train score: 94.75% valid score: 94.59% test score: 94.67% 注意:SVM的计算和存储成本正比于样本数的平方;
DTNone22(1,1)FalseTrue92.41%max_depth=100, min_samples_leaf=5 training time: 639744.56 ms train score: 95.79% valid score: 92.43% test score: 92.41%
xgboostNone22(1,1)FalseTrue97.99%XGBClassifier(n_estimators=200,eta=0.3,gamma=0.1,max_depth=6,subsample=1,colsample_bytree=0.8, nthread=10,reg_alpha=0,reg_lambda=1) training time: 1838434.42 ms train score: 99.35% valid score: 97.96% test score: 97.99%
KNNNone22(1,1)FalseTrue80.05%k=10 training time: 137.72 ms train score: 84.66% valid score: 80.20% test score: 80.05%

2.深度学习文本分类模型

DataModelEmbedBzLrepochsacc备注
THUCNews/cnTextCNNouter1281e-33/2090.45%
TextRNN--1e-35/1090.38%
TextRNN_Att1e-32/1090.55%
TextRCNN1e-33/1091.01%
DPCNN1e-33/2090.12%
FastText1e-35/2090.48%
bertinner5e-52/394.10%bert-base-chinese
ERNIEinner5e-53/394.58%ernie-3.0-base-zh
bert_CNN-3/394.14%
bert_RNN-3/393.92%
bert_RNN-3/394.45%
bert_RCNN-3/394.32%
bert_DPCNN-3/394.17%
dbpedia/enTextCNNouter1285e-59/2098.35%glove
TextRNN---6/1097.97%
TextRNN_Att-4/1097.80%
TextRCNN-3/1097.71%
DPCNN-3/2097.86%
FastText-10/2097.84%
bertinner5e-52/397.78%bert-base-uncased
ERNIE2/1097.75%ernie-2.0-base-en
bert_CNN-2/397.91%
bert_RNN-2/397.87%
bert_RCNN-2/398.04%
bert_DPCNN-2/397.95%
gpt3/397.03
gpt23/397.00
T53/396.57

3.多标签文本分类

DataModel分层样本数EmbedlossBzLrepochsTest acc (绝对匹配率)Micro-F1Macro-F1备注
Rcv1/enTextCNN-alloutermulti_label_circle_loss1281e-39/2051.02%0.79040.4515eval_activate = None cls_threshold = 0
TextRNN---13/2054.00%0.79500.4358
TextRNN_Att-11/2053.97%0.80110.4538
TextRCNN-10/2053.62%0.81110.4900
DPCNN-10/2051.66%0.78900.4111
FastText-12/2051.31%0.79360.4728
bertallinner-1282e-520/2061.04%0.84540.5729bert-base-cased
ERNIEallinner-1282e-520/2061.67%0.84860.5861ernie-2.0-base-en
Bert_CNNallinner-1282e-512/2058.31%0.83640.5736同bert配置
Bert_RNNallinner-1282e-517/2060.48%0.83710.5640
Bert_RCNNallinner-1282e-515/2060.54%0.84570.5969
Bert_DPCNNallinner-1282e-513/2056.52%0.80820.4273

常见报错

参考资料&致谢

A Survey on Text Classification: From Shallow to Deep Learning:https://arxiv.org/pdf/2008.00364.pdf?utm_source=summari

Deep Learning--based Text Classification: A Comprehensive Review:https://arxiv.org/pdf/2004.03705.pdf

https://github.com/649453932/Chinese-Text-Classification-Pytorch

https://github.com/649453932/Bert-Chinese-Text-Classification-Pytorch

https://github.com/facebookresearch/fastText

https://github.com/brightmart/text_classification

https://github.com/kk7nc/Text_Classification

https://github.com/Tencent/NeuralNLP-NeuralClassifier

https://github.com/vandit15/Class-balanced-loss-pytorch

https://scikit-learn.org/stable/modules/model_evaluation.html#classification-metrics

赞助我们

我们是谁?

我们是羡鱼智能【xianyu.ai】,主要成员是一群来自老和山下、西湖边上的咸鱼们,塘主叫作羡鱼,想在LLMs做点有意义的事!我们的口号是:做OpenNLP和OpenX!希望在OpenAI卷死我们之前退出江湖!

OpenTextClassification项目为羡鱼智能【xianyu.ai】发起的OpenNLP计划的第一个正式的开源项目,旨在Open NLP for everyone!在以ChatGPT/GPT4为代表的LLMs时代,在被OpenAI卷死之前,做一点有意义的事情!未来有一天,等到GPT-X发布的时候,或许有人会说NLP不存在了,但是我们想证明有人曾来过!

本项目第一版由本羡鱼利用业务时间(熬夜)独立完成,受限于精力和算力,拖延至今,好在顺利完成了。如果大家觉得本项目对你的NLP学习/研究/工作有所帮助的话,求一个免费的star! 富哥富姐们可以考虑赞助一下!尤其是算力,租卡的费用已经让本不富裕的鱼塘快要无鱼可摸了

<img src="https://xianyunlp.oss-cn-hangzhou.aliyuncs.com/uPic/image-20230324010955205.png" alt="image-20230324010955205" style="zoom: 25%;" />

Starchart

Star History Chart

Contributors

<a href="https://github.com/catqaq/OpenTextClassification/graphs/contributors"> <img src="https://contrib.rocks/image?repo=catqaq/OpenTextClassification" /> </a>