Kaggle比赛 (Quora Insincere Questions Classification)

1. Abstract

Quora是问答SNS网站,可以看作是国内的知乎.在该网站上有很多不同的问题需要大家解答,但是里面存在很多色情,种族歧视,辱骂等的问题(例如如何人体自交,如何跟小姨子***等令人大开眼界的问题).所以Quora举办了这个比赛来让kaggler来做一个二分类的模型将insincere questions找出来.衡量结果的指标为F1 score,这十分符合比赛的要求,毕竟实际应用中我们应该给出的hard value,而不是probability. 比赛限制条件也很多: 只允许kernel submit, 使用CPU运行最多只允许6个小时, 使用GPU运行最多只允许2个小时,不能引入外部数据.

2. Final LeaderBoard:

38th,第一次杀入前1%. 难免有些小激动, 但其实运气占比比较大, 仍需要想大家学习各种调参和特征工程的知识.

3. My main work:

Model Strutruct

QIQC Model

这是我主要使用的模型. 比赛的最后结果使用5-fold训练5个模型比将其预测结果平均融合.

Embedding weight

embedding的权值:0.5 * glove+0.4 * para+0.1 * wiki
。权值获取方式如下: 首先获得句子当中关于3个embedding的向量x, shape为(batch_size, maxlen, embed_size, 3)。将weight(shape: (3, ))进入softmax层在与tensor x点乘得到的embedding.我将数据分为5-folds, 每个fold都获得embedding weight对其求平均值作为最终的embedding weight. 简单来说embedding的权值获取的方式为数据驱动.

Word embedding

首先我尝试word保留大小写, 然后通过预训练词向量获得其word vector. 没有匹配到的, 再将word进行: lower upper capitalize处理来寻找对应的word vector. 假如没找到就随机生成该vector. 但这总做法的效果不佳, 我猜测的主要原因是: 存在一些奇奇怪怪的拼写方式如: "tHe", "ThE".我再查找原文发现它们本来的意思就是"the".但在glove里面却找到对应的embedding vector.而这些单词出现的次数相对比较少,所以在训练glove的时候他们的置信度未必有"the"高,而且它们的意思就是一样.于是我将他们都变为lowcase.

Data Cleaning

  1. 用空格将一些奇奇怪怪的字符用空格分割开
  2. 将一些拼写有误或者在embedding当中找不到的word进行替换
  3. 数字用空格分割开

单词替换要注意要尽可能与原来的意思相近, 这个kernel将很多有问题的单词都转换成同义词,除了外文翻译没有做:More Text Cleaning To Increase Word Coverage. 其查找方法是Bad case analysis, 只说人工智能还是要先人工后智能.

Fitting

比赛中,我使用了Adam作为优化器, 比采用了CyclicLR作为lr的更新其. 假如CyclicLR调参调得好,会加速模型收敛速度. 所以也是很玄学的.

CV Evaluation

在discussion上, 大家都在苦恼应不应该trust local cv. 但很多人都只是trust single model local cv, 而不是trust ensemble model local cv. 对于前者评估的是single model, 后者评估的是ensemble model. 比赛最后使用的ensemble, 那应该做ensemble model local cv. 方法如下: 我们将training set分为k-folds, 然后将需要融合的模型都训练一遍并将预测结果融合,这样就得到一个fold的预测结果,如此类推.另外我使用的corr去看fold训练出来的相似度, 希望模型好而不同.我这种做法其实很危险, 毕竟split folds带有随机性, 越多随机因子, 最后结果越不稳妥.

Loss Function

我尝试使用Focal loss去做, 得到的single model local cv很不错,有0.712.但是别忘记刚刚说的,这只是single model local cv,而不是ensemble model local cv. 最后由于时间关系没有做其ensemble local cv, 但我觉得认真调一下参或许能比Binary Cross Entropy好一些.

3. Other Solutions:

1st:

  • Fixed Threshold: 对所有模型预测结果的probability进行排序并将其平均, 然后计算每个fold的最佳F1与在不同的threshold下平均排序得到的F1的偏差. 使用偏差较少的threshold作为Fixed Threshold
  • 为了加快训练速度,采用了动态pad_sequence, 以batch_size为单位, 来确定其max_len. 这个在tensorflow里面使用dynamic_rnn.

2rd :

  • Embedding不像大家那样使用平均求和或者权值加和等, 它的word embeddings有[glove embedding 300d,
    wiki embeddings 300d, 使用fasttext训练出来的64d, 4 binary features], 整个word embeddings大小为(nb_words, 668)
  • 与1st一样使用了动态pad_sequence.

3rd:stemmer, lemmatizer, spell correcter, lower, title 等找word vector

4rd word2vec fine-tuning & embedding sampling:

比较有意思是他对embedding的处理.

7th place solution - bucketing: 使用tensorflow当中的bucket_by_sequence_length.将模型训练速度提高,其实跟动态pad_sequence也是相似,提高训练速度,增加融合模型的个数. standford当中的slide也有讲25页-28页

10th Meta embedding, EMA, Ensemble:

  • Meta embedding意思是将embedding进行降维度 :
Embedding(max_features, 600)
Linear(in_features=600, out_features=128, bias=True)
ReLU()
GRU(128, 128, batch_first=True, bidirectional=True)
GlobalMaxPooling1D()
Linear(in_features=256, out_features=256, bias=True)
ReLU()
Linear(in_features=256, out_features=1, bias=True)

13th: 没什么特别的看头

15th Solution - focus on models: 主要集中模型融合上.

18th place solution from 300-th at Public LB: 每个epoch逐渐增大batch_size,这个我尝试过效果一般般.

20th: 使用mixed loss(BCE+F1 loss)优化网络,作者也尝试BCE + Lovasz, BCE pretrain and Lovasz fine-tune, BCE pretrain去训练,但结果都没有BCE+F1 loss效果好

22nd Solution - 6 Models and POS Tagging 使用词性标记来消除单词的歧义问题,

27th kernel: 其中一个模型使用了tf-idf作为训练特征

44th solution: Add all the randomness or how to improve your ensemble when all your models suck: 他认为用randomness来降低模型直接的相关度,但我觉得保持模型输出的确定性也是很重要,结果不能复现那也没用

1st place solution (public LB): 这是public leaderboard最高分的结果,他做的其实用脚本通过脚本访问quroa网站上对应的question,假如返回来的HTML有QuestionRestrictedInsincerePrompt,那这个就是有问题的。接着将结果压缩复制到线上kernel,再解出来就是答案。感慨 kaggle其实是通过hack来拿到最佳结果,而不是模型

欢迎各位评论,如有遗留其它好的解决方法后续更新下去。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容

  • 5081c851260e阅读 196评论 0 0
  • “我是一名叫便利店的动物,我不能违背我的本能。” 从小就异于常人的惠子,在同学老师和家长们异样的目光下长大了。 大...
    雅Younger阅读 326评论 0 1
  • 0、基本 上车系好安全带 调整座椅靠背座椅:离合踩到底,膝盖距离车一拳靠背:手腕刚好可以放在方向盘最远处 调整左右...
    老胡聊聊天阅读 824评论 0 2
  • 老螃蟹 我养过一只螃蟹,6年。 邂逅 在一个暑假,大约是2003年,或者是2004年,但一定不会晚于2005年。闲...
    墨村渔夫阅读 793评论 0 0