- 训练脚本: train_v2.py + llm_chat_improved.py - API生成: api_correction.py - 高温多样化: regenerate_all_high_temp.py - 每日数据生成: daily_data_gen.py - 数据: xiaoli_train_v2.json(40776条) + vocab_v2.json - 蒸馏问题: exam_distill_questions等 - Web服务: web_server.py + chat.html - 新增 .gitignore 排除旧版文件
73 lines
2.4 KiB
Python
73 lines
2.4 KiB
Python
#!/usr/bin/env python3
|
|
"""高温度多样化生成 — 每个问题跑 N 次,获得多种回答"""
|
|
import sys, os, json, random, time
|
|
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
|
sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', buffering=1)
|
|
from api_correction import batch_generate_astron as batch_generate
|
|
|
|
MODEL_DIR = os.path.dirname(os.path.abspath(__file__))
|
|
|
|
# 载入全部问题
|
|
with open(os.path.join(MODEL_DIR, 'mega_questions.json')) as f:
|
|
mega = json.load(f)
|
|
total_q = len(mega)
|
|
print(f"mega_questions 共 {total_q} 条")
|
|
|
|
# 温度配置:逐渐升高,产出多样化
|
|
TEMP_CONFIG = [0.9, 1.1, 1.3, 1.5] # 跑4轮
|
|
all_new_results = []
|
|
|
|
for round_idx, temp in enumerate(TEMP_CONFIG):
|
|
print(f"\n{'='*60}")
|
|
print(f"第{round_idx+1}轮: 温度={temp}")
|
|
print(f"{'='*60}")
|
|
|
|
questions = [item['question'] for item in mega]
|
|
|
|
t0 = time.time()
|
|
results = batch_generate(questions, temperature=temp)
|
|
elapsed = time.time() - t0
|
|
|
|
# 标注来源
|
|
for r in results:
|
|
r['temperature'] = temp
|
|
r['round'] = round_idx + 1
|
|
|
|
all_new_results.extend(results)
|
|
print(f"轮{round_idx+1} 完成: {len(results)}条 ({elapsed:.0f}s)")
|
|
print(f"累计: {len(all_new_results)}条")
|
|
|
|
# 去重(问题+回答完全重复才去)
|
|
print(f"\n总体去重中...")
|
|
seen = set()
|
|
unique_results = []
|
|
for r in all_new_results:
|
|
key = (r['question'][:100], r['answer'][:100])
|
|
if key not in seen:
|
|
seen.add(key)
|
|
unique_results.append(r)
|
|
|
|
print(f"去重前: {len(all_new_results)}条 → 去重后: {len(unique_results)}条")
|
|
|
|
# 追加到训练集
|
|
for tgt in ['xiaoli_train_v2.json', 'xiaoli_merged_data_v2.json']:
|
|
tp = os.path.join(MODEL_DIR, tgt)
|
|
with open(tp, encoding='utf-8') as f:
|
|
cur = json.load(f)
|
|
|
|
ex = set((it.get("question","")[:100], it.get("answer","")[:100]) for it in cur)
|
|
to_add = []
|
|
for r in unique_results:
|
|
key = (r['question'][:100], r['answer'][:100])
|
|
if key not in ex:
|
|
ex.add(key)
|
|
to_add.append({"question": r['question'], "answer": r['answer']})
|
|
|
|
cur.extend(to_add)
|
|
with open(tp, 'w', encoding='utf-8') as f:
|
|
json.dump(cur, f, ensure_ascii=False, indent=2)
|
|
if 'train' in tgt:
|
|
print(f"✅ 训练集 +{len(to_add)}条 → {len(cur)}条")
|
|
|
|
print(f"\n🎉 全部完成!")
|
|
print(f"总数: {len(cur)}条") |