多标签分类:NeuralClassifier: An Open-source Neural Hierarchical Multi-label Text Classification Toolkit

文章地址:https://www.aclweb.org/anthology/P19-3015.pdf

文章标题:NeuralClassifier: An Open-source Neural Hierarchical Multi-label Text Classification Toolkit(神经分类器:一个开源的神经分层多标签文本分类工具)ACL2019

源码地址:https://github.com/Tencent/NeuralNLP-NeuralClassifier

写在前面:本文推出了一个多标签分类工具包

Abstract

在这篇文章中,我们介绍了一个神经分类器,一个用于神经分层多标签文本分类的工具箱。神经分类器的设计是为了快速实现分层多标签分类任务的神经模型,这在现实场景中更具有挑战性和普遍性。一个突出的特点是神经分类器目前提供了多种文本编码器,如FastText、TextCNN、TextRNN、RCNN、VDCNN、DPCNN、DRNN、AttentiveConvNet、Transformer encoder等。它还支持其他文本分类场景,包括二进制类和多类分类。在PyTorch的基础上,批量计算核心操作,使工具包在GPU加速下高效运行。实验表明,在我们的工具包中构建的模型实现了与文献中报告的结果相当的性能。

一、Introduction

文本分类是自然语言处理中的一项重要工作,有着广泛的应用,如网络搜索、信息检索、排序和文档分类 (Deerwester et al., 1990; Pang et al., 2008)。由于深度神经网络的巨大成功,一系列基于神经网络的分类模型在实践中取得了很好的效果 (Kim, 2014; Lai et al., 2015; Joulin et al., 2016; Conneau et al., 2016; Liu et al., 2016; Johnson and Zhang, 2017; Vaswani et al., 2017; Yin and Sch¨utze, 2017; Wang, 2018; Qiao et al., 2018; Guo et al., 2019)。

分级多标签分类(HMC)是分类问题的一个分支。在真实场景中,这是一个更具挑战性的分类问题。与传统的平面和单标签文本分类不同,它旨在考虑标签之间的相互关系,并将文本文档分类为多个标签,这些标签被组织成树状或DAG(有向无环图)的层次结构。用依赖来规范深层架构,现有解决方案采用的标签 (Gopal and Yang, 2013; Peng et al., 2018) 更自然地解决了分级多标签文本分类问题,特别是对于大规模数据集。它具有广泛的现实应用,如问答 (Qu et al., 2012)、在线广告 (Agrawal et al., 2013)和科学文献组织(Peng et al., 2016)。

目前有几种开源的统计分级或多标签文本分类工具包,如scikit-multilearn、sklearn-hierarchical-classification,它们为用户提供基于scikit-learn接口和约定的各种分级或多标签分类模块。另一方面,神经递阶多标签文本分类工具包的选择有限。尽管许多研究人员已经发布了他们的代码以及他们的分级或多标签文本分类论文 (Kowsari et al., 2017; Peng et al., 2018),但是这些实现主要集中在特定的模型结构和特定的任务上,这极大地限制了它们对其他类似任务的扩展。
在这里插入图片描述
表一:工具包对比

本文介绍了一种基于PyTorch的开放源代码文本分类工具——NeuralClassifier。该方法采用高效的神经网络模型来解决分层多标签文本分类问题。它提供了多种模型和功能,用户可以利用一个舒适的配置文件与神经功能设计和利用。我们采取分层实现,其中包括输入层,嵌入层,编码器层和输出层。据我们所知,我们的工作是第一个具有丰富模型的神经分层多标签文本分类工具箱。关于细节,我们给出了与表1中现有工具包的比较摘要。NeuralClassifier是:

  • 丰富的模型和功能:我们工作的一个重要特征是,与现有的工具包相比,NeuralClassifier重实现了大量先进的文本编码器,包括FastText (Joulin et al., 2016),TextCNN (Kim, 2014),TextRNN (Liu et al., 2016), RCNN (Lai et al., 2015),VDCNN (Conneau et al., 2016),DPCNN (Johnson and Zhang, 2017) ,AttentiveConvNet (Yin and Sch¨utze, 2017),DRNN (Wang, 2018), Transformer encoder (Vaswani et al., 2017),Star-Transformer encoder (Guo et al., 2019)。同时,神经分类器涉及到各种有用的特性或小部件,即基于单词和字符的输入、优化器、损失函数、嵌入方法和注意机制等。所有这些都可以通过配置文件进行配置。图1显示了配置文件的一段。注意,用户可以通过配置文件配置不同的文本编码器和特性,并且可以轻松地修改源代码以实现更高级的开发。
    在这里插入图片描述
    图一:配置文件段
  • 适用于几乎所有的文本分类任务NeuralClassifier是为分级和多标签分类设计的,自然也支持二进制类和多类分类,因此它可以被认为是文本分类任务的通用工具包。特别是在层次化的多标签分类任务中,分类可以以树或DAG的形式组织,实例在训练和测试过程中可以多标签。它还提供了一个完整的评估机制。图2显示了带有结果的插图。用户只能通过一个舒适的配置文件来选择他们的任务类型,而不需要任何代码工作。
    在这里插入图片描述
    图二:评估产出的说明。“1级”到“4级”是层次分类中每一级的结果。评价指标是宏观和微观的。
  • 有效的和高效的:我们基于神经分类器提供的各种模型和特征进行实验。实验表明,我们的工具箱中构建的模型的输出性能与文献中报告的结果相当。此外,神经分类器是使用批计算实现的,可以使用GPU加速。实验结果表明,神经分类器是一种高效的工具。

本文的其余部分组织如下:第2节详细介绍了神经分类器的体系结构。第3节讨论了实验评价和结果。最后,第四部分对本文进行总结。

二、NeuralClassifier Architecture

在这里插入图片描述
图三:NeuralClassifier的体系结构。有四层:输入层,嵌入层,编码器层和输出层

2.1 Layer Units

  • Input Layer:输入文本序列将在输入层进行处理。以标记(单词)形式输入的文本序列可以被处理成单词和字符,以及它们的n-gram。当文本编码器是FastText时,还支持自定义特性输入,如关键字和主题。以上均可由用户灵活配置。此外,读取输入数据可以通过多个进程加速。有关输入数据的示例,请参见图4。
    在这里插入图片描述
    图四:输入数据的一个例子。多个层次结构用“–”分隔。
  • Embedding Layer:在这一层处理各种嵌入。可选择的嵌入方式有随机嵌入预训练嵌入区域嵌入位置嵌入四种。嵌入可以随机初始化,也可以根据预先训练的嵌入输入初始化。区域嵌入(Qiao et al., 2018) 是一种监督增强的词嵌入方法,该方法将一个词或字符的表示分为两部分,即词本身的嵌入和与本地上下文交互的加权矩阵,称为本地上下文单元。位置嵌入(Vaswani et al., 2017)是一种考虑输入序列中位置信息的嵌入方法。
  • Encoder Layer:我们在编码器层重新实现了大量最先进的文本编码器,包括FastText、TextCNN、TextRNN、RCNN、VDCNN、DPCNN、DRNN、Transformer encoder、Star-Transformer encoder和AttentiveConvNet。每个编码器都有自己的超参数,可以由用户配置。
  • Output Layer:这一层决定了具体的分类任务,包括二分类多分类多标签层次化类。对于单标签(二元类和多类)分类任务,我们提供了三个候选丢失函数,分别是SoftmaxCrossEntopy、BCLoss和SoftmaxFocalLoss (Lin et al., 2017)。对于分级多标签分类任务,我们使用BCELoss或SigmodFocalLoss作为多标签分类的损失函数,并添加一个递归正则化(Gopal and Yang, 2013;Peng et al., 2018)用于层次分类。使用这个正则化框架,我们可以将类标签之间的层次依赖关系合并到参数的正则化结构中,从而鼓励层次结构中邻近的类共享相似的模型参数。此外,这种正则化方法更适合大规模的分级多标签分类任务。用户可以通过配置文件轻松使用上述功能。

2.2 User Interface

神经分类器提供了丰富的配置接口,包括常用设置、输入设置、训练设置和网络结构设置。通过配置文件,用户可以构建最先进的神经递阶多标签文本分类模型。配置文件格式为JSON。

  • Common settings:包括分类任务的类型,有单标记和多标记,是否分层(任务信息),要使用哪个运行设备(设备),指定的模型(模型名),输入和输出数据(数据)的目录,要使用多少子进程来加载数据(num worker),等等。
  • Input settings:包括关于输入数据的各种配置,如最大输入序列长度(max_token_len)、最小输入令牌计数(min_token_count)、字典大小(max_token_dict_szie)、预先训练的输入数据嵌入(token_pretrained_file)等。
  • Training settings:包括批大小(batch_size)、丢失函数的类型(loss_type)、优化器(optimizer_type)、学习率(learning_rate)、epoch的数量(num epoch)、使用哪个gpu(visible_device_list)等。
  • Network structure settings:指定要使用的文本编码器,如TextCNN、TextRNN、RCNN、Transformer等。对于每个文本编码器,都可以配置相应的超参数。以TextCNN为例,用户可以配置卷积内核的大小和数量以及池中的top的数量(kernel_sizes、num_kernels、top_k_max_pooling)。

2.3 Extension

用户可以在所有这些层上编写自己的自定义模块,并且可以轻松地将自定义模块集成到工具包中。例如,如果一个用户想要实现一个新的分类器模型,他/她只需要在编码器层实现这个部分。可以通过配置文件使用和控制所有其他网络结构。

三、Evaluation

在本节中,我们使用来自两个公共基准的数据集,即RCV1 (Lewis et al., 2004)和Yelp5,进行了几个实验来评估神经分类器的性能。实验包括三个部分:(1) 3.1节丰富模型和特征的使用结果;(2) 第3.2节层次信息的影响;(3) 第3.3节中批量大小的速度。

3.1 Results of using rich models and features

我们利用工具箱提供的各种模型和特性来说明神经分类器在层次化多标签文本分类问题上的性能。具体来说,我们通过对两个基准的粗粒度实验来选择最佳模型并对其进行修正,然后对模型结构、输入表示、激活函数、优化器、学习率等特征和超参数进行微调。(1)对于RCV1数据集,使用两层Bi-GRU和一层CNN的RCNN(输入= word,优化器= Adam,学习率= 0.008);(2)使用一层Bi-GRU的TextRNN用于Yelp数据集(输入= word,优化器= Adam,学习率= 0.008)。表2显示了两个基准上的最佳模型的结果。最好的模型可以达到与最先进的HMC模型相当的结果。结果显示了我们的实现的有效性,以及各种模型和特性的可用性。表3显示了不同文本编码器的性能。特别是,我们可以使用不同的策略组合来指导模型的设置,从而在实际应用程序中获得更好的性能。
在这里插入图片描述
表二:两个基准测试的结果
在这里插入图片描述
表三:不同文本编码器的结果

3.2 Influence of hierarchical information

层次分类问题也可以通过扁平化方法来解决,扁平化方法将层次分类视为扁平化分类,而不考虑标签之间的层次关系。如前所述,我们的工具包是可配置的,我们可以通过配置轻松设置不同的损失函数。在这一节中,我们将讨论层次信息的影响。表4显示了设置HMC损失函数(分级)和传统多标签损失函数(扁平化)的结果。从结果中可以看出,层次信息可以大大提高性能。它也证明了我们执行的有效性。
在这里插入图片描述
表四:层次和平面分类的结果。

3.3 Speed with Batch Size

由于神经分类器是在bathed计算上实现的,因此可以通过GPU的并行计算大大加速。我们使用Nvidia Tesla P40 GPU在RCV1上测试了系统在训练过程中的速度。如图5所示,通过大批处理,可以显著加快训练速度,体现了我们实现的效率。
在这里插入图片描述
图五:批处理大小与速度的结果

四、Conclusion

本文介绍了一种开源的神经分层多标签文本分类工具——神经分类器(NeuralClassifier)。神经分类器提供了大量的文本编码器和特征。用户可以通过配置文件轻松地为不同的文本分类任务设计模型。我们进行了一系列的实验,结果表明基于神经分类器的模型能够以高效的运行速度获得最优的结果。

发布了199 篇原创文章 · 获赞 268 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/MaybeForever/article/details/103271777
今日推荐