443. Coleridge Initiative - Show US the Data | coleridgeinitiative-show-us-the-data
对我来说,这次比赛最重要的关键点是 Khoi Nguyen (@suicaokhoailang) 的讨论帖。该帖子鼓励在提交之前移除与提供的训练标签相似的预测,以便更好地评估解决方案的泛化能力。
由于我们得到的训练标签既嘈杂又不完整,我倾向于不使用那些需要标签进行训练的方法。实际上,除了稍微尝试了一下 skweak 之外,我完全放弃了训练过程(现在回想起来,我也许应该坚持使用它)。
Notebook 代码 (运行时间 20 - 25 分钟)
通过一些探索性方法,我发现像 Study(研究)、Survey(调查)、Database(数据库)、Dataset(数据集)、Archive(档案)、Assessment(评估)、Catalog(目录)、Collection(集合)、Registry(注册表)和 Initiative(倡议)这样的词经常出现在推测的数据集提及中。对于每个词,我创建了一个函数来检查这些词周围的单词,以提取数据集提及。
虽然我最初考虑使用正则表达式进行提取,但我发现了 SpaCy 的 sentencizer 的多功能性并加以利用。sentencizer 提供了一种简单、直观、Pythonic 的方式来检查出现在词前后的 token,包括用于检查 token 大小写组合和句子位置的内置函数。我添加了不少嵌套的复杂条件语句,但代码仍然可调试且可维护,因为代码比正则表达式更具可读性。而且它的速度仍然很快,这允许进行大量的开发迭代。
我通过在训练数据上运行这些提取函数,按文档频率对提取的数据集提及进行排名,并修改函数以进行更清晰的提取,同时更多地关注具有较高文档频率的数据集提及,从而迭代地开发了这些提取函数。
在合并所有提取函数的输出后,我按文档频率对它们进行排名,仅保留前 95 百分位。保留前 95 百分位的理由是,不频繁的数据集提及不太可能对赞助商的目标重要,因此不太可能在测试数据中被标记。
最后一步是再次搜索文档,但稍作调整。高频数据集提及列表按长度降序排列。对于每个文档,遍历排序后的列表,将匹配项替换为 X。例如,理论上,如果列表中同时包含“ADNI”和“Alzheimer’s Disease Neuroimaging Initiative (ADNI)”,而文档中只有“Alzheimer’s Disease Neuroimaging Initiative (ADNI)”,此方法可防止同时预测“ADNI”和“Alzheimer’s Disease Neuroimaging Initiative (ADNI)”。
进一步解释,因为更长,所以会首先找到“Alzheimer’s Disease Neuroimaging Initiative (ADNI)”,将其保存为预测,并用 X 覆盖。当随后搜索较短的“ADNI”时,将无法找到它。这样只会按预期预测“Alzheimer’s Disease Neuroimaging Initiative (ADNI)”。