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

标签 python machine-learning scikit-learn text-mining tf-idf

我正在使用 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/

相关文章:

python - 使用不是来自派生类的变量初始化基类

machine-learning - Libsvm 模型文件格式 无型号

python-3.x - 使用 NaiveBayesClassifier 对文本进行分类

python - Django - (OperationalError) fatal error : Ident authentication failed for user "username"

python - 识别表中的 RA 和 Dec 重复项

python - 使用 conda 安装适用于 OS X 的 pytorch 的问题

python - 在不同长度的音频文件上使用 sklearn

python - 尝试在 scikit-learn 中并行化参数搜索会导致 "SystemError: NULL result without error in PyObject_Call"

python - 带有 rbf 内核的前 10 个功能 SVC

python - keras 分类和二元交叉熵