416. Riiid Answer Correctness Prediction | riiid-test-answer-prediction
首先,感谢主办方举办这场精彩的比赛!这是我参加过的最艰难的比赛之一,但付出的努力非常值得。
我们团队(tito @its7171 和 nyanp @nyanpn)的预测模型由以下模型组成:
对这些模型进行简单的融合得分达到了 LB 0.814 / Private 0.816。
我们将整个 train.csv 数据转换为 hdf5 格式,并且只将推理过程中出现的 user_id 加载到 numpy 数组中(与将整个训练数据保存在 RAM 中相比,节省了 97% 的 RAM)。我们估计 hdf I/O 带来的开销约为 45 分钟。这些开销使我们能够将 tito 的大型 Transformer 与 nyanp 的特征工程流水线结合起来。

这是一个仅包含编码器的 Transformer 模型,基于 @claverru 的 nice kernel。
answered_correctly 进行训练和预测。嵌入或稠密形式通过交叉验证(CV)决定。
为了避免在集成时多次调用 model.predict() 带来的开销,我制作了一个连接四个模型的组合模型。
inputs = tf.keras.Input(shape=(input_shape, n_features))
out1 = model1(inputs[:,-window_size1:,:])
out2 = model2(inputs[:,-window_size2:,:])
out3 = model3(inputs[:,-window_size3:,:])
out4 = model4(inputs[:,-window_size4:,:])
combo_model = tf.keras.Model(inputs, [out1,out2,out3,out4])
为了防止泄露,除了上三角注意力掩码外,我还对每个 task_container_id 开头以外的问题的损失进行了掩码处理。在训练期间,每个批次中具有相同 task_container_id 的问题被混洗,并调整损失权重以减少掩码的影响。这个掩码使 LB 提高了 0.0003。
(注意:我认为间接泄露仍然存在,但我花了 80% 的时间在 LightGBM