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

如何逐行读取文本作为GPT-2 generate方法输入并保存输出?

解决方案

以下是修正后的代码,可解决逐行处理输入并生成对应文本的问题:

# 使用上下文管理器同时处理输入输出文件,更安全简洁
with open('/content/drive/My Drive/input_data.txt', 'r', encoding='utf-8') as input_file, \
     open('/content/drive/My Drive/output_data.txt', 'w', encoding='utf-8') as output_file:
    for line in input_file:
        # 去除行首尾空白字符(含换行符),跳过空行避免无效生成
        line_clean = line.strip()
        if not line_clean:
            continue
        
        # 编码输入文本
        ids = tokenizer.encode(line_clean, add_special_tokens=True, return_tensors='pt')
        # 确保输入tensor与模型在同一设备(GPU/CPU)
        if next(model.parameters()).is_cuda:
            ids = ids.cuda()
        
        # 生成文本,调整max_new_tokens控制新增内容长度
        final_outputs = model.generate(
            ids,
            do_sample=True,
            max_new_tokens=50,  # 设置你需要的新增token数量,比如50
            pad_token_id=model.config.eos_token_id,
            top_k=50,
            top_p=0.95,
            num_return_sequences=1
        )
        
        # 解码结果并写入,添加换行符分隔每行输出
        generated_text = tokenizer.decode(final_outputs[0], skip_special_tokens=True)
        output_file.write(generated_text + '\n')

关键修改说明:

  • 双层上下文管理器:避免手动关闭文件时的潜在错误,同时简化代码结构。
  • 行内容清理:通过strip()去除多余空白,跳过空行,防止无效输入导致的异常或无意义生成。
  • 设备对齐:确保输入tensor和模型运行在同一设备(GPU/CPU),避免隐性设备不匹配问题(可能是循环中断的诱因之一)。
  • 生成长度调整:原代码max_new_tokens=ids.shape[1]+1仅新增1个token,生成内容几乎和原输入一致;改为固定数值可控制实际生成的新增内容长度。
  • 输出格式规范:写入时添加\n,保证每行生成结果单独成行,避免内容堆叠。

额外排查建议:

  • 检查input_data.txt的编码格式,确保为UTF-8,避免读取时乱码或截断。
  • 若怀疑循环未遍历所有行,可在循环内添加print(line_clean)调试,确认输入文件是否存在特殊格式(如仅一行、含不可见字符)。
  • 若文件过大,直接迭代文件对象比readlines()更高效,后者会将所有行加载到内存,可能引发性能问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 01:51:17