项目文件夹

文件
2026-07-13 13:24:13 +08:00

148 行
7.7 KiB
Python

import json
from collections import defaultdict, Counter
import argparse
import os
import sys
from glob import glob
import copy
from tqdm import tqdm
from datasets import load_dataset
import random
sys.set_int_max_str_digits(0)
sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
# from post_processors.code.clean import tag_cleaner
def main():
parser = argparse.ArgumentParser()
parser.add_argument("--critique_exec_file", type=str,
help="The file contains completion from the teacher model for critique, as well as the execution results."
"The inputs for this file are generated by `pp_critique_difficulty` script.")
parser.add_argument("--completion_file", type=str,
help="The file contains the completion for each query.")
parser.add_argument("--completion_response_field", type=str, default="completion")
parser.add_argument("--completion_problem_id_field", type=str, default="problem_id")
parser.add_argument("--prompt_file", type=str, default="prompts/apps/worsen_from_feedback_0shot_v1.0.txt")
parser.add_argument("--output_file", type=str)
parser.add_argument("--seed", type=int, default=42)
parser.add_argument("--sample_num", type=int, default=2000)
parser.add_argument("--split", type=str, default="train")
args = parser.parse_args()
random.seed(args.seed)
prompt_template = open(args.prompt_file).read()
_dataset = load_dataset("codeparrot/apps", split=args.split).to_list()
p_id2item = {item["problem_id"]: item for item in _dataset}
critiques = json.load(open(args.critique_exec_file))
correct_critiques = []
for item in critiques:
if isinstance(item["completion"], str) or isinstance(item["completion"], dict):
completions = [item["completion"]]
else:
completions = item["completion"]
preds = item["pred"]
for i, (comp, p, r) in enumerate(zip(completions, preds, item["res"])):
if r:
new_item = copy.deepcopy(item)
new_item["completion"] = comp
new_item["pred"] = p
new_item["res"] = r
correct_critiques.append(new_item)
print(f"Total correct critiques: {len(correct_critiques)}")
if os.path.exists(args.completion_file):
data = json.load(open(args.completion_file))
else:
data = []
for file in glob(args.completion_file):
data += json.load(open(file))
outputs = []
for item in tqdm(data):
problem_id = item[args.completion_problem_id_field]
critique = random.choice(correct_critiques)
while critique["problem_id"] == problem_id:
critique = random.choice(correct_critiques)
preds = item["pred"]
if not preds:
continue
if isinstance(preds, str):
preds = [preds]
for i, pred in enumerate(preds):
if pred:
prompt = prompt_template.format(
example_question=critique["question"],
example_code=critique["neg_code"],
feedback=critique["completion"]["feedback"],
corrected_program=critique["completion"]["corrected_program"],
question=p_id2item[problem_id]["question"],
code=pred,
)
new_item = copy.deepcopy(item)
new_item["id"] = f"{item[args.completion_problem_id_field]}_neg{i}"
new_item["prompt"] = prompt
if args.completion_response_field != "response":
new_item["response"] = new_item.pop(args.completion_response_field)
outputs.append(new_item)
if len(outputs) >= args.sample_num:
break
if len(outputs) >= args.sample_num:
break
print(f"Total number of items: {len(outputs)}")
# json.dump(outputs, open(args.output_file, "w"), indent=2)
with open(args.output_file, "w") as f:
for item in outputs:
f.write(json.dumps(item, ensure_ascii=False) + "\n")
if __name__ == '__main__':
main()
"""
>>> python scripts/apps/pp_worsen_inputs.py --critique_exec_file outputs/apps/critique/apps.train.gpt4o.tem1.0.n11.neg.intro.inter.gpt4o.tem1.0.s42.n1.json_obj.exec.json \
--completion_file "../msranlpintern/reward_modeling/experiments/deepseek-coder-v1.5-ins.7b.apps.r2c.gpt4o.distil.A100.w8.v3.0.s42/apps/checkpoint-400/train.0shot.tem1.0.n10.0-of-8.v1.1.json" \
--completion_response_field response \
--output_file ../msranlpintern/reward_modeling/experiments/deepseek-coder-v1.5-ins.7b.apps.r2c.gpt4o.distil.A100.w8.v3.0.s42/apps/checkpoint-400/train.0shot.tem1.0.n10.v1.1.worsen_4o_critic.s42.f2000.jsonl \
--sample_num 2000 --seed 42 --completion_problem_id_field id
>>> python scripts/apps/pp_worsen_inputs.py --critique_exec_file outputs/apps/critique/apps.train.gpt4o.tem1.0.n11.neg.intro.inter.gpt4o.tem1.0.s42.n1.json_obj.exec.json \
--completion_file "../msranlpintern/reward_modeling/experiments/deepseek-coder-v1.5-ins.7b.apps.r2c.gpt4o.distil.A100.w8.v3.0.s42/apps/checkpoint-400/train.0shot.tem1.0.n10.?-of-8.v1.1.json" \
--completion_response_field response \
--output_file ../msranlpintern/reward_modeling/experiments/deepseek-coder-v1.5-ins.7b.apps.r2c.gpt4o.distil.A100.w8.v3.0.s42/apps/checkpoint-400/train.0shot.tem1.0.n10.v1.1.worsen_4o_critic.s42.f10k.jsonl \
--sample_num 10000 --seed 42 --completion_problem_id_field id
>>> python scripts/apps/pp_worsen_inputs.py --critique_exec_file outputs/apps/critique/apps.train.gpt4o.tem1.0.n11.neg.intro.inter.gpt4o.tem1.0.s42.n1.json_obj.exec.json \
--completion_file "../msranlpintern/reward_modeling/experiments/deepseek-coder-v1.5-ins.7b.apps.r2c.gpt4o.distil.A100.w8.v3.0.s42/apps/checkpoint-400/train.0shot.tem1.0.n10.?-of-8.v1.1.json" \
--completion_response_field response
--output_file ../msranlpintern/reward_modeling/experiments/deepseek-coder-v1.5-ins.7b.apps.r2c.gpt4o.distil.A100.w8.v3.0.s42/apps/checkpoint-400/train.0shot.tem1.0.n10.v1.1.worsen_4o_critic.s42.f100k.jsonl \
--sample_num 100000 --seed 42 --completion_problem_id_field id
Total correct critiques: 7205
100%|██████████████████████████████████████████████████████████████████| 5000/5000 [00:04<00:00, 1070.68it/s]
Total number of items: 49868
>>> python scripts/apps/pp_worsen_inputs.py --critique_exec_file outputs/apps/critique/apps.train.gpt4o.tem1.0.n11.neg.intro.inter.gpt4o.tem1.0.s42.n1.json_obj.exec.json \
--completion_file "../msranlpintern/reward_modeling/experiments/deepseek-coder-v1.5-ins.7b.apps.r2c.gpt4o.distil.A100.w8.v3.0.s42/apps/checkpoint-400/train.0shot.tem1.0.n10.?-of-8.v1.1.json" \
--completion_response_field response \
--output_file ../msranlpintern/reward_modeling/experiments/deepseek-coder-v1.5-ins.7b.apps.r2c.gpt4o.distil.A100.w8.v3.0.s42/apps/checkpoint-400/train.0shot.tem1.0.n10.v1.1.worsen_4o.s42.f10k.jsonl \
--sample_num 10000 --seed 42 --completion_problem_id_field id --prompt_file prompts/apps/worsen_0shot_v1.0.txt
python azure/gpt_crawler_mp.py --prompt_file ../msranlpintern/reward_modeling/experiments/deepseek-coder-v1.5-ins.7b.apps.r2c.gpt4o.distil.A100.w8.v3.0.s42/apps/checkpoint-400/train.0shot.tem1.0.n10.v1.1.worsen_4o.s42.f10k.jsonl \
--outfile ../gpt-chat-examples/outputs/apps/critique/r2c.sft.train.0shot.tem1.0.n10.v1.1.worsen_4o.s42.f10k.gpt4o.tem1.0.s42.n1.json_obj.jsonl \
--model gpt-4o --max_gen_tokens 4096 --temperature 1.0 --num_processes 24 --seed 42 --n 1 --response_format json_object
"""