返回列表

5th place solution

540. Learning Equality - Curriculum Recommendations | learning-equality-curriculum-recommendations

开始: 2022-12-15 结束: 2023-03-14 个性化学习 数据算法赛
第5名解决方案

第5名解决方案

作者: Nikita Churkin (Grandmaster)
比赛: Learning Equality - Curriculum Recommendations

首先,感谢 Kaggle 和 The Learning Agency Lab 提供了这个有趣的问题,也感谢各位 Kagglers 带来的激烈竞争!

你可以在这里找到推理代码示例 Notebook:https://www.kaggle.com/code/churkinnikita/lecr-example-0-705-public
它仅使用了 1 个 [SBERT + LightGBM] 模型,获得了 0.705 Public LB / 0.741 Private LB 的成绩,并在最终排行榜上排名第 11 位。

验证设置

从 LB 探测中我们知道测试集中大约有 9% 的新频道(图),所以我尝试模拟这种逻辑。

我创建了一个 7 折交叉验证方案,其中对于每个训练折,对应的验证折中包含 9-10% 的未见过的频道。但我并没有一直使用 7 折,而是大部分时间使用 1 折或 2 折来快速检查改进效果。这与 Public LB 的相关性非常完美。过了一段时间,我切换到了经典的 5 折方案(仅基于 topics ids),因为这种方式在 Public LB 上效果更好(训练集和测试集是混合的)。对于 Stage2 模型,我使用了完全相同的折进行验证。在计算 F2 分数时,我只过滤了“非源”数据。

第一阶段 (Stage 1)

我主要使用了 SBERT 包来训练 Stage1 模型。

我的解决方案包括使用 2 个模型:针对每种语言进行长时间训练(250 个 epoch)的 paraphrase-multilingual-mpnet-base-v2,以及针对英语语言(仅在英语子集上学习)训练时间较短的 all-distilroberta-v1。完整的解决方案架构如下图所示:

Solution Scheme

选择了 MegaBatchMarginLoss 作为损失函数,批次大小在 270-310 范围内效果最好。

主题的文本输入根据以下公式计算:
topic_text_input = language + channel + category + level + topic_title + topic_description + context(aka breadcrumbs) + parent_description + cousines_titles + children_titles

内容的输入则简单得多:
content_text_input = language + kind + content_title + content_description + content_text

我制作了一个草图来说明主题文本输入的样子:

Topic Tree Illustration

在训练期间,我对“源”和“非源”数据使用了不同的权重(分别为 0.35 和 0.65),以便更频繁地采样“非源”实例:它们对模型来说更难正确预测。

新的 Lion 优化器开箱即用,带来了非常好的优化结果,但经过精心调优的老牌 AdamW 在最终 F2 分数上更胜一筹(但需要更长的训练时间)。

训练 250 个 epoch 非常漫长:1 折大约需要 40 小时。为了能在截止日期前完成计算,我甚至买了 RTX 4090,但最终还是没能做到:对于 250 epoch 的模型,我只计算了 3 折(共 5 折)以及全量数据模型。

第二阶段 (Stage 2)