DeepSeek-Math/evaluation/data_processing/process_utils.py
ZhihongShao 21cc5c6701 init
2024-02-06 10:27:40 +08:00

170 lines
5.2 KiB
Python
Executable File

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