Files
ModelHub XC 1765dbc1b4 初始化项目,由ModelHub XC社区提供模型
Model: AngelWarmSmile123/yao-bao-bao8-ALL
Source: Original Platform
2026-07-20 17:06:10 +08:00

96 lines
3.4 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import json
import random
import os
INPUT_FILE = r"D:\双生天使的怀抱\爱的数据集\sephirot_final_run\train_all.jsonl"
OUTPUT_DIR = r"D:\双生天使的怀抱\2026-05-24-16-54-24\sft_data"
OUTPUT_TRAIN = os.path.join(OUTPUT_DIR, "train.jsonl")
OUTPUT_VAL = os.path.join(OUTPUT_DIR, "val.jsonl")
VAL_RATIO = 0.1
records = []
skipped = 0
total = 0
with open(INPUT_FILE, 'r', encoding='utf-8') as f:
for line in f:
total += 1
line = line.strip()
if not line:
continue
try:
data = json.loads(line)
except json.JSONDecodeError as e:
print(f"JSON解析失败 第{total}行: {e}")
skipped += 1
continue
query = data.get('input', {}).get('user_query', '')
cot = data.get('chain_of_thought', {})
# 方案B: 完整推理链推荐保留16质点全部过程
if isinstance(cot, dict):
parts = []
for key in ['D1_kether','H1_ego','H2_superego','H3_true_self','H4_logic',
'H5_empathy','H6_happiness','D2_binah_chesed','D3_chokmah_gevurah',
'D5_tiferet','D6_netzach','D7_hod','D4_yesod','D8_victory',
'D10_kingdom']:
val = cot.get(key, '')
if isinstance(val, dict):
# 尝试多个可能的输出字段
for sub_key in ['final_output', 'analysis', 'synthesis',
'emotional_expression', 'logic_empathy_union',
'response', 'output']:
if sub_key in val and val[sub_key]:
val = val[sub_key]
break
else:
val = str(val) if val else ''
if val and isinstance(val, str) and len(val.strip()) > 0:
parts.append(f"[{key}]: {val}")
output = '\n\n'.join(parts)
elif isinstance(cot, str):
output = cot
else:
output = str(cot)
if query and output and len(query.strip()) > 0 and len(output.strip()) > 10:
records.append({
"conversations": [
{"from": "human", "value": query},
{"from": "gpt", "value": output}
]
})
else:
skipped += 1
print(f"总行数: {total}, 有效: {len(records)}, 跳过: {skipped}")
# 打乱并分割
random.seed(42)
random.shuffle(records)
val_size = max(int(len(records) * VAL_RATIO), 100)
val_data = records[:val_size]
train_data = records[val_size:]
os.makedirs(OUTPUT_DIR, exist_ok=True)
with open(OUTPUT_TRAIN, 'w', encoding='utf-8') as f:
for r in train_data:
f.write(json.dumps(r, ensure_ascii=False) + '\n')
with open(OUTPUT_VAL, 'w', encoding='utf-8') as f:
for r in val_data:
f.write(json.dumps(r, ensure_ascii=False) + '\n')
print(f"转换完成! 训练集: {len(train_data)}条, 验证集: {len(val_data)}")
print(f"训练集文件: {OUTPUT_TRAIN}")
print(f"验证集文件: {OUTPUT_VAL}")
# 统计一下平均长度
if train_data:
lens = [len(str(r['conversations'][1]['value'])) for r in train_data]
print(f"平均输出长度: {sum(lens)//len(lens)} 字符")
print(f"最大输出长度: {max(lens)} 字符")
print(f"最小输出长度: {min(lens)} 字符")