You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Spacy en_core_web_sm分块处理大规模数据集以解决内存不足问题?

解决spaCy处理大规模数据集内存不足的分块优化方案

绝对可以通过分块处理来解决内存耗尽的问题!你当前的代码用apply一次性把所有文本转换成spaCy的Doc对象并存在DataFrame里,这必然会爆内存——毕竟每个Doc都包含了分词、词性、依存、NER等所有标注信息,30万条累积起来内存占用会非常夸张。下面给你一套实用的优化方案:

核心思路

  1. 分块加载数据:不要一次性把整个CSV读进内存,用Pandas的分块读取功能逐批处理。
  2. 批量处理文本:用spaCy的pipe()方法替代apply,它是专门为批量处理优化的,效率更高且内存控制更好。
  3. 只保留需要的信息:不存储完整的Doc对象,而是直接提取你需要的分词、词性、词形还原、依存关系和NER结果,大幅减少内存占用。

优化后的代码示例

import pandas as pd
import spacy
from tqdm import tqdm  # 可选,用来显示处理进度,看着更直观

# 加载spaCy模型(如果不需要某个组件可以disable,比如disable=["ner"],但你需要所有任务就保持默认)
nlp = spacy.load("en_core_web_sm")

# 定义分块大小和批量处理大小,根据你的内存情况调整,内存小就调小数值
chunk_size = 1000  # 每次从CSV读取1000条数据
batch_size = 50    # spaCy每次批量处理50条文本

processed_chunks = []

# 分块读取并处理数据
for chunk in tqdm(pd.read_csv("2018_articles.csv", chunksize=chunk_size)):
    # 用pipe批量处理文本,速度比apply快很多
    docs = list(nlp.pipe(chunk["content"].astype(str), batch_size=batch_size))
    
    # 提取每篇文章的各项标注结果,添加到当前chunk的列中
    chunk["tokens"] = [[token.text for token in doc] for doc in docs]
    chunk["pos_tags"] = [[token.pos_ for token in doc] for doc in docs]
    chunk["lemmas"] = [[token.lemma_ for token in doc] for doc in docs]
    chunk["dependencies"] = [[(token.text, token.dep_, token.head.text) for token in doc] for doc in docs]
    chunk["entities"] = [[(ent.text, ent.label_) for ent in doc.ents] for doc in docs]
    
    # 把处理好的chunk存入列表
    processed_chunks.append(chunk)

# 合并所有处理好的chunk成完整DataFrame
final_df = pd.concat(processed_chunks, ignore_index=True)

# 务必保存结果!避免下次重复耗时处理
final_df.to_csv("2018_articles_processed.csv", index=False)

额外优化技巧

  • 调整块大小:如果还是内存紧张,把chunk_size和batch_size再调小,比如改成500或200,内存压力会更小。
  • 预处理文本:处理前先清理无效内容,比如过滤空字符串、超长无意义文本,或者去掉多余的空格、特殊字符,减少不必要的处理量。
  • GPU加速(可选):如果你有NVIDIA显卡,可以安装spacy[cuda]开启GPU加速,不仅处理速度会大幅提升,内存管理也更高效。
  • 禁用冗余组件:如果后续发现某些任务不需要了(比如暂时用不上NER),加载模型时可以禁用对应的组件:nlp = spacy.load("en_core_web_sm", disable=["ner"]),进一步降低内存占用。

内容的提问来源于stack exchange,提问作者user17143533

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 21:27:30