如何在spaCy中处理很长的文档?

问题描述 投票:0回答:2

我正在尝试对西班牙语文本进行 NLP 分析。因此,为了进行词形还原,我使用 Spacy,因为 NLTK 没有西班牙语版本的引理。 Spacy 的问题是我可以通过 Lemmatizer 传递的单词数量受到限制:

ValueError: [E088] 长度为 6095095 的文本超过了最大值 1000000。解析器和 NER 模型在输入中每 100,000 个字符需要大约 1GB 的临时内存。这意味着长文本可能 导致内存分配错误。如果您不使用解析器或 NER, 增加

nlp.max_length
限制可能是安全的。极限 是字符数,所以你可以检查你的输入是否是 通过检查
len(text)
太长了。

我尝试使用

nlp.max_length= 6095095
,但在使用所有可用 RAM 后会话崩溃了。

有什么建议吗?

nlp spacy lemmatization
2个回答
4
投票

您似乎在一次调用中将很长的文本传递给 spaCy。您可以将文本拆分为多个文档,而不是这样做。执行此操作的确切方法取决于您的数据,但通常您可以通过拆分双换行符将某些内容拆分为段落。例如:

import spacy
nlp = spacy.load(... your model ...)

text = ... your text ...
texts = text.split("\n\n") # common way to split on paragraphs

for doc in nlp.pipe(texts):
    ... do something ...

0
投票

Spacy 中处理长文本的经典问题!

  1. 分块。 将文本分解为更小的块,然后分别处理每个块。您可以使用循环来迭代块并单独对每个块进行词形还原。这样,您就可以避免达到 max_length 限制。

  2. 批量处理。 与分块类似,但您可以创建批量文本并一起处理它们,而不是处理单个块。这比分块更有效,尤其是当您有大量短文本时。

  3. 使用更高效的词形还原器。 Spacy 的词形还原器很棒,但它不是唯一可用的。您可以尝试使用其他词形还原器,例如多语言或节,这可能会更节省内存。

  4. 使用 GPU。 如果您可以使用 GPU,则可以使用 Spacy 的 GPU 模块在 GPU 而不是 CPU 上运行词形还原器。这可以显着加快处理速度并减少内存使用。 增加 nlp.max_length 限制(小心):如果您确定文本不会太长并且有足够的可用内存,则可以尝试增加 nlp.max_length 限制。但是,请注意不要将其设置得太高,因为这仍然会导致内存分配错误。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.