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

使用NLTK word_tokenize处理10-K报告文本时内核崩溃求助

问题:处理10-K报告长文本Tokenize时内核崩溃

我正在处理一个包含56252条观测值的数据集,需要对其中来自10-K报告的长文本执行tokenize操作,但内核总是在处理约四分之一的数据时崩溃。

已尝试的方案

  • 脱离Jupyter运行.py文件,收到错误:zsh: killed
  • 使用line[j].split(' ')替代word_tokenize(line[j])
  • 重装Python和Jupyter

相关代码

from nltk.tokenize import word_tokenize

output = [[20120831,20120808,1199,1928175839, 'words section one report', 'words section onea report', 'words section seven report'],[20150621,20141231,1239,1124966666, 'more words fly kite big', 'different words compared section before', 'even more different words']]

item_1 = []
item_1a = []
item_7 = []

count = 0
for line in output:
    try:
        item_entry = []
        item_tokens_to_add = []
        for i in range(0, 4):
            item_entry.append(line[i])
        for j in range(4, 7):
            line_tokens = word_tokenize(line[j])
            item_tokens_to_add.append(line_tokens)
        item_1.append(item_entry + item_tokens_to_add[0])
        item_1a.append(item_entry + item_tokens_to_add[1])
        item_7.append(item_entry + item_tokens_to_add[2])
        count += 1
    except:
        pass
    print(str(count) + '/' + str(len(output)))

Jupyter日志信息

error 12:27:24.797: Disposing session as kernel process died ExitCode: undefined, Reason: /Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/traitlets/traitlets.py:2202: FutureWarning: Supporting extra quotes around strings is deprecated in traitlets 5.0. You can use 'hmac-sha256' instead of '"hmac-sha256"' if you require traitlets >=5.
  warn(
/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/traitlets/traitlets.py:2157: FutureWarning: Supporting extra quotes around Bytes is deprecated in traitlets 5.0. Use '0a146f2b-abdf-428e-b31f-d08fde1c7026' instead of 'b"0a146f2b-abdf-428e-b31f-d08fde1c7026"'.
  warn(

我已去除文本中的所有标点,但仍出现上述关于“额外引号”的警告,且内核崩溃的观测值位置不固定,希望得到解决建议。


解决建议

1. 解决内存溢出核心问题

zsh: killed是系统因内存不足强制终止进程,10-K报告文本长度大,tokenize后生成的大量token持续存入item_1、item_1a、item_7列表会快速耗尽内存:

  • 不要一次性存储所有结果,改为分批写入文件:每处理1000条数据,就将当前批次的结果写入CSV/JSON文件,然后清空对应列表释放内存
  • 使用生成器替代列表存储中间结果,避免一次性加载所有数据到内存

2. 优化Tokenize流程

  • 替换word_tokenize为更轻量的工具:比如使用nltk.RegexpTokenizer自定义简单分词规则,或spaCy的轻量模型en_core_web_sm,减少内存开销
  • 对超长文本分段处理:将单条长文本拆分成多个小段,逐段tokenize后再合并结果,避免单次处理占用过多内存

3. 消除Traitlets警告(非崩溃直接原因)

警告来自traitlets版本兼容问题,和内核崩溃无关,可通过以下方式消除:

  • 升级traitlets到最新版本:pip install --upgrade traitlets
  • 检查Jupyter配置文件,将带转义引号的配置项(如"hmac-sha256")改为无引号形式(hmac-sha256)

4. 定位崩溃具体原因

  • 移除try-except中的pass,打印具体错误信息,排查是否是某条特殊文本(如极端长度、残留特殊字符)导致的问题
  • 添加日志记录:将每一步处理的观测值ID和状态写入日志文件,方便定位崩溃时的具体数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 11:36:29