文档章节

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

q
 qinhui99
发布于 2017/07/31 09:09
字数 1152
阅读 244
收藏 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
谷歌开发者大会杀出技术黑马,知乎AI终于不再隐藏实力了

上海最近几天比较 AI。世界人工智能大会八仙过海之后,2018 年谷歌开发者大会又来了。跟前者大开大合的产业趋势相比,谷歌的活动要接地气得多。 谷歌在中国的地气当然是开发者业务。从 2016...

AI科技大本营
09/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Docker Compose 原理

Docker 的优势非常明显,尤其是对于开发者来说,它提供了一种全新的软件发布机制。也就是说使用 docker 镜像作为软件产品的载体,使用 docker 容器提供独立的软件运行上下文环境,使用 dock...

Java干货分享
35分钟前
0
0
解决过滤器中设置cookie无效的问题

解决过滤器中设置cookie无效的问题 代码现场 filterChain.doFilter(sessionSyncRequestWrapper, response);Cookie emailCook = WebServletUtil.getSelectedCookie(request.getCookies(), ......

黄威
46分钟前
0
0
Hbase Schema 设计注意事项及最佳实践总结

一个列族的所有列在硬盘上存放在一起,使用这个特性可以把不同访问模式的列放在不同列族,以便隔离它们。这也是HBase被称为面向列族的存储(column-family-oriented store)的原因。 1、RowKe...

PeakFang-BOK
58分钟前
2
0
t-io给群组成员内置排序

1、实现比较器Comparator<ChannelContext> package xxx;import java.util.Comparator;import java.util.Objects;import java.util.Set;import java.util.TreeSet;import or......

talent-tan
今天
2
0
px、em、rem 区别及作用

原文 起因: 一开始是为了解决页面放大时,字体不跟着放大的 bug。现在多用用于统一规范。 概念: 任意浏览器的默认字体高都是16px。所有未经调整的浏览器都符合: 1em=16px。那么12px=0.75em...

lemos
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部