首页 > 解决方案 > 有没有办法将 Spacy en_core_web_sm 应用于块数据?

问题描述

我有这个包含 300.000 篇文章的庞大数据集,我想使用 Spacy 的 en_core_web_sm 进行标记化、POS 标记、词形还原、句法依赖和 NER。但是我的电脑一直用完内存。有没有办法可以更改我的代码以分块处理数据?

这是数据集:https ://dataverse.harvard.edu/dataset.xhtml?persistentId=doi:10.7910/DVN/ULHLCB

这就是我正在使用的:

df_2018 = pd.read_csv("2018_articles.csv")
import spacy
nlp_spacy_core_web_sm = spacy.load("en_core_web_sm")
df_18_salon["spacy_sm"] = df_18_salon["content"].apply(lambda x: nlp_spacy_core_web_sm(x))

大约 30 分钟后,我收到内存不足错误。

标签: pythonpandasperformanceout-of-memoryspacy

解决方案


问题是您无法同时将所有文档(spaCy 输出)保存在内存中,因此您不能只将输出放在数据框的列中。另请注意,这不是 spaCy 问题,这是一个编程问题。

您需要编写一个 for 循环并将您的处理放入其中:

for text in texts:
    doc = nlp(text)
    ... do something with the doc ...

如果你这样做,那么文档将在 for 循环的下一次迭代中被清理,因此它不会占用内存。

您可能还想查看spaCy 速度常见问题解答


推荐阅读