蚂蚁金服nlp大赛经验分享

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

     组队与队伍配合

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

    赛题分析与模型设计

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

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

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

    赛后总结与遗憾

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

    另外比赛也留下了不少遗憾,一是没有花心思去弄特征,比如postag,semantic parser等都是看起来很有效的特征,其次是对CNN相关的模型尝试一直不太成功,具体原因也没有找到,另外我们也尝试过对抗学习,在简单模型上有不错的提升,但是无法套用复杂模型,以及未来得及尝试其他大大小小的idea。

    比赛常用工具和技巧

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

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

你可能感兴趣的:(蚂蚁金服nlp大赛经验分享)