工作中有清洗 jsonl 文件的需求,原因是 LLM 输出的内容有可能存在错误的补全,不能直接全部用于 Fine-tuning。
这个脚本清洗了 jsonl 文件中 input/output == ""input 行重复 的情况。

import json
import random

input_file = 'file.jsonl'
output_file = 'file_cleaned.jsonl'

# 用于存储唯一 input 的行
input_map = {}

total_lines = 0          # 总有效行数(合法 JSON)
filtered_count = 0       # 被踢掉的行数(output 为空或 input 为空)

with open(input_file, 'r', encoding='utf-8') as f:
    for line in f:
        line = line.strip()
        if not line:
            continue
        try:
            item = json.loads(line)
            total_lines += 1

            # 检查 output 是否为空
            if item.get("output", "").strip() == "":
                filtered_count += 1
                continue

            inp = item.get("input")
            if inp is None:
                filtered_count += 1
                continue

            # 对重复 input 随机选择一条保留
            if inp not in input_map:
                input_map[inp] = [item]
            else:
                input_map[inp].append(item)
        except json.JSONDecodeError:
            continue  # 跳过无效 JSON 行

# 随机保留每组重复 input 中的一条
unique_items = [random.choice(items) for items in input_map.values()]

# 写入输出文件
with open(output_file, 'w', encoding='utf-8') as f:
    for item in unique_items:
        f.write(json.dumps(item, ensure_ascii=False) + '\n')

# 最终统计
retained_count = len(unique_items)
print(f"总处理条数(有效 JSON): {total_lines}")
print(f"被踢掉的条数(空 output 或无 input): {filtered_count}")
print(f"最终保留条数(按 input 去重): {retained_count}")
print(f"文件被保存为 {output_file}")

标签: none

已有 7 条评论

  1. 新车新盘 嘎嘎稳 嘎嘎靠谱coinsrore.com

  2. 2025年10月新盘 做第一批吃螃蟹的人

  3. 2025年10月新盘 做第一批吃螃蟹的人coinsrore.com
    新车新盘 嘎嘎稳 嘎嘎靠谱coinsrore.com
    新车首发,新的一年,只带想赚米的人coinsrore.com
    新盘 上车集合 留下 我要发发 立马进裙coinsrore.com
    做了几十年的项目 我总结了最好的一个盘(纯干货)coinsrore.com
    新车上路,只带前10个人coinsrore.com
    新盘首开 新盘首开 征召客户!!!coinsrore.com
    新项目准备上线,寻找志同道合 的合作伙伴coinsrore.com
    新车即将上线 真正的项目,期待你的参与coinsrore.com
    新盘新项目,不再等待,现在就是最佳上车机会!coinsrore.com
    新盘新盘 这个月刚上新盘 新车第一个吃螃蟹!coinsrore.com

  4. 华纳公司合作开户所需材料?电话号码15587291507 微信STS5099
    华纳公司合作开户所需材料?电话号码15587291507 微信STS5099
    华纳公司合作开户所需材料?电话号码15587291507 微信STS5099
    华纳公司合作开户所需材料?电话号码15587291507 微信STS5099
    华纳公司合作开户所需材料?电话号码15587291507 微信STS5099
    华纳公司合作开户所需材料?电话号码15587291507 微信STS5099
    华纳公司合作开户所需材料?电话号码15587291507 微信STS5099
    华纳公司合作开户所需材料?电话号码15587291507 微信STS5099

  5. 华纳个人账户开户流程?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】

  6. 华纳东方明珠客服电话是多少?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
    华纳东方明珠开户专线联系方式?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
    如何联系华纳东方明珠客服?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
    华纳东方明珠官方客服联系方式?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
    华纳东方明珠客服热线?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
    华纳东方明珠开户客服电话?(▲182(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
    华纳东方明珠24小时客服电话?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
    华纳东方明珠客服邮箱?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
    华纳东方明珠官方客服在线咨询?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
    华纳东方明珠客服微信?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】

  7. 华纳东方明珠客服电话是多少?(??155--8729--1507?《?薇-STS5099】【?扣6011643?】
    华纳东方明珠开户专线联系方式?(??155--8729--1507?《?薇-STS5099】【?扣6011643?】

添加新评论