""" Take in a YAML, and output all "other" splits with this YAML """ import argparse import logging import os import yaml from tqdm import tqdm eval_logger = logging.getLogger("lm-eval") MMLU_SUBJECTS = { "global_facts": "other", "high_school_european_history": "humanities", "high_school_geography": "social_sciences", "high_school_government_and_politics": "social_sciences", "high_school_psychology": "social_sciences", "high_school_statistics": "stem", "high_school_world_history": "humanities", "human_aging": "other", "international_law": "humanities", "jurisprudence": "humanities", "logical_fallacies": "humanities", "management": "other", "marketing": "other", "moral_disputes": "humanities", "moral_scenarios": "humanities", "nutrition": "other", "philosophy": "humanities", "professional_law": "humanities", "professional_psychology": "social_sciences", "public_relations": "social_sciences", "security_studies": "social_sciences", "sociology": "social_sciences", "world_religions": "humanities", } ARABIC_MMLU_SUBJECTS = { "islamic_studies": "humanities", "driving_test": "other", "natural_science": "stem", "history": "humanities", "general_knowledge": "other", "law": "humanities", "physics": "stem", "social_science": "social_sciences", "management_ar": "other", "arabic_language": "language", "political_science": "social_sciences", "philosophy_ar": "humanities", "accounting": "social_sciences", "computer_science": "stem", "geography": "social_sciences", "math": "stem", "biology": "stem", "economics": "social_sciences", "arabic_language_(general)": "language", "arabic_language_(grammar)": "language", "civics": "social_sciences", } DATASETS = { "mmlu": MMLU_SUBJECTS, "ar_mmlu": ARABIC_MMLU_SUBJECTS, } def parse_args(): parser = argparse.ArgumentParser() parser.add_argument("--base_yaml_path", default="_default_darijammlu_template_yaml") parser.add_argument("--save_prefix_path", default="darijammlu") return parser.parse_args() if __name__ == "__main__": args = parse_args() # get filename of base_yaml so we can `"include": ` it in our "other" YAMLs. base_yaml_name = os.path.split(args.base_yaml_path)[-1] with open(args.base_yaml_path, encoding="utf-8") as f: base_yaml = yaml.full_load(f) ALL_CATEGORIES = [] for dataset, SUBJECTS in DATASETS.items(): for subject, category in tqdm(SUBJECTS.items()): if category not in ALL_CATEGORIES: ALL_CATEGORIES.append(category) yaml_dict = { "include": base_yaml_name, "tag": [ f"darijammlu_{category}_tasks", "darijammlu_" + dataset + "_tasks", ], "task": f"darijammlu_{subject}", "task_alias": subject.replace("_", " "), "dataset_name": subject, } file_save_path = args.save_prefix_path + f"_{subject}.yaml" eval_logger.info(f"Saving yaml for subset {subject} to {file_save_path}") with open(file_save_path, "w", encoding="utf-8") as yaml_file: yaml.dump( yaml_dict, yaml_file, allow_unicode=True, default_style='"', ) darijammlu_subcategories = [f"darijammlu_{category}" for category in ALL_CATEGORIES] file_save_path = args.save_prefix_path + ".yaml" eval_logger.info(f"Saving benchmark config to {file_save_path}") with open(file_save_path, "w", encoding="utf-8") as yaml_file: yaml.dump( { "group": "darijammlu", "task": darijammlu_subcategories, }, yaml_file, indent=4, default_flow_style=False, )