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

How to optimize SpaCy pipe for NER only (using an existing model, no training)

我希望使用 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

我知道我可以使用 nlp.disable_pipes 来禁用某些元素。有什么我可以禁用的,它不会影响准确性并且 NER 不需要它吗?

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

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