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

迭代加载目录下gensim预训练Word2Vec模型报错如何解决?

第一个TypeError报错原因

你使用os.fsencode()将输入路径转为了字节类型,调用os.listdir()返回的文件名也为字节类型,最终拼接的file_path是字节对象,而gensim的load方法内部判断文件后缀时使用的是字符串类型的后缀名,类型不匹配触发报错。你后续将input_dir改为字符串类型的操作是正确的,已经解决了该问题。

第二个UnpicklingError报错原因

该错误属于反序列化失败,核心原因是你批量遍历目录时,将非Word2Vec主模型的无效文件传入了load方法:

  • 可能是系统生成的隐藏文件(比如macOS的.DS_Store、Windows的Thumbs.db)
  • 可能是gensim保存模型时自动生成的附属权重文件(比如*.wv.vectors.npy这类,这类文件不需要手动加载,主模型加载时会自动读取)
  • 可能是目录下的子文件夹、临时缓存文件
    你单独加载时选择的都是正确的主模型文件,因此不会触发错误,批量无差别加载时就会遇到无效文件触发反序列化失败。

解决方案

需要在遍历文件时增加过滤规则,只传入符合要求的模型主文件,也可以增加异常捕获避免无效文件中断加载流程,示例代码如下:

import gensim
import os

def iterated_gensim_load(embed_dir: str):
    loaded_models = {}
    for filename in os.listdir(embed_dir):
        # 跳过隐藏文件
        if filename.startswith('.'):
            continue
        # 只加载你保存模型时约定后缀的文件,比如你保存时统一用.model作为主模型后缀,可按需修改
        if not filename.endswith('.model'):
            continue
        file_path = os.path.join(embed_dir, filename)
        # 跳过子目录
        if not os.path.isfile(file_path):
            continue
        # 异常捕获,跳过加载失败的文件
        try:
            model = gensim.models.Word2Vec.load(file_path)
            loaded_models[filename] = model
        except Exception as e:
            print(f"文件{filename}加载失败,已跳过,错误信息:{e}")
    return loaded_models

# 调用方法
input_dir = 'User/Directory/'
all_word2vec_models = iterated_gensim_load(input_dir)

如果你保存模型时没有统一设置后缀,可以删除后缀判断的逻辑,仅保留隐藏文件过滤、子目录过滤和异常捕获逻辑,也可以正常完成批量加载。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 02:27:01