首先,我要衷心感谢竞赛主办方。这是一场非常棒的竞赛!我在Kaggle上确实度过了一段快乐的时光!同时,也非常感谢分享的notebooks和宝贵的讨论,从中我获得了许多灵感和启发。
我实际上并不是一个拥有各种经验和调优技能的NLP专家,因此我能走到这一步感到非常幸运。还因为这次运气眷顾了我(这种情况并不常发生,:p)。
和其他许多优秀解决方案一样,我的模型实际上非常简单:deberta-v3-large。但达到这个结果的过程却相当曲折。
我的解决方案
- 输入:
将配对输入标记化:摘要文本 和 提示标题 +[SEP]+ 提示文本 +[SEP] + 提示问题prompt = sep.join([data["prompt_title"], data["prompt_text"], data["prompt_question"]]) tokenized = tokenizer( data['text'], prompt, padding=False, truncation=True, max_length=config.max_seq_length, ) 模型:
deberta-v3-large。和大家一样 :P。我也尝试过其他模型:deberta-v3-large-squad2, deberta-v3-base最大长度:
我尝试了不同的最大长度,最终模型使用1600。模型设置和超参数:
学习率:经过多轮超参数调优后,我发现6e-6最佳
训练轮数:4轮
权重衰减:经过超参数调优后,使用1e-4
预热比例:0
批量大小:训练和评估均为2(由于GPU内存限制,无法使用更大的批量)
学习率调度器类型:余弦
优化器:adamw
我也尝试冻结部分层,但没有提升本地CV,因此最终模型没有冻结任何层。
没有使用dropout,没有使用额外的池化。
此外,我发现本地CV和公开LBs与训练时的最大长度呈正相关。后来私有LB证明了这一点。最大长度更大的模型往往在私有LB上表现更好。CV结果和集成:
最佳私有LB模型的CV得分:0.5513(fold 814d6b),0.4587(fold 39c16e),0.5038(fold 3b9047)和0.4316(fold ebad26)
最终模型是4个fold模型的简单集成。
我实际上考虑过使用上述设置在完整训练集上训练模型。但最终我选择了对不同fold的模型进行集成。这可能不是最佳实践,但给了我更好的机会来发现CV与公开LB之间的关系。
公开LB:0.429
私有LB:0.458
没有效果的方法
MLM没有效果
这实际上是我在本次竞赛中的重大失误。我理所当然地认为在之前的commonlit数据集上使用deberta的MLM会提升CV。基于这个想法,我实际上花费了整个八月和九月上半月只训练经过MLM预训练的模型。然而,我通过MLM获得的最好模型的本地CV为0.5449、0.4782、0.5182、0.4473,公开LB为0.445。此后再也无法提升。
直到九月第三周,我才推翻一切,重新开始,不再使用任何MLM预训练,最终得到了上述描述的模型。手动生成的伪分数数据集可以加速训练过程,但会导致过拟合
在竞赛接近尾声时,我想到了扩展训练数据用于预训练任务的方法。具体做法如下:- 扩展训练数据的小部分:我从commonlit网站下载了一些文本作为提示文本和问题作为提示问题。然后使用gpt-4生成摘要文本,让机器模仿学生的写作方式。伪分数由当时我创建的最佳模型给出。这给了我大约300个额外的训练样本。
- 扩展训练数据的主要部分:不依赖任何提示文本,我直接使用之前commonlit竞赛中学生写的文本,并让我最好的模型为其评分。这给了我约4000个额外样本。
我希望这能解释您的疑虑 @kononenko :p。
我使用扩展数据进行了预训练任务。我获得了更好的本地CV结果和更快收敛的网络。然而,公开LB并没有提升,最终私有LB甚至变得更差 :(。这可能导致过拟合(很好的教训)。因此我的最终模型没有在这个数据集上训练。
- Lightgbm没有效果
我没有深入探究为什么lgbm没有效果。我原本以为它可以提升我的CV。
如果时间充裕,我想尝试的事情
- EMA
我在竞赛早期尝试过EMA,但那是使用经过MLM预训练的模型。它没有提升本地CV,所以我甚至懒得提交。如果时间充裕,我想在未经MLM预训练的模型上尝试EMA。 - 分层差异学习率
和EMA一样,我只在早期模型中应用过,但没有提升本地CV。 - 尝试更多最大长度的设置
我尝试过的模型总结
*所有LB均为4个fold的集成结果
| 模型名称 | 备注 | 本地CV | LB | 私有LB |
|---|---|---|---|---|
| Model 2308 | 使用MLM预训练,预训练和训练最大长度均为1536 | 0.5449, 0.4782, 0.5182, 0.4473 | 0.445 | 0.481 |
| Model 2708 | 使用最大长度2048的MLM预训练,模型训练最大长度1536 | 0.5778, 0.4598, 0.5305, 0.4369 | 0.451 | 0.466 |
| Model 3008 | 使用MLM预训练,预训练和训练最大长度均为2048 | 0.5532, 0.4706, 0.5226, 0.4383 | 0.447 | 0.471 |
| Model 1009 | 使用MLM预训练,训练中使用EMA | 0.5631, 0.4728, 0.5201, 0.4407 | 未提交 | 未提交 |
| Model 2609(最佳模型) | 无预训练,最大长度1600 | 0.5513, 0.4587, 0.5038, 0.4316 | 0.429 | 0.458 |
| Model 0810 | 使用不完整扩展数据集预训练,最大长度1600 | 0.5363, 0.4454, 0.4974, 0.4314 | 0.431 | 0.474 |
| Model 1010 | 使用完整扩展数据预训练,最大长度1600 | 0.5199, 0.4451, 0.4958, 0.4356 | 0.458 | 0.469 |
| Model 0810 + lgbm | 使用完整扩展数据预训练,最大长度1600,加上lgbm | 0.6154, 0.4695, 0.4990, 0.4391 | 0.435 | 0.47 |
如您所见,除少数情况外,我的公开LB和私有LB在某种程度上是相关的。