首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MemoryError:如何避免这个问题?

MemoryError:如何避免这个问题?
EN

Stack Overflow用户
提问于 2016-03-08 02:30:30
回答 1查看 5.7K关注 0票数 2

我使用scikit-learn TfidfVectorizer来找出两个文档中最重要的单词。每个文档的容量为1.9GB (约9,000万字),并且已经被更低的大小写、词干(使用nltk.stem.porter.PorterStemmer)和无尾词(英文停止词)。

我使用以下代码:

代码语言:javascript
运行
复制
def simp_tokenizer(text):
    from nltk import word_tokenize

    return word_tokenize(text)

def make_corpus(path):
    from glob import glob
    files = glob(path)

    for doc in files:
        yield open(doc, 'r').read()

def tfidf(path):

    from sklearn.feature_extraction.text import TfidfVectorizer

    corpus = make_corpus(path = path)
    tfidf = TfidfVectorizer(max_features = 500, max_df = 0.8, min_df = 0.2, use_idf = True, tokenizer = simp_tokenizer, analyzer = 'word', ngram_range = (1,1))
    tfs = tfidf.fit_transform(corpus)
    return tfs

我有16 60内存,在运行60%的内存一段时间后,引发MemoryError异常。

我做了一些研究,并加入了make_corpus函数,以避免同时将两个文档加载到内存中。我还根据SO和Mark博客上的建议,将max_features降至500,min_dfmax_df分别降至0.2和0.8,以解决这个问题。

但这一错误继续存在。

欢迎任何帮助。

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2016-03-09 10:47:38

Python不会将内存限制强加于操作系统所强加的范围之外。确保您没有用ulimit或等效的方法限制进程的内存使用。同时运行top,查看进程是否使用了所有可用内存。

你的文档怎么会接近2GB?这是多个文档的连接吗?如果是这样的话,也许可以更多地分割文档。

我建议设置星火安装并检查代码。您已经有了文件,所以只剩下运行tfidf部件了。它有Python接口,所以它是相当无痛的。火花是高度优化的工作与大文件-希望它将克服科学-学习的错误。

代码语言:javascript
运行
复制
from pyspark import SparkContext
from pyspark.mllib.feature import HashingTF
from pyspark.mllib.feature import IDF

sc = SparkContext(...)

# Load documents (one per line).
documents = sc.textFile("...").map(lambda line: line.split(" "))

hashingTF = HashingTF()
tf = hashingTF.transform(documents)

tf.cache()
idf = IDF().fit(tf)
tfidf = idf.transform(tf)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35857837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档