我希望使用 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
这样的非 transformer 模型(更快但精度略低),你可以禁用 ["tok2vec", "tagger", "parser", "attribute_ruler", "lemmatizer"]
并使用 nlp.pipe(n_process=-1)
在所有 CPU 上进行多处理(或 n_process=N
限制为N 个 CPU)。
关于spacy - 如何仅针对 NER 优化 SpaCy 管道(使用现有模型,无需培训),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66613770/