You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jupyter Notebook大型矩阵余弦相似度计算内存错误解决方案咨询

大型矩阵余弦相似度计算的内存优化方案

针对你8GB内存的设备,以下是几个可行的高效计算方法,避免内存错误:

1. 利用稀疏矩阵压缩存储

计数矩阵通常存在大量零值,转成稀疏矩阵后仅存储非零元素,能大幅降低内存占用,sklearn.metrics.pairwise.cosine_similarity原生支持稀疏矩阵输入:

from scipy.sparse import csr_matrix
from sklearn.metrics.pairwise import cosine_similarity

# 假设你的原始计数矩阵为count_matrix(numpy数组)
sparse_count_matrix = csr_matrix(count_matrix)
# 计算得到的相似度矩阵也是稀疏格式
cos_sim_sparse = cosine_similarity(sparse_count_matrix)

这种方式能把原本几十GB的内存需求降到几百MB级别,完全适配你的设备。

2. 分块计算+磁盘持久化

如果稀疏矩阵仍有压力,可将矩阵拆分成小块分批计算,每块计算完成后立即保存到磁盘,避免一次性占用大量内存:

import numpy as np

# 每次处理的行数,可根据内存调整(比如500或1000)
block_size = 1000
total_rows = count_matrix.shape[0]

for start_idx in range(0, total_rows, block_size):
    end_idx = min(start_idx + block_size, total_rows)
    # 计算当前块与全量矩阵的余弦相似度
    block_sim = cosine_similarity(count_matrix[start_idx:end_idx], count_matrix)
    # 保存到磁盘,避免驻留内存
    np.savez(f"cos_sim_block_{start_idx}_{end_idx}.npz", sim_block=block_sim)

后续需要使用时,可按需加载单个分块文件。

3. 计算Top-K近似相似度(推荐系统专属优化)

推荐系统通常只需要每个用户/物品的Top-K相似项,无需全量相似度矩阵,可使用近似最近邻算法减少计算量和内存占用:

from sklearn.neighbors import NearestNeighbors
from scipy.sparse import csr_matrix

sparse_matrix = csr_matrix(count_matrix)
# 初始化模型,设置需要获取的相似项数量(比如Top20)
nn_model = NearestNeighbors(n_neighbors=20, metric='cosine', algorithm='brute')
nn_model.fit(sparse_matrix)

# 获取每个样本的Top20相似项索引和余弦距离
distances, top_k_indices = nn_model.kneighbors(sparse_matrix)
# 余弦相似度 = 1 - 余弦距离
top_k_similarities = 1 - distances

这种方式的内存占用仅与样本数和Top-K数量相关,8GB内存完全够用。

4. 降低数据类型精度

将原始矩阵的int64类型转换为更低精度的数值类型,直接减少内存占用:

import numpy as np

# 转换为float32,内存占用减半(从8字节/元素降到4字节/元素)
count_matrix_float32 = count_matrix.astype(np.float32)
cos_sim = cosine_similarity(count_matrix_float32)

# 如果计数矩阵的数值范围较小(比如小于255),可尝试uint8(1字节/元素)
# count_matrix_uint8 = count_matrix.astype(np.uint8)

注意转换前需确认数值不会溢出,比如uint8仅支持0-255的数值。

内容的提问来源于stack exchange,提问作者Shenile A

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 16:38:20