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

Google Colab RAM不足无法计算电影TF-IDF矩阵余弦相似度求解决方案

问题核心原因

你遇到的内存溢出是因为全量计算45466部电影的两两余弦相似度时,会生成大小约16GB的稠密矩阵,直接超出了Colab免费实例的内存上限,DataCamp的教程可正常运行大概率是因为其使用了裁剪后的小规模数据集,或是运行环境内存配置更高。你尝试的网传RAM扩容死循环代码早已失效,请勿继续使用。

可行解决方案

方案1:按需计算相似度(最优,零额外内存开销)

你不需要提前生成全量相似度矩阵,仅在查询某部电影的相似结果时,单独计算该电影与全量数据的相似度即可,内存占用可忽略,代码如下:

  1. 先构建电影标题到索引的映射
indices = pd.Series(metadata.index, index=metadata['original_title']).drop_duplicates()
  1. 改写推荐函数,仅计算单部电影的相似度
def get_recommendations(title):
    # 获取目标电影的索引
    idx = indices[title]
    # 仅计算目标电影与所有电影的余弦相似度,不存储全量矩阵
    single_cosine_sim = linear_kernel(tfidf_matrix[idx], tfidf_matrix).flatten()
    # 排序取Top10相似结果(排除自身)
    sim_scores = sorted(enumerate(single_cosine_sim), key=lambda x: x[1], reverse=True)[1:11]
    movie_indices = [i[0] for i in sim_scores]
    return metadata['original_title'].iloc[movie_indices]

调用时直接传入电影名即可,比如get_recommendations("The Dark Knight")

方案2:压缩TF-IDF矩阵维度

如果确实需要批量计算全量相似度,可先降低TF-IDF矩阵的维度,减小后续计算的内存开销:

  1. 限制TF-IDF的最大特征数,仅保留高频词汇:
# 仅保留出现频率最高的20000个词汇,可根据需求调整数值
tfidf = TfidfVectorizer(stop_words="english", max_features=20000)
metadata["overview"] = metadata["overview"].fillna("")
tfidf_matrix = tfidf.fit_transform(metadata["overview"])
  1. 还可搭配SVD进一步降维:
from sklearn.decomposition import TruncatedSVD
# 压缩到100维,可根据需求调整维度
svd = TruncatedSVD(n_components=100, random_state=42)
reduced_tfidf = svd.fit_transform(tfidf_matrix)
# 此时再计算全量相似度矩阵的内存开销会降低70%以上
cosine_sim = linear_kernel(reduced_tfidf, reduced_tfidf)

方案3:分批计算全量相似度矩阵

如果必须保留原始TF-IDF维度且需要全量矩阵,可分批计算后拼接结果:

import numpy as np
batch_size = 1000
cosine_sim = np.zeros((tfidf_matrix.shape[0], tfidf_matrix.shape[0]), dtype=np.float32)
for i in range(0, tfidf_matrix.shape[0], batch_size):
    end = min(i + batch_size, tfidf_matrix.shape[0])
    cosine_sim[i:end] = linear_kernel(tfidf_matrix[i:end], tfidf_matrix)

使用float32替代默认的float64可直接将矩阵内存占用减半。


内容的提问来源于stack exchange,提问作者Elena Herrero

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 23:39:01