【三等奖方案】小样本数据分类任务赛题「痛!太痛了!」团队解题思路

news2024/10/6 18:31:21

第十届CCF大数据与计算智能大赛(2022 CCF BDCI)已圆满结束。大赛官方竞赛平台DataFountain(简称DF平台)将陆续释出各赛题获奖队伍的方案思路。

本方案为【小样本数据分类任务】赛题的三等奖获奖方案,赛题地址:https://datafountain.cn/competitions/582

图片

获奖团队简介

团队名称:痛!太痛了!

团队成员:本团队由4名中国科学院大学2022级研究生新生组成,其中3人来自中国科学院计算技术研究所,1人来自中国科学院自动化研究所。团队的研究兴趣涉及半监督学习、智能问答、生物信息学等领域。

所获奖项:三等奖

摘要

近年来,随着政策扶植、国家工业化水平和国民教育水平提高,我国的专利申请量爆发式增长,对于专利文本的分类管理需求也与日俱增。得益于自然语言处理技术的发展,基于Pretraining-Finetune的预训练范式在学术界与工业界得到了广泛的应用。在小样本专利文本分类问题中,我们利用百度开源的ERNIE 3.0模型,设计了一个基于动态阈值伪标签生成与尾部类别数据增强的小样本文本分类方法,能够较好地适应小样本学习场景。实验结果表明,在CCF BDCI小样本数据分类任务上,我们的方法最终在B榜测试集达到了0.5955的F1分数。

关键词

专利文本分类、小样本学习、动态阈值伪标签

引言

近年来,随着科技的进步与创新能力的提升,我国的专利申请量快速增长,专利检索、查新、管理等需求也随之增加。为了满足多元化专利检索需求,提升专利服务质量,通常需要建立多个维度的专利分类体系。常见的分类体系有国际专利分类 (IPC)、联合专利分类 (CPC)、欧洲专利分类 (ECLA) 等,但是这些分类体系比较复杂,专业性强,对非IP人员而言使用有一定的困难。近年来,随着大规模预训练模型[1]的发展,自然语言处理技术在工业界逐渐落地,这也为解决专利分类问题带来了新的思路。

相较于传统文本,专利文本(尤其是标注文本)的数据量较为稀少。因此,小样本学习在专利文本分类中至关重要。此外,由于不同领域的专利数量大不相同,某些类别的样本数量明显少于其他类别,数据集标签分布存在长尾现象,传统的小样本学习则较难适应某些长尾类别。

为了解决上述问题,我们提出了基于类别动态阈值伪标签与尾部类别数据增强的小样本文本分类方法。在我们的方案中,我们同时考虑到了小样本学习及数据集长尾分布等问题。具体地,与传统伪标签技术预先选定一个固定的阈值不同[2],我们为每一个类别设置一个单独的阈值。同时,为了缓解数据不平衡的问题,我们为数据集中的尾部类别应用了两类不同的数据增强方法,以扩充其样本量。实验结果表明,我们的方法在小样本专利文本分类的任务中取得了较好的效果,并最终在初赛A榜测试集上达到0.6516的F1分数,在B榜测试集上达到了0.5955的F1分数。

任务描述

本赛题要求对专利文本数据进行分类,训练集包括958条专利数据,每一条样本包括专利权人、专利标题、专利摘要、分类标签等属性,其中标签经过脱敏处理,共36类。

赛题采用Macro-F1指标对于模型性能进行评估,具体定义如公式(1-1)所示:

图片

其中,Pi是第i个类别的Precision,Ri是第i个类别的Recall,n是类别总数。对于某一个类别 i来说,Precision和 Recall的计算方式如公式 (1-2) 和(1-3)所示:

图片

其中,TPi为类别i的真正例,FPi为类别i的假正例,FNi为类别i的假负例。

解决方案

针对小样本专利文本分类问题,我们提出了一种新颖的伪标签生成方法来扩充训练集,解决小样本分类中的数据稀缺难题。图1展示了我们解决方案的流程图。具体地,我们首先根据模型在A榜测试集上输出的softmax分数为不同类别的样本设置不同阈值,来生成伪标签扩充训练集规模,并针对尾部样本进行数据增强,缓解了尾部类别的数据稀疏问题。接着,使用扩充后的训练集对ernie-3.0-base语言模型[3]在文本分类任务上进行微调。此外,为了提升模型的鲁棒性以及解决类别不平衡问题,我们进一步采用了对抗训练,提升模型的鲁棒性,实现了更加精准的分类。(开源代码地址:https://github.com/zhangzhao219/CCF-BDCI-fewshot-classification)

图片

图 1  解决方案整体流程图

2.1 数据预处理

训练及测试数据集的每个样本包含title、assignee、abstract字段,这些信息包含不同粒度的信息,为了更好地将各字段组织起来,用于文本分类,我们受近年在自然语言处理领域中新兴的提示学习启发,将各字段重新组织为一段文本,基于以下模板构造模型的输入。针对一条训练样本json条目x,我们将其组织为如下形式:“这份专利的标题为《{x.title}》,由{x.assignee}公司申请,详细说明如下:{x.abstract}”

2.2 对抗训练

对抗训练旨在提升模型的鲁棒性,同时也能提高模型的泛化能力,其基本思想是对原始输入样本x 添加扰动radv,得到对抗样本xadv,再将对抗样本输入模型训练。

具体地,我们采用FGM (Fast Gradient Method) 攻击算法[4],其所施加的扰动与样本的梯度方向相同,如公式(2-1)和(2-2)所示:

图片

图片

生成的对抗样本如公式(2-3)所示:

图片

2.3 伪标签

研究指出在长尾识别任务下,尾部类别虽然召回率Recall较低,但却有着较高的精确度Precision,而头部类别则相反[5]。这启发我们根据标签分布情况及模型预测情况为每一个类别设置不同的阈值:头部类别较多,模型学习情况较好,应为其设置较高的阈值,保证其精确度;尾部类别较少,模型学习情况较差,应为其设置较低的阈值,从而获得较高的召回率。因此,我们为本任务设计了一种类别相关的动态阈值伪标签产生策略,流程如下,对于每一类别,我们先得到预测标签为该类的所有记录(见表1算法1第三行),之后将这些记录按照对于该类预测概率由大到小进行排序(见表1算法1第四行),进一步地,我们求其α分位数(即前α%大的预测概率)作为该类别的阈值(见表1算法1第五行),同时,若求得的阈值小于一个预先给定的固定阈值γ,则将其重新置为γ(见表1算法1第六行)。利用α分位数筛选伪标签可以充分地考虑到各个类别的学习情况(头部类别学习情况较好,通常模型预测的置信度较高,而尾部类别则相反),同时固定阈值γ作为下限,使得尾部类别的筛选不至于混入过多的噪声样本。

表 1  伪标签生成流程算法

值得一提的是,上述的伪标签产生流程可以迭代进行,即训练得到一个较好的模型A,利用其产生的伪标签再训练一个模型B,再利用模型B对无标签测试数据打伪标签,并由此再训练一个新的模型C。在实验中,我们分别采用线上F1分数为0.600, 0.599, 0.632, 0.642, 0.646的(集成)模型为A榜测试数据标记伪标签,并将其并入初始训练集中,分别得到伪标签扩展数据集train_0,train_1,train_2,train_3,train_4,并在最终参赛系统的训练中与尾部数据增强策略配合使用。

2.4 数据增强

为了缓解类别不平衡的问题,我们对尾部类别(类别12、22、32、35)应用两类数据增强方法。

1. 回译:我们利用谷歌翻译接口,将中文翻译为英法德日韩5种语言,再翻译回中文,得到新的样本。

2. 简单文本数据增强[6]:由4种不同的方法组成,分别是同义词替换(从句子中随机选择n个非停用词,随机选择它们的同义词进行替换)、随机插入(从句子中随机选择一个非停用词的单词,随机选择它的一个近义词并将它插入在句子的任意位置。并将此过程重复n次)、随机替换(随机选择句子中的两个单次并将它们交换位置。将此过程重复n次)与随机删除(对句子中的每一个单词,都以一给定概率p判定此单词是否被删除)。

实验结果

3.1 参赛系统

通过前期多种模型的线上F1实验,我们最终选择了效果较好的9个模型作为参赛系统的最终结果。9个模型的具体参数细节各不相同,训练数据也采用了不同阶段得到的伪标签,且大多是在经过多折交叉验证后选取的效果较好的某一折或某几折。同时为了满足模型的总大小不超过2G的要求,我们将单精度模型转换为半精度,实验表明这种转换对于最终的推理结果影响不大。最后我们通过投票法将9个模型集成在一起得到最终的推理结果。9个模型的具体参数细节如表2 所示,其中4号和6号模型选取了其中的两折结果。最终,集成模型在初赛A榜测试集上达到0.6516的F1分数,在B榜测试集上达到了0.5955的F1分数。

表 2  参赛系统模型设置及性能

图片

3.2 消融实验

3.2.1 预训练模型

目前NLP研究界涌现出大量的预训练模型,代表性的开源中文预训练模型也有很多种。我们对搜集到的多种预训练模型进行了多次对比实验,最终的实验结果表明ERNIE 3.0更适用于我们的小样本分类学习任务。其他模型的实验结果如表 3 所示,实验均在NVIDIA GeForce RTX 2080 Ti * 2上进行,batch_size 设置为12,模型迭代训练40轮。

表 3 不同预训练模型之间的对比

图片

3.2.2 伪标签技术

在本小节,我们通过对表1涉及到的两个超参数 α及γ进行消融实验以证明我们提出的类别相关的动态阈值伪标签产生策略相较于传统的固定阈值伪标签生成更有优势,相关实验结果如表4所示,其中,实验编号1即为算法1的默认参数设置,实验编号2的设置即为传统伪标签产生算法(如FixMatch)等采取的固定阈值策略,实验编号3即不采用固定阈值  对于阈值下限进行限制。从实验结果来看,本文提出的伪标签产生策略具有良好的扩展性,可以更好地对抗长尾分布现象,并充分挖掘未标注数据所蕴含的信息。

表 4  不同伪标签产生策略之间的对比

图片

3.2.3 训练策略

除FGM外,我们也尝试了多种其他的对抗训练策略,同时对损失函数进行重加权等尝试,以期更好地适应本次任务特性。表5对应的实验在NVIDIA GeForce RTX 2080 Ti * 2上进行,预训练模型使用chinese-macbert-base,batch_size 设置为12,训练40轮,数据采用train_0;表6对应的实验在NVIDIA Tesla V100 32G * 2上进行,预训练模型使用ernie-3.0-base-zh,batch_size 设置为32,训练40轮,数据采用train_1。最终的实验结果表明FGM与PGD更适用于本次的小样本分类学习任务,然而由于PGD的迭代训练开销较大,我们只将其应用于伪标签生成阶段,在实验阶段我们放弃了对其进行进一步的探索。

表 5  不同训练策略之间的对比

图片

表 6  不同训练策略之间的对比

图片

3.2.4 尾部数据增强

针对类别不平衡的问题,我们采用了回译和简单文本数据增强两种方法进行缓解。实验结果表明,数据增强方法对于模型的预测效果有显著提升。实验在NVIDIA Tesla V100 32G * 4上进行,预训练模型使用ernie-3.0-base-zh,batch_size 设置为128,训练40轮,实验结果如表7所示:

表 7  尾部数据增强前后对比

图片

*注:表格第1列与第2列、第3列与第4列实验结果为同一实验配置下K折交叉验证的不同折次的结果

3.2.5 预测头架构

Bert相关预训练模型的输出由四部分组成,其中包括模型各层输出的隐藏状态和序列的第一个token的最后一层的隐藏状态(pooler output,是由线性层和Tanh激活函数进一步处理产生的)。其中模型最后一层输出的隐藏状态通常用于命名实体识别,而pooler output的输出通常用于句子分类[7]。同时也有研究表明BERT编码了丰富的语言学层次信息。表层信息特征在底层网络,句法信息特征在中间层网络,语义信息特征在高层网络[8]。如果将模型的前几层和后几层进行平均池化,分类效果会更好。因此我们对不同的预测头架构进行了实验,实验结果表明目前使用的最后一层输出的隐藏状态+多层感知机的分类效果最好。实验结果如表8所示,实验均在NVIDIA Tesla V100 32G * 4上进行,预训练模型使用ernie-3.0-base-zh,batch_size 设置为128,训练50轮,数据采用train_1。

表 8  不同预测头之间的对比

图片

致谢

感谢中国科学院大学高级人工智能课程介绍本次竞赛并鼓励我们参加,感谢CCF BDCI组委会和智慧芽公司的全体相关工作人员,感谢小队的4位同学在一个月内的辛苦付出,感谢开源的预训练模型库huggingface,感谢提供硬件计算资源的两位外校同学,感谢家人的默默陪伴。

参考

[1] Devlin J, Chang M W, Lee K, et al. Bert: Pre-training of deep bidirectional transformers for language understanding[J]. arXiv preprint arXiv:1810.04805, 2018.

[2] Sohn K, Berthelot D, Carlini N, et al. Fixmatch: Simplifying semi-supervised learning with consistency and confidence[J]. Advances in neural information processing systems, 2020, 33: 596-608.

[3] Sun Y, Wang S, Feng S, et al. Ernie 3.0: Large-scale knowledge enhanced pre-training for language understanding and generation[J]. arXiv preprint arXiv:2107.02137, 2021.

[4] Miyato T, Dai A M, Goodfellow I. Adversarial training methods for semi-supervised text classification[J]. arXiv preprint arXiv:1605.07725, 2016.

[5] Wei C, Sohn K, Mellina C, et al. Crest: A class-rebalancing self-training framework for imbalanced semi-supervised learning[C]//Proceedings of the IEEE/CVF conference on computer vision and pattern recognition. 2021: 10857-10866.

[6] Wei J, Zou K. EDA: Easy Data Augmentation Techniques for Boosting Performance on Text Classification Tasks[C]//Proceedings of the 2019 Conference on Empirical Methods in Natural Language Processing. 2019: 6382-6388.

[7] Alammar, J (2018). The Illustrated Transformer [Blog post]. Retrieved from https://jalammar.github.io/illustrated-transformer/

[8] Ganesh Jawahar, Benoît Sagot, and Djamé Seddah. 2019. What Does BERT Learn about the Structure of Language?. In Proceedings of the 57th Annual Meeting of the Association for Computational Linguistics, pages 3651–3657, Florence, Italy. Association for Computational Linguistics.


我是行业领先的大数据竞赛平台 @DataFountain ,欢迎广大政企校军单位合作办赛,推动优秀数据人才揭榜挂帅!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/954173.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

亚马逊自动广告如何投放?这些技巧你了解嘛!

现如今,亚马逊店铺为了能够提升产品的转化率,为了增加产品曝光率,会选择投放站内广告,现在大多数的亚马逊店铺都有在站内投放广告,不然的话要想获取到自然流量实在是太难了。 很多没有投放站内广告的亚马逊店铺&#…

【数据结构】C语言队列(详解)

前言: 💥🎈个人主页:​​​​​​Dream_Chaser~ 🎈💥 ✨✨专栏:http://t.csdn.cn/oXkBa ⛳⛳本篇内容:c语言数据结构--C语言实现队列 目录 一.队列概念及结构 1.1队列的概念 1.2队列的结构 二.队列的实现 2.1头文…

Mybatis 里面的缓存机制

Mybatis 里面设计的二级缓存是用来提升数据的检索效率,避免每次数据的访问都需要去查询数据库。 一级缓存,是 SqlSession 级别的缓存,也叫本地缓存,因为每个用户在执行查询的时 候都需要使用 SqlSession 来执行, 为了避…

案例分享:西河水库安全监测信息化系统实施方案

一、项目概述1.1项目背景西河水库信息化工作已开展多年,但是由于西河水库监测设备都已经老化或者损坏,现有设备已渐渐不能满足新时期西河水库信息化和现代化发展需求。因此,灌区管理局拟在运用现代信息和通信技术手段感测、分析、整合水库运行…

【Git】(六)子模块跟随主仓库切换分支

场景 主仓库:TestGit 子模块:SubModule 分支v1.0 .gitmodules文件 [submodule "Library/SubModule"]path Library/SubModuleurl gitgitee.com:sunriver2000/SubModule.gitbranch 1.0.0.0 分支v2.0 .gitmodules文件 [submodule "Li…

Mapbox-gl 关闭所有Popup,以及关闭按钮出现黑色边框bug

1.官方示例 var popup new mapboxgl.Popup().addTo(map);popup.remove(); 很明显,需要记录popup对象,管理起来比较麻烦。 2.本人采用div的方式关闭所有的popup,在map对象上新增加方法 map.closePopupmapView.popupClear function(){$(&q…

Idea中使用Statistic插件统计工程项目代码量

1. 功能背景 公司要对一个项目进行代码统计,这么多类,总不能让我一个一个数据,于是想到了Statistic插件。让我们一起看看Statistic插件怎么使用吧。 2. Statistic插件 首先需要知道Idea统计项目代码行数,主要是使用Statistic插…

概念解析 | 无线感知的新篇章:异构网络感知的原理与挑战

注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:异构网络感知。 无线感知的新篇章:异构网络感知的原理与挑战 Interference Management in HetNets 在当今的无线通信领域,我们面临着一个重大的挑战:如何在有限的频谱资源…

【Redis】Redis 的学习教程(五)之 Redis 事务、持久化、集群

1. 事务 1.1 事务的概述 Redis 事务通过 MULTI 、EXEC、DISCARD、WATCH 几个命令来实现 MULTI:开启事务EXEC:提交事务DISCARD:放弃事务WATCH:为 Redis 事务提供 check-and-set (CAS)行为 Redis 事务可以…

创业新机会?全球将有36%的员工永久远程办公!

刚刚过去的2020年是极其不平凡的一年,这一年面对的困难,严重程度超出了所有人的预料,很多公司都遇到的困难就是无法按时复工,这对于创业公司而言,无异于生死大考。 为了活下去,很多公司都开启了远程办公的…

欧科云链研究院探析Facebook稳定币发行经历会不会在PayPal重演

引言 作者最近的报告-探析PayPal发行稳定币是否会重蹈Facebook覆辙-近期被英国的金融时报(中文版)刊登。由于该报告在欧科云链研究院内部反响较好,下面就带大家简单的剖析这篇报告的主要内容。 *这篇文章主要由对比分析(已删减&a…

【高阶数据结构】AVL树 {概念及实现;节点的定义;插入并调整平衡因子;旋转操作:左单旋,右单旋,左右双旋,右左双旋;AVL树的验证及性能分析}

AVL树 一、AVL树的概念 二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当于在顺序表中搜索元素,效率低下。因此,两位俄罗斯的数学家G.M.Adelson-Velskii和E.M.Landis在1962年发明…

定位与轨迹-百度鹰眼轨迹开放平台-学习笔记

1. 百度鹰眼轨迹的主要功能接口 百度的鹰眼轨迹平台,根据使用场景不同,提供了web端、安卓端等各种类型的API与SDK,本文章以web端API为例,介绍鹰眼轨迹的使用。 2. API使用前的准备 使用鹰眼轨迹API,需要两把钥匙&…

真香!Jenkins 主从模式解决问题So Easy~

01、Jenkins 能干什么 Jenkins 是一个开源软件项目,是基于 Java 开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成。 中文官网:https://jenkins.io/zh/ …

OpenCV(十一):图像仿射变换

目录 1.图像仿射变换介绍 仿射变换: 仿射变换矩阵: 仿射变换公式: 2.仿射变换函数 仿射变换函数:warpAffine() 图像旋转:getRotationMatrix2D() 计算仿射变换矩阵:getAffineTransform() 3.demo 1.…

并发(CAS ABA问题)07

CAS public class Hsss {public static void main(String[] args) {AtomicInteger atomicIntegernew AtomicInteger(201);//CAS compareAndSet 比较并交换//如果我期望的值达到了,那么就更新,否则,就不更新atomicInteger.compareAndSet(201,2…

Java版电子招投标管理系统源码-电子招投标认证服务平台-权威认证

项目说明 随着公司的快速发展,企业人员和经营规模不断壮大,公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境,最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范,以及…

TL6478(TI TMS320C6748 DPS)EVM开发板技术讲座 第一讲:串口终端ZOC软件的安装

串口终端ZOC软件的安装 1. 软件获得2. 安装软件3. 软件设置1. 软件获得 zoc602串口工具下载地址: https://download.csdn.net/download/Windgs_YF/88279060 2. 安装软件 1、将zoc602.zip文件解压,双击解压目录中的zoc602.exe安装文件,弹出如下安装界面: 2、点击 Next,…

Python+turtle实现一个图片播放器

我们可以利用Pythonturtle实现一个简易的图片播放器,我们先看一下效果图 完整版代码: [D:\照片\\ i for i in os.listdir(D:\照片)]:os.listdir(‘这里写上你图片的保存路径’) Screen().bgpic(pic_list[num]),加载图片至turtle的…