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

时间:2018-08-15 13:41:32

标签: python out-of-memory sparse-matrix cosine-similarity

有一个包含项目描述的大型数据集。它包含商品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以及如何处理吗?

1 个答案:

答案 0 :(得分:0)

发生MemoryError的原因是,无论输出是存储在稀疏矩阵还是密集矩阵中,输出(a)都非常大,并且(b)密集。

(a)如果输入包含n个项目,则存在计算和返回的n *(n-1)个相似点。 (因为sim(i,j)= sim(j,i),所以实际上只有n *(n-1)/ 2个相似度,但是矩阵将每个相似度列出两次。)如果有300336个项,则所得矩阵将包含90个十亿个条目。我相信大约有720 G的空间。

(b)如果这些条目大多数都是0,那么稀疏矩阵将节省空间。但是,相似性得分通常并非如此。例如,仅对于共有0个单词的项对,余弦(i,j)将为0。