本篇文章6732字,读完约17分钟

雷锋。这篇文章的原作者magicbubble最初发表在智虎的专栏《人工智能障碍的深度盲学之路》上。雷锋网(公开号:雷锋网)已经作者授权。

利用暑假,我参加了研究生生涯中的第一次正式比赛,最终排名第二。有一些小小的遗憾,但我获得了更多的成长和经验。我们以前没有参加过机器学习和课文的竞赛,但是学到了一些基本的理论知识,没有付诸实践。由于前人的分享,我们读了几篇论文(一篇是用cnn rnn的注意力解决大规模文本分类问题——回顾与实践,另一篇是brightmart的文本分类,其中许多文本分类模型都是用keras实现的)。这些都为我们的参赛打下了良好的基础,并在比赛中反复学习和实践。我要感谢两位前任无私的分享。

2017 知乎看山杯从入门到第二

先放一波链接:

竞赛网站:比恩达塔/竞赛/胡志/

竞赛源代码:github/魔术泡泡/胡志

比赛结果:zhuanlan.zhihu/p/28912353

以下是本次比赛中使用的方法和获得的经验的简要总结和分享。

用单一模型探索数据的极限1。任务典型的文本多标签分类问题,根据用户在智虎上发布的问题的标题和描述,判断它属于哪个主题

训练数据给出了300万个问题和它们的主题之间的绑定关系。有1999个主题标签,它们有父子关系,构成一个有向无环图

需要预测最有可能绑定到未标记数据的前5个主题标签

评估采用准确率和召回率的调和平均,准确率的计算按位置加权,得分越高(详见评估方案)

amp;lt;img src= amp;quot;static.leiphone/uploads/new/article/pic/201709/5a470b89f2ecda551bb3aa2154c493ec.png amp;quot; data-rawwidth= amp;quot;951 amp;quot; data-rawheight= amp;quot;113 amp;quot; >

2. 数据比赛提供的数据是 300 万问题和话题的标题(下称 title)及描述(下称 desc),分别有对应的字序列(下称 char)和词序列(下称 word),全部是以 id 的形式给出。这意味着我们是看不到原始文本的,所以对于 badcase 的分析也很困难,但好在其数据量够大(2 亿多词,4 亿多字),还是可以用深度学习来做。知乎官方也提供了训练好的 embedding(维度 256),字级别和词级别的都有,但是是分开训练,不属于同一个语义向量空间。amp。lt。img src= amp。quot。static . leiphone/uploads/new/article/pic/201709/5a 470 b 89 F2 ecda 551 bb3a a 2154 c 493 EC . png amp;quot。数据-rawwidth= amp。quot。951安培。quot。数据-rawheight= amp。quot。113安培。quot。> 2。数据竞赛提供的数据是300万个问题和主题的标题和描述,这些问题和主题具有相应的单词序列(char)和单词序列(word ),所有这些都以id的形式给出。这意味着我们看不到原始文本,所以很难分析坏案例,但幸运的是,它的数据量足够大(超过2亿字,超过4亿字),而且仍然可以通过深入学习来完成。胡志官方还提供了训练嵌入(dimension 256),它既有词级又有词级,但它是单独训练的,不属于同一个语义向量空.

2017 知乎看山杯从入门到第二

amp;lt;img src= amp;quot;static.leiphone/uploads/new/article/pic/201709/01f6d064607e9ee79f00fe1e365755f6.png amp;quot; data-rawwidth= amp;quot;1961 amp;quot; data-rawheight= amp;quot;707 amp;quot; >

坊间常说:数据和特征决定了机器学习的上限,而模型和算法知识逼近这个上限而已。对于深度学习,因为不存在特征工程,所以数据处理就至关重要了。而良好且合理的数据处理离不开系统详细的数据分析,要知道数据是什么样,数据怎么分布,才能更好地选择模型和训练方式。amp。lt。img src= amp。quot。static . leiphone/uploads/new/article/pic/201709/01 F6 d 064607 e 9 ee 79 f 00 Fe 1e 365755 F6 . png amp;quot。数据-rawwidth= amp。quot。1961安培。quot。数据-rawheight= amp。quot。707安培。quot。人们常说,数据和特征决定了机器学习的上限,而模型和算法知识只接近这个上限。对于深度学习,因为没有特征工程,数据处理是非常重要的。良好合理的数据处理离不开系统细致的数据分析。只有了解什么是数据以及数据是如何分布的,我们才能更好地选择模型和训练方法。

2017 知乎看山杯从入门到第二

2.1这里的数据分析主要是分析题目的长度和desc的问题。有关更详细的分析,请参见数据分析

首先是题目的字长分布:

amp;lt;img src= amp;quot;static.leiphone/uploads/new/article/pic/201709/ff69b13f9337af8e1f7b0c2e9500da3c.png amp;quot; data-rawwidth= amp;quot;948 amp;quot; data-rawheight= amp;quot;325 amp;quot; >

其次是问题 desc 的字词长度分布:amp。lt。img src= amp。quot。static . leiphone/uploads/new/article/pic/201709/ff 69 b 13 f 9337 af8 e 1 f 7 b 0 C2 e 9500 da 3c . png amp;quot。数据-rawwidth= amp。quot。948安培。quot。数据-rawheight= amp。quot。325安培。quot。>其次是问题desc的字长分布:

2017 知乎看山杯从入门到第二

amp;lt;img src= amp;quot;static.leiphone/uploads/new/article/pic/201709/0e351b36721a79d2618ed57fd1cf9f06.png amp;quot; data-rawwidth= amp;quot;948 amp;quot; data-rawheight= amp;quot;336 amp;quot; >

2.2 预处理随机 shuffle 后以 9:1 的比例划分线下验证集和训练集,防止数据周期的影响amp。lt。img src= amp。quot。static . leiphone/uploads/new/article/pic/201709/0e 351 b 36721 a 79d 2618 ed 57 FD 1 cf 9 f 06 . png amp;quot。数据-rawwidth= amp。quot。948安培。quot。数据-rawheight= amp。quot。336安培。quot。> 2.2预处理随机洗牌后,将离线验证集和训练集以9:1的比例划分,以防止数据周期的影响

2017 知乎看山杯从入门到第二

对于没有出现在嵌入矩阵中的单词,添加它们并用-0.25~0.25初始化它们。永远不要把它们扔掉,那样会破坏前后的语义关系

对于title和desc,根据它们的平均长度* 2,它们被截断并填充到相同的长度,这便于批量输入网络训练

amp;lt;img src= amp;quot;static.leiphone/uploads/new/article/pic/201709/6cdf74f65761aa9464007648b3ae9d54.png amp;quot; data-rawwidth= amp;quot;920 amp;quot; data-rawheight= amp;quot;323 amp;quot; >

3. 模型参照 brightmart 的 github 开源,我们尝试了前 5 种模型,分别是fasttext、textcnn、textrnn、rcnn、hanamp。lt。img src= amp。quot。static . leiphone/uploads/new/article/pic/201709/6 CDF 74 f 65761 aa 9464007648 B3 AE 9d 54 . png amp;quot。数据-rawwidth= amp。quot。920安培。quot。数据-rawheight= amp。quot。323安培。quot。> 3。该模型参考了brightmart的github开源软件。我们尝试了前五种模式,即fasttext、textcnn、textrnn、rcnn和han

2017 知乎看山杯从入门到第二

其中,韩寒的原始论文使用了两层注意:单词和句子,但是在数据中看不到句子,所以我在这个方法中只使用了一层单词,效果不好。但是,rcnn同时使用了rnn和cnn的思想,所以整个网络的训练时间很长,其效果与rnn和cnn单独训练的效果相似,所以后期没有用到这个模型。使用的最终模型是:

2017 知乎看山杯从入门到第二

快速文本:通过平均提取一般语义信息

模仿n-gram获取局部语义信息

提取序列语义信息

amp;lt;img src= amp;quot;static.leiphone/uploads/new/article/pic/201709/c920a3b444f733c7957a196e79c94cea.png amp;quot; data-rawwidth= amp;quot;2081 amp;quot; data-rawheight= amp;quot;1047 amp;quot; >

3.1 单模型 score因为没有花很多时间在单模型调参训练上,所以最终单 model 的分数普遍偏低,约比别的队伍低 0.5~1 个百分点。amp。lt。img src= amp。quot。static . leiphone/uploads/new/article/pic/201709/c 920 a3 b 444 f 733 c 7957 a 196 e 79 c 94 CEA . png amp;quot。数据-rawwidth= amp。quot。2081安培。quot。数据-rawheight= amp。quot。1047安培。quot。> 3.1单模式得分,由于单模式训练时间不多,单模式得分普遍较低,比其他团队低0.5~1个百分点左右。

2017 知乎看山杯从入门到第二

amp;lt;img src= amp;quot;static.leiphone/uploads/new/article/pic/201709/b55cff010744fd64b9b71a7d44ab080b.png amp;quot; data-rawwidth= amp;quot;1321 amp;quot; data-rawheight= amp;quot;574 amp;quot; >

3.2 核心思路这是我们这次参赛的一大亮点和创新点,就是成功地在深度学习上应用了一种类似于 adaboost 的做法,通过训练多层来不断修复前面层的偏差。我们在分析数据的时候发现,一个模型的输出是具有类别倾向性的,所以在某些类别上可能全对,而在某些类别上可能全错,所以我们针对这种偏差做了一些改进,通过人为地定义偏差的计算方式,指导下一层模型更多关注那些错的多的类,从而达到整体效果的提升。amp。lt。img src= amp。quot。static . leiphone/uploads/new/article/pic/201709/b55 CFF 010744 FD 64 B9 b 71 a 7d 44 ab 080 b . png amp;quot。数据-rawwidth= amp。quot。1321安培。quot。数据-rawheight= amp。quot。574安培。quot。> 3.2核心理念这是我们竞赛的亮点和创新之一,即我们在深度学习中成功应用了类似adaboost的方法,并通过多层训练不断修正前一层的偏差。当我们分析数据时,我们发现模型的输出是面向类别的,因此在某些类别中可能是正确的,而在某些类别中可能是错误的。因此,我们对这种偏差做了一些改进,通过人为地定义偏差的计算方法,可以引导下一个模型更加关注那些错误较多的类,从而提高整体效果。

2017 知乎看山杯从入门到第二

amp;lt;img src= amp;quot;static.leiphone/uploads/new/article/pic/201709/14b034a4d39f69912467889f37f5751d.png amp;quot; data-rawwidth= amp;quot;1833 amp;quot; data-rawheight= amp;quot;828 amp;quot; >

通过用这种方法,单模型 score 有了质的飞跃,平均提升都在 1.5 个百分点(fasttext 因模型过于简单,提升空间有限),而 10 层的 rnn 则更是在用全部训练集 finetune 之后,分数直接从 0.413 飙升到 0.42978,可谓真是用单模型探索数据的极限了。amp。lt。img src= amp。quot。static . leiphone/uploads/new/article/pic/201709/14 b 034 a 4d 39 f 69912467889 f 37 f 5751d . png amp;quot。数据-rawwidth= amp。quot。1833安培。quot。数据-rawheight= amp。quot。828安培。quot。>通过使用这种方法,单个模型的得分有了质的飞跃,平均提高了1.5个百分点(fasttext太简单,提高空空间有限),而10层的rnn使用了所有的训练集finetune,得分直接从0.413上升到0.42978,可以说是真正使用了。

2017 知乎看山杯从入门到第二

amp;lt;img src= amp;quot;static.leiphone/uploads/new/article/pic/201709/5d4b7030181fd9f64e475b072f28122c.png amp;quot; data-rawwidth= amp;quot;1696 amp;quot; data-rawheight= amp;quot;479 amp;quot; >

这种方法的优势在于,一般只要不断加深训练层数,效果就会提升,但缺点却在于它抹平了模型的差异性,对于模型融合效果不友好。amp。lt。img src= amp。quot。static . leiphone/uploads/new/article/pic/201709/5 D4 b 7030181 FD 9 f 64 e 475 b 072 f 28122 c . png amp;quot。数据-rawwidth= amp。quot。1696安培。quot。数据-rawheight= amp。quot。479安培。quot。>这种方法的优点是只要训练层不断加深,效果就会得到改善,但缺点是平滑了模型的差异,不利于模型的融合效果。

2017 知乎看山杯从入门到第二

3.3模型融合模型融合依赖于差异,过去我们模型的差异几乎已经消除,所以我们找到了另一种方法,并使用了另外两种方法:

将输入从word改为char,虽然单一的char模型并不有效,但是整体的集成可以提高很多

人为定义不同的偏差计算方法

最终模型主要是五个10层模型的概率加权融合,得分为0.43506。

4.结束语这次比赛收获很大。总而言之:

数据预处理非常重要

模型不一定是最重要的。我们必须尝试其他方法,我们不能训练没有大脑的模型,特别是对于深度学习的“黑箱”

游戏的心态应该是平的,学习的心态应该保持

最后,我要感谢智虎等组织此次比赛,也感谢北邮模式识别实验室的大力支持!

雷锋文章版权所有。严禁擅自转载。详情请参考转载说明。

标题:2017 知乎看山杯从入门到第二

地址:http://www.hcsbodzyz.com/hcxw/10452.html