记录自己第一个Kaggle银牌
Kaggle比赛银牌记录
- 0、比赛内容背景
- 1、数据处理
- 2、模型/结构
- 3、其他方法
- 4、总结
从六月以来,一直在华为实习,没抽出时间写一写文章,最近很开心的是刚结束的Kaggle比赛U.S. Patent Phrase to Phrase Matching中取得了银牌,很感谢队友给予的大力帮助,在这里简述一下具体的做法,以作回顾。
0、比赛内容背景
背景:以美国专利库为主要数据集,匹配专利文档中的关键词短语来提取相关信息
- 类型:深度学习/NLP
- 数据:成对的短语(anchor和target),在0到1的范围内评估它们的相似性,训练集36473对短语,训练集大约有12000对短语
- 评估标准:皮尔逊相关系数
1、数据处理
数据处理方面一些常规的处理方法,例如转换成小写、去掉前后的空格等就不再赘述。
主要说一些数据集的处理,本次数据集主要处理:
- 讨论区引入了CPC文件,该文件中每个专利代码的标题作为title text。
- 对anchor和context进行groupby,获得聚合后的targets列表。
- 在2的基础上生成文本 anchor[SEP]target[SEP]title[SEP]gp_targets。
- 使用groupKfold将数据拆分成训练集和验证集,能够有效地避免数据泄露导致的线上线下分数差别过大问题。
2、模型/结构
模型使用的是Deberta(主流)、bert for patent、ELECTRA、Funnel-Transformer四者的融合。
Model | seq_length | CV | PB |
---|---|---|---|
deberta-v3-large | 200 | 0.844 | 0.842 |
electra-large | 200 | 0.832 | 0.833 |
funnel-large | 200 | 0.824 | 0.825 |
bert for patent | 200 | 0.824 | 0.824 |
Ensemble | 0.85x |
Deberta作为Bert的改进版本,主要包含以下三点:
- 首先是解耦注意机制(Disentangled attention),每个词分别用两个向量表示,分别对其内容和位置进行编码,单词之间的注意权值分别用其内容和相对位置的解耦矩阵计算。
- 一种增强的掩码解码器用于在解码层中合并绝对位置,以预测模型预训练中的掩码tokens。
- 此外,采用一种新的对抗训练方法用于微调,以提高模型的泛化能力
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、总结
多关注数据方面的处理,数据的处理往往是最重要的!!!!
多进行模型的融合,比无目的的调参要有用一些!!!!
记录自己第一个Kaggle银牌相关推荐
- oracle 被另一用户锁定,Oracle报错记录被另外一个用户锁定的解决方案
原因 当一个用户对数据进行修改时,若没有进行提交或者回滚,Oracle不允许其他用户修改该条数据,在这种情况下修改,就会出现:"记录被另外一个用户锁定"错误. 解决 查询用户.数据 ...
- oracle 记录被另一个用户锁住
oracle数据中删除数据时提示"记录被另一个用户锁住" 解决方法 1 查看数据库锁,诊断锁的来源及类型 select object_id,session_id,locked_ ...
- [Python学习]PycURL简单学习 - limodou的学习记录 - limodou是一个程序员,他关心的焦点是Python, DocBook, Open Source …...
[Python学习]PycURL简单学习 - limodou的学习记录 - limodou是一个程序员,他关心的焦点是Python, DocBook, Open Source - [Python学习] ...
- java+oracle数据库锁,数据库学习之Oracle数据库\记录被另一个用户锁住\解决方法...
1.先来看看为什么会出锁住: 数据库是一个多用户使用的共享资源.当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况.若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数 ...
- 记录自己第一个java学习博客
记录自己第一个java学习博客 阿里java规范 弄懂 JRE.JDK.JVM 之间的区别与联系 DOS常用命令 常用mac终端命令 今天我学习了java第一个程序打印出helloworld! pac ...
- 精华转贴:只是为了记录---我们实验室一个牛人去年写的找工作的总结
精华转贴:只是为了记录---我们实验室一个牛人去年写的找工作的总结 精华转贴:只是为了记录---我们实验室一个牛人去年写的找工作的总结2008-01-28 15:30最近由于某些原因,不能 ...
- plsql 提示记录被另一个用户锁住
** 一.开发环境 plsql oracle 二.报错 提示记录被另一个用户锁住 三.解决方法 1.找出数据库的sid,serial#,以便于之后杀死: select t2.username,t2.s ...
- 记录发现的一个hiredis的bug
hiredis是redis官方提供的c客户端库.在读代码的过程中,发现了一个bug,记录一下. hiredis里定义了一个上下文结构(struct redisContext),代码如下(deps/hi ...
- 用 Python 写一个 Kaggle 比赛排行榜的爬虫
长久以来,我和小伙伴们都被 Kaggle 网站的加载速度困扰着,比如最近在用 Kaggle 上的数据集测试模型效果时,遇到排行榜(Leaderboard)刷新困难的问题.于是我们开始探索解决方案. 首 ...
最新文章
- NYOJ 179 LK's problem
- java 类数组_Java常用类-字符串、日期类、算法及数组工具类等
- 2015-12-01 存储过程
- 【实习记】2014-09-26恢复linux下误删的ntfs盘中的文件
- 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_05 IO字符流_4字符输出流的基本使用_写出单个字符...
- amos调节变量怎么画_结构方程模型建模思路及Amos操作--调节变量效果确定(二)(还是满满都是骚操作)...
- 单片机超声波测距模块原理与源码解析
- openstack-packstack一键式在线部署
- windows下安装ruby(一)
- VMWare Fusion 导入已有的虚拟机
- Latex公式中符号上下分别加横线的写法
- ESD问题案例分析-智能手表为例
- 关于sockaddr_in 、WSAData 、sockaddr等未定义的问题
- 在c语言中作为字符串结束标志是什么,字符串的结束标志是什么?
- MapReduce:Combiner与Shuffle阶段之Reducer输入
- latex中report目录_latex系列--2 标题、章节、目录、标签、引用
- HTML标签与CSS样式
- 竟然在GitHub标星27k+阿里大牛肝出的443页TCP/IP协议趣谈笔记,有何神奇之处?
- 软件测试实训的意义和目的,软件测试报告目的是什么
- 第1章 数字图像处理绪论