内存错误python中的TFIDF余弦相似度

问题描述 投票:1回答:1

有一个包含项目描述的大型数据集。它包含项目ID和文本描述。可以为描述中的术语的tf_idf值建立余弦相似度矩阵。

我的数据集包含300336项的说明。尝试执行我的python代码时,我遇到了MemmoryError:

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import *

tf = TfidfVectorizer(analyzer='word',
                         ngram_range=(1, 1),
                         min_df=0)
tfidf_mx = tf.fit_transform(df.text)
cosine_similarities = linear_kernel(tfidf_mx)

我也尝试过另一种方式

sim_mx = cosine_similarity(tfidf_mx, dense_output=False)

但它也给了我一个MemoryError。

即使对于余弦相似度计算的稀疏矩阵,也可能存在上限?

你知道为什么会发生MemoryError以及如何对待它吗?

python out-of-memory sparse-matrix cosine-similarity
1个回答
0
投票

出现MemoryError是因为输出是(a)非常大且(b)密集,无论它是存储在稀疏矩阵还是密集矩阵中。

(a)如果输入包含n个项目,则计算和返回有n *(n - 1)个相似之处。 (由于sim(i,j)= sim(j,i),实际上只有n *(n - 1)/ 2个相似度,但矩阵列出了两个相似度。)对于300336项,得到的矩阵将包含90十亿条目。我相信这大约是720G的空间。

(b)如果这些条目中的大多数为0,那么稀疏矩阵将节省空间。但往往不是相似性得分的情况。例如,余弦(i,j)将为0,仅对于具有0个共同字的项目对。

© www.soinside.com 2019 - 2024. All rights reserved.