文档章节

2017 知乎看山杯机器学习挑战赛经验总结(一)

q
 qinhui99
发布于 2017/07/31 09:09
字数 1152
阅读 209
收藏 1

 

2017 知乎看山杯机器学习挑战赛是一个文本多标签预测分类的比赛,属于NLP(自然语言处理)的范畴。它提供了300万训练数据,24万左右的线上预测数据。需要你从1999个话题分类标签里,为每个问题抽取5个最相关的话题。为了防作弊和隐私安全考虑,提供的文本数据都做了特殊转换和词向量化。这些处理都为比赛带来了一定的技术门槛。知乎比赛传送门:https://biendata.com/competition/zhihu/leaderboard/

 

对于我这样的NLP的初学者(参赛前只做过几个NLP的例子程序)来说,刚开始被这些特殊处理过的文本难住了。以往的经验都是拿到中文文本,先使用结巴分词这样的工具去除停用词,然后分词抽取。这样得到的内容你想怎么处理都方便。现在这块没掉了,看到像'w1','w2'这样的数据,真地头疼。说实话,国内的比赛很缺乏对初学者的照顾,不像国外的KAGGLE比赛,经常有前辈给初学者提供一些如何开始比赛的程序或者建议,让初学者也能顺利地完成比赛。所以,我看到知乎比赛有将近900个参赛队伍,结果只有200个左右的队伍提交了成果。我估计有很多初学者都被技术门槛卡住了,没法做下去。

 

因为这个比赛是我第一次参加机器学习比赛,所以我坚持了下来。在尝试了多种不同的工具和模型后,得到了一些东西,并记录下来。

 

比赛第一阶段:

文本未经处理,直接送模型处理。例如,直接把’w1,w2’这样的文本信息送到RNN或者MLP进行训练处理。这样处理的结果,test准确率只有千分之4到百分之4.  这就是比赛排行榜上末尾看到结果。就因为这样,很多初学者放弃了比赛,结果太难堪了。

 

第二阶段:

 把’w1,w2’这样的文本信息分别转成256维的词向量,然后把词向量累加再求平均值。经过词向量平均值处理后,再送到MLP、RNN、 SVM等模型进行处理,test准确率在13%到23%之间。其中,linear svm准确率最高,泛化能力最好。

 

第三阶段:

把’w1,w2’这样的文本信息分别转成256维的词向量后不再求平均值,而是用词向量依次排列组成句子,再送到双向LSTM+GRU模型处理,test准确率提高到了27.3%。这个模型的缺点是消耗大量的GPU内存,只能用词向量组成40个词左右进行训练,否则,6G的显存都不够用。

使用投票法则,把前面只有百分之20几准确率的十几个模型集成起来,一起预测。线上得分刚好超过30%。

 

第四阶段:

听一些搞NLP的前辈们说想要拿高分,只有用ATTENTION模式。据说有人用ATTENTION模式训练出单模型40%准确率的。

我水平有限,搞不出能用的ATTENTION模型,只好参考别人的代码。参考开源的https://github.com/ilivans/tf-rnn-attention

 

把’w1,w2,w11’这样的文本信息做处理,去掉前面的’w’字符,变成’1,2,11’这样的数字,然后送到RNN+ATTENTION模型处理。这个模型得到的test准确率在30.6%左右。

再次用投票集成的办法,得到了线上成绩32%左右的结果。

 

这次比赛,我尝试过的机器学习工具包括:sklearn、mxnet、tensorflow、keras、xgboost、lightgbm等等。感觉最容易使用和最有帮助的是sklearn和keras,最难用的是tensorflow。用tensorflow实现模型,评估模型和预测都非常麻烦,都要自己写,缺乏效率。 Mxnet写的程序性能很好,但是真地太缺乏例子和文档了,我用它写不出来RNN+ATTENTION模型,浪费了。

 

知乎比赛还有15天就结束了,我也不打算再提交了。等到比赛结束了,看看有没有大神开源他们的方案。如果有的话,要好好看看他们是怎么做的。我很好奇能达到42%准确率的方案是怎么搞出来的。

 

© 著作权归作者所有

共有 人打赏支持
q
粉丝 63
博文 72
码字总数 32863
作品 0
深圳
程序员
高手问答 | 聊聊饱受 Pythoner 好评的深度学习框架 PyTorch

OSCHINA 本期高手问答(1 月 10 日 - 1 月 16 日)我们请来了@tmux 陈云为大家解答关于深度学习框架 PyTorch 方面的问题。 陈云,Python 程序员、Linux 爱好者和 PyTorch 源码贡献者。主要研究...

局长
01/09
1K
21
有关知识表示的一些形而上的思考

今天在知乎盐沙龙知乎盐沙龙:基于人工智能的自然语言处理 暨知乎看山杯机器学习大赛颁奖仪式上,以《知识表示与自然语言理解:通用人工智能的必由之路》为题,做了一个简短的分享,主要关注...

王咏刚
2017/09/02
0
0
2017知乎看山杯总结(多标签文本分类)

关于比赛详情,请戳:2017 知乎看山杯机器学习挑战赛 代码:https://github.com/yongyehuang/zhihu-text-classification 基于:python 2.7, TensorFlow 1.2.1 任务描述:参赛者需要根据知乎...

jerr__y
2017/08/31
0
0
Python预测NBA比赛结果

本文转载至知乎ID:Charles(白露未晞)知乎个人专栏 导语 利用Python简单地预测一下NBA比赛结果。。。 这大概就叫蹭热度吧。。。 毕竟貌似今天朋友圈都在刷NBA相关的内容。。。 虽然我并不能...

W3Cschool小编
07/27
0
0
天池大数据竞赛历次资料集锦(持续更新中)

作为天池老选手,一直想着要把收集的天池平台上举办的历次大数据竞赛的决赛答辩资料以及开源的代码等收集起来作为集锦,贡献给各位大数据竞赛特别是天池平台的选手和爱好者。怎奈一直琐事烦身...

金陵书生
2017/02/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

angular 解决其他电脑不能访问的问题。

ng serve --host 0.0.0.0 --disable-host-check

miaojiangmin
今天
1
0
优酷视频文件怎么转换格式

  以前在优酷上下载视频都只是在手机上观看,但随着科技的发展,对于视频的要求也逐渐增多,不再只是观看视频那么简单,在精彩的部分还会将其单独分割出来,然后进行视频剪辑,可以做出我们...

萤火的萤火
今天
0
0
数据结构:散列

在一个数据结构中查找key元素,用顺序查找、二分查找都需要经过一系列关键之比较才能查找到结果,平均查找长度与数据量有关,元素越多比较次数就越多。 如果根据元素的关键字就能知道元素的存...

京一
今天
0
0
Apache RocketMQ 正式开源分布式事务消息

近日,Apache RocketMQ 社区正式发布4.3版本。此次发布不仅包括提升性能,减少内存使用等原有特性增强,还修复了部分社区提出的若干问题,更重要的是该版本开源了社区最为关心的分布式事务消...

阿里云云栖社区
今天
30
0
使用JavaScript和MQTT开发物联网应用

如果说Java和C#哪个是最好的开发语言,无疑会挑起程序员之间的相互怒怼,那如果说JavaScript是动态性最好的语言,相信大家都不会有太大的争议。随着越来越多的硬件平台和开发板开始支持JavaS...

少年不搬砖老大徒伤悲
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部