返回列表

20th solution, transformer encoder only model (SERT) with code and notebook

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

开始: 2020-10-05 结束: 2021-01-07 学习效果预测 数据算法赛
第20名方案:Transformer Encoder Only 模型 (SERT)

第20名方案:Transformer Encoder Only 模型 (SERT) 含代码与Notebook

作者:Shujun | 比赛排名:第20名

感谢主办方举办了一场几乎没有排名动荡的比赛。这总是很令人欣慰。我要感谢 @wangsg 和 @leadbest 提供的入门 Kernel。如果没有这些,在这个高难度的比赛中我可能无从下手。

架构

我使用了仅包含 Transformer Encoder 的 SERT(SIngle-directional Encoder Representation from Transformers,单向编码器表示),仅通过最后一个编码器层后接一个线性层来进行预测。这可能是一个错误。

嵌入层

  1. Question_id(题目ID)
  2. Prior question correctness(上一题是否答对)
  3. Timestamp difference between bundles(题目组之间的时间戳差值)
  4. Prior question elapsed time(上一题耗时)
  5. Prior question explanation(上一题是否有解析)
  6. Tag cluster(标签聚类),感谢 @spacelx
  7. Tag vector(标签向量)
  8. Fixed pos encoding(固定位置编码),与《Attention is All You Need》中的一致

主要改进点

  1. 仅使用 Encoder,这有点愚蠢且是个错误。我认为这让我损失了几个排名。
  2. 使用固定位置编码,这允许使用更长的序列重新训练模型。
  3. 嵌入层后接 Layer Norm 和 Dropout。
  4. 损失权重偏向靠后的位置,使用 np.arange(0,1,1/seq_length)*loss

未能解决的错误

  1. 组内泄漏,我实现了一个很好的任务掩码,但它反而让我的分数降低了,可能是因为缺少解码器。我最终只使用了自回归掩码。
  2. 推理和训练期间的前几个位置可能有错误的时间戳差值,因为我简单地使用了 t[1:]-t[:-1]

结语

欢迎提问。这是一份非常简短的总结。

同比赛其他方案