如何仅为 Spacy 的 NER 实体的特定标签加载数据?

How to load data for only certain label of Spacy's NER entities?

我刚刚开始探索 spaCy,并且只需要它用于名称实体识别 (NER) 组件的 GPE(全球政治实体)。

所以,为了节省加载时间,我只保留 'ner':

    nlp = spacy.load('en_core_web_sm', disable=['tok2vec','tagger','parser', 'senter', 'attribute_ruler', 'lemmatizer'])

然后我通过 运行:

创建一组存在于文本中的城市/州/国家
doc = nlp(txt) 
geo_ents = {str(word) for word in doc.ents if word.label_=='GPE'}

这意味着我只需要带有标签_=='GPE' 的一小部分实体。 我还没有找到一种方法来仅在整个模型的那个组件内进行迭代以减少大量文本的运行时间。

你能指导我如何只加载 Spacy 的 NER 实体的特定标签吗?这可能对其他人有帮助,以便仅获取选定类型的实体。

非常感谢!

这是不可能的。 NER 模型正在对它所知道的所有标签之间的每个 token/span 进行分类,并且知识是不可分离的。

此外,NER 组件需要一个 tok2vec。根据管道架构,您可以禁用 top-level tok2vec。 (编辑:我错误地指出 top-level tok2vec 是小型英语模型所必需的;它不是。有关详细信息,请参阅 here。)

也许可以训练一个更小的模型,它只识别具有相似准确度的 GPE,但我不会对此过于乐观。它也不会更快。