返回列表

10th place Solution

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

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

第10名解决方案

作者:Ori Hanegby
比赛:Learning Equality - Curriculum Recommendations

我要感谢组织者举办这场既有趣又具有重要意义的比赛。通过参与其中,我学到了很多东西。也要感谢所有分享解决方案的人,我从展示的许多方法中学到了很多。

我的解决方案包含3个阶段,遵循了本次比赛中最流行的范式——检索、重排序和在校验集上校准结果以选择阈值。

流程的高层图示:

Pipeline Diagram

我的总体策略是保持第一阶段的推理简单快速,并在第二阶段使用较重的Transformer模型进行繁重的工作。

第一阶段:双编码器

基线模型是 sentence-transformers/paraphrase-multilingual-mpnet-base-v2,并通过更好的训练集对其进行迭代微调。

近邻算法 (NN)

第一阶段的输出是分配给每个主题的一组内容候选。候选选择基于相似度分数阈值(而不是Top-K近邻)。这在几个方面很有帮助:

  1. 它有助于避免处理许多不相关的候选,从而减少不必要的计算。
  2. 初步实验表明,这带来了更好的第一阶段CV分数。
  3. 第一阶段的分数有助于定义我在第二和第三阶段使用的“采样区域”。稍后详述。

第一阶段特征

对于每个主题,我从训练集构建了一个反向主题树。在笔记的其余部分,我将其称为[主题路径]:

(示例)
/12. 20: Bird Reproduction/12: Vertebrates/Book: Introductory Biology/Introductory and General Biology/Bookshelves/Libretext Open Educational Resource Library

我将以下列连接成字符串作为模型的输入:

  • 内容: [Kind]< K >[title]< D >[description]< T >[text]
  • 主题: [topic path]< O >[description]

训练

第一阶段成功的关键在于找到最优的训练集。挑战在于如何为训练选择负样本,因为简单的随机采样会导致模型较弱。

为了创建最优训练集,我创建了以下过程:

  1. 基于最新训练的模型预测训练集上的主题-内容分配。
  2. 使用主题-内容分配生成新的训练集。这将创建一个包含高分困难负样本和简单负样本的新训练集。我切断候选的阈值是平均每个主题约50个候选。
  3. 添加训练集中所有缺失的主题-内容分配。
  4. 使用新的训练集训练新模型。
  5. 回到步骤1。

多重负样本排序损失

早期帮助我的CV/LB的一个关键决定是使用多重负样本排序损失,这显著加速了训练。在上述训练过程中,假阳性候选与MNRL配合得很好,因为在一个批次中,我们可以跨多个主题混合困难和简单样本。但有一个问题——MNRL的要求之一是对于每个样本对 (a_i, p_i):所有的 p_j (j!=i) 和所有的 n_j 都被视为负样本,这在困难负样本的情况下很可能会被打破。为了使其工作,我创建了一个精心设计的训练集准备过程,在训练开始前“预先安排”批次。

对于每个批次:

  1. 选择一个正样本主题-内容对。
  2. 对于上述主题的每个假阳性内容分配,找到一个正确的主题与该内容配对并将其添加到训练集中。记住以前遇到的主题,并跳过主题已经出现过的主题-内容对。
  3. 重复上述过程,如果没有更多有效样本可选择,则选择另一个随机主题-内容对。
  4. 在遇到死胡同的情况下——从另一种语言中选择一个样本。并重新开始。方便的是,主题-内容分配在同一种语言内总是有效的,因此跨语言没有冲突。

我将训练数据原样传递给数据加载器,不进行打乱,批次大小与预处理步骤中使用的相同。

对比损失

在上述过程进行了足够的迭代训练后(最终F2/Precision/Recall停止提高),我采用最好的模型,并在最新的训练集上使用对比损失进一步微调,使用标准的训练过程。

对于第一阶段,我CV中最好的F2分数是0.65。我在达到这些结果时没有提交基于第一阶段的解决方案,因此我没有相应的LB分数。

不同阈值下的平均候选数与召回率如下:

阈值 平均候选数 召回率
0.