增加 SpaCy 最大 NLP 限制

数据挖掘 Python nlp
2021-10-04 08:45:03

我收到此错误:

[E088] Text of length 1029371 exceeds maximum of 1000000. The v2.x parser and NER models require roughly 1GB of temporary memory per 100,000 characters in the input. This means long texts may cause memory allocation errors. If you're not using the parser or NER, it's probably safe to increase the `nlp.max_length` limit. The limit is in number of characters, so you can check whether your inputs are too long by checking `len(text)`.

奇怪的是,如果我减少被词形化的文档数量,它仍然说长度超过 100 万。有没有办法将限制增加到超过 100 万?该错误似乎表明存在,但我无法这样做。

3个回答

尝试提高nlp.max_length参数(如您的错误消息所示):

nlp = spacy.load('en_core_web_sm') 
nlp.max_length = 1500000 #or any large value, as long as you don't run out of RAM

此外,在调用 spaCy 管道时,您可以禁用词形还原不需要的管道中需要大量 RAM 的部分:

doc = nlp("The sentences we'd like to do lemmatization on", disable = ['ner', 'parser'])

最后你应该得到你期望的结果:

print([x.lemma_ for x in doc])

我无法弄清楚如何增加字符的最大限制,但我确实只是将我的文档分成了两半。问题是 SpaCy 不能处理超过 100 万个字符。因为我在词形还原过程中遇到了这个问题,所以文档是一个整体还是几个部分都没有关系。

TLDR:nlp.max_length根据文档的长度动态设置。这使得处理未知长度的文档/文本时变得更简单。

或者,您可以删除 SpaCy 对象管道的一些您不需要的部分。

让我们说:txt --> 文本文档

然后设置nlp.max_length = len(txt) + 100(100 只是一个垫子,真的不需要)

示例: 我遇到了同样的问题,我必须遍历文本文件目录并对文本文件执行 NER 以提取其中存在的实体。

for file in folder_text_files:
    with open(file, 'r', errors="ignore") as f:
         text = f.read()
         f.close()
    nlp.max_length = len(text) + 100

因此,这样做可能会帮助您担心文本大小。