返回列表

37th place solution (Transformer part)

416. Riiid Answer Correctness Prediction | riiid-test-answer-prediction

开始: 2020-10-05 结束: 2021-01-07 学习效果预测 数据算法赛
第37名解决方案 (Transformer部分)

第37名解决方案 (Transformer部分)

作者: Dean (m10515009) | 比赛排名: 第37名

首先,我要感谢主办方和Kaggle举办这次比赛。此外,感谢 @vk00st 邀请我们合并组队,以及其他队友 @unkoff@arvissu@syxuming,我们有着很棒的团队合作。

我还要感谢 @manikanthr5@wangsg@leadbest 提供的优秀 SAKT starter notebook。如果没有这些资源,我无法独自实现 Transformer 模型。

我将我们类似 SAINT+ 的模型细节总结如下。

输入特征

  1. content_id (内容ID)
  2. response (回答是否正确)
  3. part (部分)
  4. prior_question_elapsed_time (上一题耗时)
  5. prior_question_had_explanation (上一题是否有解释)
  6. lag_time1 - 将滞后时间转换为秒。如果 lag_time1 >= 300,则设为 300。
  7. lag_time2 - 将滞后时间转换为分钟。如果 lag_time2 >= 1440,则设为 300 (一天)。
  8. lag_time3 - 将滞后时间转换为天。如果 lag_time3 >= 365,则设为 365 (一年)。

将滞后时间拆分为不同的时间格式,分数提升了约 0.003。

区分零填充

  • 为了区分零填充和 content_id 的零值,我给 content_idprior_question_had_explanationresponse 都加了一。这有助于模型区分零填充和实际特征。分数提升了约 0.003。
q_ = q_+1
pri_exp_ = pri_exp_+1
res_ = qa_+1

Transformer

编码器输入
  • 题目嵌入
  • 部分嵌入
  • 位置嵌入
  • 上一题是否有解释嵌入
解码器输入
  • 位置嵌入
  • 回答嵌入
  • 上一题耗时嵌入
  • lag_time1 类别嵌入
  • lag_time2 类别嵌入
  • lag_time3 类别嵌入
  • 注意:我在上一题耗时和滞后时间上尝试了类别嵌入和连续嵌入。类别嵌入的性能优于连续嵌入。
Transformer 参数
  • 最大序列长度: 100
  • 模型维度 (d model): 256
  • 编码器层数: 2
  • 解码器层数: 2
  • 批大小: 256
  • Dropout: 0.1
  • 学习率: 5e-4 (使用 AdamW 优化器)

模型融合

  • LGBM + Catboost + 三个 Transformer
  • LGBM + 两个 Transformer

结果

  • 最终,我们团队的 LGBM 公开榜单分数为 0.794,Transformer 公开榜单分数为 0.799。
  • 通过融合,公开榜单分数达到了 0.804。
同比赛其他方案