返回列表

28th place solution

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

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

第28名方案

作者:Valerio Morelli | 排名:28/1891

感谢主办方举办这场有趣的比赛!我在比赛结束前一个月才加入,很高兴通过一种简单直接的方法获得了第28名。

第一阶段检索器:双编码器

使用以下通用设置,训练模型将相关主题和内容紧密嵌入在一起:

  • 使用相同的Transformer骨干网络和平均池化来嵌入主题和内容。
  • 计算批次中所有样本之间的余弦相似度。
  • 使用温度参数为0.05的批内负样本排序损失。

以下修改显著提升了模型性能:

  • 修改采样器,使得批次中的所有样本共享相同的语言。这使得负样本更有意义。在推理时,我只考虑语言匹配的候选内容。
  • 计算行方向和列方向(分别针对主题和内容)的交叉熵损失。
  • 对正确类别的分数进行边际惩罚。

最佳检索器使用 XLM-RoBERTa (large) 作为骨干网络,训练了7个epoch。在我的交叉验证(CV)中,它的 Recall@50 达到了 91%。

第二阶段:交叉编码器

对于每个主题,使用双编码器生成50个候选内容。交叉编码器将主题+内容的联合表示输入到Transformer中,并进行二分类预测它们是否匹配。第二阶段模型使用第一阶段模型的袋外预测作为输入进行训练。

在提升模型性能方面,唯一对我有效的方法是对正类进行过采样以及使用差异化学习率。

我最好的第二阶段模型是一个训练了12个epoch的多语言BERT,在我的CV上达到了63.6%(在Public LB和Private LB上分别为64.3%和68.3%)。

观察其性能和预测结果,我意识到交叉编码器很难仅从文本表示中预测匹配,因此我尝试了将GBDT作为第二阶段模型,但未能提出性能更好的模型。

输入表示

我找不到比简单拼接效果更好的输入表示方法。

  • 主题表示:标题. 父标题. ... 根标题. 主题描述.
  • 内容表示:标题. 描述. 文本.

两个模型的序列长度均为128个token。

交叉验证

第一阶段我使用了按主题分割的5折交叉验证,第二阶段使用了按非来源主题分割的3折交叉验证。使用这种设置,我的CV和LB之间有很好的相关性。改为按渠道分割导致我的CV不稳定。探测Public LB发现,实际上有大量(超过40%)的近似重复主题,因此我选择了一个简单的CV设置,这让我与LB有很好的相关性。

第一阶段的评估指标是平均精度和Recall@N,第二阶段则直接使用比赛指标。

后处理

  • 没有预测结果的主题根据双编码器分配最近邻。
  • 如果一个新主题与一个已见主题具有相同的标题、父标题和祖父标题,则将该已见主题的内容添加到预测中(微小提升)。
同比赛其他方案