如何仅针对 NER 优化 SpaCy 管道(使用现有模型,无需训练)

Nob*_*ome 3 named-entity-recognition spacy

我希望使用 SpaCy v3 从大量句子中提取命名实体。我所拥有的工作正常,但似乎比应有的速度慢,在投资更多机器之前,我想知道我所做的工作是否比管道中需要的多。

我使用 ntlk 将所有内容解析为句子作为迭代器,然后使用“管道”处理它们以获取命名实体。所有这些似乎都运行良好,并且 python 似乎对我机器上的每个 cpu 核心都相当严重,这很好。

nlp = spacy.load("en_core_web_trf")
for (doc, context) in nlp.pipe(lines, as_tuples=True, batch_size=1000):
    for ent in doc.ents:
        pass #handle each entity
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用 nlp.disable_pipes 来禁用某些元素。是否有什么我可以禁用但不会影响准确性且 NER 不需要的功能?

aab*_*aab 6

对于仅使用变压器模型的 NER en_core_web_trf,您可以禁用["tagger", "parser", "attribute_ruler", "lemmatizer"]

如果您想使用类似的非变压器模型en_core_web_lg(速度更快但精度稍低),您可以在所有 CPU 上禁用["tok2vec", "tagger", "parser", "attribute_ruler", "lemmatizer"]并使用多处理(或限制为 N 个 CPU)。nlp.pipe(n_process=-1)n_process=N