返回列表

1st place solution: Metric learning and GPT

443. Coleridge Initiative - Show US the Data | coleridgeinitiative-show-us-the-data

开始: 2021-03-23 结束: 2021-06-22 文献与知识发现 数据算法赛
第一名方案:度量学习和 GPT

第一名方案:度量学习和 GPT

作者: Khoi Nguyen (Grandmaster) | 队友: Nguyen Quan Anh Minh (Master)
比赛排名: 第 1 名

概述

我将在这里列出我们方案中的一些显著特点,感谢我的队友 @dathudeptrai 在这次比赛,尤其是后半段付出的巨大努力。

他的方案是基于常用 MLM 骨干网络的度量学习,具体细节我会留给他稍后补充。我们找不到让我们的集成模型表现稳定的方法,所以最终我们分别提交了各自的模型,我的最终提交得分为 0.565,而他的是 0.576。

我的是一个带有 CLM 骨干网络和束搜索的文本提取模型,这里使用的是 GPT。我也尝试过用未来掩码修改 Roberta 和 Scibert,基本上是把它们变成 CLM,但到目前为止 GPT 的效果最好。

为什么选择 GPT

GPT 有效而 Roberta 失败的原因在于 Roberta 太“聪明”反被聪明误。当你试图构建一个只有单一查询(寻找数据集名称)的文本提取模型时,Roberta 不需要关心上下文,它会试图找到一个最像数据集名称的子字符串,从而导致过拟合。

在我的 GPT + 束搜索模型中,GPT 被强制去预测下一个 token 是否是数据集名称的开始(仅给定之前的上下文),然后预测下一个 token 是否是该提及的结束(给定起始点和目前已提取的内容)。为了使其更鲁棒,我使用了几个数据集来源,并用这些随机标签替换了原始训练集中 95% 的提及。有趣的是,https://www.kaggle.com/datasets 是我能找到的最好的增强来源,尽管它与公开(可能还有私有)标签没有任何重叠。

建模

架构与我在 Tweet 提取比赛中使用的非常相似。我们复用了 XLNet 用于 SQuAD 的解码器头,不是独立预测开始和结束索引,而是先预测开始索引,然后利用该信息预测对应的结束位置。

模型架构图

对于训练,我们正常预测开始索引。

我们获取目标索引处的隐藏表示(忽略预测值)并将其连接到每个位置的表示中。这个新的表示随后被送入一个 MLP 来预测结束索引:

推理过程稍微复杂一点:

  • 我们取对应概率最高的 top-k 开始索引的 top-k 隐藏状态,这里用 sigmoid 归一化,而不是训练时的 softmax。
  • 每个隐藏状态随后被连接到每个位置的表示中。
  • 新的表示被送入 MLP,类似于训练过程。然后我们为每个选定的隐藏状态选择 top-k 结束索引,产生 k*k 个 top 开始-结束对。
  • 然后我们计算每个开始-结束对的联合概率,并取任何分数大于 0.8 的对。
推理过程图

最终结果和一些技巧

我选定的提交在 Private LB 上得分 0.565,但我所知道的最好成绩是 0.594。我只取了在语料库中至少出现 4 次的预测,罕见的预测只有在包含像 'Data', 'Survey' 等词时才会被选中。我尝试使用 scispacy 的缩写检测器为我的最终提交添加更多预测,但这实际上降低了我的分数,我本应该首先信任我的模型。

同比赛其他方案