我需要一些有关数据类型、矩阵和 RAM 使用情况的帮助。我正在构建一个产品推荐系统,它将使用产品描述来查找类似产品并推荐它们。我在描述上使用 CountVectorizer 来查找语义相似的描述,对它们进行排名并建议相似的描述。
问题出现在计算余弦相似度矩阵时。我的初始数据帧有 47,046 行,所以我在本地电脑和 Colab 笔记本上都遇到了 RAM 问题。
检查 CountVectorizer 的计数矩阵,我发现它将其输出为 int64:
<47046x3607 sparse matrix of type '
使用“count_matrix = count_matrix.astype(np.int32)”将其转换为 int32 没有问题,但是当从 sklearn 运行余弦相似性时,它仍然输出 float64 而不是 float32 (我通过使用较小的数据集进行测试证实了这一点,该数据集可以处理得很好)。
有什么办法强制使用float32吗?或者一种真正解决矩阵高 RAM 使用率的方法?
有什么办法强制使用float32吗?
您可以将输入稀疏矩阵转换为 float32。在我的测试中,这会导致输出数组为 float32。
这是我写的测试程序。
import scipy
import sklearn.metrics
import numpy as np
rvs = scipy.stats.randint(low=0, high=10)
A = scipy.sparse.random(47046, 3607, density=0.0005, data_rvs=rvs.rvs, dtype=np.int64)
print("starting dtype", A.dtype)
print("output dtype", sklearn.metrics.pairwise.cosine_similarity(A, A).dtype)
A = A.astype(np.float32)
print("starting dtype", A.dtype)
print("output dtype", sklearn.metrics.pairwise.cosine_similarity(A, A).dtype)
输出:
starting dtype int64
output dtype float64
starting dtype float32
output dtype float32