Large-Scale Hierarchical Text Classification with Recursively Regularized Deep Graph-CNN
Input: Document
Graph Generation
作用
- 将文本文档处理为图
具体做法
- 依据单词共现将文档转换为图,单词共现的计算依靠滑动窗口,这里滑动窗口大小为3。
- 文本的预处理:首先去除RCV1-v2数据提供的停止词,如“the”、“a”等。对于单词“fitting”,我们首先执行词干提取以获得“fit”,然后根据fit构建窗口中每个单词的边。
Output
- Graph of word
Graph Preprocessing
作用
- 由于想要对单词共现图上的子图应用卷积掩码。所以为了实现对子图的卷积,需要对所有潜在的子图进行选择和归一化,使其可以进行接下来的卷积。
具体做法
-
Step1、Sub-graph Generation
-
a、node sequence selection
- 根据节点的度(一个节点的邻域数)对图中的所有节点进行排序。
- 如果度数相同,则根据节点在文档中的出现情况对它们进行排序。如果进一步相同,使用节点与邻居的共生次数来排序。
- 在这种情况下,可以对图中的所有节点进行排序,并选择N个认为可能影响主题分类的最重要节点。
-
b、neighborhood assembly
at least NA=3 node- 在获得节点后,使用简单的宽度优先搜索算法对每个选定节点展开子图。
- 设置了最小子图大小的个数,即g。如果在当前深度,子图小于大小g,就再展开一层,看看大小是否满足。
- 在这一步之后,将得到N个子图,每个子图至少包含g个节点(如果存在的话)。
-
-
Step2、Sub-graph Normalization
-
Step3、Graphs of Embeddings
- 为了合并尽可能多的语义信息,而不是将图中的每个节点(文档中的一个单词)表示为ID,尝试使用单词嵌入作为输入。
- 在本文的所有实验中,使用的是由较大的语料库*训练出来的word2vec,并使用CBOW模型,其中窗口大小设置为5,word_embedding设置为50。word2vec的其他参数设置为默认值。
- 通过这种方式,有一个嵌入图作为输入。然后,下面介绍的卷积将在嵌入的子图上进行运算
Output
- Sub-graph Embeddings
Deep CNN
作用
- 获得更高层次的语义
具体做法
-
The first convolutional layer
-
input
- 第一卷积层以大小为N × g × D的特征空间作为输入,其中N为被选中并归一化的子图个数,g为接受域的大小(子图的大小),D为词嵌入维数。
-
方法
-
convolve kernel
- k1 kernel 大小为 g × D 。
- 然后,对于所有N个输入子图,使用k1核以同样的方式进行卷积,以生成一个N × k1 矩阵。
-
max pooling
- 使用一个最大池化层来生成一个 N/2 × k1 矩阵
- 这意味着我们选择了可以更好地表示主题的一半子图进行进一步的处理。
-
-
-
The second convolutional layer
-
input
- 第一层卷积的输出
-
方法
-
convolve kernel
- k2 kernel 大小为 5 × 1
- 到目前为止,已经成功地对不同维度的词嵌入、每个子图中不同的词以及文档中不同的子图进行了卷积,获得了一个k1 ×k2矩阵。
-
max pooling
- 使用一个最大池化层来生成一个 k1/2 × k2 矩阵
- 为了获得更高层次的语义
-
-
-
The third convolutional layer
-
input
- 第二层卷积的输出
-
方法
-
convolve kernel
- k3 kernel 大小为 1 × 5
- 获得一个 S × k3 矩阵,这可以看作是原始的k1不同的 g×D 核应用于N×g×D输入张量的复合。
-
max pooling
- 使用一个最大池化层来生成一个 S/2 × k3 矩阵
-
-
output
- 第三层卷积层的输出一个S/2 × k3矩阵作为全连接层的输入。
- tips:在整个卷积层中,使用ReLU作为激活函数来加快训练过程,避免过拟合。
Fully Connected and Sigmoid
作用
- 进行分类,同时处理分类中出现的非线性问题
具体做法
-
Full Connection Layers
- 三个完全连接的层。这些层主要用于处理分类的非线性问题。其中这三个层的维度分别为F1 = 2048, F2 = 1024, F3 = 1024(或512)。
- 这里使用dropout来避免过拟合,dropout率设置为0.5。根据经验,dropout算法的收敛迭代次数大约增加了一倍,但提高了网络的鲁棒性,提高了预测精度。
-
Sigmoid Layer
- 最后一层进一步连接到一组K Sigmoid函数,它们对应于层次结构中的K个标签。
Loss
普通loss
-
交叉熵:
- 其中M为文档集合,lk(dm)为二进制标签,表示文档dm是否属于标签k, Pk(dm)为标签k的神经网络预测概率。
改进loss
-
引入递归正则化,目的是为了引入层级结构下标签的依赖关系。
- 解决当叶节点的训练实例较少时的问题,通过正则化可以由其父节点进行决策。
-
- 将wi表示为层次结构中标签li的最终全连通层的参数,表示W = {wli: li∈L}。l(j) i是指李的一个子节点。
Output: K labels
Recursive Hierarchical Segmentation
为了处理大规模标签层次结构,我们使用递归层次结构细分来解决和解决原始问题。这样,我们可以分别对每个子问题进行训练,并显著降低每个子问题的学习复杂性。图4显示了递归层次分割的一个示例。假设我们要对最多包含五个叶子的子树进行分割。然后,我们按照以下步骤执行从根到叶节点的深度优先遍历和预遍历遍历。遍历节点A时,子叶节点的数量为5,因此子树
- 首先可以细分。然后,子树(i)作为一个逻辑标签合并为一个叶子。当我们回溯到节点B时,子叶子数也为5。
- 因此它被分为子树。并合并到一个逻辑标签中,成为叶子。根据深度优先和顺序遍历的规律,生成子图。
- 也将被划分,并合并为一个逻辑标签作为叶子。当子叶节点的数量小于阈值时,它将继续遍历直到不再有节点。因此,子图iv被划分并合并为一个逻辑标签。 F的子叶节点为4,因此我们将节点E和F组合在一起,以满足拥有五个叶节点的要求。尽管将层次结构划分为用于并行和分布式深度CNN模型的子图,但是主程序会学习对*节点(例如,图4中的B,E和F)进行分类,并在测试时递归调用其他深度CNN模型。