|
import regex |
|
|
|
from data_processing.answer_extraction import extract_math_answer, strip_string |
|
|
|
|
|
def process_gsm8k_test(item): |
|
sample = { |
|
"dataset": "gsm8k-cot", |
|
"id": item["id"], |
|
"messages": [ |
|
{"role": "user", "content": item["question"]}, |
|
{ |
|
"role": "assistant", |
|
"content": regex.sub(r"<<[^<>]*>>", "", item["cot"]) |
|
+ "\nSo the answer is $\\boxed{" |
|
+ item["answer"].strip() |
|
+ "}$.", |
|
}, |
|
], |
|
"answer": item["answer"].replace(",", ""), |
|
} |
|
yield sample |
|
|
|
|
|
def process_math_test(item): |
|
question = item["problem"] |
|
try: |
|
answer = extract_math_answer(question, item["solution"], task="cot") |
|
except: |
|
return |
|
sample = { |
|
"dataset": "math-cot", |
|
"id": item["id"], |
|
"level": item["level"], |
|
"type": item["type"], |
|
"category": item["category"], |
|
"messages": [ |
|
{"role": "user", "content": question}, |
|
{ |
|
"role": "assistant", |
|
"content": "\n".join( |
|
regex.split(r"(?<=\.) (?=[A-Z])", item["solution"]) |
|
), |
|
}, |
|
], |
|
"answer": answer, |
|
} |
|
yield sample |
|
|
|
|
|
def process_math_sat(item): |
|
options = item["options"].strip() |
|
assert "A" == options[0] |
|
options = "(" + options |
|
for ch in "BCDEFG": |
|
if f" {ch}) " in options: |
|
options = regex.sub(f" {ch}\) ", f" ({ch}) ", options) |
|
question = f"{item['question'].strip()}\nWhat of the following is the right choice? Explain your answer.\n{options.strip()}" |
|
messages = [ |
|
{"role": "user", "content": question}, |
|
{"role": "assistant", "content": item["Answer"]}, |
|
] |
|
item = { |
|
"dataset": "math_sat", |
|
"id": item["id"], |
|
"language": "en", |
|
"messages": messages, |
|
"answer": item["Answer"], |
|
} |
|
yield item |
|
|
|
|
|
def process_ocwcourses(item): |
|
messages = [ |
|
{"role": "user", "content": item["problem"].strip()}, |
|
{"role": "assistant", "content": item["solution"].strip()}, |
|
] |
|
item = { |
|
"dataset": "OCWCourses", |
|
"id": item["id"], |
|
"language": "en", |
|
"messages": messages, |
|
"answer": item["answer"], |
|
} |
|
yield item |
|
|
|
|
|
def process_mmlu_stem(item): |
|
options = item["options"] |
|
for i, (label, option) in enumerate(zip("ABCD", options)): |
|
options[i] = f"({label}) {str(option).strip()}" |
|
options = ", ".join(options) |
|
question = f"{item['question'].strip()}\nWhat of the following is the right choice? Explain your answer.\n{options}" |
|
messages = [ |
|
{"role": "user", "content": question}, |
|
{"role": "assistant", "content": item["answer"]}, |
|
] |
|
item = { |
|
"dataset": "MMLU-STEM", |
|
"id": item["id"], |
|
"language": "en", |
|
"messages": messages, |
|
"answer": item["answer"], |
|
} |
|
yield item |
|
|
|
|
|
def process_mgsm_zh(item): |
|
item["answer"] = item["answer"].replace(",", "") |
|
yield item |
|
|
|
|
|
def process_cmath(item): |
|
item = { |
|
"dataset": "cmath", |
|
"id": item["id"], |
|
"grade": item["grade"], |
|
"reasoning_step": item["reasoning_step"], |
|
"messages": [ |
|
{"role": "user", "content": item["question"].strip()}, |
|
{"role": "assistant", "content": ""}, |
|
], |
|
"answer": item["golden"].strip().replace(",", ""), |
|
} |
|
yield item |
|
|
|
|
|
def process_agieval_gaokao_math_cloze(item): |
|
item = { |
|
"dataset": "agieval-gaokao-math-cloze", |
|
"id": item["id"], |
|
"messages": [ |
|
{"role": "user", "content": item["question"].strip()}, |
|
{"role": "assistant", "content": ""}, |
|
], |
|
"answer": [strip_string(ans) for ans in item["answer"].strip().split(";")], |
|
} |
|
yield item |
|
|
|
|
|
def process_agieval_gaokao_mathqa(item): |
|
question = item["question"].strip() |
|
options = [] |
|
for option in item["options"]: |
|
option = option.strip() |
|
assert option[0] == "(" |
|
assert option[2] == ")" |
|
assert option[1] in "ABCD" |
|
option = f"{option[1]}: {option[3:].strip()}" |
|
options.append(option.strip()) |
|
question = f"{question}\n{options}" |
|
item = { |
|
"dataset": "agieval-gaokao-mathqa", |
|
"id": item["id"], |
|
"messages": [ |
|
{"role": "user", "content": question}, |
|
{"role": "assistant", "content": ""}, |
|
], |
|
"answer": item["label"], |
|
} |
|
yield item |
|
|
|
|
|
def process_agieval_gaokao_mathqa_few_shot_cot_test(item): |
|
question = item["question"].strip().rstrip("\\") |
|
options = " ".join([opt.strip() for opt in item["options"]]) |
|
question = f"{question}\n从以下选项中选择: {options}" |
|
item = { |
|
"dataset": "agieval-gaokao-mathqa", |
|
"id": item["id"], |
|
"messages": [ |
|
{"role": "user", "content": question}, |
|
{"role": "assistant", "content": ""}, |
|
], |
|
"answer": item["label"], |
|
} |
|
yield item |
|
|
|
|
|
def process_minif2f_isabelle(item): |
|
question = f"(*### Problem\n\n{item['informal_statement'].strip()}\n\n### Solution\n\n{item['informal_proof'].strip()} *)\n\nFormal:\n{item['formal_statement'].strip()}" |
|
item = { |
|
"dataset": "minif2f-isabelle", |
|
"id": item["id"], |
|
"messages": [ |
|
{"role": "user", "content": question}, |
|
{"role": "assistant", "content": ""}, |
|
], |
|
"answer": "placeholder", |
|
} |
|
yield item |
|
|