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

Windows下Scipy处理小文件出现Bow Memory Error问题求助

解决Windows下Python构建词矩阵时的MemoryError问题

首先咱们直接揪出问题核心:你Windows上安装的是32位Python——从报错路径c:\program files (x86)\python36-32\lib就能明确看出来。32位进程的内存上限通常在4GB左右(实际可用空间还要更小),哪怕你的系统有16GB物理内存,32位Python也没法利用超出的部分,这就是为什么明明内存剩余很多却触发了内存错误。而你的Mac用的是64位Python,自然能顺畅运行。

下面给你两个优先级不同的解决方案:

1. 更换为64位Python(最彻底的解决办法)

卸载当前的32位Python3.6,去Python官网下载对应版本的64位安装包重新安装。64位Python可以充分利用系统的大内存,后续不管是转密集矩阵还是处理更大的数据集,都不会再因为内存地址空间限制报错。

2. 避免将稀疏矩阵转为密集矩阵(更高效的最优做法)

其实你完全没必要调用todense()!bow_features是scipy的稀疏矩阵,scikit-learn里几乎所有的机器学习模型、特征转换工具(比如你导入的TfidfTransformer)都支持直接使用稀疏矩阵作为输入。

稀疏矩阵只会存储非零元素,内存占用极低——你的数据集只有7k多唯一token,稀疏矩阵的内存占用可能只有几MB。而转成密集矩阵后,会把所有零元素都存起来,既浪费内存又拖慢计算速度。

修改后的代码示例:

import pandas as pd
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.feature_extraction.text import CountVectorizer

corpus = open("cleancorpus.txt","r",encoding = "utf8")

def bow_extractor(corpus, ngram_range=(1,1)):
    vectorizer = CountVectorizer(
        analyzer=u'word', 
        binary=False, 
        decode_error=u'strict', 
        encoding=u'utf-8', 
        input=u'content', 
        lowercase=True, 
        max_df=1.0, 
        max_features=None, 
        min_df=1, 
        ngram_range=ngram_range, 
        preprocessor=None, 
        stop_words=None, 
        strip_accents=None, 
        token_pattern=u'(?u)\\b\\w\\w+\\b', 
        tokenizer=None, 
        vocabulary=None
    )
    features = vectorizer.fit_transform(corpus)
    return vectorizer, features

bow_vectorizer, bow_features = bow_extractor(corpus)
# 直接用稀疏矩阵做后续操作,比如TF-IDF转换
tfidf_transformer = TfidfTransformer()
tfidf_features = tfidf_transformer.fit_transform(bow_features)
# 后续建模直接用tfidf_features或者bow_features即可

顺便提一句,你之前遇到的spacy MemoryError问题,很大概率也是32位Python的内存限制导致的,换成64位版本应该也能解决类似问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:20:27