我在NLP流程的第一步中使用spaCy(版本2.0.11)进行词形还原,但不幸的是它需要非常长的时间。 明显地,这是我的处理流程中最慢的部分,我想知道是否有改进的方法。 我正在使用以下管道:
nlp.pipe(docs_generator, batch_size=200, n_threads=6, disable=['ner'])
在一台8核的机器上,我已经验证这台机器正在使用所有的内核。
对于大约3百万个短文本、总计近2GB的语料库进行词形还原和写入磁盘需要接近24小时。这合理吗?
我尝试禁用了处理管道的几个部分,并发现这破坏了词形还原(解析器、标注器)。
除命名实体识别之外,默认处理管道中是否有其他不需要词形还原的部分?
还有其他加速spaCy词形还原过程的方法吗?
附言:
似乎文档没有列出解析管道中的所有操作。在spacy Language类的顶部,我们有:
factories = {
'tokenizer': lambda nlp: nlp.Defaults.create_tokenizer(nlp),
'tensorizer': lambda nlp, **cfg: Tensorizer(nlp.vocab, **cfg),
'tagger': lambda nlp, **cfg: Tagger(nlp.vocab, **cfg),
'parser': lambda nlp, **cfg: DependencyParser(nlp.vocab, **cfg),
'ner': lambda nlp, **cfg: EntityRecognizer(nlp.vocab, **cfg),
'similarity': lambda nlp, **cfg: SimilarityHook(nlp.vocab, **cfg),
'textcat': lambda nlp, **cfg: TextCategorizer(nlp.vocab, **cfg),
'sbd': lambda nlp, **cfg: SentenceSegmenter(nlp.vocab, **cfg),
'sentencizer': lambda nlp, **cfg: SentenceSegmenter(nlp.vocab, **cfg),
'merge_noun_chunks': lambda nlp, **cfg: merge_noun_chunks,
'merge_entities': lambda nlp, **cfg: merge_entities
}
这包括一些文档中未涵盖的内容:https://spacy.io/usage/processing-pipelines
由于它们未被涵盖,我不确定哪些可能已禁用,也不知道它们的依赖关系。