返回列表

9th Place Solution

515. Google AI4Code – Understand Code in Python Notebooks | AI4Code

开始: 2022-05-11 结束: 2022-11-10 基础软件 数据算法赛
第9名解决方案

概述

我们的最终提交是融合了三个模型的结果,这些模型具有相同的架构但使用了不同的训练数据。这三个模型共享相同的处理流程。我们在比赛中采用了两阶段方法:

  1. 训练一个 BERT 模型 来获取每个单元格的句子嵌入;
  2. 训练一个简单的 Transformer 模型,输入为句子嵌入(或单元格嵌入)。
    模型架构图

我们的代码

提交和训练代码:https://www.kaggle.com/code/qiaoshiji/fork-of-ai4code-infer-22e56e/data?scriptVersionId=103071263

有效的方法

  1. 使用 UniXcoder 作为第一阶段的预训练模型。不同模型的初始得分如下:

    • codebert: 0.8226
    • graphcodebert: 0.8482
    • Plbart: 0.8492
    • codet5: 0.8475
    • unixcoder: 0.8594
  2. 使用以下三种不同类型的任务预训练第一阶段模型:

    • 随机选择 N 个连续单元格并训练重排任务;
    • 随机选择一个单元格并预测下一个单元格;
    • 随机选择 N 个连续单元格,选择其中一个作为查询,其余作为答案。
  3. 在第二阶段使用更长的序列输入,最终模型包含 512 个代码单元格和 512 个 markdown 单元格。
  4. 第二阶段模型的多任务学习:

    • 位置作为回归任务;
    • Markdown 位于哪两个代码单元格之间的位置;
    • 每两个代码单元格之间的 Markdown 单元格数量。
  5. 使用更多数据:

    • 模型1:原始数据
    • 模型2:原始数据 + 外部数据1
    • 模型3:原始数据 + 外部数据2

    外部数据来自 KGTorrent:https://github.com/collab-uniba/KGTorrent

无效的方法

  1. 将分类模型作为集成模型。
  2. 按单元格数量分组并为每组训练模型。

重要引用

  1. KGTorrent

    Github: https://github.com/collab-uniba/KGTorrent

    论文: https://arxiv.org/abs/2103.10558

  2. UniXcoder

    Github: https://github.com/microsoft/CodeBERT/tree/master/UniXcoder#1-code-and-nl-embeddings

致谢

非常感谢主办方举办如此精彩的比赛。

团队成员

@guoday
@mahluo

同比赛其他方案