返回列表

21st place solution

386. Tweet Sentiment Extraction | tweet-sentiment-extraction

开始: 2020-03-23 结束: 2020-06-16 自然语言处理 数据算法赛
第21名方案

第21名方案

作者: Dracarys | 比赛排名: 第21名

大家好,首先我要感谢我优秀的队友 @ryoya0902@mks2192@shahules@kpriyanshu256,感谢你们带来如此有趣的比赛旅程。同时祝贺所有的获奖者!

这是一场很棒的比赛,我们在这场比赛中投入了大量时间,很高兴所有的努力最终都有了回报。

有效的方案总结

  • 使用 RoBERTa base 作为基础模型,设置 MAX_LEN = 168。
  • 使用了预处理(这将我们的本地 CV 从 0.711 提升到了 0.717)。
  • 训练了 8 折(在我们的情况下,8 折给出了更好的 CV 结果)。
  • 最后我们使用了所谓的“魔法”(后处理)(将我们的 LB 从 0.717 提升到了 0.724)。
  • 此外,在每个 epoch 中进行多次验证也提高了我们的 CV。

无效的尝试

  • 我们尝试将此问题作为 NER(命名实体识别)任务来解决,也尝试了无监督文本选择,但都没有效果。
  • 我们尝试了各种模型架构,但除了 roberta-base 之外,其他效果都不好。
  • 我们尝试针对每种情感训练单独的模型,但也失败了。
  • 我们还尝试了许多预处理技术,例如移除所有噪声样本、清洗文本等,但都无效。
  • 我们也尝试了 BERTweet,对我们来说也没用。
  • 我们还尝试了同义词替换等数据增强方法。
  • 数据增强的内核可以在这里找到。

有效的预处理方法

我们知道样本中存在大量的噪声,主要表现为单词之间存在额外的空格,例如:

文本: is back     home gonna miss every one
选中部分: onna
预处理后: miss

  • 关键在于你需要根据额外空格的数量来移动起始和结束索引。
  • 预处理内核可以在这里找到。

训练

  • 应用预处理后,我们将模型训练了 8 折。
  • 我们使用了与 @abhishek 分享的相同的模型架构。
    注意:需要清理训练内核,很快会分享。

推理

  • 从模型获得 selected_text 后,我们应用了后处理,这其实就是上面分享的预处理内核的逆向工程。
  • 这与这里讨论的内容几乎相似。
  • 最终的推理内核可以在这里找到。

最后,我要感谢 @abhishek@cdeotte 提供的精彩入门内核以及他们无私分享的精神,这对其他 Kaggle 参赛者帮助很大。

同比赛其他方案