最近,2022 CCF BDCI系列赛正式开始了。本人曾参加过几场NLP赛事,算是比较熟悉NLP赛题的解题流程,所以趁着休闲时间,针对小样本分类任务搭建了个简单的baseline。接下来让我们进入本文的正题。
赛题介绍:
比赛方公开958条专利数据,包括专利权人、专利标题、专利摘要和分类标签,其中分类标签经过脱敏处理,共36类。要求选手设计一套算法,完成测试数据的分类任务。本次赛题公布的训练数据量较小,属于基于小样本训练数据的分类任务。小样本分类任务作为近年来研究的热点问题,学界提出了远程监督、数据增强、预训练模型、PET范式等方案。希望选手充分发挥创造力,将学界的研究成果落地到本赛题中来。详情请见赛题链接:
小样本数据分类任务https://www.datafountain.cn/competitions/582
方案描述:
(1)模型结构:模型采用预训练模型(macbert)提取输入的文本特征,然后经过输出层得到分类结果。 (2)数据处理:将专利名称(title)、专利权人(assignee)和专利摘要(abstract)拼接成长文本,截取最大长度为320(如果GPU显存允许,设置更大长度可能会有更好的效果)。 (3)数据划分:由于训练集数量仅有900多条,一共36类,平均下来每个类别仅有30条数据,所以本文没有随机划分数据集,而是采用StratifiedKFold对每个类别均匀采样划分验证集,StratifiedKFold使用方式如下:
sfolder = StratifiedKFold(n_splits=5, random_state=args.seed, shuffle=True).split(dataset, labels)
for i, j in sfolder:
train_index, val_index = i, j
break
模型共训练10个epoch,线下0.42,线上0.419(trick:训练更多轮数,效果可能会更好哦)。
接下来可以在以下方面进行尝试: (1)更换roberta、nezha等预训练模型,选择一个较好的backone。 (2)已有的预训练模型是在公开的数据集上训练得到的参数权重,利用训练集和测试集文本数据进行预训练,使模型能够在本赛题的任务中表现得更好。(3)训练相关的trick:fgm、pgd、ema以及swa等。 (4)在模型达到较高收益的时候,可以利用伪标签,毕竟测试集数据有2w多条。 (5)few shot相关技术。
以上便是我的baseline的实现方案,具体代码实现可参考github:? https://github.com/wbchief/2022CCF_BDCI_fewshot_data_classification_baseline
欢迎star!
|