【问题标题】:Memory Error TFIDF cosine similarity in pythonpython中的内存错误TFIDF余弦相似度
【发布时间】:2019-03-27 02:02:39
【问题描述】:

有一个包含项目描述的大型数据集。它包含项目 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】:

    发生 MemoryError 是因为输出 (a) 大得离谱且 (b) 密集,无论它是存储在稀疏矩阵还是密集矩阵中。

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

    (b) 如果这些条目中的大多数为 0,那么稀疏矩阵将节省空间。但通常情况下,相似度得分并非如此。 Cosine(i,j) 将为 0,例如,仅适用于具有 0 个共同词的项目对。

    【讨论】:

      猜你喜欢
      • 2016-08-14
      • 2014-09-17
      • 1970-01-01
      • 2017-03-26
      • 2020-06-11
      • 2020-08-12
      • 2011-01-01
      • 2014-11-19
      相关资源
      最近更新 更多