第44名解决方案
第44名解决方案
作者:Theo Viel
比赛排名:第44名
概述
我的解决方案是一个直接的 Roberta NER 模型,其公开榜得分为 0.497(排名约 #1400)-> 私有榜得分 0.347(排名 #44)。起初,我打算将其作为两步流程的一部分来提取候选数据集,然后接入另一个模型来决定是否保留该数据集。
然而,由于公开排行榜的性质以及无法建立可靠的 CV(交叉验证),这次比赛让人感到极其沮丧,所以我决定把空闲时间花在其他事情上 :)
主要要点
- 架构:Roberta + 所有输出层的拼接 + 少量卷积 + 0/1 输出。
- 损失函数:Dice loss,来自 https://arxiv.org/abs/1911.02855v3。
- 我利用训练数据中数据集的共现关系构建了聚类,这让我能够建立一个(不太可靠的)无重叠验证方案,同时也让我能在训练期间更聪明地采样数据。
- 我训练了第一个模型,使用包含至少一个数据集的 256 个 token 的切片。这种方法使模型倾向于预测更多的数据集,由于该指标对误报(FP)的惩罚比对漏报(FN)更重,我认为这还不够。
- 所以我使用第一个模型生成了约 3000 个候选数据集,并进行了人工审查。这相当枯燥,而且很难判断组织者究竟认为什么是数据集,所以我主要依靠关键词(即 survey, study, data, dataset 等)进行识别。
- 利用从提取的候选数据集中获得的正例和负例重新训练了第二个模型,这也是我最终提交时使用的模型。
- 为了去除误报(FP),我做了很多后处理。我不太清楚每一项在排行榜(LB)上的效果如何,但前三项在我的 CV 上是有效的:
- 只保留长度 > 10 的预测。
- 只保留最大 token 概率 > 0.99 的预测。
- 只保留包含上述关键词的预测。
- 尝试合并相似的预测,以免对同一数据集预测两次。
- 一些没起作用且我还没忘记的想法:
- 用外部来源的数据集替换训练数据中的数据集。
- 使用上一届 Coleridge 比赛的数据。
欢迎提出任何问题!