Deep Learning for Extreme Multi-label Text Classification

Deep Learning for Extreme Multi-label Text Classification

一、背景介绍

1、研究背景:Multi-label和二分类、多分类研究的内容本身就不太一样,并且Multi-label的数据稀疏问题比单一分类更严重,因此很难学习label之间的依赖关系。

2、研究问题:Extreme Multi-label Text Classification(XMTC)研究的是在一个非常大的标签空间中,为每一个文档找到最相关的若干标签(例如Wikipedia)

3、相关工作:之前较为成熟的方法主要分为两大类(Target-Embedding和Tree-based Ensemble,如:SLEEC、FastXML、FastText、CNN-Kim、Bow-CNN、PD-Sparse),Deep Learning在文本分类上有一些工作,但没有考虑过XMTC问题

4、主要贡献:1)在6个数据集上实验对比了7个baseline;2)提出了XML-CNN,利用multi-label的共现性,对loss和网络结构进行优化;3)实验证明了模型在XMTC任务上的有效性

二、算法模型

1、基本框架:本文提出的模型其实是在CNN-Kim的基础上做的改进,从multi-class延伸到multi-label

 

Deep Learning for Extreme Multi-label Text Classification

2、模型细节:Pooling用的chunk-max pooling,Loss Function用的是cross entropy对于多标签的扩展,pooling layer和output layer之间加了一层全连接的隐层(文章中称之为Hidden Bottleneck Layer)

 

模型是基于text-cnn改进的.
创新点:

  1. dynamic max pooling.
  2. 改进了损失函数
  3. 在pooling和输出层之间加了一个bottleneck layer, 减小模型规模, 加快训练.


Dynamic max pooling


text-cnn是对每个feature map做max pooling, 所以每个feature在pooling之后只得到一个特征.
作者认为, 这样做pooling, 如果句子很长, 会损失很多信息, 并且没有利用任何位置信息.

对此, 作者提出使用Dynamic max pooling, 对于每个feature map, pooling生成p个特征. 具体做法如下,

  1. 对于一个包含m个词的句子, 把这个句子分成p块, 每一块分别做max-pooling然后进行拼接.

损失函数


损失函数使用binary cross-entropy, 而不是 softmax cross-entropy

Deep Learning for Extreme Multi-label Text Classification
Hidden Bottleneck layer


其实就是在pooling层和ouput层之间加了个全连接

实验
参数设置

 

  • 卷积核大小:{2, 4, 8}
  • 每种卷积核数量(也就是输出通道数): 对于小数据集是128, 大数据集32
  • dropout: 0.5
  • bottleneck layer: 512

三、实验结果

1、数据集:6个benchmark,有不同的样本大小、标签数、文本长度

Deep Learning for Extreme Multi-label Text Classification

2、综合实验结果来看:XML-CNN能解决标签很多的时候产生的数据稀疏问题;特别设计的pooling、网络结构、loss设计起到了正向作用;训练时间也不算太慢