386. Tweet Sentiment Extraction | tweet-sentiment-extraction
首先,感谢 Kaggle 举办这次比赛,并祝贺所有的获奖者!
其实我在比赛刚开始时就注意到了它,但直到最后一个月才开始真正着手工作。但这一个月对我来说其实太长了,因为我在10天内就很快耗尽了思路。更糟糕和令人沮丧的是,排行榜(LB)非常不稳定。我真的差点就要放弃了,直到有人在论坛上发帖说有一种“后处理魔法”。幸运的是,经过一天的努力钻研,我发现了这个魔法,并在2天内完善了它。
然而,在最后的两周里,我还是有点放弃了,转而去玩电脑和视频游戏。因为我预计到比赛结束时,金牌区会被0.73分的成绩淹没。而且会有严重的震动,我没有任何出色且稳健的思路。要真正确保金牌席位,基本上需要达到公开分0.74,我认为这对我来说是不可能的。
好吧,最终的结果对我来说还不错。这是我第一次获得单人金牌。如果我太努力并过度拟合排行榜,谁知道会发生什么呢。:)
我将用以下样本来解释这个魔法:
's awesome' = 原始答案 = answer_' He`s awesome... Have you worked with him before? He`s a good friend.' = 原始文本 = text_'He`s awesome... Have you worked with him before? He`s a good friend.' = 无额外空格 = text'awesome' = 真实答案 = answer其实理论非常简单,当原始文本中答案结束位置之前存在额外的空格时,就会发生偏移(噪声)。
假设 answer = text[s:e],那么 answer_ = text_[s:e+2]。
代码其实也非常简单:
def post_processing(answer, text, text_):
if len(text_) > 0:
answer = answer.strip().lower()
text = text.lower()
p = find_(text_, " ")
q = find_(text, answer)
if text_[0] == " " or 0 <= p <= q + len(answer) - 2:
answer = text_[q:q + len(answer) + 2]
return answer
我认为这至少有99%是正确的。当然也有一些例外,因为它们原本就是错的。
我基本上只是融合了几个在架构和清洗方面有细微差别的模型。抱歉让你失望了。:)
'He`s awesome'。公开 LB:0.714但是,如果我们去掉所有与魔法相关的东西,也就是说,移除预处理和模型4,我能得到多少分?
嗯,我可以告诉你,模型1 + 模型2 + 模型3:公开 LB:0.718。而且别忘了还有0.002的震动下调。(我认为这很幸运!)所以,认真地说,铜牌确实是一个乐观的估计。
我必须把预处理代码放在