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

合并稠密向量(词嵌入)与稀疏向量(独热编码)时内核崩溃求助

内核崩溃原因与解决方案

核心问题:内存耗尽

你的代码中sparse_features.toarray()会把稀疏矩阵转成稠密数组,而这个数组的规模是203621 × 70939 ≈144亿个元素。就算用float32类型存储,也需要约57GB内存,远超普通机器的内存容量,直接导致内存耗尽,内核崩溃。

优化方案

方案1:用稀疏矩阵格式拼接(推荐)

无需将稀疏特征转成稠密数组,把稠密向量转成稀疏矩阵后,直接用稀疏矩阵拼接方法,全程保持稀疏格式,内存占用极低。

from scipy.sparse import hstack, csr_matrix

def combine_sparse_and_dense_features(dense_vectors, sparse_features):
    # 将稠密向量列转换为稀疏矩阵
    dense_sparse = csr_matrix(np.stack(dense_vectors.values))
    # 横向拼接稀疏矩阵
    combined_sparse = hstack([dense_sparse, sparse_features])
    return combined_sparse

# 调用示例
dense_vectors = X_train['word_embedding']
sparse_features = X_train_ohe
combined_vectors = combine_sparse_and_dense_features(dense_vectors, sparse_features)

# 若后续确实需要稠密数组(谨慎操作),可按需转换
# combined_dense = combined_vectors.toarray()

方案2:优化稠密向量的处理逻辑

你原代码中list(dense_vectors)再转array的操作冗余,直接用np.stack()即可将向量列转换为标准numpy数组,减少不必要的内存开销:

# 替代原代码中ar1的生成逻辑
ar1 = np.stack(dense_vectors.values)

方案3:分批处理(仅当必须得到稠密数组时使用)

如果业务要求必须输出完整的稠密数组,可分批次处理并将结果保存到磁盘,避免一次性占用大量内存:

import numpy as np

def process_batch(dense_batch, sparse_batch):
    dense_arr = np.stack(dense_batch.values)
    sparse_arr = sparse_batch.toarray()
    return np.concatenate([dense_arr, sparse_arr], axis=1)

# 按批次处理
batch_size = 10000
total = len(X_train)
for idx in range(0, total, batch_size):
    dense_batch = X_train['word_embedding'].iloc[idx:idx+batch_size]
    sparse_batch = X_train_ohe[idx:idx+batch_size]
    combined_batch = process_batch(dense_batch, sparse_batch)
    # 保存批次结果到本地
    np.save(f'combined_feature_batch_{idx//batch_size}.npy', combined_batch)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 17:20:57