第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,单向编码器表示),仅通过最后一个编码器层后接一个线性层来进行预测。这可能是一个错误。
嵌入层
- Question_id(题目ID)
- Prior question correctness(上一题是否答对)
- Timestamp difference between bundles(题目组之间的时间戳差值)
- Prior question elapsed time(上一题耗时)
- Prior question explanation(上一题是否有解析)
- Tag cluster(标签聚类),感谢 @spacelx
- Tag vector(标签向量)
- Fixed pos encoding(固定位置编码),与《Attention is All You Need》中的一致
主要改进点
- 仅使用 Encoder,这有点愚蠢且是个错误。我认为这让我损失了几个排名。
- 使用固定位置编码,这允许使用更长的序列重新训练模型。
- 嵌入层后接 Layer Norm 和 Dropout。
- 损失权重偏向靠后的位置,使用
np.arange(0,1,1/seq_length)*loss。
未能解决的错误
- 组内泄漏,我实现了一个很好的任务掩码,但它反而让我的分数降低了,可能是因为缺少解码器。我最终只使用了自回归掩码。
- 推理和训练期间的前几个位置可能有错误的时间戳差值,因为我简单地使用了
t[1:]-t[:-1]。
结语
欢迎提问。这是一份非常简短的总结。