当我尝试使用 text2vec 包中的 sim2() 创建 Jaccard 相似度矩阵时,我对一个奇怪的性能问题感到困惑。我有一个稀疏矩阵 [210,000 x 500],我想获得上面提到的 Jaccard 相似度矩阵。当我直接尝试在 sim2 函数中使用矩阵时,它需要 30 多分钟,并且错误消息中的 culminutes
这是我使用的 R 脚本:
library(text2vec)
JaccSim <- sim2(my_sparse_mx, method = "jaccard", norm = "none") # doesn't work
这是我在运行脚本半小时后收到的错误消息:
文件 ../Core/cholmod_sparse.c 第 92 行的 Cholmod 错误“问题太大”。
但是,当我从原始矩阵中子集另一个稀疏矩阵时,使用所有行并运行脚本,只需要 3 分钟,并且成功生成了 Jaccard 相似度矩阵(它本身就是一个稀疏矩阵)。
spmx_1 <- Matrix(my_sparse_mx[1:210000], sparse = TRUE)
JaccSim <- sim2(spmx_1, method = "jaccard", norm = "none") #works!
这个运行成功。这里发生了什么?我所做的就是将我的 sparse_matrix 子集到另一个矩阵中(使用原始矩阵的所有行)并使用第二个稀疏矩阵。
澄清一下,my_sparse_mx 有 210,000 行(我使用以下代码创建了它有这么多行:
my_sparse_mx <-Matrix(0,nrow = 210000,ncol = 500,sparse = TRUE))
然后在其他一些过程中相应地用 1 填充它。另外,当我做 nrows(my_sparse_mx) 时,我仍然得到 210,000。
我想知道为什么会这样。