问题描述
NER 最常见的标记程序是 IOB。但似乎这种标记仅限于来自同一实体的令牌是连续的。
例如,
Jane Smith is walking in the park
将被标记为:B-PER I-PER O O O O O
这里我的 PER 实体是 [Jane,Smith]
如果我们调整示例:
Jane and James Smith are walking in the park
B-PER O B-PER I-PER O O O O O
现在的问题是我们将得到的实体是 [Jane]
和 [James,Smith]
,因为 IOB 标记不允许将 Jane 链接到 Smith。
是否有任何标记模式允许将 [Jane,Smith]
和 [James,Smith]
标记为实体?
解决方法
首先,关于在没有新数据格式的情况下执行此操作:
有一篇关于使用 TextAE 执行此操作的论文和存储库:
但是,查看他们和您的示例,您似乎可以通过使用依赖项解析来改进 what they did。如果您查看“Jane 和 James Smith 在公园里散步”的 the dependency parse,您可以看到 spaCy 理解 Jane 与 Smith 连体。因此,在运行实体提取后,您可以执行依赖项解析步骤,然后根据该步骤编辑您的实体。
现在,回答真正的问题。我已经看到了以以下方式工作的多维标签(假设每个句子最多有十个实体:
empty = [0,0]
tokens = ["Jane","and","James","Smith","are","walking","in","the","park"]
labels = [
[1,1,0],[0,]
labels = labels + [empty] * (10-len(labels))
如果您有多个实体类型,您可以使用它们而不是仅使用 1
。
无论如何,这种格式与 BERT 配合得更好,因为当您无论如何必须将令牌拆分为 BPE 时,BIO 格式是一种痛苦。