蚂蚁金服nlp大赛经验分享

      有幸与师兄组队参加了2018年6月份由蚂蚁金服主办的NLP大赛,最终复赛b榜成绩f1值为0.7416,以万分点的优点侥幸得到第一。这是我参加的第二个正式的算法比赛,也是我师兄参加的第一个比赛,下面从几个方面与你们分享下比赛经验。算法

     组队与队伍配合网络

     此次比赛只有我与师兄两我的,师兄在顶会期刊中发表过文章,学术能力与研究能力一流,我因为参加过相似的比赛因此熟悉一些比赛的技巧与手段。比赛期间咱们基本是同时并行,各自采用本身熟悉的框架进行实验,互相分享看的paper以及效果好的idea,天天大概花5个小时左右的时间,配合很是完美。因此你们在组队时候最好找老司机带路,每一个成员要有一技之长,互相取长补短,并且不用天天24小时加班加点,劳逸结合才会有新的idea。框架

    赛题分析与模型设计机器学习

   比赛第一步确定是粗略的分析数据,若是时间充裕可作详细的EDA,但文本方面的比赛作EDA价值不大,咱们主要分析了句子的平均长度,正负样本的比例状况,而后肉眼随机查看了部分数据,可对任务难度作一个初步的评估。ide

   此次比赛任务简单点来讲就是二分类任务,对于两个问句判断类似仍是不类似,这是一个很fundamental可是工业价值很大的任务,相似于NLI(natural language inference)和sentence match。任务肯定了下一步就是nlp循序渐进的操做,创建词汇表-->获取每一个词的Embedding-->用LSTM或者CNN进行Encoder特征提取-->对提取特征进行交互操做如进行点乘和作减法-->过全链接层进行二分类。这就是咱们比赛初期的Baseline框架,意外的是这个baseline成绩就已经差很少Top50,极大的带动了咱们比赛的热情。函数

   接下来的任务就是看paper作实验了,咱们初期的计划很暴力,尝试17年到18年几乎全部和这个任务相关的paper的模型,直接略过了以往的经典模型如孪生网络。Paper模型的复现部分主要由我来负责,师兄负责设计新的模型,在这块咱们花了大量的时间来调研和实验,争取不放过任何一个可能带来提升的component。你们可大胆尝试各类最新的“奇淫技巧”,但也不是随意的排列组合的实验,先要想一想这样作的缘由和背后的原理,再去有的放矢。工具

    赛后总结与遗憾post

    比赛阶段我犯了一个很大的错误,盲目的去追求完美的复现Paper的模型,可是效果每每与预期相距甚远,因此作了不少无用功,复赛期间也没有发挥出应有的做用,给了师兄很大的压力,因此仍是要具体任务具体对待。总的来说整个比赛还算进行的顺利,中途也遇到过一周甚至半个月也提升不了成绩的状况,但我和师兄都比较佛系,一步步慢慢来总会有收获。学习

    另外比赛也留下了很多遗憾,一是没有花心思去弄特征,好比postag,semantic parser等都是看起来颇有效的特征,其次是对CNN相关的模型尝试一直不太成功,具体缘由也没有找到,另外咱们也尝试过对抗学习,在简单模型上有不错的提高,可是没法套用复杂模型,以及将来得及尝试其余大大小小的idea。优化

    比赛经常使用工具和技巧

     这个不用多说你们应该都知道,最经常使用的数据处理库pandas必定要熟练掌握,文本处理方面的nltk以及gensim,以及机器学习的sklearn框架,另外深度学习框架至少要熟练使用一种,好比简洁高效的keras或者pytorch。除了各类框架,理论知识也要掌握透彻,这是设计算法的根基所在。其次要弄懂比赛的评测方式,是ACC仍是F1,亦或是AUC,针对不一样的指标能够有不一样的优化方法,效果提高每每比直接改算法来的直接。

    其次就是比赛的大杀器ensemble,只要是有差异的模型都能集成,具体的方法有不少种,好比最简单但也颇有效的直接平均,这次比赛因为平台限制咱们仅仅采用了这种方式,另外还有复杂一点的blending和stacking,具体细节网上有不少参考。Ensemble须要注意的一点是模型差异越大,效果才会越好,不要担忧太简单模型会影响总体效果,甚至最简单的TF-IDF都能集成,结果好很差试了才知道。另外针对差异比较小的模型,咱们能够采用sigmoid反函数的方式进行ensemble,具体原理你们可自行搜索。