记录自己第一个Kaggle银牌

从六月以来,一直在华为实习,没抽出时间写一写文章,最近很开心的是刚结束的Kaggle比赛U.S. Patent Phrase to Phrase Matching中取得了银牌,很感谢队友给予的大力帮助,在这里简述一下具体的做法,以作回顾。

在这里插入图片描述

0、比赛内容背景

背景:以美国专利库为主要数据集,匹配专利文档中的关键词短语来提取相关信息

  • 类型:深度学习/NLP
  • 数据:成对的短语(anchor和target),在0到1的范围内评估它们的相似性,训练集36473对短语,训练集大约有12000对短语
  • 评估标准:皮尔逊相关系数

1、数据处理

数据处理方面一些常规的处理方法,例如转换成小写、去掉前后的空格等就不再赘述。
主要说一些数据集的处理,本次数据集主要处理:

  1. 讨论区引入了CPC文件,该文件中每个专利代码的标题作为title text。
  2. 对anchor和context进行groupby,获得聚合后的targets列表。
  3. 在2的基础上生成文本 anchor[SEP]target[SEP]title[SEP]gp_targets
  4. 使用groupKfold将数据拆分成训练集和验证集,能够有效地避免数据泄露导致的线上线下分数差别过大问题。

2、模型/结构

模型使用的是Deberta(主流)、bert for patent、ELECTRA、Funnel-Transformer四者的融合。

Modelseq_lengthCVPB
deberta-v3-large2000.8440.842
electra-large2000.8320.833
funnel-large2000.8240.825
bert for patent2000.8240.824
Ensemble0.85x

Deberta作为Bert的改进版本,主要包含以下三点:

  1. 首先是解耦注意机制(Disentangled attention),每个词分别用两个向量表示,分别对其内容和位置进行编码,单词之间的注意权值分别用其内容和相对位置的解耦矩阵计算。
  2. 一种增强的掩码解码器用于在解码层中合并绝对位置,以预测模型预训练中的掩码tokens。
  3. 此外,采用一种新的对抗训练方法用于微调,以提高模型的泛化能力

Deberta与bert不同的是,输入层中的每个单词都用一个向量表示,这个向量是单词(内容)嵌入和位置嵌入的总和,而Deberta中的每个单词都用两个向量表示,分别对其内容和位置进行编码,分别根据单词的内容和相对位置,采用解耦矩阵计算单词间的注意权值。

实现方面主要利用了Huggingface Transformer,其能够帮我们跟踪流行的新模型,并且提供统一的代码风格来使用BERT、XLNet和GPT等等各种不同的模型。而且它有一个模型仓库,所有常见的预训练模型和不同任务上fine-tuning的模型都可以在这里方便的下载。其主要的三大类:

  • Model 类 :包括30+的PyTorch模型(torch.nn.Module)和对应的TensorFlow模型(tf.keras.Model)。
  • Config 类:它保存了模型的相关(超)参数。我们通常不需要自己来构造它。如果我们不需要进行模型的修改,那么创建模型时会自动使用对于的配置。
  • Tokenizer类:它保存了词典等信息并且实现了把字符串变成ID序列的功能。

上述模型作为backbone,最后加上一个全连接层与sigmod层

3、其他方法

  • 损失函数:MSELoss
  • 优化器:AdamW
  • 调度器:CosineAnnealingWarmRestarts
  • FGM对抗训练(帮助不大,上分很微弱)

4、总结

多关注数据方面的处理,数据的处理往往是最重要的!!!!
多进行模型的融合,比无目的的调参要有用一些!!!!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值