Incorporating Hierarchy into Text Encoder: a Contrastive LearningApproach for Hierarchical Text Clas

ACL 2022

原文链接:https://aclanthology.org/2022.acl-long.491.pdf

介绍

         作为多标签分类的一个子任务,层次文本面临的问题是 标签是具有层次结构的,因此如何对一个大规模,不平衡并且具有结构性的层次标签进行建模是该问题的关键。

        对于HTC问题,目前最好的模型是将文本和层次标签分别进行编码并在分类前合并为一个混合表征,如下图a部分所示。这种方法主要是将文本和结构进行充分的交互,虽然对于分类任务是有效的,但由于对于所有文本输入,标签的层次结构都是一样的,graph encoder对于任何文本输入,都会提供相同的表征。所以这种文本和固定的层次表征之间的交互,是比较麻烦并且低效的。

IDEA:

        作者试图将恒定的层次表征注入到text encoder中,这样一来就能在没有恒定标签特征的情况下,得到一个具有层次意识的文本表征。如上图中b部分所示,不再将文本和标签分别进行建模,而是将标签的层次结构迁移到文本编码中,通过适当的表征学习方法(作者使用了对比学习)可以使HTC受益。

本文贡献:

1)提出了HGCLR,在HTC任务上能获得层次敏感的文本特征,并且这是第一个在HTC上使用对比学习方法。

2)提出了一种新颖的方法,为层次文本任务构建正样本。

3)实验证明,所提出的模型在三个数据集上的表现与之前相比更好。

方法

        模型总体结构如下图所示,主要包括text encoder、Graph Encoder、Positive Sample Generation、Contrastive Learning Module、Classification and Objective Function这几个部分:

 Text Encoder

        该模块就是BERT,对输入的文本序列进行编码:

        其中cls和sep是表示序列开始和结束的两个特殊token.

        每一个token经过BERT输出隐藏表征:H=BERT(x),使用第一个token(cls)的隐藏状态来作为整个句子的表征 h_x = h_{[CLS]}

Graph Encoder

        我们将修改后的Graphormer对标签层次结构进行建模,该模型在Transformer的基础上对图进行建模,并对空间以及边进行编码。认为节点yi的原始特征是其label embedding(这里指的层次结构中通过图神经网络GNN得到的关于节点的label embedding)和name embedding的和。

         label embedding是可学习的,将一个label作为输入,输出大小为dh的向量。name embedding 由该label通过BERT得到的token embedding的平均值(不经过BERT,只使用embedding),其大小也为dh。

        为了利用结构信息,空间编码和边缘编码在自注意层中作为Q和K,计算注意力矩阵A,

        公式4的第一项是一个标准的scale-dot 注意力,cij表示连接两个点边的信息(edge encoding),b_{\phi (yi,yj)}表示两个点yi和yj之间的空间信息(spatial encoding)。

        对注意力权重矩阵A使用softmax后与Value矩阵相乘后使用softmax,加上残差连接后进行层归一化,使用L作为label feature进入到下一步。

Positive Sample Generation

       由于为层次分类任务构建正样本,需要使该样本完全命中原始样本的所有label,所以作者通过计算每个label对原始样本中的每个token的注意力值,然后保留重要的部分token形成正样本。

        正样本生成的目标是在保留标签的同时保留一部分token。首先对于给定的序列,先计算其对应的token embedding(q)和label feature(k)之间的注意力权重,即得到每个token对于每个label的重要程度。这样一来,对于具体的xi 属于标签yj的概率就能通过softmax进行归一化。

        接下来,给定一个标签y_{j},可以从该分布中抽取出关键tokens形成一个正样本x^{\hat{}},为了使采样具有可分性,使用Gumbel-Softmax代替softmax进行采样操作。将每个大于阈值的token保留,其他的置为0得到正样本,然后将该正样本输入到BERT中,得到一个序列表征h^{\hat{}}与被分类前的第一个token(cls)。

Contrastive Learning Module

        假设一个batch有N个句子,对于每个样本,都存在一个正样本和2(N-1)个负样本。对于每个正样本对(h_{i},h^{\hat{}}_i),分别经过同一个非线性映射:

        对一个batch内的2N个样本计算NT-Xent损失函数(一种常用于对比学习的损失函数,分子鼓励正样本相似性越大越好,分母鼓励负样本之间相似性越小越好):

        其中: 

        总的对抗损失函数:

Classification and Objective Function

        对于多标签分类的层次结构进行Flatten ,通过一个线性层,使用sigmoid函数计算其概率。文本i属于标签j的概率:

        对于多标签分类,使用二元交叉熵损失函数:

        对于构建的正样本的分类损失,跟公式16和18进行类似地计算,用{hi}^{\hat{}}代替hi。最终的损失函数=原始样本的分类损失+构建正样本的分类损失+对抗学习的损失,\lambda表示对比学习损失的权重。

        注意:测试时只使用text encoder进行分类,该模型退化为带有分类头的BERT编码器。

实验

        与其他方法在数据集WOS,NYT,RCV1-V2这三个数据集上进行比较,实验结果如下: 

        

        可以看出,在WOS数据集上,作者提出的HGCLR在Micro-F1和Macro-F1上分别提升了1.5%和2.1%。在NYT数据集上,总体来说也比之前的模型有所提升,在RCV1-V2,与BERT相比,所有模型在Micro-F1上都没有什么明显的提升。

        对graph encoder和对抗学习进行消融实验,结果如下:

        结论:
        1)无论是使用GCN还是GAT对Graphormer进行替换,对结果都有一定的影响。其中GAT虽然也有注意力机制,但一个节点只能关注它邻居节点的情况,Graphormer能关注到全局的信息。

        2)可以看到去掉图编码器和对抗学习后,该模型的表现都有所下降,即这两个模块对于模型的性能是有帮助的。

         在WOS中label表征T-SNE进行可视化,结果如下:

         由于一个标签及其父节点应该同时被分类,子节点及其父节点的表征应该是相似的,并且同一条路径上的label的相似度比较近。上图中同一个颜色表示具有相同的父亲,可以看出BERT中的label表征更加分散,我们模型label的表征更加聚集,表明了我们的模型能够学习到层次敏感的label 表征。

        作者对Graphormer中的name embedding、空间编码以及边信息编码的效果进行了实验,结果如下所示:

        可以看出Edge encoding的贡献最小,是由于在HTC中,层次结构的边没有携带任何信息,因此edge encoding在该任务中没有啥效果。之前的工作将label name用来初始化embedding的权重,而作者将它作为单独的输入。可以看出去掉name embedding后,模型性能下降幅度是最大的。

         作者对其他产生正样本的方法在WOS数据集上进行实验,结果如下:

         我们的方法通过层次结构和标签来指导例子的构建,这与HTC最相适应,并取得了最佳的性能

         选择了两个例子来说明标签对正样本生成的影响,第一个句子中,machine这个单词表示该句子属于machine learning,被保留在正样本中。第二个句子中,syndrome与medical相关,但PRES在Headache中出现了几次,由于抽样的随机性,无法构建一个包含全部关键词的例子。例如第一个句子中的learning和第二个句子中的headache在该次实验中被省略了,让对比学习有了一定的难度。

总结 

        本文中,我们提出了用于层次文本分类任务的层次引导的对比学习方法HGCLR。使用对比学习的方法将分类层次信息迁移到BERT编码中。并对目前最好的图编码器Graphormer进行修改,以便其更好的理解图形。通过实验验证,我们所提出的方法在不同数据集上都得到了一定的提升。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值