从稀疏转换为稠密时CountVectorizer内存不足

2024-10-03 09:18:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图运行这段代码来计算一堆文档中每个单词的相对频率(很多,超过40000个),我无法减少词汇表的大小,并且在使用12GB RAM的Colab上运行时会抛出内存不足错误。 如何重构代码,使我不必调用X.toarray()将稀疏转换为稠密并抛出内存不足错误(120000字*40000个文档)

vect = CountVectorizer(vocabulary=list(word_to_index.keys()), tokenizer=lambda x: x.split())
X = vect.fit_transform(docs)
X_arr = X.toarray()
rel_freq = np.sum(X_arr, axis=0) / len(docs)
names = vect.get_feature_names()

如果您想知道为什么我需要这样做是因为我正在实现ConWea代码: https://github.com/dheeraj7596/ConWea的数据量大于作者。 非常感谢大家


Tags: 词汇表代码文档docsnames错误单词ram
1条回答
网友
1楼 · 发布于 2024-10-03 09:18:25

如果只需要频率,可以使用稀疏矩阵的sum method求和:

from sklearn.feature_extraction.text import CountVectorizer
vectorizer = CountVectorizer()

corpus = ['This is the first document.','This is the second second document.',
'And the third one.','Is this the first document?']

X = vectorizer.fit_transform(corpus)

X.sum(axis=0)/len(corpus)
matrix([[0.25, 0.75, 0.5 , 0.75, 0.25, 0.5 , 1.  , 0.25, 0.75]])

X.toarray().sum(axis=0)/ len(corpus)
array([0.25, 0.75, 0.5 , 0.75, 0.25, 0.5 , 1.  , 0.25, 0.75])

相关问题 更多 >