【发布时间】:2020-09-30 05:40:17
【问题描述】:
我有一个包含 2 列和 500 万行的 df,所有文本(客户对企业的评论)。
df.head() 产生:
df.info() 显示内存使用量只有 120.3+ MB
我正在尝试使用 gensim 库对 df['text'] 进行主题建模。我尝试先创建一个文档项矩阵 (dtm),然后执行潜在 Dirichlet 分配 (LDA),如下所示:
from sklearn.feature_extraction.text import CountVectorizer
from nltk.corpus import stopwords
from gensim import matutils, models
import scipy.sparse
cv = CountVectorizer(stop_words='english')
data_cv = cv.fit_transform(df.text)
data_dtm = pd.DataFrame(data_cv.toarray(), columns=cv.get_feature_names()) #LINE THROWING MemoryError
data_dtm.index = df.index
tdm = data_dtm.transpose()
sparse_counts = scipy.sparse.csr_matrix(tdm)
corpus = matutils.Sparse2Corpus(sparse_counts)
id2word = dict((v, k) for k, v in cv.vocabulary_.items())
lda = models.LdaModel(corpus=corpus, id2word=id2word, num_topics=2, passes=10)
lda.print_topics()
问题:但第 7 行 (pd.DataFrame()) 抛出 MemoryError,而我仍有 60% 的机器内存可用。即使我对 df 的前 100,000 行重复该操作,我也会得到相同的 MemoryError。
由于这是主题建模,我宁愿将所有行一起分析,或者至少分几批分析。
问题 是什么导致 Python 在将data_cv 转换为数据帧时内存不足?我怎样才能克服它?
【问题讨论】:
标签: pandas gensim lda topic-modeling