mirror of
https://github.com/deepseek-ai/DeepSeek-Math
synced 2024-11-29 07:20:43 +00:00
170 lines
5.2 KiB
Python
170 lines
5.2 KiB
Python
|
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
|