返回列表

17th place solution - 4 features model

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

开始: 2020-10-05 结束: 2021-01-07 学习效果预测 数据算法赛
第17名方案 - 4特征模型

第17名方案 - 4特征模型

作者: Nikola Bacic | 比赛排名: 第17名

我的方案基于3个模型的堆叠:

更新:代码链接

  • Transformer(Encoder) - 验证集分数: 0.8100
  • LSTM - 验证集分数: 0.8062
  • GRU - 验证集分数: 0.8060

用于堆叠的 LightGBM:验证集分数: 0.8119,线上分数: 0.814x

我在新用户(250万行数据)上进行了验证。这个验证策略虽然很好,但对我来说计算成本太高了。

所有三个模型都使用了4个特征:

  • 题目ID嵌入
  • 上一题的回答情况(1-正确,0-错误)
  • ln(lag+1) * minute_embedding:对 lag 取 ln(x+1) 一开始让我的分数提升了约 0.01。我很想知道这是否也能提升你们的模型效果
  • ln(prior_elapsed_time+1) * minute_embedding

输入是这4个嵌入的总和。

参数设置

共享参数(所有三个模型):

  • max_quest = 300(窗口大小)
  • slide = 150
  • 优化器:Adam
  • 学习率调度器:cosine lr scheduler
  • 损失函数:BCE loss
  • xavier_uniform_ 权重初始化(相比 PyTorch 默认初始化提升了 0.004)

我使用了 Optuna 在 20% 的数据上进行超参数搜索。这是我第一次使用它,它是一个非常棒的工具!

Transformer 超参数:

  • nhead = 8
  • head_dim = 60
  • dim_feedforward = 2048
  • num_encoder_layers = 8
  • epochs = 6
  • batch_size = 64
  • lr = 0.00019809259513409007
  • warmup_steps = 150*5

LSTM 超参数:

  • input_size_lstm = 384
  • hidden_size_lstm = 768
  • num_layers_lstm = 4
  • epochs = 4
  • batch_size = 64
  • lr = 0.0007019926812886481
  • warmup_steps = 100

GRU 超参数:

  • input_size_gru = 320
  • hidden_size_gru = 512
  • num_layers_gru = 3
  • epochs = 4
  • batch_size = 64
  • lr = 0.0008419253431185227
  • warmup_steps = 80

无效尝试:

  • 讲座数据
  • 题目元数据
  • 位置编码:包括可学习和硬编码两种
  • 预测用户回答 而非正确与否
  • 梯度裁剪
  • 标签平滑
  • Dropout
  • ...

gg(结束)

同比赛其他方案