点击蓝字关注我吧~
从刚结束kaggle比赛 jigsaw toxic看迁移学习+零样本文本分类。

kaggle上jigsaw办过4届文本分类的比赛了,这四届比赛都是垃圾话识别,外国佬有意思,把垃圾话叫toxic毒性话。
工业界类似的场景是质检,情感分类,内容审查等。

回到正题,回复toxic获取完整代码
地址: https://www.kaggle.com/c/jigsaw-toxic-severity-rating/overview
第一届是18年,那时候还没有Bert,第二届Bert 已经开始乱杀了。第三届是多语种的垃圾话识别。你可以从这个文章看出一些演进的蛛丝马迹从Kaggle看文本分类技术演进。
第四届出题人别出心裁,直接不给训练数据了。告诉你随便找数据。我给一份小小的验证集,这还是挺不符合kaggle的画风的。
可以说是一个不那么严格的零样本+迁移学习各一半的比赛吧。
注意,出题人还挖了个坑,给的相对标签验证数据,每一行有两个句子,标签是哪个更toxic,全都是public的leak数据,相当于全排名的句子对采样。
所以有人就在过拟合的路上越走越远。
这个题开榜的shake程度,不亚大地震了…
如果没有xuguanshuo两次提交,冲到第一,那这个比赛基本就废了。xuguanshuo目前是kaggle总榜第二名,曾经当过榜一,大佬中的巨佬。
我们看看他的方案吧。代码已经全部开源了,很有学习价值。
整体分三步走
1.利用2018年和2019年的jigsaw数据和当时的标签建模。当时的标签是细分的垃圾话种类。分别是6个标签和7个标签用来建模。
2.利用第一步中的训练模型,对第四届的比赛进行预测,然后在多个标签上,使用遗传算法进行融合参数搜索,算出一个加权参数。这个加权参数的优化目标是验证数据的分数最大。
这部分如果看不懂的话,可以参考我之前写的文章
核心代码逻辑:

from
 geneticalgorithm 
import
 geneticalgorithm 
as
 ga


defloss_func(wt):
        less_toxic_score = np.zeros((len(less_toxic_pred), ), dtype=np.float16)

        more_toxic_score = np.zeros((len(more_toxic_pred), ), dtype=np.float16)

for
 i 
in
 range(
6
):

            less_toxic_score += less_toxic_pred[:,i]*wt[i]

            more_toxic_score += more_toxic_pred[:,i]*wt[i]

return1.0
 - np.mean(less_toxic_score<more_toxic_score)


    varbound=np.array([[
0
,
4
]]*
6
)


    model=ga(function=loss_func, dimension=
6
, variable_type=
'int'
, variable_boundaries=varbound)


    model.run()

    best_wt=model.output_dict[
'variable'
]


### validate result again
    less_toxic_score = np.zeros((len(less_toxic_pred), ), dtype=np.float16)

    more_toxic_score = np.zeros((len(more_toxic_pred), ), dtype=np.float16)

for
 i 
in
 range(
6
):

        less_toxic_score += less_toxic_pred[:,i]*best_wt[i]

        more_toxic_score += more_toxic_pred[:,i]*best_wt[i]

    print(np.mean(less_toxic_score<more_toxic_score))

3.用1中的模型,2中的加权融合参数,去对线上数据的做分数推断,最后把15个模型融合起来。
这个方案整体保证了CV足够准,方案足够泛化,用已有数据的先验能力,建模做线性加权。
关于这个话题,更多的内容可以看我之前写的一文破解机器学习里的bias
这样两次直接提交,破解bias,直接命中第一也不足为奇了。
当然大佬也是有策略的,这种情况的数据和排行榜不建议投入过多精力,选择自己相信的最稳妥的方案,一击毙命。
除此之外,我历史也写过一些相关话题:

其他精彩文章翻阅公众号历史文章
包包算法笔记是包大人在班车通勤上,进行知识,职业,经验分享的地方。最白的话讲专业的知识。
回复 
面试系列
 获取 算法面试三板斧。

回复 段子系列 获取 ....
继续阅读
阅读原文