【金融大脑-一支优秀的队伍】比赛经验分享

2024-05-07 14:32

本文主要是介绍【金融大脑-一支优秀的队伍】比赛经验分享,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

说在前面的话

大家好,我是“一支优秀的队伍”队长,SpaceOdd,我们队伍有俩人,另一个是我师弟。这次是我第一次参加比赛,复赛封榜前侥幸拿到了第一的成绩,实在是走运得很,不过还有重要的答辩环节,还要继续努力加油:)在这里斗胆做一个简单的分享是为了和大家一起学习,难免因能力不足而出现一些错误请不吝指出。

 

实际上前排大佬们的最后结果都是在伯仲之间,大家的解法都有很可取之处,期待大家也做出自己的比赛经验分享,一起为NLP添砖加瓦:)另外复赛A榜大佬们十分令人惋惜,B榜测试集只有1W条的确是会让结果很波动,甚至大变天都是有可能的,我相信并不是所有人都在试图“overfit”测试集,我们自己队伍最后几日的不断尝试也带来了非常波动的结果,所以很能理解大家的心情,不过也不要一味的抱怨,生活还是要不断往前的。

 

 

题目简介

这个题目其实就是Natural Language Inference、Sentence Match这一类经典NLP问题,简单来说就是判断两个sentence的关系,在本比赛中,就是判断两个sentence是否语意一致。

 

这个任务非常有实用价值,想象你在做一个客服系统,事先会有一个问题-答案的表单,客服的工作其实就是在面对用户的提问时,迅速找到与之最接近的问题,并整理出答案来给用户。文本匹配系统一旦做的好了,可以直接解决第二个阶段的问题,也是最需要人力的部分——找到最接近的问题,这能大大减轻客服的压力,让他们去解决真正困难的问题。(真正的客服系统远比这个过程复杂,这里只是一个简单的例子)

 

与这个比赛相关的领域也包括像QA match、machine reading甚至recommendation等,只要问题涉及到了两类信息的交互,都是相关领域,都可以找paper来看,来借鉴idea。

 

 

 

解题基本策略

本人比赛经验比较少,听比赛经验略多的师弟说,NLP比赛一般不用feature(快有人来辟谣),所以我们一开始就没有朝着 找feature 这条ML的路走,我们毅然决然的选择了DL,换句话说,就是堆模型,靠模型的结构来自动提取、推演相关的feature,这也是DL的玄学魅力。

 

我们的配合方式很简单。我和师弟用的是不同的框架,我keras他torch,所以用并行的方式来做比赛——互相分享好的paper、好的idea,互换实验结果及分析,然后各取所长,最后谁的结果好就用谁的模型。

 

建议大家组队的时候,还是尽量选择框架一致的队友,因为一旦你有事,队友能快速帮你补实验= =

 

我们无论是在做初赛还是复赛,都会先用siamese结构的纯基于encoding的网络来当baseline,然后再上基于交互的模型。在这个比赛里基于交互的模型还是要好于纯粹基于encoding的模型,不过并不是所有的匹配数据集都满足这一条件,依稀记得COLING 18年的一个复现paper(引用[4])里提到了,quora数据集上纯粹基于encoding的一个模型比ESIM等等模型效果还好,所以还是要多做实验验证。

 

我们的解题策略很简单,选一个可扩展性强的模型,然后根据其他paper的idea、自己的idea来改进模型,把它改的面目全非为止。

 

从一开始我们就选择了ESIM模型(引用[6]),相比现在动不动就好多层网络结构的NLI模型,ESIM思路清晰、能说服我们、网络结构相对简单、没有用很多trick、扩展性也强、效果很棒,所以就一眼相中了。目前来看逼格learning队伍也是用ESIM改进版取得了不错的成绩,看来所见略同。

 

 

对于这个任务来讲,模型的潜力是蛮大的,我们没有做任何的预处理,完整的保留了每个句子的所有信息(当然了padding和截取是必须的),因为我们觉得每一个信息对于DL来说都有用。我们没有使用词级别的向量,而是纯用的字级别的向量,在做实验的过程中发现基于词级别的结果普遍要差一点,这和分词质量不无关系,而且本人认为GRU、LSTM这样的网络因为引入了gate,已经具备一定程度的分词作用了。但是可以料想的是,如果经过了良好的分词处理,结合word和char级别的embedding,应该是有一定帮助的。我们在b榜上的最终成绩是多个模型求平均作ensemble的结果,这几个模型和下面将提到的最优单模型实际上比较相关,这里也是一个有待改进的点。

 

 

比赛经验分享

初赛阶段

这一段我们没花很多的精力,就简单的略过一下(主要成绩也不好,哈哈)模型就是原始的ESIM略作改动,自始至终都只用了字向量,初赛的时候本地数据并不多,我们在github上找了预训练好的300D的char embedding,地址在这儿 <a href="https://github.com/Embedding/Chinese-Word-Vectors" target="_blank">https://github.com/Embedding/Chinese-Word-Vectors ,我们用的是skipgram的mix-large版本,最终单模型初赛60名左右。

 

 

复赛阶段

我们的baseline encoding模型是三层bi-GRU+mult-head self-attention的siamese模型,每一层都用了残差。char emb方面我们用了初赛用的pretrain emb并作了fine-tune,对数据没有做任何预处理。A榜里单模型有728左右,10fold作平均来做ensemble,大概可以到735。作为一个baseline已经是很好的出发点了。

 

我们的最佳单模型是从ESIM出发一步步改进的,改到最后已经连ESIM也认不出来了。它像一个全新的物种,不过细细一看,眉眼、神情还是似曾相识的。我们参考了大概六七篇paper,附在本文的结尾,大家感兴趣的可以下下来看看。

 

关于最佳单模型的具体结构,这里暂时不透露太过详细,因为考虑到之后我们可能会用这个模型来做一些事情:)在一切妥当之后,会放出开源代码和大家一起学习。

 

 

经验分享(重要性不分先后)

1.数据集够大的时候,用外部训练好的emb并不一定就比本地训练的emb要好,比如复赛;

 

2.fix住emb能够很好的防止过拟合风险。实验发现fine-tune emb能够取得很低的loss,但F1不一定就提高了。但是凡事有利有弊,fix emb会让模型的能力受限,一个两者兼得的方式是——在fix emb的同时,额外引入一些可训练的emb维度,实验证明效果非常不错;

 

3.残差连接很好用。想提效果,一个很自然的方式就是加入适度的复杂性->堆mlp,但是直接加mlp,会有难以训练的风险,用残差连接就能较好的中和这个问题,这个方法很简单粗暴但是有用,我们的最优单模型在很多地方都用了一层Relu的mlp+残差连接;

 

4.很喜欢一个叫CLR leraning的学习率自动调整策略,是在看fast.ai的视频里学到的,尽管没有发生什么神奇的事情,但是稳定在第4个epoch收敛的效果我很喜欢,paper见引用[1];

 

5.self-attention(引用[9])比双向RNN要好用。初赛的时候我把ESIM顶层的双向LSTM替换成mult-head self-attention,很好用,复赛最优单模型也用了mult-head self-attention;

 

6.learning rate、dropout、batch size对模型效果影响很大很大;

 

7.很喜欢fuse gate(引用[8]中提到),用得好的话感觉比残差连接要有用,还有一种可视化的感觉——告诉你模型什么时候需要什么level的信息。在最优单模型上面我主要用在了char emb和encoder之后的表达上面,效果有提升;

 

8.对于DL模型,输入永远都是非常有用的,尽管你可以设计出牛逼的结构,但是如果输入信息就那么些,实在是强模型所难,我们发现把一些简单的char-level feature引入模型是会带来一点提升的(但是比较有限),个人不建议在模型后面再引入feature,会误导模型。我们用的char-level feature有四个,一个是exact match,一个是idf,另外两个是自动提取的feature,来自一个很赞的KDD 2018的paper,见引用[3];

 

9.在需要pooling的时候,拼接max-pooling和avg-pooling通常是很有用的,他们没有参数,而且尽可能的保留了信息量,这一块我们初赛和复赛一开始有在用;

 

10.还是pooling方面,也推荐s2t mult-dim的pooling方式(见paper引用[8]),最优的模型里我用了这个,之所以没有用max和avg的拼接,是不太希望最后接mlp之前的向量维度太大;

 

11.直接复现别人的paper不一定就效果好,通常需要自己做一些调整;

 

12.loss方面,加权的CE效果非常好,公式见引用[5]的paper,另外试过upsampling,效果和加权CE差不多,还没有尝试margin loss,不知道有没有队伍尝试过,可以分享一下;

 

13.想到再补充。

 

 

那些想实现但是没有实现的idea

1.引入拼音emb,这主要是为了一定程度上解决同音错别字的问题,逼格learning战队试过在初赛上有一点效果;

 

2.data augmentation,在图像领域旋转一下图像就能让模型鲁棒性更强,那么在NLP领域,是不是可以随机更改一下句子里的重要名词来制造负例,更改一下句子里不影响语意的词语来增加正例;

 

3.从外部找大量的语料,训练一个language model来做ELMo,见引用[2];

 

4.参考引用[7]来在emb层面上引入对抗扰动来增强模型的鲁棒性;

 

5.combine word和char emb,并引入pos tag等feature;

 

6.尝试更好的ensemble策略,比如stacking,然后可以尝试差异性更大的模型来做ensemble。

 

 

写在后面的话

从参赛到复赛封榜,历时两个多月,中间各种酸甜苦辣都尝了个遍,所有美好的旅程都是如此。感谢比赛方提供这样一个平台,感谢师弟的全力合作,感谢女票对我的悉心照顾,没有你我很难把比赛坚持下来:)

 

答辩日益临近,现在还远不是放松的时刻,大家一起加油,各位杭州见:)

 

 

 

参考文章链接

[1].Cyclical Learning Rates for Training Neural Networks, https://ieeexplore.ieee.org/document/7926641/

[2].Deep contextualized word representations, <a href="https://aclanthology.info/papers/N18-1202/n18-1202" target="_blank">https://aclanthology.info/papers/N18-1202/n18-1202

[3].Multi-Cast Attention Networks for Retrieval-based Question Answering and Response Prediction, https://arxiv.org/abs/1806.00778

[4].Neural Network Models for Paraphrase Identification, Semantic Textual Similarity, Natural Language Inference, and Question Answering , <a href="https://aclanthology.info/papers/C18-1328/c18-1328" target="_blank">https://aclanthology.info/papers/C18-1328/c18-1328

[5].ETH-DS3Lab at SemEval-2018 Task 7: Effectively Combining Recurrent and Convolutional Neural Networks for Relation Classification and Extraction , <a href="https://aclanthology.info/papers/S18-1112/s18-1112" target="_blank">https://aclanthology.info/papers/S18-1112/s18-1112

[6].Enhanced LSTM for Natural Language Inference, <a href="http://aclweb.org/anthology/P17-1152" target="_blank">http://aclweb.org/anthology/P17-1152

[7].Adversarial Training Methods for Semi-Supervised Text Classification, https://arxiv.org/abs/1605.07725 

[8].DiSAN: Directional Self-Attention Network for RNN/CNN-Free Language Understanding, https://www.aaai.org/ocs/index.php/AAAI/AAAI18/paper/view/16126

[9].Attention is all you need, <a href="http://papers.nips.cc/paper/7181-attention-is-all-you-need" target="_blank">http://papers.nips.cc/paper/7181-attention-is-all-you-need 

这篇关于【金融大脑-一支优秀的队伍】比赛经验分享的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/967619

相关文章

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

java常用面试题-基础知识分享

什么是Java? Java是一种高级编程语言,旨在提供跨平台的解决方案。它是一种面向对象的语言,具有简单、结构化、可移植、可靠、安全等特点。 Java的主要特点是什么? Java的主要特点包括: 简单性:Java的语法相对简单,易于学习和使用。面向对象:Java是一种完全面向对象的语言,支持封装、继承和多态。跨平台性:Java的程序可以在不同的操作系统上运行,称为"Write once,

分享5款免费录屏的工具,搞定网课不怕错过!

虽然现在学生们不怎么上网课, 但是对于上班族或者是没有办法到学校参加课程的人来说,网课还是很重要的,今天,我就来跟大家分享一下我用过的几款录屏软件=,看看它们在录制网课时的表现如何。 福昕录屏大师 网址:https://www.foxitsoftware.cn/REC/ 这款软件给我的第一印象就是界面简洁,操作起来很直观。它支持全屏录制,也支持区域录制,这对于我这种需要同时录制PPT和老师讲

【干货分享】基于SSM的体育场管理系统的开题报告(附源码下载地址)

中秋送好礼 中秋佳节将至,祝福大家中秋快乐,阖家幸福。本期免费分享毕业设计作品:《基于SSM的体育场管理系统》。 基于SSM的体育场管理系统的开题报告 一、课题背景与意义 随着全民健身理念的深入人心,体育场已成为广大师生和社区居民进行体育锻炼的重要场所。然而,传统的体育场管理方式存在诸多问题,如资源分配不均、预约流程繁琐、数据统计不准确等,严重影响了体育场的使用效率和用户体验。

图书管理系统系统分享

分享一个图书管理系统,Java、SpringBoot、Vue和MySQL开发的图书馆管理系统 gitee项目地址:https://gitee.com/yuanmomoya/open-source-project/tree/master/books-management-system GitHub项目地址:https://github.com/yuanmomoya/open-source-pro

站长常用Shell脚本整理分享(全)

站长常用Shell脚本整理分享 站长常用Shell脚本整理分享1-10 站长常用Shell脚本整理分享11-20 站长常用Shell脚本整理分享21-30 站长常用Shell脚本整理分享31-40 站长常用Shell脚本整理分享41-50 站长常用Shell脚本整理分享51-59 长期更新

如何成为一个优秀的测试工程师

链接地址:http://blog.csdn.net/KerryZhu/article/details/5250504 我一直在想,如何将自己的测试团队打造成世界一流的团队?流程、测试自动化、创新、扁平式管理、国际标准制定、测试社区贡献、…… 但首先一点是明确的,就是要将每一个测试工程师打造成优秀的测试工程师,优秀的团队必须由优秀的成员构成。所以,先讨论“如何成为一个优秀的测试工程师”,

分享MSSQL、MySql、Oracle的大数据批量导入方法及编程手法细节

1:MSSQL SQL语法篇: BULK INSERT      [ database_name . [ schema_name ] . | schema_name . ] [ table_name | view_name ]         FROM 'data_file'        [ WITH       (      [ [ , ] BATCHSIZE = batch_siz

分享一个基于uniapp科技馆服务微信小程序 博物馆管理小程序(源码、调试、LW、开题、PPT)

💕💕作者:计算机源码社 💕💕个人简介:本人 八年开发经验,擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等,大家有这一块的问题可以一起交流! 💕💕学习资料、程序开发、技术解答、文档报告 💕💕如需要源码,可以扫取文章下方二维码联系咨询 💕💕Java项目 💕💕微信小程序项目 💕💕Android项目 �