yongzhuo / Keras-TextClassification

中文长文本分类、短句子分类、多标签分类、两句子相似度(Chinese Text Classification of Keras NLP, multi-label classify, or sentence classify, long or short),字词句向量嵌入层(embeddings)和网络层(graph)构建基类,FastText,TextCNN,CharCNN,TextRNN, RCNN, DCNN, DPCNN, VDCNN, CRNN, Bert, Xlnet, Albert, Attention, DeepMoji, HAN, 胶囊网络-CapsuleNet, Transformer-encode, Seq2seq, SWEM, LEAM, TextGCN
https://blog.csdn.net/rensihui
MIT License
1.77k stars 404 forks source link

需求 #5

Closed gugudexiatian closed 5 years ago

gugudexiatian commented 5 years ago

感觉这样成体系的代码好棒,如果想改成多标签该如何修改代码呢

yongzhuo commented 5 years ago

demo: 以text-cnn为例写了个小demo,代码在/test/multi-class/目录下,将多标签转化为multi-hot类标,然后使用sigmoid、top_k_categorical_accuracy等作多类分类,阀值凭感觉取了0.5。

资料: 有时间的话可以试试,你可以看看sklearn机器学习实现scikit-multilearn,和sklearn-hierarchical-classification,详细讲解可以看下这个解决多标签分类问题(包括案例研究)。或者是腾讯不久前出的pytorch版NeuralNLP-NeuralClassifier

多标签分类算法方案:

  1. 问题转化法: 1.1 二元关联 Binary Relevance (BR) 1.2 唯一多类 Label Powerset (LP) 1.3 分类器链 Classifier Chains (CC)
  2. 自适应法 2.1 自适应算法就是通过改编算法让其直接执行多标签分类任务 2.2 brknn, mlknn, mlaram, mltsvm 2.3 ML-kNN,ML-Tree,Rank-SVM
  3. 集成法
  4. Seq2Seq,会有类间依赖等,如SGM: Sequence Generation Model for Multi-label Classification 简单说明: 1.1 一般最简单的做法是将多标签问题转化为多类分类问题(sigmoid激活替代softmax),具体就是每种具体的类转化为唯一的0-1 onehot类(不管它有几个标签),和普通的分类问题一样,改变一下类别标签就好。这种做法可以看一下看山杯多标签分类比赛的代码,例如text_classification,可能汇类别多得爆炸,还有就是没有利用类别间的关系。 1.2 转化为多个二分类器问题,就是对每个标签进行二分类。不过每个场景都维护多个神经网络总感觉不爽。 1.3 分类器链,同2.中的方法,对每个标签进行2分类, 构造多个二分类器, 不同于2.的是, 输入为特征和类别的拼接,即[x_extend(i) + y(i)] 1.4 至于层次多标签分类,还没看
gugudexiatian commented 5 years ago

非常感谢您的及时答疑和提供的思路,受益匪浅,感谢感谢!!