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

使用Gensim在自有语料实现词嵌入时内存不足如何解决

内存不足原因

你当前代码的核心问题是对每条文本的所有词向量做拼接,向量维度会随句子长度线性增长。比如长度为200的句子拼接后是200*100=20000维,万级样本量就会轻松占满12GB内存。

可行解决方案

1. 改用固定维度的句向量聚合(优先级最高)

放弃拼接操作,对单条文本内的所有词向量做平均/最大池化,得到固定100维的句向量,内存占用可降低90%以上,同时完全满足绝大多数下游文本分类、聚类任务的需求。
示例代码:

import numpy as np

train_documents = []
for document in X_train_list:
    # 过滤词表外的词,增加容错性
    word_vecs = [model.wv[word] for word in document if word in model.wv]
    if word_vecs:
        # 平均池化得到固定维度句向量
        doc_vec = np.mean(word_vecs, axis=0)
    else:
        # 空文本返回零向量
        doc_vec = np.zeros(model.vector_size)
    train_documents.append(doc_vec)

# 最终数组shape为(样本数, 100),内存占用极低
train_documents = np.array(train_documents)

2. 固定序列长度做截断补全

如果你的下游任务是序列标注等需要保留词级信息的场景,可统一设定最大序列长度(比如取所有文本长度的95分位数作为max_len),长文本截断,短文本补零,保证所有样本维度一致,避免超长文本拉高整体内存占用。

3. 优化Word2Vec训练参数

  • 调高min_count阈值:你当前设置min_count=1会保留所有只出现1次的生僻词,词表冗余度极高,改为min_count=3或min_count=5可直接砍掉大半无用词向量,同时不影响模型效果。
  • 降低向量维度:如果任务精度要求允许,可将size参数从100调整为50或30,向量体积直接减半。

4. 分批处理落地存储

如果你确实需要保留所有词的拼接向量,不要将全量结果都存在内存的列表中,每处理1000~5000条样本就将结果写入磁盘的npy文件,清空内存缓存后再处理下一批,避免内存堆积。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:27:06