第28名方案
第28名方案
作者: conan1024hao | 比赛排名: 第28名
概述
基于基线的思路,我们提出了一种两阶段推理算法来预测 Markdown 单元格的确切位置。
- 第一阶段: 我们首先使用基于排序和基于成对的方法来预测 Markdown 单元格的大致位置。使用了两个基于排序的模型和一个基于成对的模型。我们使用带温度参数的 Softmax 进行集成。
- 第二阶段: 一旦获得了 Markdown 单元格的大致位置,我们就进入第二阶段预测单元格的确切位置。我们使用一个基于排序的模型(窗口大小为 20,在第一阶段预测的位置附近检测)和两个基于成对的模型进行预测。最后,应用另一个 Softmax 进行集成。
代码
https://www.kaggle.com/code/tide525/ai4code-final-ensemble/notebook?scriptVersionId=102987081
方案流程可视化
模型
基于排序:
- 在基于排序的模型中,我们通过输入 Markdown 单元格和按正确顺序采样的所有代码单元格来估计 Markdown 单元格的相对位置。该模型针对 Markdown 单元格相对于代码单元格的归一化排名进行回归训练。我们通过将每个 Markdown 插入其预测排名的位置来对齐 Markdown。
基于成对
- 基于成对的模型预测 Markdown 单元格和代码单元格之间的相似度。我们计算每个代码单元格与 Markdown 单元格的相似度,并将 Markdown 单元格插入到相似度最高的代码单元格旁边。
- 为了训练模型,我们采用了 DPR 中使用的带有批内负样本的对比学习。具体来说,相邻的 Markdown 单元格和代码单元格对作为正例,批次中的所有其他组合被视为负例。我们使用对比损失作为目标函数。
有效的方法
- 思路
- 数据增强
- 原始基线总共采样 20 个代码单元格以获取更多全局信息。如果总共有 400 个单元格,基线将采样索引为 0, 20, 40, … 400 的单元格。
- 我们提出了一种数据增强方法,分别收集单元格 {0, 20, 40, …}, {1, 21, 41, …}, 和 {2, 22, 42, …},使数据量变为三倍。
- CV: 0.8436 -> 0.8506
- 思路
- 两阶段预测:从宽泛到精确
- 在一些包含许多单元格的 Notebook 中,很难估计准确的位置。因此,我们采用两阶段预测。首先,输入所有单元格并预测 Markdown 单元格的大致位置。其次,我们在第一阶段预测的邻域内进行搜索。“邻域”根据实验确定为窗口大小。我们从 5 到 40 进行实验,发现 20 是最佳窗口大小。邻域搜索模型是独立训练的。为此训练,我们将训练数据拆分为子集;每个子集包含窗口大小的单元格。
- 思路
- 额外数据
- 我们首先使用 KGTorrent 和 AI4Code 数据训练模型一个 Epoch,然后仅使用 AI4Code 数据训练 3 个 Epoch。
- CV += 0.002-0.004
无效的方法
- 思路
- 动态更改输入代码长度
- 每个 Notebook 的单元格数量不同,但最大输入长度始终为 512。因此,我们假设根据单元格数量更改每个单元格的输入长度会更好。对于单元格较多的 Notebook,每个单元格的输入长度应该较短;对于单元格较少的 Notebook,输入长度应该较长。然而,固定输入长度的模型表现更好。一个可能的原因是模型无法应对输入长度的动态变化。
- 思路