作者:乐雨泉(yuquanle),湖南大学在读硕士,研究方向机器学习与自然语言处理。欢迎志同道合的朋友和我在公众号"AI 小白入门"一起交流学习。
前段时间和朋友何从庆(AI算法之心)等队友一起组队参加了这个比赛,本来以为小比赛人少,没想到参加的人会有几千人。
最后我们队伍取得季军(4st/3131),虽有些许遗憾,但是也很荣幸认识了更多的大佬。
在此和队友整理总结了一波,放出答辩PPT以及开源了部分代码,希望对刚接触这个领域的小白新手能有些帮助~~~
比赛网址
http://www.dcjingsai.com/common/cmpt/%E2%80%9C%E8%BE%BE%E8%A7%82%E6%9D%AF%E2%80%9D%E6%96%87%E6%9C%AC%E6%99%BA%E8%83%BD%E5%A4%84%E7%90%86%E6%8C%91%E6%88%98%E8%B5%9B_%E7%AB%9E%E8%B5%9B%E4%BF%A1%E6%81%AF.html
答辩 PPT
详细解决方案
对于这个比赛,我们尝试了很多方法,最后我们发现了一些对解决这个赛题很不错的解决方案(当然,对于其他任务也可以起到不错的效果)。总结如下:
代码如下
1. 导入各个算法库,导入数据集,数据集路径根据自己的路径设置。
2. 词向量维度选取以及句子长度截断一般方法。
3. 模型构建
本次开源一个比较简单的模型,利用双层的 BiGRU 模型来学习文本的上下文表征,然后通过池化操作,分别提取每一个时间戳的最大池化和平均池化。最后通过 FC 层的训练,构建文本分类模型,实现精准分类。
4. 模型训练
对于模型的训练,我们采用10折交叉进行训练,为了减少时间,可以进行5折交叉进行训练。训练模型我们固定了100个 epoch,然后使用早停的策略,根据验证集上的性能,选择验证数据集上具有最佳准确率分数的模型作为最终模型,并评估其在测试数据集上的性能。
写在后面
本项目主要利用“达观杯”文本比赛的数据,介绍了长文本分类问题的解决方法。我们通过利用两层的 BiGRU 捕捉长文本的上下文信息,然后通过池化层捕捉最关键的文本特征,接着两层的全连接层对文本的关键特征进行训练,从而构建文本分类模型,实现精准分类。
另外,我们通过10折交叉的方式,测试集线上的分数可以达到0.798,仅仅这个单模型可以达到线上前10的效果(在线上赛时)。
另外,为了节省运行时间,可以将10折交叉变成5折交叉,减少运行时间。同时,也可以将BiGRU减少一层。
如果您需要答辩PPT,可以关注"AI小白入门",后台回复"DGJJ"(建议复制)获取。
完整可运行代码以及PPT可以在我的github找到:
https://github.com/yuquanle/2018-daguan-competition-rank