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

在Google Colab运行EditNTS报pickle协议5不支持错误及模型使用咨询

EditNTS运行问题解决方案

1. pickle协议5报错修复

报错原因:你本地生成pickle文件用的是Python 3.8+版本,默认使用pickle协议5,而Colab当前环境的Python 3.7自带的标准库pickle不支持该版本协议。你之前的修改不生效是因为pd.read_pickle内部默认调用标准库的pickle模块,不会使用你手动导入的pickle5。
修复步骤:

  • 先安装pickle5:!pip install pickle5
  • 替换data.py中原有的pandas读取pkl代码:
    原来的代码:
self.df = pd.read_pickle(data_path)

替换为:

import pickle5 as pickle
with open(data_path, 'rb') as f:
    self.df = pickle.load(f)

可选替代方案:将Colab的Python版本升级到3.8及以上,Python 3.8开始原生支持pickle协议5,不需要额外修改读取代码。

2. 模型逐句简化调用方案

拿到main.py返回的模型实例后,新增自定义推理函数即可实现逐句处理,示例代码如下:

import torch

def simplify_single_sentence(complex_sent, model, vocab, max_gen_len=50, beam_size=3, use_cuda=True):
    # 输入句预处理,需和训练阶段的分词、映射规则完全一致
    token_list = complex_sent.strip().lower().split()
    src_id_list = [vocab.stoi[token] if token in vocab.stoi else vocab.unk_id for token in token_list]
    src_tensor = torch.tensor(src_id_list).unsqueeze(0)
    if use_cuda:
        src_tensor = src_tensor.cuda()
    
    # 调用模型生成接口
    pred_id_list = model.generate(src_tensor, max_length=max_gen_len, beam_size=beam_size)
    
    # 生成结果转换为文本
    pred_token_list = [
        vocab.itos[id] for id in pred_id_list[0] 
        if id not in {vocab.sos_id, vocab.eos_id, vocab.pad_id}
    ]
    return ' '.join(pred_token_list)

# 逐句处理复杂文档示例
complex_doc = [
    "复杂句1",
    "复杂句2"
]
simple_doc = [simplify_single_sentence(sent, model, vocab) for sent in complex_doc]

注意事项:

  • 调用前需确认模型已加载训练好的权重
  • 预处理规则必须和训练阶段完全一致,否则会出现OOV过多、生成效果差的问题
  • 如果不需要用GPU,把use_cuda设为False即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:57:02