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

标签 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以及如何处理吗?

最佳答案

发生 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 个共同单词的项目对而言。

关于python - python中的内存错误TFIDF余弦相似度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51859880/

相关文章:

matlab - 加速Matlab中inv(X'*X)*Q*inv(X'*X)的计算?

python - 使用 Pandas 的独特连接数据框

python - PyFace、TraitsUI 和 TraitsGUI

python - 模块未找到错误 : No module named 'MySQLdb' Amazon MySQL RDS SQLAlchemy

android - 3686416 字节分配内存不足,android.view.InflateException : Binary XML file line #1: Error inflating class <unknown>

Android:如何解决Bitmap java.lang.OutOfMemoryError?

python - 如何在 TensorFlow 中索引稀疏张量?

python - 使用 SciPy 对带状稀疏矩阵进行矩阵求逆

文本框中的 Python docx 段落

c# - 为什么我一直收到 'System.OutOfMemoryException' ?