返回列表

17th Place Solution - SpaCy 3 (EntityRuler) and NER CRF model

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

开始: 2021-03-23 结束: 2021-06-22 文献与知识发现 数据算法赛
第17名方案 - SpaCy 3 (EntityRuler) 和 NER CRF 模型

方法

起初,我们尝试通过使用 prodigy 和带有主动学习功能的 spacy 自己标记一部分数据,来解决标签缺失的问题。然而,我们很快发现这是难以处理的,因为默认的 spacy NER 过拟合于特定的数据集名称,而且数据集名称出现的实际语境似乎与我们作为人类在现实中识别数据集的方式不一致。

这让我们想到,我们应该关注那些数据集名称可以被识别为数据集,而不是可能被识别为其他类型实体的语境。例如,句子“ADNI was financed by XXX”(ADNI 由 XXX 资助)并没有给我们任何迹象表明 ADNI 是一个数据集,而句子“We used the ADNI dataset to analyse ...”(我们使用 ADNI 数据集来分析……)则提供了正确识别 ADNI 为数据集所需的语境。

因此,我们很早就决定专注于包含像“data”这样的词或像“analysed”这样的动词的句子,以便只考虑那些可以从语境中识别出的实体。我们使用了一个小型的 SpaCy 模型来拆分句子,大大减少了需要梳理的文本空间。

我们还探测了训练集中提到的那些我们可以识别的数据集名称。

自定义 SpaCy 缩写查找器组件

为了处理缩写,我们构建了一个自定义的 SpaCy 缩写查找器,它还可以匹配大小写混合的缩写,并尝试将它们与缩写左侧或右侧的文本片段进行配对。

例如给定句子“This is a Fake Name Compendium FaNaCO”。我们将“FaNaCo”识别为一个缩写,并在左右寻找与首字母缩写中存在的一定数量大写字母相匹配的文本片段。我们在这里使用了 Jaccard 相似度和一个阈值,来查找片段中所有大写字母与首字母缩写中字母之间的相似度。

我们发现这种方法相当稳健,并且能够比更简单的缩写查找器覆盖更多的数据集名称。

一旦一个文本片段被发现是缩写的可能含义,我们就将其添加到在整个文档中构建的缩写字典中。

不幸的是,我们很早就决定不将首字母缩写视为数据集名称,因为 ADNI 是训练集中唯一的首字母缩写,很难知道包含数据集的首字母缩写是否能推广到未见过的数据集。这是一个错误,如果我们测试了替代方案,很可能会在排行榜上多拿几分。

自定义 SpaCy EntityRuler 组件

我们最初的方法(也是最稳健的)是使用带有自定义规则的 SpaCy EntityRuler 来查找候选数据集名称。

在这里,我们构建了一组规则来匹配标记序列。例如,如果我们有一个规则“Title Title Study”(标题 标题 研究),以及一个句子“We use the Great Age Study in our analysis”(我们在分析中使用 Great Age Study)。那么我们会找到“Great Age Study”片段作为候选数据集。

然而,这还不够通用,因此我们通过添加向后查找和向前查找功能来扩展该组件。

这样,如果我们有句子“We use the Title Title Study of Youth ..”(我们使用 Title Title Study of Youth……),我们将匹配 Title Title Study,然后向后和向前查看是否可以扩展该片段。在这里,我们将允许“of”(作为可接受的前向停用词),然后看到另一个 Title(Youth)并将其包含在预测的片段中。向后查找时,“the”将不被接受为后向停用词,因此我们将停止。最终的候选数据集将是“Title Title Study of Youth”。

有了足够简单的规则和一些手动用例,我们能够获得一个不错的管道组件,可以识别候选数据集。

带有 CRF 和掩码的 NER

在比赛的最后阶段,在穷尽了基于规则的方法后,我们决定实现一个带有 CRF(条件随机场)层的 BERT NER 模型。

由于我们按句子过滤文本,BERT 模型接收一个句子并尝试识别其中的一个或多个数据集。对于每个单词,它预测一个标签(BIO 方案),即该单词是数据集的开始、数据集内部 还是数据集外部。

CRF 层允许模型保持一致(例如防止它预测 O 然后是 I),并且在这种情况下对我们有帮助,因为许多数据集具有长名称。事实上,我们也没有针对少于 3 个单词的数据集名称(连字符单词算作 1 个)训练模型。

然而,正如其他团队也意识到的,NER 模型会很快过拟合已知标签。

我们使用了一个巧妙的技巧来帮助神经网络更好地泛化到未见过的数据集标签。

因为我们意识到,对于数据集名称,单词的实际含义不如数据集的结构/语法重要。例如,“National Survey of Youth”和“National Survey of Soda”一样都可能是一个数据集。

因此,我们假设实际的词嵌入使模型过拟合于某些类型的数据集。

为了减少过拟合,我们在嵌入中添加了特殊的掩码标记 [TITLE][UPPER][MIXED]。对于句子中的每个单词(不包括第一个单词),我们将 Title(标题格式)单词替换为 [TITLE],UPPER(全大写)单词替换为 [UPPER],MiXeD(混合大小写)单词替换为 [MIXED]

同比赛其他方案