spaCy PhraseMatcher 内存不足/占用 100% CPU

问题描述

我正在尝试创建一个包含 2000 万个模式的 PhraseMatcher。例如:

terms = [''.join(random.choices(string.ascii_uppercase,k = 4)) for i in range(20000000)]
nlp = English()
matcher_large = PhraseMatcher(nlp.vocab,attr = 'LOWER')
terms_large = list(nlp.tokenizer.pipe(terms))
matcher_large.add('Terms',None,*terms_large)

这会导致内核在 Jupyter 中死亡,或者进程在终端中被杀死。它还以 100% cpu 运行。是否有一种内存密集程度较低的方法来创建此匹配器?我想过分块创建匹配器,但我不想最终得到数百个匹配器。

解决方法

确实,PhraseMatcher 可能不是这么多模式的最佳选择,但您可以逐步添加模式,而不是预先创建一个巨大的列表并将同样大量的参数一次传递给 {{ 1}} 方法:

add

Jupyter 笔记本通常具有相对较低的默认内存限制,这可能是您遇到的问题。