540. Learning Equality - Curriculum Recommendations | learning-equality-curriculum-recommendations
首先,我要感谢 Kaggle 和工作人员举办了如此有趣的比赛。我很高兴实现了我达到单人金牌组的目标。
我的解决方案包含3个阶段。在第1阶段,我使用 Arcface 创建嵌入并生成候选。在第2阶段,我使用了基于 Transformer 的重排序模型,并将第一阶段的距离作为特征。在第3阶段,我使用了第一阶段通过 SVD 获得的64维嵌入、距离以及第二阶段的预测结果,利用 1DCNN、LGBM 和 MLP 创建重排序模型。然后我进行了排名集成,设定阈值,并选择了最终的内容 ID。最后,我添加了后处理步骤,针对没有内容 ID 的情况,根据距离填补空白。
我使用了分层分组 K 折,将数据直到祖父母级别归为一个组。
我的文本创建很大程度上得益于 @conjuring92 的帖子 REF。
主题: Level + [sep] + title : description + [sep] + context + [sep] + children + [sep] + parent_description + [sep] + brother title
内容: kind + [sep] + language + [sep] + title + [sep] + description + [sep] + text
我使用 2.1 节中描述的特征进行了 MLM,并参考了这段代码 REF 进行实现。谢谢。MLM 使我的 CV 提升了 +0.010 @ 1fold。但是,有必要验证模型在所有折上的表现是否良好(未执行)。
我认为使用 Arcface 是我解决方案中最独特的功能。
以下是用于训练的数据集。
以下是1次迭代过程的概述。
首先,我将主题 ID 和内容 ID 设置为输出,并将主题 ID 设置为输入。然后,我计算每个输出的损失(loss1, loss2)。
接下来,我将内容 ID 设置为输入,并计算每个输出的损失(loss3, loss4)。
最后,我取四个损失的平均值,执行反向传播,并训练模型。
epoch 数约为 30,margin 为 0.0001,s 值根据模型进行调整(约 10-15)。
我创建了九个模型,包括 xlm-roberta-large、xlm-roberta-base 和 mdeberta-v3-base,然后连接这些模型的输出进行集成。
其中之一,我使用了伪标签。我使用了 'has content' 为 False 的项目。虽然单独使用较弱,但在集成中证明是有效的。
为了避免内存不足,我必须划分主题和内容……(调整 bug 非常困难。)
使用全量数据训练也是我的特征之一。最初,我使用了 4kfold,但我意识到全量训练非常强大。最后,我没有使用 4kfold 来计算距离,而是使用了用 3 个不同种子训练的全量训练模型(Public LB + 0.007)。