返回列表

[48th place] what worked and what did not work

386. Tweet Sentiment Extraction | tweet-sentiment-extraction

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

[第48名] 有效与无效的方法总结

作者: bluetrain | 排名: 第48名

该解决方案是基于 Abhishek 的精彩内核构建的:
https://www.kaggle.com/abhishek/roberta-on-steroids-pytorch-tpu-training

有效的尝试:

  • 对于中性情感:直接令 selected_text = text。
  • 增加了批次大小 (batch size) (64)。
  • 标签平滑。
  • 修改交叉熵损失函数,以惩罚与真实跨度 的距离(参见此内核:https://www.kaggle.com/laevatein/tweat-the-loss-function-a-bit)。
  • 后处理:用于修正由空格引起的偏移,也就是所谓的“魔法”,见下文 => LB 分数 +0.004。
  • 伪标签 => LB 分数 +0.002。我通过仅使用每次折叠迭代中的训练集样本预测情感和选定文本,从原始数据集中生成了伪标签样本,以避免验证集的数据泄露。我选取了置信度最高的 4000 个正面/负面样本和 2000 个中性样本,置信度基于起始/结束 logits 的和。对于中性伪样本,selected_text = text。
  • 集成:平均 3 个随机种子 5 折模型的 logits + 3 个随机种子在完整训练数据集上运行的模型(增加 1 个 epoch) => LB 分数 +0.001。

无效的尝试:

嗯,除了上述方法外其他都没用,特别是:

  • 数据增强(同义词替换、词语交换、字符替换等)。
  • 正面/负面样本的上采样。
  • 在 Transformer 顶层添加复杂的头部 结构。
  • ...

后处理代码(修正偏移):

def fix_offset(x):
    txt = x['text']
    if txt == '':
        return ''
    pred = x['selected_text']
    new_txt = ' '.join(txt.strip().split())
    start = new_txt.find(pred)
    end = start + len(pred)
    to_end = len(new_txt) - end
    return txt[start: len(txt) - to_end]
同比赛其他方案