有一个包含项目描述的大型数据集。它包含项目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十亿条目。我相信这大约是720G的空间。
(b)如果这些条目中的大多数为0,那么稀疏矩阵将节省空间。但往往不是相似性得分的情况。例如,余弦(i,j)将为0,仅对于具有0个共同字的项目对。