gpt4 book ai didi

python - Tfidf内存错误: How to avoid this issue?

转载 作者:行者123 更新时间:2023-11-30 08:47:02 39 4
gpt4 key购买 nike

我正在使用 scikit-learn TfidfVectorizer 找出两个文档中最重要的单词。每个文档大小为 1.9GB(约 9000 万字),并且已采用小写、词干化(使用 nltk.stem.porter.PorterStemmer)和无停用词(英语停用词)。

我使用以下代码:

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

我有 16GB RAM,在以 60% 使用率运行一段时间后,引发 MemoryError 异常。

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

但是这个错误仍然存​​在。

欢迎任何帮助。

谢谢!

最佳答案

Python 不会施加超出操作系统施加的内存限制。确保您没有使用 ulimit 或等效项来限制进程的内存使用。同时运行 top 并查看该进程是否使用了所有可用内存。

你的文档每个都接近 2GB 吗?它是多个文档的串联吗?如果是这样,也许可以进一步拆分文档。

我建议设置 Spark 安装并检查那里的代码。您已经拥有这些文件,因此唯一剩下的就是运行 tfidf 部分。它有Python 接口(interface),所以它会相当轻松。 Spark 针对大文件的处理进行了高度优化 - 也许它将克服 scikit-learn 的错误。

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)

关于python - Tfidf内存错误: How to avoid this issue?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35857837/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com