592. Linking Writing Processes to Writing Quality | linking-writing-processes-to-writing-quality
编辑1:效率赛道排名 → 11
我非常高兴能挺过竞赛调整阶段,并期待看到效率赛道的结果!
首先,我要感谢所有参与本次竞赛的人,特别是社区中那种协作精神总是令人欣慰!在比赛中,我同时关注了效率赛道和性能赛道,因为我在之前的比赛中采用过这种方法并取得了不错的经验,因此我将在这篇总结中一并讨论。
我的最终提交主要是公共笔记本的集成。我引入的一个新增项是在重建的文章上使用的Deberta-v3-xsmall transformer模型。公共笔记本的集成使我的公开LB分数达到0.577,而transformer使我的LB分数达到0.576,并且极大地提升了CV分数。
集成包括了来自公共笔记本和transformer的模型混合:投票回归器、融合、GAN和一个Transformer。最终的预测是这些模型的加权平均,经过精心平衡以优化性能。
y_pred_ensemble = vote_pred * 0.45 + gan_pred * 0.05 + transformer_pred * 0.15 + automl_pred * 0.05 + biglgb_pred * 0.05 + hugelgb_pred * 0.15 + fusion_pred * 0.1
这里的方法是创建文章,找到常见的匿名化单词,并将它们添加到一个分词器中,然后训练模型。我冻结了Deberta-v3-xsmall的前6层(共12层),但没有冻结词元嵌入,因为新词元在初始化时没有有用的嵌入。该实现受到了一个来自之前比赛的流行笔记本的启发。我只在比赛提供的少量文本上训练了模型,但我认为通过在不同的匿名化文本上预训练q嵌入可以极大地改进这一点(由于时间限制没有完成,而且这样做也有点偏离比赛的精神)。
important_anon_words = {word: count for word, count in word_counts.items() if count > 100}
important_anon_words = {k: v for k, v in important_anon_words.items() if len(k) > 1}
tokenizer.add_tokens(list(important_anon_words))
inputs = tokenizer("qqqq qq qqq?", return_tensors="pt")
# 添加词元前
print("'input_ids':", tensor([[ 101, 1053, 4160, 4160, 4160, 1053, 4160, 1053, 4160, 4160, 1029, 102]]))
# 添加词元后
print("'input_ids':", tensor([[ 101, 30525, 30523, 30550, 102]]))
在这里,我部署了一个5折x5模型集成,使用了CatBoost、XGB、LGBM、线性SVR和Ridge。最终与投票回归器非常相似,只是在特征选择和模型选择上有一些差异。它运行时间在2分钟以内。
特征加载占用了大量时间,重点是优化特征选择以提高效率。我使用了Silver Bullet特征,根据LGB在CV折上的特征重要性抛弃了不太相关的特征。在推理过程中,只有几秒钟用于模型运行。
我注意到这次每一秒都很重要,基于观察到的效率LB的差异。我认为他们采用了类似0提交作为基础计算,这会导致580和579之间的差异,如果最低分数是570:
效率方程的第一部分:(580-579)/(3700-560) ⇒ 在这种情况下,LB上0.001分的差异相当于效率分数中的1/3140,相当于大约10秒的运行时间(基于效率方程的第二部分)!
我的2分钟提交在私有测试上得了571分,所以真的希望能足以获得一个好名次!
我最终使用了5折CV,一半数据用于训练,另一半作为测试集(轮换进行)。这样你可以使用早停,并看到通过集成各折带来的性能提升,同时仍然能在无偏的集上看到性能,当训练用于推理的最终模型时,你可以切换到使用所有数据进行训练。
一些方法极大地提升了CV,比如在线性提升模型集成中加入Ridge或线性SVR,但并没有转化为LB上的大幅提升。
我认为原因可能是测试集上的分布偏移,这对回归模型来说可能更难处理。它们默认不会自动限制在一个范围内。例如,你可能会看到它们在CV上预测负数。我尝试在两个赛道上使用后处理来缓解这些问题,但 sadly nothing worked really well. 我希望 once more write-ups appear this will clear up.
良好的交叉验证非常重要,我在一开始摸不着头脑。
组队来覆盖更多的思路会更好,我发现自己无法 pursue 很多好的思路,我原本希望 solo gold for GM because I was really optimistic but that was probably a missed team gold instead.