From f3b7917091afba325af3980a35d8a6dcba03dc3f Mon Sep 17 00:00:00 2001 From: David Hoffmann <105221763+adavidho@users.noreply.github.com> Date: Thu, 15 Feb 2024 15:39:03 +0100 Subject: [PATCH 01/20] Update README.md (#1430) --- lm_eval/tasks/openbookqa/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lm_eval/tasks/openbookqa/README.md b/lm_eval/tasks/openbookqa/README.md index 158e12311f..34849ac628 100644 --- a/lm_eval/tasks/openbookqa/README.md +++ b/lm_eval/tasks/openbookqa/README.md @@ -1,4 +1,4 @@ -# Task-name +# OpenBookQA ### Paper From a604f05c02d6b6d5c01887c61cb6a1b228f5b60a Mon Sep 17 00:00:00 2001 From: Michael Feil <63565275+michaelfeil@users.noreply.github.com> Date: Sun, 18 Feb 2024 03:58:52 -0800 Subject: [PATCH 02/20] improve hf_hub activation (#1438) --- lm_eval/models/__init__.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/lm_eval/models/__init__.py b/lm_eval/models/__init__.py index 64f338e6ba..23dace2f44 100644 --- a/lm_eval/models/__init__.py +++ b/lm_eval/models/__init__.py @@ -11,12 +11,11 @@ # TODO: implement __all__ -import os - try: - # enabling faster model download - import hf_transfer + # enable hf hub transfer if available + import hf_transfer # type: ignore # noqa + import huggingface_hub.constants # type: ignore - os.environ["HF_HUB_ENABLE_HF_TRANSFER"] = "1" + huggingface_hub.constants.HF_HUB_ENABLE_HF_TRANSFER = True except ImportError: pass From 19cbb2923a9fe0549754b8b5cb7511c9832a5851 Mon Sep 17 00:00:00 2001 From: larekrow <127832774+larekrow@users.noreply.github.com> Date: Mon, 19 Feb 2024 15:13:17 +0800 Subject: [PATCH 03/20] Correct typo in task name (#1443) --- lm_eval/tasks/arc/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lm_eval/tasks/arc/README.md b/lm_eval/tasks/arc/README.md index 477394c2bc..b3eea45b45 100644 --- a/lm_eval/tasks/arc/README.md +++ b/lm_eval/tasks/arc/README.md @@ -38,7 +38,7 @@ Homepage: https://allenai.org/data/arc #### Tasks * `arc_easy` -* `arc_challange` +* `arc_challenge` ### Checklist From 89deeeafc884578afdd30b7275cbb18700eff6c2 Mon Sep 17 00:00:00 2001 From: thnkinbtfly <70014488+thnkinbtfly@users.noreply.github.com> Date: Tue, 20 Feb 2024 03:57:29 +0900 Subject: [PATCH 04/20] update bbh, gsm8k, mmlu parsing logic and prompts (Orca2 bbh_cot_zeroshot 0% -> 42%) (#1356) * update bbh, gsm8k, mmlu parsing logic and prompts * remove the formatting prompt (bbh) + minor update (mmlu) * update bbh, gsm8k, mmlu zeroshot, revert fewshots * update bbh, gsm8k, mmlu version, forward changes to gsm8k-cot * remove take_last, update to use docs parameters * add newline * ruff formatting * Update pyproject.toml * fix format --------- Co-authored-by: Hailey Schoelkopf <65563625+haileyschoelkopf@users.noreply.github.com> --- lm_eval/filters/extraction.py | 13 +- .../cot_zeroshot/_cot_zeroshot_template_yaml | 20 +- .../bbh/cot_zeroshot/boolean_expressions.yaml | 15 +- .../bbh/cot_zeroshot/causal_judgement.yaml | 15 +- .../bbh/cot_zeroshot/date_understanding.yaml | 17 +- .../bbh/cot_zeroshot/disambiguation_qa.yaml | 17 +- .../bbh/cot_zeroshot/dyck_languages.yaml | 14 +- .../bbh/cot_zeroshot/formal_fallacies.yaml | 15 +- .../bbh/cot_zeroshot/geometric_shapes.yaml | 17 +- .../tasks/bbh/cot_zeroshot/hyperbaton.yaml | 17 +- .../logical_deduction_five_objects.yaml | 16 +- .../logical_deduction_seven_objects.yaml | 16 +- .../logical_deduction_three_objects.yaml | 16 +- .../cot_zeroshot/movie_recommendation.yaml | 16 +- .../multistep_arithmetic_two.yaml | 16 +- lm_eval/tasks/bbh/cot_zeroshot/navigate.yaml | 14 +- .../bbh/cot_zeroshot/object_counting.yaml | 15 +- .../bbh/cot_zeroshot/penguins_in_a_table.yaml | 16 +- .../reasoning_about_colored_objects.yaml | 16 +- .../tasks/bbh/cot_zeroshot/ruin_names.yaml | 16 +- .../salient_translation_error_detection.yaml | 16 +- lm_eval/tasks/bbh/cot_zeroshot/snarks.yaml | 16 +- .../cot_zeroshot/sports_understanding.yaml | 18 +- .../bbh/cot_zeroshot/temporal_sequences.yaml | 16 +- ...racking_shuffled_objects_five_objects.yaml | 16 +- ...acking_shuffled_objects_seven_objects.yaml | 16 +- ...acking_shuffled_objects_three_objects.yaml | 16 +- lm_eval/tasks/bbh/cot_zeroshot/utils.py | 191 ++++++++++++++++++ .../tasks/bbh/cot_zeroshot/web_of_lies.yaml | 17 +- .../tasks/bbh/cot_zeroshot/word_sorting.yaml | 12 +- .../bbh/zeroshot/_zeroshot_template_yaml | 12 +- .../bbh/zeroshot/boolean_expressions.yaml | 11 + .../tasks/bbh/zeroshot/causal_judgement.yaml | 11 + .../bbh/zeroshot/date_understanding.yaml | 13 ++ .../tasks/bbh/zeroshot/disambiguation_qa.yaml | 13 ++ .../tasks/bbh/zeroshot/dyck_languages.yaml | 10 + .../tasks/bbh/zeroshot/formal_fallacies.yaml | 11 + .../tasks/bbh/zeroshot/geometric_shapes.yaml | 13 ++ lm_eval/tasks/bbh/zeroshot/hyperbaton.yaml | 13 ++ .../logical_deduction_five_objects.yaml | 12 ++ .../logical_deduction_seven_objects.yaml | 12 ++ .../logical_deduction_three_objects.yaml | 12 ++ .../bbh/zeroshot/movie_recommendation.yaml | 12 ++ .../zeroshot/multistep_arithmetic_two.yaml | 11 + lm_eval/tasks/bbh/zeroshot/navigate.yaml | 10 + .../tasks/bbh/zeroshot/object_counting.yaml | 10 + .../bbh/zeroshot/penguins_in_a_table.yaml | 12 ++ .../reasoning_about_colored_objects.yaml | 12 ++ lm_eval/tasks/bbh/zeroshot/ruin_names.yaml | 12 ++ .../salient_translation_error_detection.yaml | 12 ++ lm_eval/tasks/bbh/zeroshot/snarks.yaml | 12 ++ .../bbh/zeroshot/sports_understanding.yaml | 14 ++ .../bbh/zeroshot/temporal_sequences.yaml | 12 ++ ...racking_shuffled_objects_five_objects.yaml | 12 ++ ...acking_shuffled_objects_seven_objects.yaml | 12 ++ ...acking_shuffled_objects_three_objects.yaml | 12 ++ lm_eval/tasks/bbh/zeroshot/utils.py | 191 ++++++++++++++++++ lm_eval/tasks/bbh/zeroshot/web_of_lies.yaml | 13 ++ lm_eval/tasks/bbh/zeroshot/word_sorting.yaml | 8 + lm_eval/tasks/gsm8k/gsm8k-cot-zeroshot.yaml | 44 ++++ lm_eval/tasks/gsm8k/gsm8k-cot.yaml | 15 +- lm_eval/tasks/gsm8k/gsm8k.yaml | 14 +- .../_mmlu_flan_cot_zeroshot_template_yaml | 14 +- lm_eval/tasks/mmlu/flan_cot_zeroshot/utils.py | 99 +++++++++ .../_mmlu_flan_generative_template_yaml | 16 +- .../mmlu/flan_n_shot/generative/utils.py | 99 +++++++++ pyproject.toml | 1 + 67 files changed, 1420 insertions(+), 53 deletions(-) create mode 100644 lm_eval/tasks/bbh/cot_zeroshot/utils.py create mode 100644 lm_eval/tasks/bbh/zeroshot/utils.py create mode 100644 lm_eval/tasks/gsm8k/gsm8k-cot-zeroshot.yaml create mode 100644 lm_eval/tasks/mmlu/flan_cot_zeroshot/utils.py create mode 100644 lm_eval/tasks/mmlu/flan_n_shot/generative/utils.py diff --git a/lm_eval/filters/extraction.py b/lm_eval/filters/extraction.py index 345bf99b41..f3e031fa13 100644 --- a/lm_eval/filters/extraction.py +++ b/lm_eval/filters/extraction.py @@ -7,7 +7,10 @@ class RegexFilter(Filter): """ """ def __init__( - self, regex_pattern: str = r"#### (\-?[0-9\.\,]+)", fallback: str = "[invalid]" + self, + regex_pattern: str = r"#### (\-?[0-9\.\,]+)", + group_select=0, + fallback: str = "[invalid]", ) -> None: """ pass a string `regex` to run `re.compile(r"regex")` on. @@ -15,6 +18,7 @@ def __init__( """ self.regex_pattern = regex_pattern self.regex = re.compile(regex_pattern) + self.group_select = group_select self.fallback = fallback def apply(self, resps, docs): @@ -25,9 +29,12 @@ def apply(self, resps, docs): def filter_set(inst): filtered = [] for resp in inst: - match = self.regex.search(resp) + match = self.regex.findall(resp) if match: - match = match.group(1).strip() + match = match[self.group_select] + if isinstance(match, tuple): + match = [m for m in match if m][0] + match = match.strip() else: match = self.fallback filtered.append(match) diff --git a/lm_eval/tasks/bbh/cot_zeroshot/_cot_zeroshot_template_yaml b/lm_eval/tasks/bbh/cot_zeroshot/_cot_zeroshot_template_yaml index c38e7cba7a..5e62b0bac1 100644 --- a/lm_eval/tasks/bbh/cot_zeroshot/_cot_zeroshot_template_yaml +++ b/lm_eval/tasks/bbh/cot_zeroshot/_cot_zeroshot_template_yaml @@ -7,21 +7,21 @@ metric_list: - metric: exact_match aggregation: mean higher_is_better: true - # ignore_case: true + ignore_case: true # ignore_punctuation: true + regexes_to_ignore: + - "\\.$" + - "," + - "\\\\" + - "\n" + - '"' generation_kwargs: until: - "" - - "Q" - - "\n\n" + - "Q:" + - "<|im_end|>" do_sample: false temperature: 0.0 -filter_list: - - name: "get-answer" - filter: - - function: "regex" - regex_pattern: "((?<=The answer is )(.*)(?=.)|(?<=the answer is )(.*)(?=.)|(?<=The answer: )(.*)(?=.)|(?<=The final answer: )(.*)(?=.))" - - function: "take_first" num_fewshot: 0 metadata: - version: 1.0 + version: 2.0 diff --git a/lm_eval/tasks/bbh/cot_zeroshot/boolean_expressions.yaml b/lm_eval/tasks/bbh/cot_zeroshot/boolean_expressions.yaml index 51e8910691..0d28c969b6 100644 --- a/lm_eval/tasks/bbh/cot_zeroshot/boolean_expressions.yaml +++ b/lm_eval/tasks/bbh/cot_zeroshot/boolean_expressions.yaml @@ -1,5 +1,18 @@ "dataset_name": "boolean_expressions" "description": "Evaluate the result of a random Boolean expression.\n\n" -"doc_to_text": "Q: {{input}}\nA: Let's think step by step.\n" +"doc_to_text": "Q: {{input}}\nA: Let's think step by step." "include": "_cot_zeroshot_template_yaml" "task": "bbh_cot_zeroshot_boolean_expressions" + +filter_list: + - name: "flexible-extract" + filter: + - function: "regex" + group_select: -1 + regex_pattern: "\\b(True|False)\\b" + - function: "take_first" + - name: "strict-match" + filter: + - function: "regex" + regex_pattern: "((?<=The answer is )(.*)(?=.)|(?<=the answer is )(.*)(?=.)|(?<=The answer: )(.*)(?=.)|(?<=The final answer: )(.*)(?=.))" + - function: "take_first" diff --git a/lm_eval/tasks/bbh/cot_zeroshot/causal_judgement.yaml b/lm_eval/tasks/bbh/cot_zeroshot/causal_judgement.yaml index f7b7f07108..2bf47baad1 100644 --- a/lm_eval/tasks/bbh/cot_zeroshot/causal_judgement.yaml +++ b/lm_eval/tasks/bbh/cot_zeroshot/causal_judgement.yaml @@ -1,5 +1,18 @@ "dataset_name": "causal_judgement" "description": "Answer questions about causal attribution.\n\n" -"doc_to_text": "Q: {{input}}\nA: Let's think step by step.\n" +"doc_to_text": "Q: {{input}}\nA: Let's think step by step." "include": "_cot_zeroshot_template_yaml" "task": "bbh_cot_zeroshot_causal_judgement" + +filter_list: + - name: "flexible-extract" + filter: + - function: "regex" + group_select: -1 + regex_pattern: "\\b(Yes|No|yes|no)\\b" + - function: "take_first" + - name: "strict-match" + filter: + - function: "regex" + regex_pattern: "((?<=The answer is )(.*)(?=.)|(?<=the answer is )(.*)(?=.)|(?<=The answer: )(.*)(?=.)|(?<=The final answer: )(.*)(?=.))" + - function: "take_first" diff --git a/lm_eval/tasks/bbh/cot_zeroshot/date_understanding.yaml b/lm_eval/tasks/bbh/cot_zeroshot/date_understanding.yaml index 60c79ff5af..c894b9c8ee 100644 --- a/lm_eval/tasks/bbh/cot_zeroshot/date_understanding.yaml +++ b/lm_eval/tasks/bbh/cot_zeroshot/date_understanding.yaml @@ -1,5 +1,20 @@ "dataset_name": "date_understanding" "description": "Infer the date from context.\n\n" -"doc_to_text": "Q: {{input}}\nA: Let's think step by step.\n" +"doc_to_text": "Q: {{input}}\nA: Let's think step by step." "include": "_cot_zeroshot_template_yaml" "task": "bbh_cot_zeroshot_date_understanding" + +filter_list: + - name: "flexible-extract" + filter: + - function: !function utils.MultiChoiceRegexFilter + group_select: -1 + ignore_case: true + ignore_punctuation: true + regex_pattern: "(\\([A-Z]\\))" + - function: "take_first" + - name: "strict-match" + filter: + - function: "regex" + regex_pattern: "((?<=The answer is )(.*)(?=.)|(?<=the answer is )(.*)(?=.)|(?<=The answer: )(.*)(?=.)|(?<=The final answer: )(.*)(?=.))" + - function: "take_first" diff --git a/lm_eval/tasks/bbh/cot_zeroshot/disambiguation_qa.yaml b/lm_eval/tasks/bbh/cot_zeroshot/disambiguation_qa.yaml index 7dbad4f066..725a70ecfc 100644 --- a/lm_eval/tasks/bbh/cot_zeroshot/disambiguation_qa.yaml +++ b/lm_eval/tasks/bbh/cot_zeroshot/disambiguation_qa.yaml @@ -1,5 +1,20 @@ "dataset_name": "disambiguation_qa" "description": "Clarify the meaning of sentences with ambiguous pronouns.\n\n" -"doc_to_text": "Q: {{input}}\nA: Let's think step by step.\n" +"doc_to_text": "Q: {{input}}\nA: Let's think step by step." "include": "_cot_zeroshot_template_yaml" "task": "bbh_cot_zeroshot_disambiguation_qa" + +filter_list: + - name: "flexible-extract" + filter: + - function: !function utils.MultiChoiceRegexFilter + group_select: -1 + ignore_case: true + ignore_punctuation: true + regex_pattern: "(\\([A-Z]\\))" + - function: "take_first" + - name: "strict-match" + filter: + - function: "regex" + regex_pattern: "((?<=The answer is )(.*)(?=.)|(?<=the answer is )(.*)(?=.)|(?<=The answer: )(.*)(?=.)|(?<=The final answer: )(.*)(?=.))" + - function: "take_first" diff --git a/lm_eval/tasks/bbh/cot_zeroshot/dyck_languages.yaml b/lm_eval/tasks/bbh/cot_zeroshot/dyck_languages.yaml index c71415fa97..fa1b289cfa 100644 --- a/lm_eval/tasks/bbh/cot_zeroshot/dyck_languages.yaml +++ b/lm_eval/tasks/bbh/cot_zeroshot/dyck_languages.yaml @@ -1,5 +1,17 @@ "dataset_name": "dyck_languages" "description": "Correctly close a Dyck-n word.\n\n" -"doc_to_text": "Q: {{input}}\nA: Let's think step by step.\n" +"doc_to_text": "Q: {{input}}\nA: Let's think step by step." "include": "_cot_zeroshot_template_yaml" "task": "bbh_cot_zeroshot_dyck_languages" +filter_list: + - name: "flexible-extract" + filter: + - function: "regex" + group_select: -1 + regex_pattern: "(?<= )([\" \\[\\(<{}>\\)\\]]+)|([\" \\[\\(<{}>\\)\\]]+)" + - function: "take_first" + - name: "strict-match" + filter: + - function: "regex" + regex_pattern: "((?<=The answer is )(.*)(?=.)|(?<=the answer is )(.*)(?=.)|(?<=The answer: )(.*)(?=.)|(?<=The final answer: )(.*)(?=.))" + - function: "take_first" diff --git a/lm_eval/tasks/bbh/cot_zeroshot/formal_fallacies.yaml b/lm_eval/tasks/bbh/cot_zeroshot/formal_fallacies.yaml index 16f97d2598..02c7eebe8a 100644 --- a/lm_eval/tasks/bbh/cot_zeroshot/formal_fallacies.yaml +++ b/lm_eval/tasks/bbh/cot_zeroshot/formal_fallacies.yaml @@ -1,5 +1,18 @@ "dataset_name": "formal_fallacies" "description": "Distinguish deductively valid arguments from formal fallacies.\n\n" -"doc_to_text": "Q: {{input}}\nA: Let's think step by step.\n" +"doc_to_text": "Q: {{input}}\nA: Let's think step by step." "include": "_cot_zeroshot_template_yaml" "task": "bbh_cot_zeroshot_formal_fallacies" + +filter_list: + - name: "flexible-extract" + filter: + - function: "regex" + group_select: -1 + regex_pattern: "\\b(valid|invalid)\\b" + - function: "take_first" + - name: "strict-match" + filter: + - function: "regex" + regex_pattern: "((?<=The answer is )(.*)(?=.)|(?<=the answer is )(.*)(?=.)|(?<=The answer: )(.*)(?=.)|(?<=The final answer: )(.*)(?=.))" + - function: "take_first" diff --git a/lm_eval/tasks/bbh/cot_zeroshot/geometric_shapes.yaml b/lm_eval/tasks/bbh/cot_zeroshot/geometric_shapes.yaml index 1bac3dbb37..833b93d7a3 100644 --- a/lm_eval/tasks/bbh/cot_zeroshot/geometric_shapes.yaml +++ b/lm_eval/tasks/bbh/cot_zeroshot/geometric_shapes.yaml @@ -1,5 +1,20 @@ "dataset_name": "geometric_shapes" "description": "Name geometric shapes from their SVG paths.\n\n" -"doc_to_text": "Q: {{input}}\nA: Let's think step by step.\n" +"doc_to_text": "Q: {{input}}\nA: Let's think step by step." "include": "_cot_zeroshot_template_yaml" "task": "bbh_cot_zeroshot_geometric_shapes" + +filter_list: + - name: "flexible-extract" + filter: + - function: !function utils.MultiChoiceRegexFilter + group_select: -1 + ignore_case: true + ignore_punctuation: true + regex_pattern: "(\\([A-Z]\\))" + - function: "take_first" + - name: "strict-match" + filter: + - function: "regex" + regex_pattern: "((?<=The answer is )(.*)(?=.)|(?<=the answer is )(.*)(?=.)|(?<=The answer: )(.*)(?=.)|(?<=The final answer: )(.*)(?=.))" + - function: "take_first" diff --git a/lm_eval/tasks/bbh/cot_zeroshot/hyperbaton.yaml b/lm_eval/tasks/bbh/cot_zeroshot/hyperbaton.yaml index dbcb76fc43..152a5d1dca 100644 --- a/lm_eval/tasks/bbh/cot_zeroshot/hyperbaton.yaml +++ b/lm_eval/tasks/bbh/cot_zeroshot/hyperbaton.yaml @@ -1,5 +1,20 @@ "dataset_name": "hyperbaton" "description": "Order adjectives correctly in English sentences.\n\n" -"doc_to_text": "Q: {{input}}\nA: Let's think step by step.\n" +"doc_to_text": "Q: {{input}}\nA: Let's think step by step." "include": "_cot_zeroshot_template_yaml" "task": "bbh_cot_zeroshot_hyperbaton" + +filter_list: + - name: "flexible-extract" + filter: + - function: !function utils.MultiChoiceRegexFilter + group_select: -1 + ignore_case: true + ignore_punctuation: true + regex_pattern: "(\\([A-Z]\\))" + - function: "take_first" + - name: "strict-match" + filter: + - function: "regex" + regex_pattern: "((?<=The answer is )(.*)(?=.)|(?<=the answer is )(.*)(?=.)|(?<=The answer: )(.*)(?=.)|(?<=The final answer: )(.*)(?=.))" + - function: "take_first" diff --git a/lm_eval/tasks/bbh/cot_zeroshot/logical_deduction_five_objects.yaml b/lm_eval/tasks/bbh/cot_zeroshot/logical_deduction_five_objects.yaml index dc13d2f7c5..946030a006 100644 --- a/lm_eval/tasks/bbh/cot_zeroshot/logical_deduction_five_objects.yaml +++ b/lm_eval/tasks/bbh/cot_zeroshot/logical_deduction_five_objects.yaml @@ -1,5 +1,19 @@ "dataset_name": "logical_deduction_five_objects" "description": "A logical deduction task which requires deducing the order of a sequence of objects.\n\n" -"doc_to_text": "Q: {{input}}\nA: Let's think step by step.\n" +"doc_to_text": "Q: {{input}}\nA: Let's think step by step." "include": "_cot_zeroshot_template_yaml" "task": "bbh_cot_zeroshot_logical_deduction_five_objects" +filter_list: + - name: "flexible-extract" + filter: + - function: !function utils.MultiChoiceRegexFilter + group_select: -1 + ignore_case: true + ignore_punctuation: true + regex_pattern: "(\\([A-Z]\\))" + - function: "take_first" + - name: "strict-match" + filter: + - function: "regex" + regex_pattern: "((?<=The answer is )(.*)(?=.)|(?<=the answer is )(.*)(?=.)|(?<=The answer: )(.*)(?=.)|(?<=The final answer: )(.*)(?=.))" + - function: "take_first" diff --git a/lm_eval/tasks/bbh/cot_zeroshot/logical_deduction_seven_objects.yaml b/lm_eval/tasks/bbh/cot_zeroshot/logical_deduction_seven_objects.yaml index 961dd29cfc..f92f4bc5aa 100644 --- a/lm_eval/tasks/bbh/cot_zeroshot/logical_deduction_seven_objects.yaml +++ b/lm_eval/tasks/bbh/cot_zeroshot/logical_deduction_seven_objects.yaml @@ -1,5 +1,19 @@ "dataset_name": "logical_deduction_seven_objects" "description": "A logical deduction task which requires deducing the order of a sequence of objects.\n\n" -"doc_to_text": "Q: {{input}}\nA: Let's think step by step.\n" +"doc_to_text": "Q: {{input}}\nA: Let's think step by step." "include": "_cot_zeroshot_template_yaml" "task": "bbh_cot_zeroshot_logical_deduction_seven_objects" +filter_list: + - name: "flexible-extract" + filter: + - function: !function utils.MultiChoiceRegexFilter + group_select: -1 + ignore_case: true + ignore_punctuation: true + regex_pattern: "(\\([A-Z]\\))" + - function: "take_first" + - name: "strict-match" + filter: + - function: "regex" + regex_pattern: "((?<=The answer is )(.*)(?=.)|(?<=the answer is )(.*)(?=.)|(?<=The answer: )(.*)(?=.)|(?<=The final answer: )(.*)(?=.))" + - function: "take_first" diff --git a/lm_eval/tasks/bbh/cot_zeroshot/logical_deduction_three_objects.yaml b/lm_eval/tasks/bbh/cot_zeroshot/logical_deduction_three_objects.yaml index c6a60ea98c..d145182884 100644 --- a/lm_eval/tasks/bbh/cot_zeroshot/logical_deduction_three_objects.yaml +++ b/lm_eval/tasks/bbh/cot_zeroshot/logical_deduction_three_objects.yaml @@ -1,5 +1,19 @@ "dataset_name": "logical_deduction_three_objects" "description": "A logical deduction task which requires deducing the order of a sequence of objects.\n\n" -"doc_to_text": "Q: {{input}}\nA: Let's think step by step.\n" +"doc_to_text": "Q: {{input}}\nA: Let's think step by step." "include": "_cot_zeroshot_template_yaml" "task": "bbh_cot_zeroshot_logical_deduction_three_objects" +filter_list: + - name: "flexible-extract" + filter: + - function: !function utils.MultiChoiceRegexFilter + group_select: -1 + ignore_case: true + ignore_punctuation: true + regex_pattern: "(\\([A-Z]\\))" + - function: "take_first" + - name: "strict-match" + filter: + - function: "regex" + regex_pattern: "((?<=The answer is )(.*)(?=.)|(?<=the answer is )(.*)(?=.)|(?<=The answer: )(.*)(?=.)|(?<=The final answer: )(.*)(?=.))" + - function: "take_first" diff --git a/lm_eval/tasks/bbh/cot_zeroshot/movie_recommendation.yaml b/lm_eval/tasks/bbh/cot_zeroshot/movie_recommendation.yaml index a53684448b..c1b68b8b88 100644 --- a/lm_eval/tasks/bbh/cot_zeroshot/movie_recommendation.yaml +++ b/lm_eval/tasks/bbh/cot_zeroshot/movie_recommendation.yaml @@ -1,5 +1,19 @@ "dataset_name": "movie_recommendation" "description": "Recommend movies similar to the given list of movies.\n\n" -"doc_to_text": "Q: {{input}}\nA: Let's think step by step.\n" +"doc_to_text": "Q: {{input}}\nA: Let's think step by step." "include": "_cot_zeroshot_template_yaml" "task": "bbh_cot_zeroshot_movie_recommendation" +filter_list: + - name: "flexible-extract" + filter: + - function: !function utils.MultiChoiceRegexFilter + group_select: -1 + ignore_case: true + ignore_punctuation: true + regex_pattern: "(\\([A-Z]\\))" + - function: "take_first" + - name: "strict-match" + filter: + - function: "regex" + regex_pattern: "((?<=The answer is )(.*)(?=.)|(?<=the answer is )(.*)(?=.)|(?<=The answer: )(.*)(?=.)|(?<=The final answer: )(.*)(?=.))" + - function: "take_first" diff --git a/lm_eval/tasks/bbh/cot_zeroshot/multistep_arithmetic_two.yaml b/lm_eval/tasks/bbh/cot_zeroshot/multistep_arithmetic_two.yaml index 9e6d4d43c3..c857fcd268 100644 --- a/lm_eval/tasks/bbh/cot_zeroshot/multistep_arithmetic_two.yaml +++ b/lm_eval/tasks/bbh/cot_zeroshot/multistep_arithmetic_two.yaml @@ -1,5 +1,19 @@ "dataset_name": "multistep_arithmetic_two" "description": "Solve multi-step arithmetic problems.\n\n" -"doc_to_text": "Q: {{input}}\nA: Let's think step by step.\n" +"doc_to_text": "Q: {{input}}\nA: Let's think step by step." "include": "_cot_zeroshot_template_yaml" "task": "bbh_cot_zeroshot_multistep_arithmetic_two" + +filter_list: + - name: "flexible-extract" + filter: + - function: !function utils.NumberParseRegexFilter + group_select: -1 + regex_pattern: "([-0-9]+)" + - function: "take_first" + - name: "strict-match" + filter: + - function: "regex" + regex_pattern: "((?<=The answer is )(.*)(?=.)|(?<=the answer is )(.*)(?=.)|(?<=The answer: )(.*)(?=.)|(?<=The final answer: )(.*)(?=.))" + - function: "take_first" + diff --git a/lm_eval/tasks/bbh/cot_zeroshot/navigate.yaml b/lm_eval/tasks/bbh/cot_zeroshot/navigate.yaml index 83c894e66e..2f1fee3159 100644 --- a/lm_eval/tasks/bbh/cot_zeroshot/navigate.yaml +++ b/lm_eval/tasks/bbh/cot_zeroshot/navigate.yaml @@ -1,5 +1,17 @@ "dataset_name": "navigate" "description": "Given a series of navigation instructions, determine whether one would end up back at the starting point.\n\n" -"doc_to_text": "Q: {{input}}\nA: Let's think step by step.\n" +"doc_to_text": "Q: {{input}}\nA: Let's think step by step." "include": "_cot_zeroshot_template_yaml" "task": "bbh_cot_zeroshot_navigate" +filter_list: + - name: "flexible-extract" + filter: + - function: "regex" + group_select: -1 + regex_pattern: "\\b(Yes|No|yes|no)\\b" + - function: "take_first" + - name: "strict-match" + filter: + - function: "regex" + regex_pattern: "((?<=The answer is )(.*)(?=.)|(?<=the answer is )(.*)(?=.)|(?<=The answer: )(.*)(?=.)|(?<=The final answer: )(.*)(?=.))" + - function: "take_first" diff --git a/lm_eval/tasks/bbh/cot_zeroshot/object_counting.yaml b/lm_eval/tasks/bbh/cot_zeroshot/object_counting.yaml index 7c498a01c6..2667339f9e 100644 --- a/lm_eval/tasks/bbh/cot_zeroshot/object_counting.yaml +++ b/lm_eval/tasks/bbh/cot_zeroshot/object_counting.yaml @@ -1,5 +1,18 @@ "dataset_name": "object_counting" "description": "Questions that involve enumerating objects and asking the model to count them.\n\n" -"doc_to_text": "Q: {{input}}\nA: Let's think step by step.\n" +"doc_to_text": "Q: {{input}}\nA: Let's think step by step." "include": "_cot_zeroshot_template_yaml" "task": "bbh_cot_zeroshot_object_counting" +filter_list: + - name: "flexible-extract" + filter: + - function: !function utils.NumberParseRegexFilter + group_select: -1 + regex_pattern: "([-0-9]+)" + - function: "take_first" + - name: "strict-match" + filter: + - function: "regex" + regex_pattern: "((?<=The answer is )(.*)(?=.)|(?<=the answer is )(.*)(?=.)|(?<=The answer: )(.*)(?=.)|(?<=The final answer: )(.*)(?=.))" + - function: "take_first" + diff --git a/lm_eval/tasks/bbh/cot_zeroshot/penguins_in_a_table.yaml b/lm_eval/tasks/bbh/cot_zeroshot/penguins_in_a_table.yaml index 249eff9dc2..1268962e31 100644 --- a/lm_eval/tasks/bbh/cot_zeroshot/penguins_in_a_table.yaml +++ b/lm_eval/tasks/bbh/cot_zeroshot/penguins_in_a_table.yaml @@ -1,5 +1,19 @@ "dataset_name": "penguins_in_a_table" "description": "Answer questions about a table of penguins and their attributes.\n\n" -"doc_to_text": "Q: {{input}}\nA: Let's think step by step.\n" +"doc_to_text": "Q: {{input}}\nA: Let's think step by step." "include": "_cot_zeroshot_template_yaml" "task": "bbh_cot_zeroshot_penguins_in_a_table" +filter_list: + - name: "flexible-extract" + filter: + - function: !function utils.MultiChoiceRegexFilter + group_select: -1 + ignore_case: true + ignore_punctuation: true + regex_pattern: "(\\([A-Z]\\))" + - function: "take_first" + - name: "strict-match" + filter: + - function: "regex" + regex_pattern: "((?<=The answer is )(.*)(?=.)|(?<=the answer is )(.*)(?=.)|(?<=The answer: )(.*)(?=.)|(?<=The final answer: )(.*)(?=.))" + - function: "take_first" diff --git a/lm_eval/tasks/bbh/cot_zeroshot/reasoning_about_colored_objects.yaml b/lm_eval/tasks/bbh/cot_zeroshot/reasoning_about_colored_objects.yaml index 42f81233cc..9f9b3e1c92 100644 --- a/lm_eval/tasks/bbh/cot_zeroshot/reasoning_about_colored_objects.yaml +++ b/lm_eval/tasks/bbh/cot_zeroshot/reasoning_about_colored_objects.yaml @@ -1,5 +1,19 @@ "dataset_name": "reasoning_about_colored_objects" "description": "Answer extremely simple questions about the colors of objects on a surface.\n\n" -"doc_to_text": "Q: {{input}}\nA: Let's think step by step.\n" +"doc_to_text": "Q: {{input}}\nA: Let's think step by step." "include": "_cot_zeroshot_template_yaml" "task": "bbh_cot_zeroshot_reasoning_about_colored_objects" +filter_list: + - name: "flexible-extract" + filter: + - function: !function utils.MultiChoiceRegexFilter + group_select: -1 + ignore_case: true + ignore_punctuation: true + regex_pattern: "(\\([A-Z]\\))" + - function: "take_first" + - name: "strict-match" + filter: + - function: "regex" + regex_pattern: "((?<=The answer is )(.*)(?=.)|(?<=the answer is )(.*)(?=.)|(?<=The answer: )(.*)(?=.)|(?<=The final answer: )(.*)(?=.))" + - function: "take_first" diff --git a/lm_eval/tasks/bbh/cot_zeroshot/ruin_names.yaml b/lm_eval/tasks/bbh/cot_zeroshot/ruin_names.yaml index b13b7a55ec..cf865e89a6 100644 --- a/lm_eval/tasks/bbh/cot_zeroshot/ruin_names.yaml +++ b/lm_eval/tasks/bbh/cot_zeroshot/ruin_names.yaml @@ -1,5 +1,19 @@ "dataset_name": "ruin_names" "description": "Select the humorous edit that 'ruins' the input movie or musical artist name.\n\n" -"doc_to_text": "Q: {{input}}\nA: Let's think step by step.\n" +"doc_to_text": "Q: {{input}}\nA: Let's think step by step." "include": "_cot_zeroshot_template_yaml" "task": "bbh_cot_zeroshot_ruin_names" +filter_list: + - name: "flexible-extract" + filter: + - function: !function utils.MultiChoiceRegexFilter + group_select: -1 + ignore_case: true + ignore_punctuation: true + regex_pattern: "(\\([A-Z]\\))" + - function: "take_first" + - name: "strict-match" + filter: + - function: "regex" + regex_pattern: "((?<=The answer is )(.*)(?=.)|(?<=the answer is )(.*)(?=.)|(?<=The answer: )(.*)(?=.)|(?<=The final answer: )(.*)(?=.))" + - function: "take_first" diff --git a/lm_eval/tasks/bbh/cot_zeroshot/salient_translation_error_detection.yaml b/lm_eval/tasks/bbh/cot_zeroshot/salient_translation_error_detection.yaml index 1f01a5355d..d7d72eadc3 100644 --- a/lm_eval/tasks/bbh/cot_zeroshot/salient_translation_error_detection.yaml +++ b/lm_eval/tasks/bbh/cot_zeroshot/salient_translation_error_detection.yaml @@ -1,5 +1,19 @@ "dataset_name": "salient_translation_error_detection" "description": "Detect the type of error in an English translation of a German source sentence.\n\n" -"doc_to_text": "Q: {{input}}\nA: Let's think step by step.\n" +"doc_to_text": "Q: {{input}}\nA: Let's think step by step." "include": "_cot_zeroshot_template_yaml" "task": "bbh_cot_zeroshot_salient_translation_error_detection" +filter_list: + - name: "flexible-extract" + filter: + - function: !function utils.MultiChoiceRegexFilter + group_select: -1 + ignore_case: true + ignore_punctuation: true + regex_pattern: "(\\([A-Z]\\))" + - function: "take_first" + - name: "strict-match" + filter: + - function: "regex" + regex_pattern: "((?<=The answer is )(.*)(?=.)|(?<=the answer is )(.*)(?=.)|(?<=The answer: )(.*)(?=.)|(?<=The final answer: )(.*)(?=.))" + - function: "take_first" diff --git a/lm_eval/tasks/bbh/cot_zeroshot/snarks.yaml b/lm_eval/tasks/bbh/cot_zeroshot/snarks.yaml index 245675f034..eb338a1b5e 100644 --- a/lm_eval/tasks/bbh/cot_zeroshot/snarks.yaml +++ b/lm_eval/tasks/bbh/cot_zeroshot/snarks.yaml @@ -1,5 +1,19 @@ "dataset_name": "snarks" "description": "Determine which of two sentences is sarcastic.\n\nAccording to Cambridge University Dictionary, sarcasm is \"the use of remarks that clearly mean the opposite of what they say, made in order to hurt someone's feelings or to criticize something in a humorous way.\" Sarcastic sentences often contain satirical or ironic utterances, hyperboles, ambivalent or witty remarks.\n\n" -"doc_to_text": "Q: {{input}}\nA: Let's think step by step.\n" +"doc_to_text": "Q: {{input}}\nA: Let's think step by step." "include": "_cot_zeroshot_template_yaml" "task": "bbh_cot_zeroshot_snarks" +filter_list: + - name: "flexible-extract" + filter: + - function: !function utils.MultiChoiceRegexFilter + group_select: -1 + ignore_case: true + ignore_punctuation: true + regex_pattern: "(\\([A-Z]\\))" + - function: "take_first" + - name: "strict-match" + filter: + - function: "regex" + regex_pattern: "((?<=The answer is )(.*)(?=.)|(?<=the answer is )(.*)(?=.)|(?<=The answer: )(.*)(?=.)|(?<=The final answer: )(.*)(?=.))" + - function: "take_first" diff --git a/lm_eval/tasks/bbh/cot_zeroshot/sports_understanding.yaml b/lm_eval/tasks/bbh/cot_zeroshot/sports_understanding.yaml index fd99e1d0ca..1046bfe819 100644 --- a/lm_eval/tasks/bbh/cot_zeroshot/sports_understanding.yaml +++ b/lm_eval/tasks/bbh/cot_zeroshot/sports_understanding.yaml @@ -1,5 +1,21 @@ "dataset_name": "sports_understanding" "description": "Determine whether an artificially constructed sentence relating to sports is plausible or not.\n\n" -"doc_to_text": "Q: {{input}}\nA: Let's think step by step.\n" +"doc_to_text": "Q: {{input}}\nA: Let's think step by step." "include": "_cot_zeroshot_template_yaml" "task": "bbh_cot_zeroshot_sports_understanding" + +filter_list: + - name: "flexible-extract" + filter: + - function: !function utils.MapRegexFilter + group_select: -1 + ignore_case: true + regex_pattern_to_value: + \b(no|not plausible)\b: "no" + \b(yes|plausible)\b: "yes" + - function: "take_first" + - name: "strict-match" + filter: + - function: "regex" + regex_pattern: "((?<=The answer is )(.*)(?=.)|(?<=the answer is )(.*)(?=.)|(?<=The answer: )(.*)(?=.)|(?<=The final answer: )(.*)(?=.))" + - function: "take_first" diff --git a/lm_eval/tasks/bbh/cot_zeroshot/temporal_sequences.yaml b/lm_eval/tasks/bbh/cot_zeroshot/temporal_sequences.yaml index 434b966e32..c7b949ada5 100644 --- a/lm_eval/tasks/bbh/cot_zeroshot/temporal_sequences.yaml +++ b/lm_eval/tasks/bbh/cot_zeroshot/temporal_sequences.yaml @@ -1,5 +1,19 @@ "dataset_name": "temporal_sequences" "description": "Task description: Answer questions about which times certain events could have occurred.\n\n" -"doc_to_text": "Q: {{input}}\nA: Let's think step by step.\n" +"doc_to_text": "Q: {{input}}\nA: Let's think step by step." "include": "_cot_zeroshot_template_yaml" "task": "bbh_cot_zeroshot_temporal_sequences" +filter_list: + - name: "flexible-extract" + filter: + - function: !function utils.MultiChoiceRegexFilter + group_select: -1 + ignore_case: true + ignore_punctuation: true + regex_pattern: "(\\([A-Z]\\))" + - function: "take_first" + - name: "strict-match" + filter: + - function: "regex" + regex_pattern: "((?<=The answer is )(.*)(?=.)|(?<=the answer is )(.*)(?=.)|(?<=The answer: )(.*)(?=.)|(?<=The final answer: )(.*)(?=.))" + - function: "take_first" diff --git a/lm_eval/tasks/bbh/cot_zeroshot/tracking_shuffled_objects_five_objects.yaml b/lm_eval/tasks/bbh/cot_zeroshot/tracking_shuffled_objects_five_objects.yaml index dbc095ba07..589253017f 100644 --- a/lm_eval/tasks/bbh/cot_zeroshot/tracking_shuffled_objects_five_objects.yaml +++ b/lm_eval/tasks/bbh/cot_zeroshot/tracking_shuffled_objects_five_objects.yaml @@ -1,5 +1,19 @@ "dataset_name": "tracking_shuffled_objects_five_objects" "description": "A task requiring determining the final positions of a set of objects given their initial positions and a description of a sequence of swaps.\n\n" -"doc_to_text": "Q: {{input}}\nA: Let's think step by step.\n" +"doc_to_text": "Q: {{input}}\nA: Let's think step by step." "include": "_cot_zeroshot_template_yaml" "task": "bbh_cot_zeroshot_tracking_shuffled_objects_five_objects" +filter_list: + - name: "flexible-extract" + filter: + - function: !function utils.MultiChoiceRegexFilter + group_select: -1 + ignore_case: true + ignore_punctuation: true + regex_pattern: "(\\([A-Z]\\))" + - function: "take_first" + - name: "strict-match" + filter: + - function: "regex" + regex_pattern: "((?<=The answer is )(.*)(?=.)|(?<=the answer is )(.*)(?=.)|(?<=The answer: )(.*)(?=.)|(?<=The final answer: )(.*)(?=.))" + - function: "take_first" diff --git a/lm_eval/tasks/bbh/cot_zeroshot/tracking_shuffled_objects_seven_objects.yaml b/lm_eval/tasks/bbh/cot_zeroshot/tracking_shuffled_objects_seven_objects.yaml index aac2250669..4635d7caba 100644 --- a/lm_eval/tasks/bbh/cot_zeroshot/tracking_shuffled_objects_seven_objects.yaml +++ b/lm_eval/tasks/bbh/cot_zeroshot/tracking_shuffled_objects_seven_objects.yaml @@ -1,5 +1,19 @@ "dataset_name": "tracking_shuffled_objects_seven_objects" "description": "A task requiring determining the final positions of a set of objects given their initial positions and a description of a sequence of swaps.\n\n" -"doc_to_text": "Q: {{input}}\nA: Let's think step by step.\n" +"doc_to_text": "Q: {{input}}\nA: Let's think step by step." "include": "_cot_zeroshot_template_yaml" "task": "bbh_cot_zeroshot_tracking_shuffled_objects_seven_objects" +filter_list: + - name: "flexible-extract" + filter: + - function: !function utils.MultiChoiceRegexFilter + group_select: -1 + ignore_case: true + ignore_punctuation: true + regex_pattern: "(\\([A-Z]\\))" + - function: "take_first" + - name: "strict-match" + filter: + - function: "regex" + regex_pattern: "((?<=The answer is )(.*)(?=.)|(?<=the answer is )(.*)(?=.)|(?<=The answer: )(.*)(?=.)|(?<=The final answer: )(.*)(?=.))" + - function: "take_first" diff --git a/lm_eval/tasks/bbh/cot_zeroshot/tracking_shuffled_objects_three_objects.yaml b/lm_eval/tasks/bbh/cot_zeroshot/tracking_shuffled_objects_three_objects.yaml index 5136b9b208..1edf0c0537 100644 --- a/lm_eval/tasks/bbh/cot_zeroshot/tracking_shuffled_objects_three_objects.yaml +++ b/lm_eval/tasks/bbh/cot_zeroshot/tracking_shuffled_objects_three_objects.yaml @@ -1,5 +1,19 @@ "dataset_name": "tracking_shuffled_objects_three_objects" "description": "A task requiring determining the final positions of a set of objects given their initial positions and a description of a sequence of swaps.\n\n" -"doc_to_text": "Q: {{input}}\nA: Let's think step by step.\n" +"doc_to_text": "Q: {{input}}\nA: Let's think step by step." "include": "_cot_zeroshot_template_yaml" "task": "bbh_cot_zeroshot_tracking_shuffled_objects_three_objects" +filter_list: + - name: "flexible-extract" + filter: + - function: !function utils.MultiChoiceRegexFilter + group_select: -1 + ignore_case: true + ignore_punctuation: true + regex_pattern: "(\\([A-Z]\\))" + - function: "take_first" + - name: "strict-match" + filter: + - function: "regex" + regex_pattern: "((?<=The answer is )(.*)(?=.)|(?<=the answer is )(.*)(?=.)|(?<=The answer: )(.*)(?=.)|(?<=The final answer: )(.*)(?=.))" + - function: "take_first" diff --git a/lm_eval/tasks/bbh/cot_zeroshot/utils.py b/lm_eval/tasks/bbh/cot_zeroshot/utils.py new file mode 100644 index 0000000000..ca411033fe --- /dev/null +++ b/lm_eval/tasks/bbh/cot_zeroshot/utils.py @@ -0,0 +1,191 @@ +import collections +import re +import sys + +import unicodedata + +from lm_eval.filters.extraction import RegexFilter, Filter + + +class ExtendedRegexFilter(RegexFilter): + punct_tbl = dict.fromkeys(i for i in range(sys.maxunicode) + if unicodedata.category(chr(i)).startswith('P')) + + def __init__( + self, regex_pattern: str = r"#### (\-?[0-9\.\,]+)", group_select=0, fallback: str = "[invalid]", + ignore_case=False, ignore_punctuation=False, regexes_to_ignore=None, + ) -> None: + super().__init__(regex_pattern, group_select, fallback) + self.ignore_case = ignore_case + self.ignore_punctuation = ignore_punctuation + self.regexes_to_ignore = regexes_to_ignore + + def filter_ignores(self, st): + if self.regexes_to_ignore is not None: + for s in self.regexes_to_ignore: + st = re.sub(s, "", st) + + if self.ignore_case: + st = st.lower() + + if self.ignore_punctuation: + # https://stackoverflow.com/a/266162 + st = st.translate(self.punct_tbl) + return st + + def find_match(self, regex, resp, convert_dict={}): + match = regex.findall(resp) + if match: + match = match[self.group_select] + if isinstance(match, tuple): + match = [m for m in match if m][0] + match = match.strip() + if match and match in convert_dict: + match = convert_dict[match] + return match + + +class MapRegexFilter(ExtendedRegexFilter): + def __init__( + self, regex_pattern_to_value: dict = {}, group_select=0, fallback: str = "[invalid]", + ignore_case=False, ignore_punctuation=False, regexes_to_ignore=None, + ) -> None: + """ + regex_pattern_to_value: Match the regex pattern and change the result into the value + group_select: Selects the (group_select)th match from the findall result. We use the whole regex_patterns, concatenated by | + ignore_case: Lowers the case of response before matching with the given regex + ignore_punctuation: Remove the punctuation before matching with the given regex + regexes_to_ignore: Remove these regexes before matching with the given regex + """ + super().__init__('|'.join(list(regex_pattern_to_value.keys())), group_select, fallback, ignore_case, ignore_punctuation, regexes_to_ignore) + self.regex_to_value = {re.compile(r): v for r, v in regex_pattern_to_value.items()} + + def apply(self, resps, docs): + filtered_resps = [] + + for r in resps: + filtered = [] + for resp in r: + whole_match_considering_group_select = self.find_match(self.regex, self.filter_ignores(resp)) + if whole_match_considering_group_select: + for regex, mapped_value in self.regex_to_value.items(): + match = self.find_match(regex, self.filter_ignores(whole_match_considering_group_select)) + if match: + match = mapped_value + break + if not whole_match_considering_group_select or not match: + match = self.fallback + + filtered.append(match) + filtered_resps.append(filtered) + + return filtered_resps + + +class NumberParseRegexFilter(ExtendedRegexFilter): + def apply(self, resps, docs): + # here, we assume we have a list, in which each element is + # a list of model responses for some particular input/target pair. + # so we process each of these (same input/target response sets) + # independently (and keep them a list.) + filtered_resps = [] + import regex + from word2number import w2n + # https://www.reddit.com/r/regex/comments/11a38uk/parsing_numbers_written_out_as_english_words + english_number_regex = regex.compile( + "((?:(?:zero|one|two|three|four|five|(?:twen|thir|for|fif|six|seven|nine)(?|teen|ty)|eight(?:|een|y)|ten|eleven|twelve|fourteen|hundred|thousand|(?:m|b|tr)illion)(?:zero|one|two|three|four|five|(?:twen|thir|for|fif|six|seven|nine)(?:|teen|ty)|eight(?|een|y)|ten|eleven|twelve|fourteen|hundred|thousand|(?:m|b|tr)illion|[^\S\r\n]|,|and|&)+)?(?:zero|one|two|three|four|five|(?:twen|thir|for|fif|six|seven|nine)(?|teen|ty)|eight(?|een|y)|ten|eleven|twelve|fourteen|hundred|thousand|(?:m|b|tr)illion))") + + for r in resps: + filtered = [] + for resp in r: + match = self.find_match(self.regex, resp) + if not match: + match = self.find_match(english_number_regex, resp.lower()) + if match: + match = str(w2n.word_to_num(match)) + if not match: + match = self.fallback + filtered.append(match) + filtered_resps.append(filtered) + + return filtered_resps + + +class WordSortFilter(Filter): + """ """ + + def apply(self, resps, docs): + filtered_resps = [] + + for r, doc in zip(resps, docs): + words = doc['input'].split("List:")[1].strip().split() + regex = re.compile('|'.join([f"\\b{w}\\b" for w in words])) + filtered = [] + for resp in r: + match = regex.findall(resp) + match.reverse() + ordered_words = reversed(collections.OrderedDict(zip(match, [None] * len(match)))) + filtered.append(' '.join(ordered_words)) + filtered_resps.append(filtered) + + return filtered_resps + + +class MultiChoiceRegexFilter(ExtendedRegexFilter): + + def __init__(self, *args, **kwargs): + """ + regex_pattern: The basic regex pattern to use. If fails to match, we will use the customized match procedure + - step 1 : We parse the choices between ([A-Z])s then try to find these choices in the response. + - step 2 : We parse the choice with regex :[\s]*([A-?]), where ? varies by number of choices. + group_select: Selects the (group_select)th match from the findall result. + ignore_case: Ignores the case during step 1 matching + ignore_punctuation: Remove the punctuation during step 1 matching + regexes_to_ignore: Remove these regexes during step 1 matching + """ + super().__init__(*args, **kwargs) + + def apply(self, resps, docs): + # here, we assume we have a list, in which each element is + # a list of model responses for some particular input/target pair. + # so we process each of these (same input/target response sets) + # independently (and keep them a list.) + + filtered_resps = [] + + for r, doc in zip(resps, docs): + fallback_regexes = [] + choice_to_alpha = {} + next_alpha = 'A' + + without_paren_fallback_regexes = [] + without_paren_to_target = {} + + multiple_choices_regex = re.compile(r"\([A-Z]\)([^\n^(]*)") + match = multiple_choices_regex.findall(doc['input']) + for m in match: + m = self.filter_ignores(m.strip()) + fallback_regexes.append(f"{re.escape(m)}") + choice_to_alpha[m] = f"({next_alpha})" + + without_paren_fallback_regexes.append(next_alpha) + without_paren_to_target[next_alpha] = f"({next_alpha})" + + next_alpha = chr(ord(next_alpha) + 1) + fallback_regex = re.compile('|'.join(fallback_regexes)) + without_paren_fallback_regex = '|'.join(without_paren_fallback_regexes) + without_paren_fallback_regex = re.compile(f":[\s]*({without_paren_fallback_regex})") + + filtered = [] + for resp in r: + match = self.find_match(self.regex, resp) + if not match: + match = self.find_match(fallback_regex, self.filter_ignores(resp), choice_to_alpha) + if not match: + match = self.find_match(without_paren_fallback_regex, resp, without_paren_to_target) + if not match: + match = self.fallback + filtered.append(match) + filtered_resps.append(filtered) + + return filtered_resps diff --git a/lm_eval/tasks/bbh/cot_zeroshot/web_of_lies.yaml b/lm_eval/tasks/bbh/cot_zeroshot/web_of_lies.yaml index 96994374ed..a3227304a2 100644 --- a/lm_eval/tasks/bbh/cot_zeroshot/web_of_lies.yaml +++ b/lm_eval/tasks/bbh/cot_zeroshot/web_of_lies.yaml @@ -1,5 +1,20 @@ "dataset_name": "web_of_lies" "description": "Evaluate a random boolean function expressed as a word problem.\n\n" -"doc_to_text": "Q: {{input}}\nA: Let's think step by step.\n" +"doc_to_text": "Q: {{input}}\nA: Let's think step by step." "include": "_cot_zeroshot_template_yaml" "task": "bbh_cot_zeroshot_web_of_lies" +filter_list: + - name: "flexible-extract" + filter: + - function: !function utils.MapRegexFilter + group_select: -1 + ignore_case: true + regex_pattern_to_value: + \b(no|does not tell the truth|is not telling the truth)\b: "no" + \b(yes|tells the truth|is telling the truth)\b: "yes" + - function: "take_first" + - name: "strict-match" + filter: + - function: "regex" + regex_pattern: "((?<=The answer is )(.*)(?=.)|(?<=the answer is )(.*)(?=.)|(?<=The answer: )(.*)(?=.)|(?<=The final answer: )(.*)(?=.))" + - function: "take_first" diff --git a/lm_eval/tasks/bbh/cot_zeroshot/word_sorting.yaml b/lm_eval/tasks/bbh/cot_zeroshot/word_sorting.yaml index 98249eec6e..258add09a0 100644 --- a/lm_eval/tasks/bbh/cot_zeroshot/word_sorting.yaml +++ b/lm_eval/tasks/bbh/cot_zeroshot/word_sorting.yaml @@ -1,5 +1,15 @@ "dataset_name": "word_sorting" "description": "Sort a list of words.\n\n" -"doc_to_text": "Q: {{input}}\nA: Let's think step by step.\n" +"doc_to_text": "Q: {{input}}\nA: Let's think step by step." "include": "_cot_zeroshot_template_yaml" "task": "bbh_cot_zeroshot_word_sorting" +filter_list: + - name: "flexible-extract" + filter: + - function: !function utils.WordSortFilter + - function: "take_first" + - name: "strict-match" + filter: + - function: "regex" + regex_pattern: "((?<=The answer is )(.*)(?=.)|(?<=the answer is )(.*)(?=.)|(?<=The answer: )(.*)(?=.)|(?<=The final answer: )(.*)(?=.))" + - function: "take_first" diff --git a/lm_eval/tasks/bbh/zeroshot/_zeroshot_template_yaml b/lm_eval/tasks/bbh/zeroshot/_zeroshot_template_yaml index 2b688e375f..728ccae1fb 100644 --- a/lm_eval/tasks/bbh/zeroshot/_zeroshot_template_yaml +++ b/lm_eval/tasks/bbh/zeroshot/_zeroshot_template_yaml @@ -7,15 +7,21 @@ metric_list: - metric: exact_match aggregation: mean higher_is_better: true - # ignore_case: true + ignore_case: true # ignore_punctuation: true + regexes_to_ignore: + - "\\.$" + - "," + - "\n" + - "\\\\" + - '"' generation_kwargs: until: - "" - "Q:" - - "\n\n" + - "<|im_end|>" do_sample: false temperature: 0.0 num_fewshot: 0 metadata: - version: 1.0 + version: 2.0 diff --git a/lm_eval/tasks/bbh/zeroshot/boolean_expressions.yaml b/lm_eval/tasks/bbh/zeroshot/boolean_expressions.yaml index 08f2d84528..fdaddf0e84 100644 --- a/lm_eval/tasks/bbh/zeroshot/boolean_expressions.yaml +++ b/lm_eval/tasks/bbh/zeroshot/boolean_expressions.yaml @@ -3,3 +3,14 @@ "doc_to_text": "Q: {{input}}\nA:" "include": "_zeroshot_template_yaml" "task": "bbh_zeroshot_boolean_expressions" + +filter_list: + - name: "strict-match" + filter: + - function: "take_first" + - name: "flexible-extract" + filter: + - function: "regex" + group_select: 0 + regex_pattern: "\\b(True|False)\\b" + - function: "take_first" diff --git a/lm_eval/tasks/bbh/zeroshot/causal_judgement.yaml b/lm_eval/tasks/bbh/zeroshot/causal_judgement.yaml index ac75aa22df..c3a39e7f6e 100644 --- a/lm_eval/tasks/bbh/zeroshot/causal_judgement.yaml +++ b/lm_eval/tasks/bbh/zeroshot/causal_judgement.yaml @@ -3,3 +3,14 @@ "doc_to_text": "Q: {{input}}\nA:" "include": "_zeroshot_template_yaml" "task": "bbh_zeroshot_causal_judgement" + +filter_list: + - name: "strict-match" + filter: + - function: "take_first" + - name: "flexible-extract" + filter: + - function: "regex" + group_select: 0 + regex_pattern: "\\b(Yes|No|yes|no)\\b" + - function: "take_first" diff --git a/lm_eval/tasks/bbh/zeroshot/date_understanding.yaml b/lm_eval/tasks/bbh/zeroshot/date_understanding.yaml index 346fa62c7b..f00db0cfe0 100644 --- a/lm_eval/tasks/bbh/zeroshot/date_understanding.yaml +++ b/lm_eval/tasks/bbh/zeroshot/date_understanding.yaml @@ -3,3 +3,16 @@ "doc_to_text": "Q: {{input}}\nA:" "include": "_zeroshot_template_yaml" "task": "bbh_zeroshot_date_understanding" + +filter_list: + - name: "strict-match" + filter: + - function: "take_first" + - name: "flexible-extract" + filter: + - function: !function utils.MultiChoiceRegexFilter + group_select: 0 + ignore_case: true + ignore_punctuation: true + regex_pattern: "(\\([A-Z]\\))" + - function: "take_first" diff --git a/lm_eval/tasks/bbh/zeroshot/disambiguation_qa.yaml b/lm_eval/tasks/bbh/zeroshot/disambiguation_qa.yaml index 1069d5282d..0910a627b0 100644 --- a/lm_eval/tasks/bbh/zeroshot/disambiguation_qa.yaml +++ b/lm_eval/tasks/bbh/zeroshot/disambiguation_qa.yaml @@ -3,3 +3,16 @@ "doc_to_text": "Q: {{input}}\nA:" "include": "_zeroshot_template_yaml" "task": "bbh_zeroshot_disambiguation_qa" + +filter_list: + - name: "strict-match" + filter: + - function: "take_first" + - name: "flexible-extract" + filter: + - function: !function utils.MultiChoiceRegexFilter + group_select: 0 + ignore_case: true + ignore_punctuation: true + regex_pattern: "(\\([A-Z]\\))" + - function: "take_first" diff --git a/lm_eval/tasks/bbh/zeroshot/dyck_languages.yaml b/lm_eval/tasks/bbh/zeroshot/dyck_languages.yaml index dd85a0e9d2..9350ea0f58 100644 --- a/lm_eval/tasks/bbh/zeroshot/dyck_languages.yaml +++ b/lm_eval/tasks/bbh/zeroshot/dyck_languages.yaml @@ -3,3 +3,13 @@ "doc_to_text": "Q: {{input}}\nA:" "include": "_zeroshot_template_yaml" "task": "bbh_zeroshot_dyck_languages" +filter_list: + - name: "strict-match" + filter: + - function: "take_first" + - name: "flexible-extract" + filter: + - function: "regex" + group_select: 0 + regex_pattern: "(?<= )([\" \\[\\(<{}>\\)\\]]+)|([\" \\[\\(<{}>\\)\\]]+)" + - function: "take_first" diff --git a/lm_eval/tasks/bbh/zeroshot/formal_fallacies.yaml b/lm_eval/tasks/bbh/zeroshot/formal_fallacies.yaml index 2abf59b00b..1eaf622628 100644 --- a/lm_eval/tasks/bbh/zeroshot/formal_fallacies.yaml +++ b/lm_eval/tasks/bbh/zeroshot/formal_fallacies.yaml @@ -3,3 +3,14 @@ "doc_to_text": "Q: {{input}}\nA:" "include": "_zeroshot_template_yaml" "task": "bbh_zeroshot_formal_fallacies" + +filter_list: + - name: "strict-match" + filter: + - function: "take_first" + - name: "flexible-extract" + filter: + - function: "regex" + group_select: 0 + regex_pattern: "\\b(valid|invalid)\\b" + - function: "take_first" diff --git a/lm_eval/tasks/bbh/zeroshot/geometric_shapes.yaml b/lm_eval/tasks/bbh/zeroshot/geometric_shapes.yaml index 8952cbf3c6..8a6a828a4c 100644 --- a/lm_eval/tasks/bbh/zeroshot/geometric_shapes.yaml +++ b/lm_eval/tasks/bbh/zeroshot/geometric_shapes.yaml @@ -3,3 +3,16 @@ "doc_to_text": "Q: {{input}}\nA:" "include": "_zeroshot_template_yaml" "task": "bbh_zeroshot_geometric_shapes" + +filter_list: + - name: "strict-match" + filter: + - function: "take_first" + - name: "flexible-extract" + filter: + - function: !function utils.MultiChoiceRegexFilter + group_select: 0 + ignore_case: true + ignore_punctuation: true + regex_pattern: "(\\([A-Z]\\))" + - function: "take_first" diff --git a/lm_eval/tasks/bbh/zeroshot/hyperbaton.yaml b/lm_eval/tasks/bbh/zeroshot/hyperbaton.yaml index 9f38e953ff..a795e8bbe9 100644 --- a/lm_eval/tasks/bbh/zeroshot/hyperbaton.yaml +++ b/lm_eval/tasks/bbh/zeroshot/hyperbaton.yaml @@ -3,3 +3,16 @@ "doc_to_text": "Q: {{input}}\nA:" "include": "_zeroshot_template_yaml" "task": "bbh_zeroshot_hyperbaton" + +filter_list: + - name: "strict-match" + filter: + - function: "take_first" + - name: "flexible-extract" + filter: + - function: !function utils.MultiChoiceRegexFilter + group_select: 0 + ignore_case: true + ignore_punctuation: true + regex_pattern: "(\\([A-Z]\\))" + - function: "take_first" diff --git a/lm_eval/tasks/bbh/zeroshot/logical_deduction_five_objects.yaml b/lm_eval/tasks/bbh/zeroshot/logical_deduction_five_objects.yaml index 43bece8c9e..f06b02f303 100644 --- a/lm_eval/tasks/bbh/zeroshot/logical_deduction_five_objects.yaml +++ b/lm_eval/tasks/bbh/zeroshot/logical_deduction_five_objects.yaml @@ -3,3 +3,15 @@ "doc_to_text": "Q: {{input}}\nA:" "include": "_zeroshot_template_yaml" "task": "bbh_zeroshot_logical_deduction_five_objects" +filter_list: + - name: "strict-match" + filter: + - function: "take_first" + - name: "flexible-extract" + filter: + - function: !function utils.MultiChoiceRegexFilter + group_select: 0 + ignore_case: true + ignore_punctuation: true + regex_pattern: "(\\([A-Z]\\))" + - function: "take_first" diff --git a/lm_eval/tasks/bbh/zeroshot/logical_deduction_seven_objects.yaml b/lm_eval/tasks/bbh/zeroshot/logical_deduction_seven_objects.yaml index 0b2fb7764a..3f9ff7eaa0 100644 --- a/lm_eval/tasks/bbh/zeroshot/logical_deduction_seven_objects.yaml +++ b/lm_eval/tasks/bbh/zeroshot/logical_deduction_seven_objects.yaml @@ -3,3 +3,15 @@ "doc_to_text": "Q: {{input}}\nA:" "include": "_zeroshot_template_yaml" "task": "bbh_zeroshot_logical_deduction_seven_objects" +filter_list: + - name: "strict-match" + filter: + - function: "take_first" + - name: "flexible-extract" + filter: + - function: !function utils.MultiChoiceRegexFilter + group_select: 0 + ignore_case: true + ignore_punctuation: true + regex_pattern: "(\\([A-Z]\\))" + - function: "take_first" diff --git a/lm_eval/tasks/bbh/zeroshot/logical_deduction_three_objects.yaml b/lm_eval/tasks/bbh/zeroshot/logical_deduction_three_objects.yaml index ffb33619d4..7bd19d7f5a 100644 --- a/lm_eval/tasks/bbh/zeroshot/logical_deduction_three_objects.yaml +++ b/lm_eval/tasks/bbh/zeroshot/logical_deduction_three_objects.yaml @@ -3,3 +3,15 @@ "doc_to_text": "Q: {{input}}\nA:" "include": "_zeroshot_template_yaml" "task": "bbh_zeroshot_logical_deduction_three_objects" +filter_list: + - name: "strict-match" + filter: + - function: "take_first" + - name: "flexible-extract" + filter: + - function: !function utils.MultiChoiceRegexFilter + group_select: 0 + ignore_case: true + ignore_punctuation: true + regex_pattern: "(\\([A-Z]\\))" + - function: "take_first" diff --git a/lm_eval/tasks/bbh/zeroshot/movie_recommendation.yaml b/lm_eval/tasks/bbh/zeroshot/movie_recommendation.yaml index 86c6650d8a..b54cbd8b4c 100644 --- a/lm_eval/tasks/bbh/zeroshot/movie_recommendation.yaml +++ b/lm_eval/tasks/bbh/zeroshot/movie_recommendation.yaml @@ -3,3 +3,15 @@ "doc_to_text": "Q: {{input}}\nA:" "include": "_zeroshot_template_yaml" "task": "bbh_zeroshot_movie_recommendation" +filter_list: + - name: "strict-match" + filter: + - function: "take_first" + - name: "flexible-extract" + filter: + - function: !function utils.MultiChoiceRegexFilter + group_select: 0 + ignore_case: true + ignore_punctuation: true + regex_pattern: "(\\([A-Z]\\))" + - function: "take_first" diff --git a/lm_eval/tasks/bbh/zeroshot/multistep_arithmetic_two.yaml b/lm_eval/tasks/bbh/zeroshot/multistep_arithmetic_two.yaml index 7afc6d56fe..ef6439f9b1 100644 --- a/lm_eval/tasks/bbh/zeroshot/multistep_arithmetic_two.yaml +++ b/lm_eval/tasks/bbh/zeroshot/multistep_arithmetic_two.yaml @@ -3,3 +3,14 @@ "doc_to_text": "Q: {{input}}\nA:" "include": "_zeroshot_template_yaml" "task": "bbh_zeroshot_multistep_arithmetic_two" + +filter_list: + - name: "strict-match" + filter: + - function: "take_first" + - name: "flexible-extract" + filter: + - function: !function utils.NumberParseRegexFilter + group_select: 0 + regex_pattern: "([-0-9]+)" + - function: "take_first" diff --git a/lm_eval/tasks/bbh/zeroshot/navigate.yaml b/lm_eval/tasks/bbh/zeroshot/navigate.yaml index 001e436a4a..7a7aeb1c45 100644 --- a/lm_eval/tasks/bbh/zeroshot/navigate.yaml +++ b/lm_eval/tasks/bbh/zeroshot/navigate.yaml @@ -3,3 +3,13 @@ "doc_to_text": "Q: {{input}}\nA:" "include": "_zeroshot_template_yaml" "task": "bbh_zeroshot_navigate" +filter_list: + - name: "strict-match" + filter: + - function: "take_first" + - name: "flexible-extract" + filter: + - function: "regex" + group_select: 0 + regex_pattern: "\\b(Yes|No|yes|no)\\b" + - function: "take_first" diff --git a/lm_eval/tasks/bbh/zeroshot/object_counting.yaml b/lm_eval/tasks/bbh/zeroshot/object_counting.yaml index 36a87c9160..09df4e148c 100644 --- a/lm_eval/tasks/bbh/zeroshot/object_counting.yaml +++ b/lm_eval/tasks/bbh/zeroshot/object_counting.yaml @@ -3,3 +3,13 @@ "doc_to_text": "Q: {{input}}\nA:" "include": "_zeroshot_template_yaml" "task": "bbh_zeroshot_object_counting" +filter_list: + - name: "strict-match" + filter: + - function: "take_first" + - name: "flexible-extract" + filter: + - function: !function utils.NumberParseRegexFilter + group_select: 0 + regex_pattern: "([-0-9]+)" + - function: "take_first" diff --git a/lm_eval/tasks/bbh/zeroshot/penguins_in_a_table.yaml b/lm_eval/tasks/bbh/zeroshot/penguins_in_a_table.yaml index fee8d37eb6..3d565f49c8 100644 --- a/lm_eval/tasks/bbh/zeroshot/penguins_in_a_table.yaml +++ b/lm_eval/tasks/bbh/zeroshot/penguins_in_a_table.yaml @@ -3,3 +3,15 @@ "doc_to_text": "Q: {{input}}\nA:" "include": "_zeroshot_template_yaml" "task": "bbh_zeroshot_penguins_in_a_table" +filter_list: + - name: "strict-match" + filter: + - function: "take_first" + - name: "flexible-extract" + filter: + - function: !function utils.MultiChoiceRegexFilter + group_select: 0 + ignore_case: true + ignore_punctuation: true + regex_pattern: "(\\([A-Z]\\))" + - function: "take_first" diff --git a/lm_eval/tasks/bbh/zeroshot/reasoning_about_colored_objects.yaml b/lm_eval/tasks/bbh/zeroshot/reasoning_about_colored_objects.yaml index 7e0fc89bf8..06ccf43e1d 100644 --- a/lm_eval/tasks/bbh/zeroshot/reasoning_about_colored_objects.yaml +++ b/lm_eval/tasks/bbh/zeroshot/reasoning_about_colored_objects.yaml @@ -3,3 +3,15 @@ "doc_to_text": "Q: {{input}}\nA:" "include": "_zeroshot_template_yaml" "task": "bbh_zeroshot_reasoning_about_colored_objects" +filter_list: + - name: "strict-match" + filter: + - function: "take_first" + - name: "flexible-extract" + filter: + - function: !function utils.MultiChoiceRegexFilter + group_select: 0 + ignore_case: true + ignore_punctuation: true + regex_pattern: "(\\([A-Z]\\))" + - function: "take_first" diff --git a/lm_eval/tasks/bbh/zeroshot/ruin_names.yaml b/lm_eval/tasks/bbh/zeroshot/ruin_names.yaml index 87ba3d787a..a1ad23a5ed 100644 --- a/lm_eval/tasks/bbh/zeroshot/ruin_names.yaml +++ b/lm_eval/tasks/bbh/zeroshot/ruin_names.yaml @@ -3,3 +3,15 @@ "doc_to_text": "Q: {{input}}\nA:" "include": "_zeroshot_template_yaml" "task": "bbh_zeroshot_ruin_names" +filter_list: + - name: "strict-match" + filter: + - function: "take_first" + - name: "flexible-extract" + filter: + - function: !function utils.MultiChoiceRegexFilter + group_select: 0 + ignore_case: true + ignore_punctuation: true + regex_pattern: "(\\([A-Z]\\))" + - function: "take_first" diff --git a/lm_eval/tasks/bbh/zeroshot/salient_translation_error_detection.yaml b/lm_eval/tasks/bbh/zeroshot/salient_translation_error_detection.yaml index cb4bbbbe4c..080cbd0571 100644 --- a/lm_eval/tasks/bbh/zeroshot/salient_translation_error_detection.yaml +++ b/lm_eval/tasks/bbh/zeroshot/salient_translation_error_detection.yaml @@ -3,3 +3,15 @@ "doc_to_text": "Q: {{input}}\nA:" "include": "_zeroshot_template_yaml" "task": "bbh_zeroshot_salient_translation_error_detection" +filter_list: + - name: "strict-match" + filter: + - function: "take_first" + - name: "flexible-extract" + filter: + - function: !function utils.MultiChoiceRegexFilter + group_select: 0 + ignore_case: true + ignore_punctuation: true + regex_pattern: "(\\([A-Z]\\))" + - function: "take_first" diff --git a/lm_eval/tasks/bbh/zeroshot/snarks.yaml b/lm_eval/tasks/bbh/zeroshot/snarks.yaml index f980787006..09d37d5cf4 100644 --- a/lm_eval/tasks/bbh/zeroshot/snarks.yaml +++ b/lm_eval/tasks/bbh/zeroshot/snarks.yaml @@ -3,3 +3,15 @@ "doc_to_text": "Q: {{input}}\nA:" "include": "_zeroshot_template_yaml" "task": "bbh_zeroshot_snarks" +filter_list: + - name: "strict-match" + filter: + - function: "take_first" + - name: "flexible-extract" + filter: + - function: !function utils.MultiChoiceRegexFilter + group_select: 0 + ignore_case: true + ignore_punctuation: true + regex_pattern: "(\\([A-Z]\\))" + - function: "take_first" diff --git a/lm_eval/tasks/bbh/zeroshot/sports_understanding.yaml b/lm_eval/tasks/bbh/zeroshot/sports_understanding.yaml index c20251dd66..8ba9ca8502 100644 --- a/lm_eval/tasks/bbh/zeroshot/sports_understanding.yaml +++ b/lm_eval/tasks/bbh/zeroshot/sports_understanding.yaml @@ -3,3 +3,17 @@ "doc_to_text": "Q: {{input}}\nA:" "include": "_zeroshot_template_yaml" "task": "bbh_zeroshot_sports_understanding" + +filter_list: + - name: "strict-match" + filter: + - function: "take_first" + - name: "flexible-extract" + filter: + - function: !function utils.MapRegexFilter + group_select: 0 + ignore_case: true + regex_pattern_to_value: + \b(no|not plausible)\b: "no" + \b(yes|plausible)\b: "yes" + - function: "take_first" diff --git a/lm_eval/tasks/bbh/zeroshot/temporal_sequences.yaml b/lm_eval/tasks/bbh/zeroshot/temporal_sequences.yaml index 14feb2f079..9aa545c02d 100644 --- a/lm_eval/tasks/bbh/zeroshot/temporal_sequences.yaml +++ b/lm_eval/tasks/bbh/zeroshot/temporal_sequences.yaml @@ -3,3 +3,15 @@ "doc_to_text": "Q: {{input}}\nA:" "include": "_zeroshot_template_yaml" "task": "bbh_zeroshot_temporal_sequences" +filter_list: + - name: "strict-match" + filter: + - function: "take_first" + - name: "flexible-extract" + filter: + - function: !function utils.MultiChoiceRegexFilter + group_select: 0 + ignore_case: true + ignore_punctuation: true + regex_pattern: "(\\([A-Z]\\))" + - function: "take_first" diff --git a/lm_eval/tasks/bbh/zeroshot/tracking_shuffled_objects_five_objects.yaml b/lm_eval/tasks/bbh/zeroshot/tracking_shuffled_objects_five_objects.yaml index b9e818bc9d..96900c9d32 100644 --- a/lm_eval/tasks/bbh/zeroshot/tracking_shuffled_objects_five_objects.yaml +++ b/lm_eval/tasks/bbh/zeroshot/tracking_shuffled_objects_five_objects.yaml @@ -3,3 +3,15 @@ "doc_to_text": "Q: {{input}}\nA:" "include": "_zeroshot_template_yaml" "task": "bbh_zeroshot_tracking_shuffled_objects_five_objects" +filter_list: + - name: "strict-match" + filter: + - function: "take_first" + - name: "flexible-extract" + filter: + - function: !function utils.MultiChoiceRegexFilter + group_select: 0 + ignore_case: true + ignore_punctuation: true + regex_pattern: "(\\([A-Z]\\))" + - function: "take_first" diff --git a/lm_eval/tasks/bbh/zeroshot/tracking_shuffled_objects_seven_objects.yaml b/lm_eval/tasks/bbh/zeroshot/tracking_shuffled_objects_seven_objects.yaml index 2b76bfec6e..d45619c3c9 100644 --- a/lm_eval/tasks/bbh/zeroshot/tracking_shuffled_objects_seven_objects.yaml +++ b/lm_eval/tasks/bbh/zeroshot/tracking_shuffled_objects_seven_objects.yaml @@ -3,3 +3,15 @@ "doc_to_text": "Q: {{input}}\nA:" "include": "_zeroshot_template_yaml" "task": "bbh_zeroshot_tracking_shuffled_objects_seven_objects" +filter_list: + - name: "strict-match" + filter: + - function: "take_first" + - name: "flexible-extract" + filter: + - function: !function utils.MultiChoiceRegexFilter + group_select: 0 + ignore_case: true + ignore_punctuation: true + regex_pattern: "(\\([A-Z]\\))" + - function: "take_first" diff --git a/lm_eval/tasks/bbh/zeroshot/tracking_shuffled_objects_three_objects.yaml b/lm_eval/tasks/bbh/zeroshot/tracking_shuffled_objects_three_objects.yaml index 4125501e1a..1d8150ca4f 100644 --- a/lm_eval/tasks/bbh/zeroshot/tracking_shuffled_objects_three_objects.yaml +++ b/lm_eval/tasks/bbh/zeroshot/tracking_shuffled_objects_three_objects.yaml @@ -3,3 +3,15 @@ "doc_to_text": "Q: {{input}}\nA:" "include": "_zeroshot_template_yaml" "task": "bbh_zeroshot_tracking_shuffled_objects_three_objects" +filter_list: + - name: "strict-match" + filter: + - function: "take_first" + - name: "flexible-extract" + filter: + - function: !function utils.MultiChoiceRegexFilter + group_select: 0 + ignore_case: true + ignore_punctuation: true + regex_pattern: "(\\([A-Z]\\))" + - function: "take_first" diff --git a/lm_eval/tasks/bbh/zeroshot/utils.py b/lm_eval/tasks/bbh/zeroshot/utils.py new file mode 100644 index 0000000000..ca411033fe --- /dev/null +++ b/lm_eval/tasks/bbh/zeroshot/utils.py @@ -0,0 +1,191 @@ +import collections +import re +import sys + +import unicodedata + +from lm_eval.filters.extraction import RegexFilter, Filter + + +class ExtendedRegexFilter(RegexFilter): + punct_tbl = dict.fromkeys(i for i in range(sys.maxunicode) + if unicodedata.category(chr(i)).startswith('P')) + + def __init__( + self, regex_pattern: str = r"#### (\-?[0-9\.\,]+)", group_select=0, fallback: str = "[invalid]", + ignore_case=False, ignore_punctuation=False, regexes_to_ignore=None, + ) -> None: + super().__init__(regex_pattern, group_select, fallback) + self.ignore_case = ignore_case + self.ignore_punctuation = ignore_punctuation + self.regexes_to_ignore = regexes_to_ignore + + def filter_ignores(self, st): + if self.regexes_to_ignore is not None: + for s in self.regexes_to_ignore: + st = re.sub(s, "", st) + + if self.ignore_case: + st = st.lower() + + if self.ignore_punctuation: + # https://stackoverflow.com/a/266162 + st = st.translate(self.punct_tbl) + return st + + def find_match(self, regex, resp, convert_dict={}): + match = regex.findall(resp) + if match: + match = match[self.group_select] + if isinstance(match, tuple): + match = [m for m in match if m][0] + match = match.strip() + if match and match in convert_dict: + match = convert_dict[match] + return match + + +class MapRegexFilter(ExtendedRegexFilter): + def __init__( + self, regex_pattern_to_value: dict = {}, group_select=0, fallback: str = "[invalid]", + ignore_case=False, ignore_punctuation=False, regexes_to_ignore=None, + ) -> None: + """ + regex_pattern_to_value: Match the regex pattern and change the result into the value + group_select: Selects the (group_select)th match from the findall result. We use the whole regex_patterns, concatenated by | + ignore_case: Lowers the case of response before matching with the given regex + ignore_punctuation: Remove the punctuation before matching with the given regex + regexes_to_ignore: Remove these regexes before matching with the given regex + """ + super().__init__('|'.join(list(regex_pattern_to_value.keys())), group_select, fallback, ignore_case, ignore_punctuation, regexes_to_ignore) + self.regex_to_value = {re.compile(r): v for r, v in regex_pattern_to_value.items()} + + def apply(self, resps, docs): + filtered_resps = [] + + for r in resps: + filtered = [] + for resp in r: + whole_match_considering_group_select = self.find_match(self.regex, self.filter_ignores(resp)) + if whole_match_considering_group_select: + for regex, mapped_value in self.regex_to_value.items(): + match = self.find_match(regex, self.filter_ignores(whole_match_considering_group_select)) + if match: + match = mapped_value + break + if not whole_match_considering_group_select or not match: + match = self.fallback + + filtered.append(match) + filtered_resps.append(filtered) + + return filtered_resps + + +class NumberParseRegexFilter(ExtendedRegexFilter): + def apply(self, resps, docs): + # here, we assume we have a list, in which each element is + # a list of model responses for some particular input/target pair. + # so we process each of these (same input/target response sets) + # independently (and keep them a list.) + filtered_resps = [] + import regex + from word2number import w2n + # https://www.reddit.com/r/regex/comments/11a38uk/parsing_numbers_written_out_as_english_words + english_number_regex = regex.compile( + "((?:(?:zero|one|two|three|four|five|(?:twen|thir|for|fif|six|seven|nine)(?|teen|ty)|eight(?:|een|y)|ten|eleven|twelve|fourteen|hundred|thousand|(?:m|b|tr)illion)(?:zero|one|two|three|four|five|(?:twen|thir|for|fif|six|seven|nine)(?:|teen|ty)|eight(?|een|y)|ten|eleven|twelve|fourteen|hundred|thousand|(?:m|b|tr)illion|[^\S\r\n]|,|and|&)+)?(?:zero|one|two|three|four|five|(?:twen|thir|for|fif|six|seven|nine)(?|teen|ty)|eight(?|een|y)|ten|eleven|twelve|fourteen|hundred|thousand|(?:m|b|tr)illion))") + + for r in resps: + filtered = [] + for resp in r: + match = self.find_match(self.regex, resp) + if not match: + match = self.find_match(english_number_regex, resp.lower()) + if match: + match = str(w2n.word_to_num(match)) + if not match: + match = self.fallback + filtered.append(match) + filtered_resps.append(filtered) + + return filtered_resps + + +class WordSortFilter(Filter): + """ """ + + def apply(self, resps, docs): + filtered_resps = [] + + for r, doc in zip(resps, docs): + words = doc['input'].split("List:")[1].strip().split() + regex = re.compile('|'.join([f"\\b{w}\\b" for w in words])) + filtered = [] + for resp in r: + match = regex.findall(resp) + match.reverse() + ordered_words = reversed(collections.OrderedDict(zip(match, [None] * len(match)))) + filtered.append(' '.join(ordered_words)) + filtered_resps.append(filtered) + + return filtered_resps + + +class MultiChoiceRegexFilter(ExtendedRegexFilter): + + def __init__(self, *args, **kwargs): + """ + regex_pattern: The basic regex pattern to use. If fails to match, we will use the customized match procedure + - step 1 : We parse the choices between ([A-Z])s then try to find these choices in the response. + - step 2 : We parse the choice with regex :[\s]*([A-?]), where ? varies by number of choices. + group_select: Selects the (group_select)th match from the findall result. + ignore_case: Ignores the case during step 1 matching + ignore_punctuation: Remove the punctuation during step 1 matching + regexes_to_ignore: Remove these regexes during step 1 matching + """ + super().__init__(*args, **kwargs) + + def apply(self, resps, docs): + # here, we assume we have a list, in which each element is + # a list of model responses for some particular input/target pair. + # so we process each of these (same input/target response sets) + # independently (and keep them a list.) + + filtered_resps = [] + + for r, doc in zip(resps, docs): + fallback_regexes = [] + choice_to_alpha = {} + next_alpha = 'A' + + without_paren_fallback_regexes = [] + without_paren_to_target = {} + + multiple_choices_regex = re.compile(r"\([A-Z]\)([^\n^(]*)") + match = multiple_choices_regex.findall(doc['input']) + for m in match: + m = self.filter_ignores(m.strip()) + fallback_regexes.append(f"{re.escape(m)}") + choice_to_alpha[m] = f"({next_alpha})" + + without_paren_fallback_regexes.append(next_alpha) + without_paren_to_target[next_alpha] = f"({next_alpha})" + + next_alpha = chr(ord(next_alpha) + 1) + fallback_regex = re.compile('|'.join(fallback_regexes)) + without_paren_fallback_regex = '|'.join(without_paren_fallback_regexes) + without_paren_fallback_regex = re.compile(f":[\s]*({without_paren_fallback_regex})") + + filtered = [] + for resp in r: + match = self.find_match(self.regex, resp) + if not match: + match = self.find_match(fallback_regex, self.filter_ignores(resp), choice_to_alpha) + if not match: + match = self.find_match(without_paren_fallback_regex, resp, without_paren_to_target) + if not match: + match = self.fallback + filtered.append(match) + filtered_resps.append(filtered) + + return filtered_resps diff --git a/lm_eval/tasks/bbh/zeroshot/web_of_lies.yaml b/lm_eval/tasks/bbh/zeroshot/web_of_lies.yaml index f5deb846f8..f2fa1c7d10 100644 --- a/lm_eval/tasks/bbh/zeroshot/web_of_lies.yaml +++ b/lm_eval/tasks/bbh/zeroshot/web_of_lies.yaml @@ -3,3 +3,16 @@ "doc_to_text": "Q: {{input}}\nA:" "include": "_zeroshot_template_yaml" "task": "bbh_zeroshot_web_of_lies" +filter_list: + - name: "strict-match" + filter: + - function: "take_first" + - name: "flexible-extract" + filter: + - function: !function utils.MapRegexFilter + group_select: 0 + ignore_case: true + regex_pattern_to_value: + \b(no|does not tell the truth|is not telling the truth)\b: "no" + \b(yes|tells the truth|is telling the truth)\b: "yes" + - function: "take_first" diff --git a/lm_eval/tasks/bbh/zeroshot/word_sorting.yaml b/lm_eval/tasks/bbh/zeroshot/word_sorting.yaml index 6b76cd5319..b9b538d586 100644 --- a/lm_eval/tasks/bbh/zeroshot/word_sorting.yaml +++ b/lm_eval/tasks/bbh/zeroshot/word_sorting.yaml @@ -3,3 +3,11 @@ "doc_to_text": "Q: {{input}}\nA:" "include": "_zeroshot_template_yaml" "task": "bbh_zeroshot_word_sorting" +filter_list: + - name: "strict-match" + filter: + - function: "take_first" + - name: "flexible-extract" + filter: + - function: !function utils.WordSortFilter + - function: "take_first" diff --git a/lm_eval/tasks/gsm8k/gsm8k-cot-zeroshot.yaml b/lm_eval/tasks/gsm8k/gsm8k-cot-zeroshot.yaml new file mode 100644 index 0000000000..75d4468ac0 --- /dev/null +++ b/lm_eval/tasks/gsm8k/gsm8k-cot-zeroshot.yaml @@ -0,0 +1,44 @@ +group: + - math_word_problems +task: gsm8k_cot_zeroshot +dataset_path: gsm8k +dataset_name: main +output_type: generate_until +training_split: train +fewshot_split: train +test_split: test +doc_to_text: "Q: {{question}}\nA: Let's think step by step." +doc_to_target: "{{answer}}" #" {{answer.split('### ')[-1].rstrip()}}" +metric_list: + - metric: exact_match + aggregation: mean + higher_is_better: true + ignore_case: true + ignore_punctuation: false + regexes_to_ignore: + - "," + - "\\$" + - "(?s).*#### " + - "\\.$" +generation_kwargs: + until: + - "Q:" + - "" + - "<|im_end|>" + do_sample: false +repeats: 1 +num_fewshot: 0 +filter_list: + - name: "strict-match" + filter: + - function: "regex" + regex_pattern: "The answer is (\\-?[0-9\\.\\,]+)." + - function: "take_first" + - name: "flexible-extract" + filter: + - function: "regex" + group_select: -1 + regex_pattern: "(-?[$0-9.,]{2,})|(-?[0-9]+)" + - function: "take_first" +metadata: + version: 3.0 diff --git a/lm_eval/tasks/gsm8k/gsm8k-cot.yaml b/lm_eval/tasks/gsm8k/gsm8k-cot.yaml index 9781d3118f..e550202589 100644 --- a/lm_eval/tasks/gsm8k/gsm8k-cot.yaml +++ b/lm_eval/tasks/gsm8k/gsm8k-cot.yaml @@ -25,20 +25,27 @@ metric_list: - "," - "\\$" - "(?s).*#### " - - "\n\n" + - "\\.$" generation_kwargs: until: - "Q:" - - "\n\n" + - "" + - "<|im_end|>" do_sample: false repeats: 1 num_fewshot: 0 filter_list: - - name: "get-answer" + - name: "strict-match" filter: - function: "regex" regex_pattern: "The answer is (\\-?[0-9\\.\\,]+)." - function: "take_first" + - name: "flexible-extract" + filter: + - function: "regex" + group_select: -1 + regex_pattern: "(-?[$0-9.,]{2,})|(-?[0-9]+)" + - function: "take_first" metadata: - version: 2.0 + version: 3.0 num_fewshot: 8 diff --git a/lm_eval/tasks/gsm8k/gsm8k.yaml b/lm_eval/tasks/gsm8k/gsm8k.yaml index 76be03ee51..2c4ef836b1 100644 --- a/lm_eval/tasks/gsm8k/gsm8k.yaml +++ b/lm_eval/tasks/gsm8k/gsm8k.yaml @@ -19,19 +19,27 @@ metric_list: - "," - "\\$" - "(?s).*#### " + - "\\.$" generation_kwargs: until: - - "\n\n" - "Question:" + - "" + - "<|im_end|>" do_sample: false temperature: 0.0 repeats: 1 num_fewshot: 5 filter_list: - - name: "get-answer" + - name: "strict-match" filter: - function: "regex" regex_pattern: "#### (\\-?[0-9\\.\\,]+)" - function: "take_first" + - name: "flexible-extract" + filter: + - function: "regex" + group_select: -1 + regex_pattern: "(-?[$0-9.,]{2,})|(-?[0-9]+)" + - function: "take_first" metadata: - version: 2.0 + version: 3.0 diff --git a/lm_eval/tasks/mmlu/flan_cot_zeroshot/_mmlu_flan_cot_zeroshot_template_yaml b/lm_eval/tasks/mmlu/flan_cot_zeroshot/_mmlu_flan_cot_zeroshot_template_yaml index c2c1ff67f1..83a857b08c 100644 --- a/lm_eval/tasks/mmlu/flan_cot_zeroshot/_mmlu_flan_cot_zeroshot_template_yaml +++ b/lm_eval/tasks/mmlu/flan_cot_zeroshot/_mmlu_flan_cot_zeroshot_template_yaml @@ -5,14 +5,24 @@ output_type: generate_until doc_to_text: "Q: {{question.strip()}}\n(A) {{choices[0]}} (B) {{choices[1]}} (C) {{choices[2]}} (D) {{choices[3]}}\nA: Let's think step by step." doc_to_target: "{{['(A)', '(B)', '(C)', '(D)'][answer]}}" filter_list: - - name: "get-answer" + - name: "strict-match" filter: - function: "regex" regex_pattern: "((?<=The answer is )(.*)(?=.)|(?<=the answer is )(.*)(?=.)|(?<=The answer: )(.*)(?=.)|(?<=The final answer: )(.*)(?=.))" - function: "take_first" + - name: "flexible-extract" + filter: + - function: !function utils.MultiChoiceRegexFilter + group_select: -1 + ignore_case: true + ignore_punctuation: true + regex_pattern: "(\\([A-Z]\\))" + - function: "take_first" generation_kwargs: until: - "" + - "Q:" + - "<|im_end|>" do_sample: false temperature: 0.0 num_fewshot: 0 @@ -23,4 +33,4 @@ metric_list: ignore_case: true ignore_punctuation: true metadata: - version: 0.0 + version: 1.0 diff --git a/lm_eval/tasks/mmlu/flan_cot_zeroshot/utils.py b/lm_eval/tasks/mmlu/flan_cot_zeroshot/utils.py new file mode 100644 index 0000000000..0ef6b1e8f0 --- /dev/null +++ b/lm_eval/tasks/mmlu/flan_cot_zeroshot/utils.py @@ -0,0 +1,99 @@ +import re +import sys + +import unicodedata + +from lm_eval.filters.extraction import RegexFilter + + +class MultiChoiceRegexFilter(RegexFilter): + """ """ + + def __init__( + self, regex_pattern: str = r"#### (\-?[0-9\.\,]+)", group_select=0, fallback: str = "[invalid]", + ignore_case=False, ignore_punctuation=False, regexes_to_ignore=None, + ) -> None: + """ + regex_pattern: The basic regex pattern to use. If fails to match, we will use the customized match procedure + - step 1 : We parse the choices between ([A-Z])s then try to find these choices in the response. + - step 2 : We parse the choice with regex :[\s]*([A-?]), where ? varies by number of choices. + group_select: Selects the (group_select)th match from the findall result. + ignore_case: Ignores the case during step 1 matching + ignore_punctuation: Remove the punctuation during step 1 matching + regexes_to_ignore: Remove these regexes during step 1 matching + """ + super().__init__(regex_pattern, group_select, fallback) + self.ignore_case = ignore_case + self.ignore_punctuation = ignore_punctuation + self.regexes_to_ignore = regexes_to_ignore + + def apply(self, resps, docs): + # here, we assume we have a list, in which each element is + # a list of model responses for some particular input/target pair. + # so we process each of these (same input/target response sets) + # independently (and keep them a list.) + + def find_match(regex, resp, convert_dict={}): + match = regex.findall(resp) + if match: + match = match[self.group_select] + if isinstance(match, tuple): + match = [m for m in match if m][0] + match = match.strip() + if match and match in convert_dict: + match = convert_dict[match] + return match + + punct_tbl = dict.fromkeys(i for i in range(sys.maxunicode) + if unicodedata.category(chr(i)).startswith('P')) + + def filter_ignores(st): + if self.regexes_to_ignore is not None: + for s in self.regexes_to_ignore: + st = re.sub(s, "", st) + + if self.ignore_case: + st = st.lower() + + if self.ignore_punctuation: + # https://stackoverflow.com/a/266162 + st = st.translate(punct_tbl) + return st + + filtered_resps = [] + + for r, doc in zip(resps, docs): + fallback_regexes = [] + choice_to_alpha = {} + next_alpha = 'A' + + without_paren_fallback_regexes = [] + without_paren_to_target = {} + + choices = doc['choices'] + for c in choices: + m = filter_ignores(c.strip()) + fallback_regexes.append(f"{re.escape(m)}") + choice_to_alpha[m] = f"({next_alpha})" + + without_paren_fallback_regexes.append(next_alpha) + without_paren_to_target[next_alpha] = f"({next_alpha})" + + next_alpha = chr(ord(next_alpha) + 1) + fallback_regex = re.compile('|'.join(fallback_regexes)) + without_paren_fallback_regex = '|'.join(without_paren_fallback_regexes) + without_paren_fallback_regex = re.compile(f":[\s]*({without_paren_fallback_regex})") + + filtered = [] + for resp in r: + match = find_match(self.regex, resp) + if not match: + match = find_match(fallback_regex, filter_ignores(resp), choice_to_alpha) + if not match: + match = find_match(without_paren_fallback_regex, resp, without_paren_to_target) + if not match: + match = self.fallback + filtered.append(match) + filtered_resps.append(filtered) + + return filtered_resps diff --git a/lm_eval/tasks/mmlu/flan_n_shot/generative/_mmlu_flan_generative_template_yaml b/lm_eval/tasks/mmlu/flan_n_shot/generative/_mmlu_flan_generative_template_yaml index d480001132..5b190b8d12 100644 --- a/lm_eval/tasks/mmlu/flan_n_shot/generative/_mmlu_flan_generative_template_yaml +++ b/lm_eval/tasks/mmlu/flan_n_shot/generative/_mmlu_flan_generative_template_yaml @@ -5,12 +5,26 @@ fewshot_split: dev output_type: generate_until doc_to_text: "Q: {{question.strip()}}\n(A) {{choices[0]}} (B) {{choices[1]}} (C) {{choices[2]}} (D) {{choices[3]}}\nA: " doc_to_target: "{{['(A)', '(B)', '(C)', '(D)'][answer]}}" +filter_list: + - name: "strict-match" + filter: + - function: "take_first" + - name: "flexible-extract" + filter: + - function: !function utils.MultiChoiceRegexFilter + group_select: 0 + regex_pattern: "(\\([A-Z]\\))" + ignore_case: true + ignore_punctuation: true + - function: "take_first" generation_kwargs: until: - "" + - "Q:" + - "<|im_end|>" metric_list: - metric: exact_match aggregation: mean higher_is_better: true metadata: - version: 0.0 + version: 1.0 diff --git a/lm_eval/tasks/mmlu/flan_n_shot/generative/utils.py b/lm_eval/tasks/mmlu/flan_n_shot/generative/utils.py new file mode 100644 index 0000000000..0ef6b1e8f0 --- /dev/null +++ b/lm_eval/tasks/mmlu/flan_n_shot/generative/utils.py @@ -0,0 +1,99 @@ +import re +import sys + +import unicodedata + +from lm_eval.filters.extraction import RegexFilter + + +class MultiChoiceRegexFilter(RegexFilter): + """ """ + + def __init__( + self, regex_pattern: str = r"#### (\-?[0-9\.\,]+)", group_select=0, fallback: str = "[invalid]", + ignore_case=False, ignore_punctuation=False, regexes_to_ignore=None, + ) -> None: + """ + regex_pattern: The basic regex pattern to use. If fails to match, we will use the customized match procedure + - step 1 : We parse the choices between ([A-Z])s then try to find these choices in the response. + - step 2 : We parse the choice with regex :[\s]*([A-?]), where ? varies by number of choices. + group_select: Selects the (group_select)th match from the findall result. + ignore_case: Ignores the case during step 1 matching + ignore_punctuation: Remove the punctuation during step 1 matching + regexes_to_ignore: Remove these regexes during step 1 matching + """ + super().__init__(regex_pattern, group_select, fallback) + self.ignore_case = ignore_case + self.ignore_punctuation = ignore_punctuation + self.regexes_to_ignore = regexes_to_ignore + + def apply(self, resps, docs): + # here, we assume we have a list, in which each element is + # a list of model responses for some particular input/target pair. + # so we process each of these (same input/target response sets) + # independently (and keep them a list.) + + def find_match(regex, resp, convert_dict={}): + match = regex.findall(resp) + if match: + match = match[self.group_select] + if isinstance(match, tuple): + match = [m for m in match if m][0] + match = match.strip() + if match and match in convert_dict: + match = convert_dict[match] + return match + + punct_tbl = dict.fromkeys(i for i in range(sys.maxunicode) + if unicodedata.category(chr(i)).startswith('P')) + + def filter_ignores(st): + if self.regexes_to_ignore is not None: + for s in self.regexes_to_ignore: + st = re.sub(s, "", st) + + if self.ignore_case: + st = st.lower() + + if self.ignore_punctuation: + # https://stackoverflow.com/a/266162 + st = st.translate(punct_tbl) + return st + + filtered_resps = [] + + for r, doc in zip(resps, docs): + fallback_regexes = [] + choice_to_alpha = {} + next_alpha = 'A' + + without_paren_fallback_regexes = [] + without_paren_to_target = {} + + choices = doc['choices'] + for c in choices: + m = filter_ignores(c.strip()) + fallback_regexes.append(f"{re.escape(m)}") + choice_to_alpha[m] = f"({next_alpha})" + + without_paren_fallback_regexes.append(next_alpha) + without_paren_to_target[next_alpha] = f"({next_alpha})" + + next_alpha = chr(ord(next_alpha) + 1) + fallback_regex = re.compile('|'.join(fallback_regexes)) + without_paren_fallback_regex = '|'.join(without_paren_fallback_regexes) + without_paren_fallback_regex = re.compile(f":[\s]*({without_paren_fallback_regex})") + + filtered = [] + for resp in r: + match = find_match(self.regex, resp) + if not match: + match = find_match(fallback_regex, filter_ignores(resp), choice_to_alpha) + if not match: + match = find_match(without_paren_fallback_regex, resp, without_paren_to_target) + if not match: + match = self.fallback + filtered.append(match) + filtered_resps.append(filtered) + + return filtered_resps diff --git a/pyproject.toml b/pyproject.toml index 6b60368f3e..ca66f8547c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -36,6 +36,7 @@ dependencies = [ "tqdm-multiprocess", "transformers>=4.1", "zstandard", + "word2number", ] [tool.setuptools.packages.find] From 8680e9386de5c4ad745a88b8726707a15f10cc65 Mon Sep 17 00:00:00 2001 From: Hanwool Albert Lee <88315152+h-albert-lee@users.noreply.github.com> Date: Tue, 20 Feb 2024 10:21:13 +0900 Subject: [PATCH 05/20] Add a new task HaeRae-Bench (#1445) * haerae_reimplementation * edited Readme and add few_shot settings * edited readme * newlines at end of each files * Modifying the README file * applied pre-commit --- lm_eval/tasks/haerae/README.md | 49 +++++++++++++++++++++++ lm_eval/tasks/haerae/_default_haerae_yaml | 17 ++++++++ lm_eval/tasks/haerae/haerae_gk.yaml | 3 ++ lm_eval/tasks/haerae/haerae_hi.yaml | 3 ++ lm_eval/tasks/haerae/haerae_lw.yaml | 3 ++ lm_eval/tasks/haerae/haerae_rw.yaml | 3 ++ lm_eval/tasks/haerae/haerae_sn.yaml | 3 ++ 7 files changed, 81 insertions(+) create mode 100644 lm_eval/tasks/haerae/README.md create mode 100644 lm_eval/tasks/haerae/_default_haerae_yaml create mode 100644 lm_eval/tasks/haerae/haerae_gk.yaml create mode 100644 lm_eval/tasks/haerae/haerae_hi.yaml create mode 100644 lm_eval/tasks/haerae/haerae_lw.yaml create mode 100644 lm_eval/tasks/haerae/haerae_rw.yaml create mode 100644 lm_eval/tasks/haerae/haerae_sn.yaml diff --git a/lm_eval/tasks/haerae/README.md b/lm_eval/tasks/haerae/README.md new file mode 100644 index 0000000000..108626ae34 --- /dev/null +++ b/lm_eval/tasks/haerae/README.md @@ -0,0 +1,49 @@ +# HAE-RAE BENCH + +### Paper + +Title: `HAE-RAE Bench: Evaluation of Korean Knowledge in Language Models` + +Abstract: `Large Language Models (LLMs) trained on massive corpora demonstrate impressive capabilities in a wide range of tasks. While there are ongoing efforts to adapt these models to languages beyond English, the attention given to their evaluation methodologies remains limited. Current multilingual benchmarks often rely on back translations or re-implementations of English tests, limiting their capacity to capture unique cultural and linguistic nuances. To bridge this gap for the Korean language, we introduce HAE-RAE Bench, a dataset curated to challenge models lacking Korean cultural and contextual depth. The dataset encompasses six downstream tasks across four domains: vocabulary, history, general knowledge, and reading comprehension. Contrary to traditional evaluation suites focused on token or sequence classification and specific mathematical or logical reasoning, HAE-RAE Bench emphasizes a model's aptitude for recalling Korean-specific knowledge and cultural contexts. Comparative analysis with prior Korean benchmarks indicates that the HAE-RAE Bench presents a greater challenge to non-native models, by disturbing abilities and knowledge learned from English being transferred.` + +Homepage: https://huggingface.co/datasets/HAERAE-HUB/HAE_RAE_BENCH + +### Citation + +@misc{son2023haerae, + title={HAE-RAE Bench: Evaluation of Korean Knowledge in Language Models}, + author={Guijin Son and Hanwool Lee and Suwan Kim and Huiseo Kim and Jaecheol Lee and Je Won Yeom and Jihyu Jung and Jung Woo Kim and Songseong Kim}, + year={2023}, + eprint={2309.02706}, + archivePrefix={arXiv}, + primaryClass={cs.CL} +} + +### Groups and Tasks + +#### Groups + +* `haerae`: 'It consists of five tasks provided in the HAERAE-BENCH paper. 'Reading Comprehension' was excluded from the implementation due to copyright issues. We will include it in the next haerae update. For other tasks, some part of data may be replaced or increased with the production of Haerae v1.1. Please note this when using it.' + +#### Tasks + +The following tasks evaluate subjects in the HaeRae dataset + +- `haerae_standard_nomenclature` +- `haerae_loan_word` +- `haerae_rare_word` +- `haerae_general_knowledge` +- `haerae_history` + +### Checklist + +For adding novel benchmarks/datasets to the library: +* [x] Is the task an existing benchmark in the literature? + * [x] Have you referenced the original paper that introduced the task? + * [x] If yes, does the original paper provide a reference implementation? If so, have you checked against the reference implementation and documented how to run such a test? + + +If other tasks on this dataset are already supported: +* [ ] Is the "Main" variant of this task clearly denoted? +* [ ] Have you provided a short sentence in a README on what each new variant adds / evaluates? +* [ ] Have you noted which, if any, published evaluation setups are matched by this variant? diff --git a/lm_eval/tasks/haerae/_default_haerae_yaml b/lm_eval/tasks/haerae/_default_haerae_yaml new file mode 100644 index 0000000000..c22e3d15d1 --- /dev/null +++ b/lm_eval/tasks/haerae/_default_haerae_yaml @@ -0,0 +1,17 @@ +group: haerae +dataset_path: HAERAE-HUB/HAE_RAE_BENCH +test_split: test +fewshot_split: test +output_type: multiple_choice +doc_to_text: "{{query}}" +doc_to_choice: ["(A)", "(B)", "(C)", "(D)", "(E)"] +doc_to_target: "{{answer}}" +metric_list: + - metric: acc + aggregation: mean + higher_is_better: true + - metric: acc_norm + aggregation: mean + higher_is_better: true +metadata: + version: 1.0 diff --git a/lm_eval/tasks/haerae/haerae_gk.yaml b/lm_eval/tasks/haerae/haerae_gk.yaml new file mode 100644 index 0000000000..2ccd26109f --- /dev/null +++ b/lm_eval/tasks/haerae/haerae_gk.yaml @@ -0,0 +1,3 @@ +"dataset_name": "general_knowledge" +"include": "_default_haerae_yaml" +"task": "haerae_general_knowledge" diff --git a/lm_eval/tasks/haerae/haerae_hi.yaml b/lm_eval/tasks/haerae/haerae_hi.yaml new file mode 100644 index 0000000000..15f77efdd1 --- /dev/null +++ b/lm_eval/tasks/haerae/haerae_hi.yaml @@ -0,0 +1,3 @@ +"dataset_name": "history" +"include": "_default_haerae_yaml" +"task": "haerae_history" diff --git a/lm_eval/tasks/haerae/haerae_lw.yaml b/lm_eval/tasks/haerae/haerae_lw.yaml new file mode 100644 index 0000000000..af143afe7d --- /dev/null +++ b/lm_eval/tasks/haerae/haerae_lw.yaml @@ -0,0 +1,3 @@ +"dataset_name": "loan_words" +"include": "_default_haerae_yaml" +"task": "haerae_loan_word" diff --git a/lm_eval/tasks/haerae/haerae_rw.yaml b/lm_eval/tasks/haerae/haerae_rw.yaml new file mode 100644 index 0000000000..bc8d182e61 --- /dev/null +++ b/lm_eval/tasks/haerae/haerae_rw.yaml @@ -0,0 +1,3 @@ +"dataset_name": "rare_words" +"include": "_default_haerae_yaml" +"task": "haerae_rare_word" diff --git a/lm_eval/tasks/haerae/haerae_sn.yaml b/lm_eval/tasks/haerae/haerae_sn.yaml new file mode 100644 index 0000000000..62603ba1c8 --- /dev/null +++ b/lm_eval/tasks/haerae/haerae_sn.yaml @@ -0,0 +1,3 @@ +"dataset_name": "standard_nomenclature" +"include": "_default_haerae_yaml" +"task": "haerae_standard_nomenclature" From 45941c67dd531196035fed24f4ee16b249297325 Mon Sep 17 00:00:00 2001 From: Baber Abbasi <92168766+baberabb@users.noreply.github.com> Date: Tue, 20 Feb 2024 19:57:01 +0500 Subject: [PATCH 06/20] Group reqs by context (#1425) * add key lookup for same contexts * nit * appease pre-commit * nit * use `expand` (in-place view) rather than `repeat` * try mixed grouping * add docs. * nit * nit * nits * fix tests * Move greedy_tokens calculation out of cache loop * nit * nits * add test * nits * fix name conflict * fix name conflict * chunk tensor * move Collator * nits/docstring * fixup * fixup * group contexts only for decoders * pre-commit * fix `generate_until` test * fix `generate_until` test * Update lm_eval/models/huggingface.py Co-authored-by: Hailey Schoelkopf <65563625+haileyschoelkopf@users.noreply.github.com> * add docs * nit * add docs * add docs * add 'logits_cache' arg * bugfix --------- Co-authored-by: Hailey Schoelkopf <65563625+haileyschoelkopf@users.noreply.github.com> --- lm_eval/api/metrics.py | 4 +- lm_eval/api/registry.py | 5 +- lm_eval/models/huggingface.py | 100 ++++++--- lm_eval/models/utils.py | 205 ++++++++++++++---- lm_eval/models/vllm_causallms.py | 2 +- .../multistep_arithmetic_two.yaml | 1 - .../bbh/cot_zeroshot/object_counting.yaml | 1 - tests/models/test_huggingface.py | 2 +- tests/test_utils.py | 58 ++++- 9 files changed, 289 insertions(+), 89 deletions(-) diff --git a/lm_eval/api/metrics.py b/lm_eval/api/metrics.py index 6efada8502..9d66e7c8cf 100644 --- a/lm_eval/api/metrics.py +++ b/lm_eval/api/metrics.py @@ -4,11 +4,11 @@ from collections.abc import Iterable from typing import List +import evaluate as hf_evaluate import numpy as np import sacrebleu import sklearn.metrics -import evaluate from lm_eval.api.registry import register_aggregation, register_metric @@ -146,7 +146,7 @@ def acc_mutual_info_fn(items): # This is a passthrough function return items -exact_match = evaluate.load("exact_match") +exact_match = hf_evaluate.load("exact_match") @register_metric( diff --git a/lm_eval/api/registry.py b/lm_eval/api/registry.py index 7a4671f232..6f1baa5868 100644 --- a/lm_eval/api/registry.py +++ b/lm_eval/api/registry.py @@ -1,7 +1,8 @@ import logging from typing import Callable, Dict -import evaluate +import evaluate as hf_evaluate + from lm_eval.api.model import LM @@ -128,7 +129,7 @@ def get_metric(name: str, hf_evaluate_metric=False) -> Callable: ) try: - metric_object = evaluate.load(name) + metric_object = hf_evaluate.load(name) return metric_object.compute except Exception: eval_logger.error( diff --git a/lm_eval/models/huggingface.py b/lm_eval/models/huggingface.py index e6ffc8285e..5d9d9947a2 100644 --- a/lm_eval/models/huggingface.py +++ b/lm_eval/models/huggingface.py @@ -78,9 +78,8 @@ class HFLM(LM): def __init__( self, pretrained: Optional[Union[str, transformers.PreTrainedModel]] = "gpt2", - backend: Optional[ - Literal["default", "causal", "seq2seq"] - ] = "default", # override whether the model should be treated as decoder-only (causal) or encoder-decoder (seq2seq) + backend: Optional[Literal["default", "causal", "seq2seq"]] = "default", + # override whether the model should be treated as decoder-only (causal) or encoder-decoder (seq2seq) revision: Optional[str] = "main", subfolder: Optional[str] = None, tokenizer: Optional[ @@ -91,6 +90,7 @@ def __init__( ] ] = None, truncation: Optional[bool] = False, + logits_cache: bool = True, max_length: Optional[int] = None, device: Optional[str] = "cuda", dtype: Optional[Union[str, torch.dtype]] = "auto", @@ -239,7 +239,7 @@ def __init__( ) self.truncation = truncation - + self.logits_cache = logits_cache self.vocab_size = self.tokenizer.vocab_size # select (or create) a pad token to use if self.tokenizer.pad_token: @@ -760,7 +760,9 @@ def _model_generate(self, context, max_length, stop, **generation_kwargs): **generation_kwargs, ) - def _select_cont_toks(self, logits, contlen=None, inplen=None): + def _select_cont_toks( + self, logits: torch.Tensor, contlen: int = None, inplen: int = None + ) -> torch.Tensor: if self.AUTO_MODEL_CLASS == transformers.AutoModelForCausalLM: assert ( contlen and inplen @@ -809,7 +811,7 @@ def loglikelihood(self, requests: List[Instance]) -> List[Tuple[float, bool]]: new_reqs.append(((context, continuation), context_enc, continuation_enc)) - return self._loglikelihood_tokens(new_reqs) + return self._loglikelihood_tokens(requests=new_reqs) def loglikelihood_rolling(self, requests: List[Instance]) -> List[float]: loglikelihoods = [] @@ -851,7 +853,7 @@ def loglikelihood_rolling(self, requests: List[Instance]) -> List[float]: rolling_token_windows += pad_amnt * [rolling_token_windows[0]] string_nll = self._loglikelihood_tokens( - rolling_token_windows, + requests=rolling_token_windows, disable_tqdm=True, override_bs=adaptive_batch_size, ) @@ -893,7 +895,7 @@ def _loglikelihood_tokens( # TODO: implement some kind of efficient-request-middleware that lumps together requests with the same context res = [] - def _collate(x): + def _collate(req: Tuple[Tuple[str, str], List[int], List[int]]): """Defines the key for the sorted method""" # the negative sign on len(toks) sorts descending - this has a few advantages: # - time estimates will always be over not underestimates, which is more useful for planning @@ -902,10 +904,26 @@ def _collate(x): # automatic adaptive batches much much easier to implement # - any OOMs will happen right away rather than near the end - toks = x[1] + x[2] + toks = req[1] + req[2] return -len(toks), tuple(toks) - re_ord = Collator(requests, sort_fn=_collate) + def _lookup_one_token_cont(req: Tuple[Tuple[str, str], List[int], List[int]]): + """Defines the key to group and lookup one-token continuations""" + # Use with group_by="contexts" (optional)" + # allows for the creation of a lookup, so we can re-use logits in case of one-token continuations. + # speeds up some multiple-choice tasks proportionally to the number of choices. + # groups requests by context+continuation[:-1] and infer on one request/group. + return req[-2] + req[-1][:-1] + + re_ord = Collator( + requests, + sort_fn=_collate, + group_by="contexts" + if self.AUTO_MODEL_CLASS == transformers.AutoModelForCausalLM + and self.logits_cache + else None, + group_fn=_lookup_one_token_cont, + ) # automatic (variable) batch size detection for vectorization # pull longest context sample from request @@ -1026,7 +1044,7 @@ def _collate(x): self._model_call(batched_inps, **call_kwargs), dim=-1 ) # [batch, padding_length (inp or cont), vocab] - for (cache_key, _, _), logits, inplen, cont_toks in zip( + for (request_str, ctx_tokens, _), logits, inplen, cont_toks in zip( chunk, multi_logits, inplens, cont_toks_list ): # Slice to original seq length @@ -1045,24 +1063,36 @@ def _collate(x): # Check if per-token argmax is exactly equal to continuation greedy_tokens = logits.argmax(dim=-1) - cont_toks = torch.tensor( - cont_toks, dtype=torch.long, device=self.device - ).unsqueeze(0) # [1, seq] - max_equal = (greedy_tokens == cont_toks).all() - - # Obtain log-probs at the corresponding continuation token indices - # last_token_slice = logits[:, -1, :].squeeze(0).tolist() - logits = torch.gather(logits, 2, cont_toks.unsqueeze(-1)).squeeze( - -1 - ) # [1, seq] - # Answer: (log prob, is-exact-match) - answer = (float(logits.sum()), bool(max_equal)) - - res.append(answer) - - self.cache_hook.add_partial("loglikelihood", cache_key, answer) - pbar.update(1) + # check for one-token continuation cache hits. + # noop in case group_by != "contexts" or no cache hit and returns the + # original args. Otherwise, expands the logits batch dimension and yields each + # batch along with matching continuation tokens and prompt strings. + # logits -> [1, seq, vocab] + for request_str, cont_toks, logits in re_ord.get_cache( + req_str=request_str, + cxt_toks=ctx_tokens, + cont_toks=cont_toks, + logits=logits, + ): + cont_toks = torch.tensor( + cont_toks, dtype=torch.long, device=self.device + ).unsqueeze(0) # [1, seq] + max_equal = (greedy_tokens == cont_toks).all() + + # Obtain log-probs at the corresponding continuation token indices + # last_token_slice = logits[:, -1, :].squeeze(0).tolist() + logits = torch.gather(logits, 2, cont_toks.unsqueeze(-1)).squeeze( + -1 + ) # [1, seq] + + # Answer: (log prob, is-exact-match) + answer = (float(logits.sum()), bool(max_equal)) + + res.append(answer) + + self.cache_hook.add_partial("loglikelihood", request_str, answer) + pbar.update(1) pbar.close() @@ -1071,7 +1101,7 @@ def _collate(x): def generate_until(self, requests: List[Instance]) -> List[str]: res = [] - def _collate(x): + def _collate(req: Tuple[str, dict]): """Defines the key for the sorted method""" # the negative sign on len(toks) sorts descending - this has a few advantages: # - time estimates will always be over not underestimates, which is more useful for planning @@ -1079,8 +1109,8 @@ def _collate(x): # padded context length. this is useful to simplify the batching logic and more importantly to make # automatic adaptive batches much much easier to implement # - any OOMs will happen right away rather than near the end - toks = self.tok_encode(x[0]) - return -len(toks), x[0] + toks = self.tok_encode(req[0]) + return -len(toks), req[0] pbar = tqdm(total=len(requests), disable=(self.rank != 0)) adaptive_batch_size = None @@ -1107,7 +1137,13 @@ def _collate(x): # we group requests by their generation_kwargs, # so that we don't try to execute e.g. greedy sampling and temp=0.8 sampling # in the same batch. - re_ords = Collator([reg.args for reg in requests], _collate, grouping=True) + # group_fn=lambda x: x[1] -> x=(context, gen_kwargs) + re_ords = Collator( + [reg.args for reg in requests], + sort_fn=_collate, + group_by="gen_kwargs", + group_fn=lambda x: x[1], + ) chunks = re_ords.get_batched(n=batch_size, batch_fn=batch_fn) for chunk in chunks: contexts, all_gen_kwargs = zip(*chunk) diff --git a/lm_eval/models/utils.py b/lm_eval/models/utils.py index afc69766c4..84bff728b5 100644 --- a/lm_eval/models/utils.py +++ b/lm_eval/models/utils.py @@ -6,6 +6,7 @@ from typing import ( Any, Callable, + Dict, Iterable, Iterator, List, @@ -357,65 +358,164 @@ class Collator: A class for reordering and batching elements of an array. This class allows for sorting an array based on a provided sorting function, grouping elements based on a grouping function, and generating batches from the sorted and grouped data. + + Objects of this class have the group_by attribute which determines the method for grouping + the data while batching it. Three options include "gen_kwargs", "contexts", or None: + If group_by == "gen_kwargs" then requests will be grouped by gen_kwargs + If group_by == "contexts" then requests will be grouped by context + cont[:-1] + If None then requests will just be reordered by length descending. """ def __init__( self, arr: List, - sort_fn: Callable, + sort_fn: Callable = lambda x: x, group_fn: Callable = lambda x: x[1], - grouping: bool = False, + group_by: Union[Literal["gen_kwargs", "contexts"], None] = None, ) -> None: - self.grouping = grouping - self.fn = sort_fn - self.group_fn = lambda x: group_fn(x[1]) # first index are enumerated indices - self.reorder_indices: List = [] - self.size = len(arr) - self.arr_with_indices: Iterable[Any] = tuple(enumerate(arr)) # [indices, (arr)] - if self.grouping is True: - self.group_by_index() + self._group_by = group_by + # 0 indices are enumerated indices. Apply functions to original arr. + self._sort_fn = lambda x: sort_fn(x[1]) + self._group_fn = lambda x: group_fn(x[1]) + self._reorder_indices: List = [] + self._size = len(arr) + self._arr_with_indices: Union[Dict, Tuple[Tuple[int, Any], ...]] = tuple( + enumerate(arr) + ) # [indices, (arr)] + if self._group_by == "contexts": + self._group_by_context() + elif self._group_by == "gen_kwargs": + self._group_by_index() + + def _group_by_index(self) -> None: + """Group the elements of a list based on their indices.""" + self._arr_with_indices = self.group( + self._arr_with_indices, fn=self._group_fn, group_by="gen_kwargs" + ) - def group_by_index(self) -> None: - self.arr_with_indices = self.group( - self.arr_with_indices, fn=self.group_fn, values=False + def _group_by_context(self) -> None: + """Group the array with indices by context.""" + self._arr_with_indices = self.group( + self._arr_with_indices, fn=self._group_fn, group_by="contexts" ) def get_batched(self, n: int = 1, batch_fn: Optional[Callable] = None) -> Iterator: """ - Generates and yields batches from the reordered array. + Generates and yields batches from the reordered array. The method of grouping and batching + depends on the parameter `group_by`. + If `group_by` is set to "gen_kwargs", it will batch the + re-ordered values with same gen_kwargs for each batch. + If `group_by` is "contexts", it caches the requests by context before batching. + If `group_by` is neither "gen_kwargs" nor "contexts", it yields the reordered array Parameters: - n (int): The size of each batch. Defaults to 1. - - batch_fn (Optional[Callable[[int, Iterable], int]]): A function to determine the size of each batch. Defaults to None. + - batch_fn ([Callable[[int, Iterable], int]] | None): A function to determine the size of + each batch. Optional, defaults to None. + + Returns: + Iterator: An iterator over batches of reordered elements grouped as per the `group_by` + attribute. Yields: - Iterator: An iterator over batches of reordered elements. + List of batched elements according to the `group_by` attribute. """ - if self.grouping: + if self._group_by == "gen_kwargs": for ( key, values, - ) in self.arr_with_indices.items(): # type: ignore + ) in self._arr_with_indices.items(): # type: ignore values = self._reorder(values) batch = self.get_chunks(values, n=n, fn=batch_fn) yield from batch + elif self._group_by == "contexts": + # Get one sample from each key + values = self._reorder( + [value[0] for value in self._arr_with_indices.values()] + ) + batch = self.get_chunks(values, n=n, fn=batch_fn) + yield from batch else: - values = self._reorder(self.arr_with_indices) # type: ignore + values = self._reorder(self._arr_with_indices) # type: ignore batch = self.get_chunks(values, n=n, fn=batch_fn) yield from batch - def _reorder(self, arr: Union[List, Tuple[Tuple[int, Any], ...]]) -> List: + def get_cache( + self, + req_str: Tuple[str, str] = None, + cxt_toks: List[int] = None, + cont_toks: List[int] = None, + logits: torch.Tensor = None, + ) -> Iterator[Tuple[Tuple[str, str], List[int], torch.Tensor]]: + """ + Retrieves cached single-token continuations and their associated arguments, updating indices as necessary. + + The behavior of this function varies depending on how the `group_by` attribute is set: + + - When `group_by` is "contexts": + The function identifies single-token continuations by checking for keys that equate to + [context+continuation][-1] and logs the indices for re-ordering. + In this mode, this function can work in two scenarios: + + 1. Cache Hit - Single Match: + If a single matching context-continuation pair is found in the cache, + the function yields the original arguments. + + 2. Cache Hit - Multiple Matches: + If multiple matching context-continuation pairs are found in the cache, + the function expands the logits batch dimension to match the number of cache hits. + It updates the original requests and continuation tokens. + + - When `group_by` is not set to "contexts": + This method yields the original arguments, logits and continuation tokens, + without checking for one-token continuations. + + Parameters: + - req_str (tuple[str, str]): Original strings used for CachingLM. + - cxt_toks (list[int]): Full context tokens used for lookup. + - cont_toks (list[int]): Continuation tokens for which logits were generated. + - logits (torch.Tensor [1, seq_length, vocab_size]): Logits generated by the model given context and continuation keys. + + Yields: + - Iterator: + - req_str (tuple[str, str]): strings used for CachingLM. + - cont_toks (list[int]) : continuation tokens. + - logits (torch.Tensor [1, seq_length, vocab_size]): The original logits (repeated cache hit times) + """ + if self._group_by == "contexts": + cache_hit: List[ + Tuple[int, Tuple[Tuple[str, str], List[int], List[int]]] + ] = self._arr_with_indices.pop(tuple(cxt_toks + cont_toks[:-1])) + if (cache_size := len(cache_hit)) == 1: + self._reorder_indices.extend(x[0] for x in cache_hit) + yield req_str, cont_toks, logits + else: + # If we have matching requests then expand the batch dimension (no-op) and + # yield each along with its corresponding args. + multilogits = logits.expand(cache_size, -1, -1).chunk(cache_size) + indices, req_str, cont_toks = zip( + *[(x[0], x[1][0], x[-1][-1]) for x in cache_hit] + ) + self._reorder_indices.extend(indices) + for c_key, cont_tok, logit in zip(req_str, cont_toks, multilogits): + yield c_key, cont_tok, logit + else: + yield req_str, cont_toks, logits + + def _reorder(self, arr: Union[List, Tuple[Tuple[int, Any], ...]]) -> Iterator: """ Reorders the elements in the array based on the sorting function. Parameters: - - arr (Union[List, Tuple[Tuple[int, Any], ...]]): The array or iterable to be reordered. + - arr (list | tuple[tuple[int, Any], ...]]): The array or iterable to be reordered. Yields: - List: Yields reordered elements one by one. + Iterator """ - arr = sorted(arr, key=lambda x: self.fn(x[1])) - self.reorder_indices.extend([x[0] for x in arr]) + arr = sorted(arr, key=self._sort_fn) + if not self._group_by == "contexts": + # If grouped by contexts then indices will be set in get_cache() + self._reorder_indices.extend([x[0] for x in arr]) yield from [x[1] for x in arr] def get_original(self, newarr: List) -> List: @@ -423,15 +523,15 @@ def get_original(self, newarr: List) -> List: Restores the original order of elements from the reordered list. Parameters: - - newarr (List): The reordered array. + - newarr (list): The reordered array. Returns: - List: The array with elements restored to their original order. + list: The array with elements restored to their original order. """ - res = [None] * self.size - cov = [False] * self.size + res = [None] * self._size + cov = [False] * self._size - for ind, v in zip(self.reorder_indices, newarr): + for ind, v in zip(self._reorder_indices, newarr): res[ind] = v cov[ind] = True @@ -440,39 +540,50 @@ def get_original(self, newarr: List) -> List: return res def __len__(self): - return self.size + return self._size @staticmethod - def group(arr: Iterable, fn: Callable, values: bool = False) -> Iterable: + def group( + arr: Iterable, + fn: Callable, + group_by: Literal["gen_kwargs", "contexts"] = "gen_kwargs", + ) -> dict: """ Groups elements of an iterable based on a provided function. + + The `group_by` parameter determines the method of grouping. + If `group_by` is "contexts", the elements are grouped by [context + cont][:-1]. + If `group_by` is "gen_kwargs", the elements are grouped based on the gen_kwargs dict. + Parameters: - arr (Iterable): The iterable to be grouped. - fn (Callable): The function to determine the grouping. - values (bool): If True, returns the values of the group. Defaults to False. Returns: - Iterable: An iterable of grouped elements. + Iterator: An iterable of grouped elements. """ res = collections.defaultdict(list) for ob in arr: - try: - hashable_dict = tuple( - ( - key, - tuple(value) - if isinstance(value, collections.abc.Iterable) - else value, + # where ob == [context + cont] + if group_by == "contexts": + res[tuple(fn(ob))].append(ob) + else: + try: + hashable_dict = tuple( + ( + key, + tuple(value) + if isinstance(value, collections.abc.Iterable) + else value, + ) + for key, value in sorted(fn(ob).items()) ) - for key, value in sorted(fn(ob).items()) - ) - res[hashable_dict].append(ob) - except TypeError: - res[fn(ob)].append(ob) - if not values: - return res - return res.values() + res[hashable_dict].append(ob) + except (TypeError, AttributeError): + res[tuple(fn(ob))].append(ob) + return res @staticmethod def get_chunks(_iter, n: int = 0, fn=None): diff --git a/lm_eval/models/vllm_causallms.py b/lm_eval/models/vllm_causallms.py index bfc84fec62..e0894befbd 100644 --- a/lm_eval/models/vllm_causallms.py +++ b/lm_eval/models/vllm_causallms.py @@ -276,7 +276,7 @@ def _collate_gen(_requests): # we group requests by their generation_kwargs, # so that we don't try to execute e.g. greedy sampling and temp=0.8 sampling # in the same batch. - re_ords = Collator(requests, _collate_gen, grouping=True) + re_ords = Collator(requests, _collate_gen, group_by="gen_kwargs") chunks = re_ords.get_batched( n=int(self.batch_size) if self.batch_size != "auto" else 0, batch_fn=None ) diff --git a/lm_eval/tasks/bbh/cot_zeroshot/multistep_arithmetic_two.yaml b/lm_eval/tasks/bbh/cot_zeroshot/multistep_arithmetic_two.yaml index c857fcd268..9b8f6d7228 100644 --- a/lm_eval/tasks/bbh/cot_zeroshot/multistep_arithmetic_two.yaml +++ b/lm_eval/tasks/bbh/cot_zeroshot/multistep_arithmetic_two.yaml @@ -16,4 +16,3 @@ filter_list: - function: "regex" regex_pattern: "((?<=The answer is )(.*)(?=.)|(?<=the answer is )(.*)(?=.)|(?<=The answer: )(.*)(?=.)|(?<=The final answer: )(.*)(?=.))" - function: "take_first" - diff --git a/lm_eval/tasks/bbh/cot_zeroshot/object_counting.yaml b/lm_eval/tasks/bbh/cot_zeroshot/object_counting.yaml index 2667339f9e..9ee7720332 100644 --- a/lm_eval/tasks/bbh/cot_zeroshot/object_counting.yaml +++ b/lm_eval/tasks/bbh/cot_zeroshot/object_counting.yaml @@ -15,4 +15,3 @@ filter_list: - function: "regex" regex_pattern: "((?<=The answer is )(.*)(?=.)|(?<=the answer is )(.*)(?=.)|(?<=The answer: )(.*)(?=.)|(?<=The final answer: )(.*)(?=.))" - function: "take_first" - diff --git a/tests/models/test_huggingface.py b/tests/models/test_huggingface.py index 73ddfba74f..542be3a1ab 100644 --- a/tests/models/test_huggingface.py +++ b/tests/models/test_huggingface.py @@ -74,7 +74,7 @@ class Test_HFLM: generate_until_RES = [ " The average of $2.50 each is $", " A robe takes 2 bolts of blue fiber and half", - " $50,000 in repairs.", + " $50,000 in repairs.\n\nQuestion", " He runs 1 sprint 3 times a week.", " They feed each of her chickens three cups of mixed", " The price of the glasses is $5, but", diff --git a/tests/test_utils.py b/tests/test_utils.py index c04f3f8fe3..a48600ca98 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -2,6 +2,7 @@ import numpy as np import pytest +import torch from lm_eval.api.metrics import ( aggregate_subtask_metrics, @@ -258,12 +259,20 @@ def make_loglikelihood_sample(self, end=11): ] return samples + def make_loglikelihood_sample_group(self, end=11): + a = [(("x", "x"), [1, 2, 3, 4, 5, 6, 7, 8], [x]) for x in range(9)] + b = [ + (("x", "x"), [1, 2, 3, 4, 5, 6, 7, 8], [x, y, z]) + for x, y, z in zip(range(9), range(9, 18), range(18, 27)) + ] + return a + b + @pytest.mark.parametrize("batch_size, end", [(17, 30), (8, 61), (12, 48), (0, 9)]) def test_generations(self, batch_size, end): _collate_gen = lambda x: (-len(x[0]), x[0]) # noqa: E731 generation_samples = self.make_generate_sample(int(end)) - gens = Collator(generation_samples, _collate_gen, grouping=True) + gens = Collator(generation_samples, _collate_gen, group_by="gen_kwargs") chunks = gens.get_batched(n=int(batch_size), batch_fn=None) output = [] for chunks in chunks: @@ -292,7 +301,10 @@ def test_generations(self, batch_size, end): def test_loglikelihood(self, batch_size, end): _collate_log = lambda x: (-len(x[1]), tuple(x[1])) # noqa: E731 loglikelihood_samples = self.make_loglikelihood_sample(int(end)) - loglikelihoods = Collator(loglikelihood_samples, _collate_log, grouping=False) + loglikelihoods = Collator( + loglikelihood_samples, + _collate_log, + ) chunks = loglikelihoods.get_batched(n=int(batch_size), batch_fn=None) output = [] for chunks in chunks: @@ -309,6 +321,48 @@ def test_loglikelihood(self, batch_size, end): reordered_output = loglikelihoods.get_original(output) assert reordered_output == [x[1] for x in loglikelihood_samples] + @pytest.mark.parametrize("batch_size", [17, 8, 12, 0]) + def test_context_grouping(self, batch_size): + def _collate(x): + toks = x[1] + x[2] + return -len(toks), tuple(toks) + + _collate_log = _collate # noqa: E731 + loglikelihood_samples = self.make_loglikelihood_sample_group() + loglikelihoods = Collator( + loglikelihood_samples, + _collate_log, + group_fn=lambda a: a[-2] + a[-1][:-1], + group_by="contexts", + ) + chunks = loglikelihoods.get_batched(n=int(batch_size), batch_fn=None) + output = [] + outputs_ = [] + for chunks in chunks: + # check batching + if batch_size != 0: + assert len(chunks) <= batch_size + # check reorder + assert all( + len(chunks[i][1]) <= len(chunks[i - 1][1]) + for i in range(1, len(chunks)) + ) + for x in chunks: + for request_str, cont_toks, logits in loglikelihoods.get_cache( + req_str="".join(x[0]), + cxt_toks=x[1], + cont_toks=x[2], + logits=torch.tensor([1, 2, 3, 4, 5, 6, 7, 8]) + .unsqueeze(0) + .unsqueeze(0), + ): + output.append(x[1]) + outputs_.append(cont_toks) + assert len(output) == len(outputs_) + # check indices + reordered_output = loglikelihoods.get_original(output) + assert reordered_output == [x[1] for x in loglikelihood_samples] + def test_aggregate_mean(): # test weight_by_size is respected From 5ab295c85f90b2fd6218e88b59a3320544b50f8a Mon Sep 17 00:00:00 2001 From: Uanu <92366232+uanu2002@users.noreply.github.com> Date: Wed, 21 Feb 2024 03:13:58 +0800 Subject: [PATCH 07/20] Add a new task GPQA (the part without CoT) (#1434) * add new task GPQA_n_shot * add new task GPQA_zeroshot * correct GPQA_zeroshot filename * Add randomly shuffle choices * Correct missing parentheses * delete wrong tasks * Add README * Update lm_eval/tasks/gpqa/zeroshot/_gpqa_zeroshot_yaml * Update lm_eval/tasks/gpqa/n_shot/utils.py * Update lm_eval/tasks/gpqa/n_shot/utils.py * Update lm_eval/tasks/gpqa/README.md * placate linter * linter --------- Co-authored-by: Hailey Schoelkopf <65563625+haileyschoelkopf@users.noreply.github.com> --- lm_eval/tasks/gpqa/README.md | 52 +++++++++++++++++++ .../tasks/gpqa/n_shot/_generate_configs.py | 26 ++++++++++ lm_eval/tasks/gpqa/n_shot/_gpqa_n_shot_yaml | 21 ++++++++ .../gpqa/n_shot/gpqa_diamond_n_shot.yaml | 4 ++ .../gpqa/n_shot/gpqa_extended_n_shot.yaml | 4 ++ .../tasks/gpqa/n_shot/gpqa_main_n_shot.yaml | 4 ++ lm_eval/tasks/gpqa/n_shot/utils.py | 37 +++++++++++++ .../tasks/gpqa/zeroshot/_generate_configs.py | 26 ++++++++++ .../tasks/gpqa/zeroshot/_gpqa_zeroshot_yaml | 21 ++++++++ .../gpqa/zeroshot/gpqa_diamond_zeroshot.yaml | 4 ++ .../gpqa/zeroshot/gpqa_extended_zeroshot.yaml | 4 ++ .../gpqa/zeroshot/gpqa_main_zeroshot.yaml | 4 ++ lm_eval/tasks/gpqa/zeroshot/utils.py | 36 +++++++++++++ 13 files changed, 243 insertions(+) create mode 100644 lm_eval/tasks/gpqa/README.md create mode 100644 lm_eval/tasks/gpqa/n_shot/_generate_configs.py create mode 100644 lm_eval/tasks/gpqa/n_shot/_gpqa_n_shot_yaml create mode 100644 lm_eval/tasks/gpqa/n_shot/gpqa_diamond_n_shot.yaml create mode 100644 lm_eval/tasks/gpqa/n_shot/gpqa_extended_n_shot.yaml create mode 100644 lm_eval/tasks/gpqa/n_shot/gpqa_main_n_shot.yaml create mode 100644 lm_eval/tasks/gpqa/n_shot/utils.py create mode 100644 lm_eval/tasks/gpqa/zeroshot/_generate_configs.py create mode 100644 lm_eval/tasks/gpqa/zeroshot/_gpqa_zeroshot_yaml create mode 100644 lm_eval/tasks/gpqa/zeroshot/gpqa_diamond_zeroshot.yaml create mode 100644 lm_eval/tasks/gpqa/zeroshot/gpqa_extended_zeroshot.yaml create mode 100644 lm_eval/tasks/gpqa/zeroshot/gpqa_main_zeroshot.yaml create mode 100644 lm_eval/tasks/gpqa/zeroshot/utils.py diff --git a/lm_eval/tasks/gpqa/README.md b/lm_eval/tasks/gpqa/README.md new file mode 100644 index 0000000000..77792c3ec6 --- /dev/null +++ b/lm_eval/tasks/gpqa/README.md @@ -0,0 +1,52 @@ +# GPQA + +### Paper + +Title: GPQA: A Graduate-Level Google-Proof Q&A Benchmark + +Abstract: https://arxiv.org/abs/2311.12022 + +We present GPQA, a challenging dataset of 448 multiple-choice questions written by domain experts in biology, physics, and chemistry. We ensure that the questions are high-quality and extremely difficult: experts who have or are pursuing PhDs in the corresponding domains reach 65% accuracy (74% when discounting clear mistakes the experts identified in retrospect), while highly skilled non-expert validators only reach 34% accuracy, despite spending on average over 30 minutes with unrestricted access to the web (i.e., the questions are “Google-proof”). The questions are also difficult for state-of-the-art AI systems, with our strongest GPT-4–based baseline achieving 39% accuracy. If we are to use future AI systems to help us answer very hard questions—for example, when developing new scientific knowledge—we need to develop *scalable oversight* methods that enable humans to supervise their outputs, which may be difficult even if the supervisors are themselves skilled and knowledgeable. The difficulty of GPQA both for skilled non-experts and frontier AI systems should enable realistic scalable oversight experiments, which we hope can help devise ways for human experts to reliably get truthful information from AI systems that surpass human capabilities. + +Homepage: `https://github.com/idavidrein/gpqa/tree/main` + +### Citation + +``` +@misc{rein2023gpqa, + title={GPQA: A Graduate-Level Google-Proof Q&A Benchmark}, + author={David Rein and Betty Li Hou and Asa Cooper Stickland and Jackson Petty and Richard Yuanzhe Pang and Julien Dirani and Julian Michael and Samuel R. Bowman}, + year={2023}, + eprint={2311.12022}, + archivePrefix={arXiv}, + primaryClass={cs.AI} +} +``` + +This dataset is gated, so you will have to accept the terms of use at https://huggingface.co/datasets/Idavidrein/gpqa and login via `huggingface-cli login` using your HF Hub token before running this task. + +### Groups and Tasks + +#### Groups + +* `gpqa` + +#### Tasks + +* `gpqa_{main, diamond, extended}_zeroshot` +* `gpqa_{main, diamond, extended}_n_shot` + +### Checklist + +For adding novel benchmarks/datasets to the library: + +* [x] Is the task an existing benchmark in the literature? + * [x] Have you referenced the original paper that introduced the task? + * [x] If yes, does the original paper provide a reference implementation? If so, have you checked against the reference implementation and documented how to run such a test? + + +If other tasks on this dataset are already supported: + +* [ ] Is the "Main" variant of this task clearly denoted? +* [ ] Have you provided a short sentence in a README on what each new variant adds / evaluates? +* [ ] Have you noted which, if any, published evaluation setups are matched by this variant? diff --git a/lm_eval/tasks/gpqa/n_shot/_generate_configs.py b/lm_eval/tasks/gpqa/n_shot/_generate_configs.py new file mode 100644 index 0000000000..977759f159 --- /dev/null +++ b/lm_eval/tasks/gpqa/n_shot/_generate_configs.py @@ -0,0 +1,26 @@ +import yaml + +from tqdm import tqdm + + +def main() -> None: + subset = ["extended", "diamond", "experts", "main"] + + for task in tqdm(subset): + file_name = f"gpqa_{task}_n_shot.yaml" + try: + with open(f"{file_name}", "w") as f: + f.write("# Generated by _generate_configs.py\n") + yaml.dump( + { + "include": "_gpqa_n_shot_yaml", + "task": f"gpqa_{task}_n_shot", + "dataset_name": f"gpqa_{task}", + }, + f, + ) + except FileExistsError: + pass + +if __name__ == "__main__": + main() diff --git a/lm_eval/tasks/gpqa/n_shot/_gpqa_n_shot_yaml b/lm_eval/tasks/gpqa/n_shot/_gpqa_n_shot_yaml new file mode 100644 index 0000000000..96d4fc25ff --- /dev/null +++ b/lm_eval/tasks/gpqa/n_shot/_gpqa_n_shot_yaml @@ -0,0 +1,21 @@ +dataset_path: Idavidrein/gpqa +group: gpqa +output_type: multiple_choice +process_docs: !function utils.process_docs +training_split: train +# Because huggingface dataset only has train split +validation_split: train +test_split: null +description: "Here are some example questions from experts. Answer the final question yourself, following the format of the previous questions exactly.\n" +doc_to_text: "Question: {{Question}}\nChoices:\n(A) {{choice1}}\n(B) {{choice2}}\n(C) {{choice3}}\n(D) {{choice4}}\nAnswer:" +doc_to_target: answer +doc_to_choice: ["(A)", "(B)", "(C)", "(D)"] +metric_list: + - metric: acc + aggregation: mean + higher_is_better: true + - metric: acc_norm + aggregation: mean + higher_is_better: true +metadata: + version: 1.0 diff --git a/lm_eval/tasks/gpqa/n_shot/gpqa_diamond_n_shot.yaml b/lm_eval/tasks/gpqa/n_shot/gpqa_diamond_n_shot.yaml new file mode 100644 index 0000000000..3043a7e536 --- /dev/null +++ b/lm_eval/tasks/gpqa/n_shot/gpqa_diamond_n_shot.yaml @@ -0,0 +1,4 @@ +# Generated by _generate_configs.py +dataset_name: gpqa_diamond +include: _gpqa_n_shot_yaml +task: gpqa_diamond_n_shot diff --git a/lm_eval/tasks/gpqa/n_shot/gpqa_extended_n_shot.yaml b/lm_eval/tasks/gpqa/n_shot/gpqa_extended_n_shot.yaml new file mode 100644 index 0000000000..5d16b505b3 --- /dev/null +++ b/lm_eval/tasks/gpqa/n_shot/gpqa_extended_n_shot.yaml @@ -0,0 +1,4 @@ +# Generated by _generate_configs.py +dataset_name: gpqa_extended +include: _gpqa_n_shot_yaml +task: gpqa_extended_n_shot diff --git a/lm_eval/tasks/gpqa/n_shot/gpqa_main_n_shot.yaml b/lm_eval/tasks/gpqa/n_shot/gpqa_main_n_shot.yaml new file mode 100644 index 0000000000..7e5f3e9532 --- /dev/null +++ b/lm_eval/tasks/gpqa/n_shot/gpqa_main_n_shot.yaml @@ -0,0 +1,4 @@ +# Generated by _generate_configs.py +dataset_name: gpqa_main +include: _gpqa_n_shot_yaml +task: gpqa_main_n_shot diff --git a/lm_eval/tasks/gpqa/n_shot/utils.py b/lm_eval/tasks/gpqa/n_shot/utils.py new file mode 100644 index 0000000000..c1d9d1a5aa --- /dev/null +++ b/lm_eval/tasks/gpqa/n_shot/utils.py @@ -0,0 +1,37 @@ +import datasets +import re +import random + +def preprocess(text): + if text is None: + return " " + text = text.strip() + text = text.replace(" [title]", ". ") + text = re.sub("\\[.*?\\]", "", text) + text = text.replace(" ", " ") + return text + +rng = random.Random(42) + +def process_docs(dataset: datasets.Dataset) -> datasets.Dataset: + def _process_doc(doc): + choices = [ + preprocess(doc["Incorrect Answer 1"]), + preprocess(doc["Incorrect Answer 2"]), + preprocess(doc["Incorrect Answer 3"]), + preprocess(doc["Correct Answer"]), + ] + + rng.shuffle(choices) + correct_answer_index = choices.index(preprocess(doc["Correct Answer"])) + + out_doc = { + "choice1": choices[0], + "choice2": choices[1], + "choice3": choices[2], + "choice4": choices[3], + "answer": f"({chr(65 + correct_answer_index)})" + } + return out_doc + + return dataset.map(_process_doc) diff --git a/lm_eval/tasks/gpqa/zeroshot/_generate_configs.py b/lm_eval/tasks/gpqa/zeroshot/_generate_configs.py new file mode 100644 index 0000000000..f91c9f454f --- /dev/null +++ b/lm_eval/tasks/gpqa/zeroshot/_generate_configs.py @@ -0,0 +1,26 @@ +import yaml + +from tqdm import tqdm + + +def main() -> None: + subset = ["extended", "diamond", "experts", "main"] + setting = "zeroshot" + for task in tqdm(subset): + file_name = f"gpqa_{task}_{setting}.yaml" + try: + with open(f"{file_name}", "w") as f: + f.write("# Generated by _generate_configs.py\n") + yaml.dump( + { + "include": f"_gpqa_{setting}_yaml", + "task": f"gpqa_{task}_{setting}", + "dataset_name": f"gpqa_{task}", + }, + f, + ) + except FileExistsError: + pass + +if __name__ == "__main__": + main() diff --git a/lm_eval/tasks/gpqa/zeroshot/_gpqa_zeroshot_yaml b/lm_eval/tasks/gpqa/zeroshot/_gpqa_zeroshot_yaml new file mode 100644 index 0000000000..707641b5f0 --- /dev/null +++ b/lm_eval/tasks/gpqa/zeroshot/_gpqa_zeroshot_yaml @@ -0,0 +1,21 @@ +dataset_path: Idavidrein/gpqa +group: gpqa +output_type: multiple_choice +process_docs: !function utils.process_docs +training_split: train +# Because huggingface dataset only has train split +validation_split: train +test_split: null +doc_to_text: "What is the correct answer to this question:{{Question}}\nChoices:\n(A) {{choice1}}\n(B) {{choice2}}\n(C) {{choice3}}\n(D) {{choice4}}\nAnswer:" +doc_to_target: answer +doc_to_choice: ["(A)", "(B)", "(C)", "(D)"] +num_fewshot: 0 +metric_list: + - metric: acc + aggregation: mean + higher_is_better: true + - metric: acc_norm + aggregation: mean + higher_is_better: true +metadata: + version: 1.0 diff --git a/lm_eval/tasks/gpqa/zeroshot/gpqa_diamond_zeroshot.yaml b/lm_eval/tasks/gpqa/zeroshot/gpqa_diamond_zeroshot.yaml new file mode 100644 index 0000000000..c3a7921c30 --- /dev/null +++ b/lm_eval/tasks/gpqa/zeroshot/gpqa_diamond_zeroshot.yaml @@ -0,0 +1,4 @@ +# Generated by _generate_configs.py +dataset_name: gpqa_diamond +include: _gpqa_zeroshot_yaml +task: gpqa_diamond_zeroshot diff --git a/lm_eval/tasks/gpqa/zeroshot/gpqa_extended_zeroshot.yaml b/lm_eval/tasks/gpqa/zeroshot/gpqa_extended_zeroshot.yaml new file mode 100644 index 0000000000..5e7347f111 --- /dev/null +++ b/lm_eval/tasks/gpqa/zeroshot/gpqa_extended_zeroshot.yaml @@ -0,0 +1,4 @@ +# Generated by _generate_configs.py +dataset_name: gpqa_extended +include: _gpqa_zeroshot_yaml +task: gpqa_extended_zeroshot diff --git a/lm_eval/tasks/gpqa/zeroshot/gpqa_main_zeroshot.yaml b/lm_eval/tasks/gpqa/zeroshot/gpqa_main_zeroshot.yaml new file mode 100644 index 0000000000..1a8d7fb590 --- /dev/null +++ b/lm_eval/tasks/gpqa/zeroshot/gpqa_main_zeroshot.yaml @@ -0,0 +1,4 @@ +# Generated by _generate_configs.py +dataset_name: gpqa_main +include: _gpqa_zeroshot_yaml +task: gpqa_main_zeroshot diff --git a/lm_eval/tasks/gpqa/zeroshot/utils.py b/lm_eval/tasks/gpqa/zeroshot/utils.py new file mode 100644 index 0000000000..f941abf06f --- /dev/null +++ b/lm_eval/tasks/gpqa/zeroshot/utils.py @@ -0,0 +1,36 @@ +import datasets +import re +import random + +def preprocess(text): + if text is None: + return " " + text = text.strip() + text = text.replace(" [title]", ". ") + text = re.sub("\\[.*?\\]", "", text) + text = text.replace(" ", " ") + return text + + +def process_docs(dataset: datasets.Dataset) -> datasets.Dataset: + def _process_doc(doc): + choices = [ + preprocess(doc["Incorrect Answer 1"]), + preprocess(doc["Incorrect Answer 2"]), + preprocess(doc["Incorrect Answer 3"]), + preprocess(doc["Correct Answer"]), + ] + + random.shuffle(choices) + correct_answer_index = choices.index(preprocess(doc["Correct Answer"])) + + out_doc = { + "choice1": choices[0], + "choice2": choices[1], + "choice3": choices[2], + "choice4": choices[3], + "answer": f"({chr(65 + correct_answer_index)})" + } + return out_doc + + return dataset.map(_process_doc) From c26a6ac77bca2801a429fbd403e9606fd06e29c9 Mon Sep 17 00:00:00 2001 From: Hanwool Albert Lee <88315152+h-albert-lee@users.noreply.github.com> Date: Wed, 21 Feb 2024 21:54:54 +0900 Subject: [PATCH 08/20] Added KMMLU evaluation method and changed ReadMe (#1447) * update kmmlu default formatting * Update _default_kmmlu_yaml * Delete lm_eval/tasks/kmmlu/utils.py * new tasks implemented * add direct tasks * update direct evaluate * update direct eval * add cot sample * update cot * add cot * Update _cot_kmmlu_yaml * add kmmlu90 * Update and rename _cot_kmmlu.yaml to _cot_kmmlu_yaml * Create kmmlu90.yaml * Update _cot_kmmlu_yaml * add direct * Update _cot_kmmlu_yaml * Update and rename kmmlu90.yaml to kmmlu90_cot.yaml * Update kmmlu90_direct.yaml * add kmmlu hard * Update _cot_kmmlu_yaml * Update _cot_kmmlu_yaml * update cot * update cot * erase typo * Update _cot_kmmlu_yaml * update cot * Rename dataset to match k-mmlu-hard * removed kmmlu90 * fixed name 'kmmlu_cot' to 'kmmlu_hard_cot' and revised README * applied pre-commit before pull requests * rename datasets and add notes * Remove DS_Store cache * Update lm_eval/tasks/kmmlu/README.md Co-authored-by: Hailey Schoelkopf <65563625+haileyschoelkopf@users.noreply.github.com> * Change citations and reflect reviews on version * Added kmmlu_hard and fixed other errors * fixing minor errors * remove duplicated * Rename files * try ".index" * minor fix * minor fix again * fix revert. * minor fix. thank for hailey --------- Co-authored-by: GUIJIN SON Co-authored-by: Hailey Schoelkopf <65563625+haileyschoelkopf@users.noreply.github.com> --- lm_eval/tasks/kmmlu/README.md | 30 +++- lm_eval/tasks/kmmlu/cot_hard/_cot_kmmlu_yaml | 28 ++++ .../cot_hard/kmmlu_cot_hard_accounting.yaml | 113 ++++++++++++++ .../kmmlu_cot_hard_agricultural_sciences.yaml | 113 ++++++++++++++ ..._aviation_engineering_and_maintenance.yaml | 120 +++++++++++++++ .../cot_hard/kmmlu_cot_hard_biology.yaml | 112 ++++++++++++++ .../kmmlu_cot_hard_chemical_engineering.yaml | 121 +++++++++++++++ .../cot_hard/kmmlu_cot_hard_chemistry.yaml | 110 ++++++++++++++ .../kmmlu_cot_hard_civil_engineering.yaml | 129 ++++++++++++++++ .../kmmlu_cot_hard_computer_science.yaml | 128 ++++++++++++++++ .../cot_hard/kmmlu_cot_hard_construction.yaml | 115 ++++++++++++++ .../cot_hard/kmmlu_cot_hard_criminal_law.yaml | 136 +++++++++++++++++ .../cot_hard/kmmlu_cot_hard_ecology.yaml | 121 +++++++++++++++ .../cot_hard/kmmlu_cot_hard_economics.yaml | 122 +++++++++++++++ .../cot_hard/kmmlu_cot_hard_education.yaml | 115 ++++++++++++++ ...kmmlu_cot_hard_electrical_engineering.yaml | 124 +++++++++++++++ ...mmlu_cot_hard_electronics_engineering.yaml | 114 ++++++++++++++ .../kmmlu_cot_hard_energy_management.yaml | 118 +++++++++++++++ .../kmmlu_cot_hard_environmental_science.yaml | 116 ++++++++++++++ .../cot_hard/kmmlu_cot_hard_fashion.yaml | 114 ++++++++++++++ .../kmmlu_cot_hard_food_processing.yaml | 112 ++++++++++++++ ...t_hard_gas_technology_and_engineering.yaml | 118 +++++++++++++++ .../cot_hard/kmmlu_cot_hard_geomatics.yaml | 110 ++++++++++++++ .../kmmlu/cot_hard/kmmlu_cot_hard_health.yaml | 117 +++++++++++++++ .../kmmlu_cot_hard_industrial_engineer.yaml | 113 ++++++++++++++ ...kmmlu_cot_hard_information_technology.yaml | 111 ++++++++++++++ ...hard_interior_architecture_and_design.yaml | 123 +++++++++++++++ .../kmmlu_cot_hard_korean_history.yaml | 128 ++++++++++++++++ .../kmmlu/cot_hard/kmmlu_cot_hard_law.yaml | 114 ++++++++++++++ ...hard_machine_design_and_manufacturing.yaml | 116 ++++++++++++++ .../cot_hard/kmmlu_cot_hard_management.yaml | 107 +++++++++++++ .../kmmlu_cot_hard_maritime_engineering.yaml | 129 ++++++++++++++++ .../cot_hard/kmmlu_cot_hard_marketing.yaml | 122 +++++++++++++++ .../kmmlu_cot_hard_materials_engineering.yaml | 118 +++++++++++++++ .../kmmlu/cot_hard/kmmlu_cot_hard_math.yaml | 126 ++++++++++++++++ ...kmmlu_cot_hard_mechanical_engineering.yaml | 111 ++++++++++++++ ...kmmlu_cot_hard_nondestructive_testing.yaml | 122 +++++++++++++++ .../kmmlu/cot_hard/kmmlu_cot_hard_patent.yaml | 142 ++++++++++++++++++ ..._hard_political_science_and_sociology.yaml | 123 +++++++++++++++ .../cot_hard/kmmlu_cot_hard_psychology.yaml | 127 ++++++++++++++++ .../kmmlu_cot_hard_public_safety.yaml | 123 +++++++++++++++ ...rd_railway_and_automotive_engineering.yaml | 118 +++++++++++++++ .../cot_hard/kmmlu_cot_hard_real_estate.yaml | 121 +++++++++++++++ ...mmlu_cot_hard_refrigerating_machinery.yaml | 119 +++++++++++++++ .../kmmlu_cot_hard_social_welfare.yaml | 122 +++++++++++++++ .../cot_hard/kmmlu_cot_hard_taxation.yaml | 133 ++++++++++++++++ ...ommunications_and_wireless_technology.yaml | 115 ++++++++++++++ lm_eval/tasks/kmmlu/direct/_direct_kmmlu_yaml | 27 ++++ .../kmmlu/direct/kmmlu_direct_accounting.yaml | 3 + .../kmmlu_direct_agricultural_sciences.yaml | 3 + ..._aviation_engineering_and_maintenance.yaml | 3 + .../kmmlu/direct/kmmlu_direct_biology.yaml | 3 + .../kmmlu_direct_chemical_engineering.yaml | 3 + .../kmmlu/direct/kmmlu_direct_chemistry.yaml | 3 + .../kmmlu_direct_civil_engineering.yaml | 3 + .../direct/kmmlu_direct_computer_science.yaml | 3 + .../direct/kmmlu_direct_construction.yaml | 3 + .../direct/kmmlu_direct_criminal_law.yaml | 3 + .../kmmlu/direct/kmmlu_direct_ecology.yaml | 3 + .../kmmlu/direct/kmmlu_direct_economics.yaml | 3 + .../kmmlu/direct/kmmlu_direct_education.yaml | 3 + .../kmmlu_direct_electrical_engineering.yaml | 3 + .../kmmlu_direct_electronics_engineering.yaml | 3 + .../kmmlu_direct_energy_management.yaml | 3 + .../kmmlu_direct_environmental_science.yaml | 3 + .../kmmlu/direct/kmmlu_direct_fashion.yaml | 3 + .../direct/kmmlu_direct_food_processing.yaml | 3 + ...direct_gas_technology_and_engineering.yaml | 3 + .../kmmlu/direct/kmmlu_direct_geomatics.yaml | 3 + .../kmmlu/direct/kmmlu_direct_health.yaml | 3 + .../kmmlu_direct_industrial_engineer.yaml | 3 + .../kmmlu_direct_information_technology.yaml | 3 + ...rect_interior_architecture_and_design.yaml | 3 + .../direct/kmmlu_direct_korean_history.yaml | 3 + .../tasks/kmmlu/direct/kmmlu_direct_law.yaml | 3 + ...rect_machine_design_and_manufacturing.yaml | 3 + .../kmmlu/direct/kmmlu_direct_management.yaml | 3 + .../kmmlu_direct_maritime_engineering.yaml | 3 + .../kmmlu/direct/kmmlu_direct_marketing.yaml | 3 + .../kmmlu_direct_materials_engineering.yaml | 3 + .../tasks/kmmlu/direct/kmmlu_direct_math.yaml | 3 + .../kmmlu_direct_mechanical_engineering.yaml | 3 + .../kmmlu_direct_nondestructive_testing.yaml | 3 + .../kmmlu/direct/kmmlu_direct_patent.yaml | 3 + ...irect_political_science_and_sociology.yaml | 3 + .../kmmlu/direct/kmmlu_direct_psychology.yaml | 3 + .../direct/kmmlu_direct_public_safety.yaml | 3 + ...ct_railway_and_automotive_engineering.yaml | 3 + .../direct/kmmlu_direct_real_estate.yaml | 3 + .../kmmlu_direct_refrigerating_machinery.yaml | 3 + .../direct/kmmlu_direct_social_welfare.yaml | 3 + .../kmmlu/direct/kmmlu_direct_taxation.yaml | 3 + ...ommunications_and_wireless_technology.yaml | 3 + .../kmmlu/direct_hard/_direct_hard_kmmlu_yaml | 27 ++++ .../kmmlu_direct_hard_accounting.yaml | 3 + ...mlu_direct_hard_agricultural_sciences.yaml | 3 + ..._aviation_engineering_and_maintenance.yaml | 3 + .../kmmlu_direct_hard_biology.yaml | 3 + ...mmlu_direct_hard_chemical_engineering.yaml | 3 + .../kmmlu_direct_hard_chemistry.yaml | 3 + .../kmmlu_direct_hard_civil_engineering.yaml | 3 + .../kmmlu_direct_hard_computer_science.yaml | 3 + .../kmmlu_direct_hard_construction.yaml | 3 + .../kmmlu_direct_hard_criminal_law.yaml | 3 + .../kmmlu_direct_hard_ecology.yaml | 3 + .../kmmlu_direct_hard_economics.yaml | 3 + .../kmmlu_direct_hard_education.yaml | 3 + ...lu_direct_hard_electrical_engineering.yaml | 3 + ...u_direct_hard_electronics_engineering.yaml | 3 + .../kmmlu_direct_hard_energy_management.yaml | 3 + ...mlu_direct_hard_environmental_science.yaml | 3 + .../kmmlu_direct_hard_fashion.yaml | 3 + .../kmmlu_direct_hard_food_processing.yaml | 3 + ...t_hard_gas_technology_and_engineering.yaml | 3 + .../kmmlu_direct_hard_geomatics.yaml | 3 + .../direct_hard/kmmlu_direct_hard_health.yaml | 3 + ...kmmlu_direct_hard_industrial_engineer.yaml | 3 + ...lu_direct_hard_information_technology.yaml | 3 + ...hard_interior_architecture_and_design.yaml | 3 + .../kmmlu_direct_hard_korean_history.yaml | 3 + .../direct_hard/kmmlu_direct_hard_law.yaml | 3 + ...hard_machine_design_and_manufacturing.yaml | 3 + .../kmmlu_direct_hard_management.yaml | 3 + ...mmlu_direct_hard_maritime_engineering.yaml | 3 + .../kmmlu_direct_hard_marketing.yaml | 3 + ...mlu_direct_hard_materials_engineering.yaml | 3 + .../direct_hard/kmmlu_direct_hard_math.yaml | 3 + ...lu_direct_hard_mechanical_engineering.yaml | 3 + ...lu_direct_hard_nondestructive_testing.yaml | 3 + .../direct_hard/kmmlu_direct_hard_patent.yaml | 3 + ..._hard_political_science_and_sociology.yaml | 3 + .../kmmlu_direct_hard_psychology.yaml | 3 + .../kmmlu_direct_hard_public_safety.yaml | 3 + ...rd_railway_and_automotive_engineering.yaml | 3 + .../kmmlu_direct_hard_real_estate.yaml | 3 + ...u_direct_hard_refrigerating_machinery.yaml | 3 + .../kmmlu_direct_hard_social_welfare.yaml | 3 + .../kmmlu_direct_hard_taxation.yaml | 3 + ...ommunications_and_wireless_technology.yaml | 3 + .../_hard_kmmlu_yaml} | 13 +- .../kmmlu/hard/kmmlu_hard_accounting.yaml | 3 + .../kmmlu_hard_agricultural_sciences.yaml | 3 + ..._aviation_engineering_and_maintenance.yaml | 3 + .../tasks/kmmlu/hard/kmmlu_hard_biology.yaml | 3 + .../hard/kmmlu_hard_chemical_engineering.yaml | 3 + .../kmmlu/hard/kmmlu_hard_chemistry.yaml | 3 + .../hard/kmmlu_hard_civil_engineering.yaml | 3 + .../hard/kmmlu_hard_computer_science.yaml | 3 + .../kmmlu/hard/kmmlu_hard_construction.yaml | 3 + .../kmmlu/hard/kmmlu_hard_criminal_law.yaml | 3 + .../tasks/kmmlu/hard/kmmlu_hard_ecology.yaml | 3 + .../kmmlu/hard/kmmlu_hard_economics.yaml | 3 + .../kmmlu/hard/kmmlu_hard_education.yaml | 3 + .../kmmlu_hard_electrical_engineering.yaml | 3 + .../kmmlu_hard_electronics_engineering.yaml | 3 + .../hard/kmmlu_hard_energy_management.yaml | 3 + .../kmmlu_hard_environmental_science.yaml | 3 + .../tasks/kmmlu/hard/kmmlu_hard_fashion.yaml | 3 + .../hard/kmmlu_hard_food_processing.yaml | 3 + ...u_hard_gas_technology_and_engineering.yaml | 3 + .../kmmlu/hard/kmmlu_hard_geomatics.yaml | 3 + .../tasks/kmmlu/hard/kmmlu_hard_health.yaml | 3 + .../hard/kmmlu_hard_industrial_engineer.yaml | 3 + .../kmmlu_hard_information_technology.yaml | 3 + ...hard_interior_architecture_and_design.yaml | 3 + .../kmmlu/hard/kmmlu_hard_korean_history.yaml | 3 + lm_eval/tasks/kmmlu/hard/kmmlu_hard_law.yaml | 3 + ...hard_machine_design_and_manufacturing.yaml | 3 + .../kmmlu/hard/kmmlu_hard_management.yaml | 3 + .../hard/kmmlu_hard_maritime_engineering.yaml | 3 + .../kmmlu/hard/kmmlu_hard_marketing.yaml | 3 + .../kmmlu_hard_materials_engineering.yaml | 3 + lm_eval/tasks/kmmlu/hard/kmmlu_hard_math.yaml | 3 + .../kmmlu_hard_mechanical_engineering.yaml | 3 + .../kmmlu_hard_nondestructive_testing.yaml | 3 + .../tasks/kmmlu/hard/kmmlu_hard_patent.yaml | 3 + ..._hard_political_science_and_sociology.yaml | 3 + .../kmmlu/hard/kmmlu_hard_psychology.yaml | 3 + .../kmmlu/hard/kmmlu_hard_public_safety.yaml | 3 + ...rd_railway_and_automotive_engineering.yaml | 3 + .../kmmlu/hard/kmmlu_hard_real_estate.yaml | 3 + .../kmmlu_hard_refrigerating_machinery.yaml | 3 + .../kmmlu/hard/kmmlu_hard_social_welfare.yaml | 3 + .../tasks/kmmlu/hard/kmmlu_hard_taxation.yaml | 3 + ...ommunications_and_wireless_technology.yaml | 3 + lm_eval/tasks/kmmlu/kmmlu_accounting.yaml | 3 - .../kmmlu/kmmlu_agricultural_sciences.yaml | 3 - ..._aviation_engineering_and_maintenance.yaml | 3 - lm_eval/tasks/kmmlu/kmmlu_biology.yaml | 3 - .../kmmlu/kmmlu_chemical_engineering.yaml | 3 - lm_eval/tasks/kmmlu/kmmlu_chemistry.yaml | 3 - .../tasks/kmmlu/kmmlu_civil_engineering.yaml | 3 - .../tasks/kmmlu/kmmlu_computer_science.yaml | 3 - lm_eval/tasks/kmmlu/kmmlu_construction.yaml | 3 - lm_eval/tasks/kmmlu/kmmlu_criminal_law.yaml | 3 - lm_eval/tasks/kmmlu/kmmlu_ecology.yaml | 3 - lm_eval/tasks/kmmlu/kmmlu_economics.yaml | 3 - lm_eval/tasks/kmmlu/kmmlu_education.yaml | 3 - .../kmmlu/kmmlu_electrical_engineering.yaml | 3 - .../kmmlu/kmmlu_electronics_engineering.yaml | 3 - .../tasks/kmmlu/kmmlu_energy_management.yaml | 3 - .../kmmlu/kmmlu_environmental_science.yaml | 3 - lm_eval/tasks/kmmlu/kmmlu_fashion.yaml | 3 - .../tasks/kmmlu/kmmlu_food_processing.yaml | 3 - .../kmmlu_gas_technology_and_engineering.yaml | 3 - lm_eval/tasks/kmmlu/kmmlu_geomatics.yaml | 3 - lm_eval/tasks/kmmlu/kmmlu_health.yaml | 3 - .../kmmlu/kmmlu_industrial_engineer.yaml | 3 - .../kmmlu/kmmlu_information_technology.yaml | 3 - ...mmlu_interior_architecture_and_design.yaml | 3 - lm_eval/tasks/kmmlu/kmmlu_law.yaml | 3 - ...mmlu_machine_design_and_manufacturing.yaml | 3 - lm_eval/tasks/kmmlu/kmmlu_management.yaml | 3 - .../kmmlu/kmmlu_maritime_engineering.yaml | 3 - lm_eval/tasks/kmmlu/kmmlu_marketing.yaml | 3 - .../kmmlu/kmmlu_materials_engineering.yaml | 3 - .../kmmlu/kmmlu_mechanical_engineering.yaml | 3 - .../kmmlu/kmmlu_nondestructive_testing.yaml | 3 - lm_eval/tasks/kmmlu/kmmlu_patent.yaml | 3 - ...kmmlu_political_science_and_sociology.yaml | 3 - lm_eval/tasks/kmmlu/kmmlu_psychology.yaml | 3 - lm_eval/tasks/kmmlu/kmmlu_public_safety.yaml | 3 - ...lu_railway_and_automotive_engineering.yaml | 3 - lm_eval/tasks/kmmlu/kmmlu_real_estate.yaml | 3 - .../kmmlu/kmmlu_refrigerating_machinery.yaml | 3 - lm_eval/tasks/kmmlu/kmmlu_social_welfare.yaml | 3 - lm_eval/tasks/kmmlu/kmmlu_taxation.yaml | 3 - ...ommunications_and_wireless_technology.yaml | 3 - 228 files changed, 5896 insertions(+), 144 deletions(-) create mode 100644 lm_eval/tasks/kmmlu/cot_hard/_cot_kmmlu_yaml create mode 100644 lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_accounting.yaml create mode 100644 lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_agricultural_sciences.yaml create mode 100644 lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_aviation_engineering_and_maintenance.yaml create mode 100644 lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_biology.yaml create mode 100644 lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_chemical_engineering.yaml create mode 100644 lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_chemistry.yaml create mode 100644 lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_civil_engineering.yaml create mode 100644 lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_computer_science.yaml create mode 100644 lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_construction.yaml create mode 100644 lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_criminal_law.yaml create mode 100644 lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_ecology.yaml create mode 100644 lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_economics.yaml create mode 100644 lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_education.yaml create mode 100644 lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_electrical_engineering.yaml create mode 100644 lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_electronics_engineering.yaml create mode 100644 lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_energy_management.yaml create mode 100644 lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_environmental_science.yaml create mode 100644 lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_fashion.yaml create mode 100644 lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_food_processing.yaml create mode 100644 lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_gas_technology_and_engineering.yaml create mode 100644 lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_geomatics.yaml create mode 100644 lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_health.yaml create mode 100644 lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_industrial_engineer.yaml create mode 100644 lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_information_technology.yaml create mode 100644 lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_interior_architecture_and_design.yaml create mode 100644 lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_korean_history.yaml create mode 100644 lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_law.yaml create mode 100644 lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_machine_design_and_manufacturing.yaml create mode 100644 lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_management.yaml create mode 100644 lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_maritime_engineering.yaml create mode 100644 lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_marketing.yaml create mode 100644 lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_materials_engineering.yaml create mode 100644 lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_math.yaml create mode 100644 lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_mechanical_engineering.yaml create mode 100644 lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_nondestructive_testing.yaml create mode 100644 lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_patent.yaml create mode 100644 lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_political_science_and_sociology.yaml create mode 100644 lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_psychology.yaml create mode 100644 lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_public_safety.yaml create mode 100644 lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_railway_and_automotive_engineering.yaml create mode 100644 lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_real_estate.yaml create mode 100644 lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_refrigerating_machinery.yaml create mode 100644 lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_social_welfare.yaml create mode 100644 lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_taxation.yaml create mode 100644 lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_telecommunications_and_wireless_technology.yaml create mode 100644 lm_eval/tasks/kmmlu/direct/_direct_kmmlu_yaml create mode 100644 lm_eval/tasks/kmmlu/direct/kmmlu_direct_accounting.yaml create mode 100644 lm_eval/tasks/kmmlu/direct/kmmlu_direct_agricultural_sciences.yaml create mode 100644 lm_eval/tasks/kmmlu/direct/kmmlu_direct_aviation_engineering_and_maintenance.yaml create mode 100644 lm_eval/tasks/kmmlu/direct/kmmlu_direct_biology.yaml create mode 100644 lm_eval/tasks/kmmlu/direct/kmmlu_direct_chemical_engineering.yaml create mode 100644 lm_eval/tasks/kmmlu/direct/kmmlu_direct_chemistry.yaml create mode 100644 lm_eval/tasks/kmmlu/direct/kmmlu_direct_civil_engineering.yaml create mode 100644 lm_eval/tasks/kmmlu/direct/kmmlu_direct_computer_science.yaml create mode 100644 lm_eval/tasks/kmmlu/direct/kmmlu_direct_construction.yaml create mode 100644 lm_eval/tasks/kmmlu/direct/kmmlu_direct_criminal_law.yaml create mode 100644 lm_eval/tasks/kmmlu/direct/kmmlu_direct_ecology.yaml create mode 100644 lm_eval/tasks/kmmlu/direct/kmmlu_direct_economics.yaml create mode 100644 lm_eval/tasks/kmmlu/direct/kmmlu_direct_education.yaml create mode 100644 lm_eval/tasks/kmmlu/direct/kmmlu_direct_electrical_engineering.yaml create mode 100644 lm_eval/tasks/kmmlu/direct/kmmlu_direct_electronics_engineering.yaml create mode 100644 lm_eval/tasks/kmmlu/direct/kmmlu_direct_energy_management.yaml create mode 100644 lm_eval/tasks/kmmlu/direct/kmmlu_direct_environmental_science.yaml create mode 100644 lm_eval/tasks/kmmlu/direct/kmmlu_direct_fashion.yaml create mode 100644 lm_eval/tasks/kmmlu/direct/kmmlu_direct_food_processing.yaml create mode 100644 lm_eval/tasks/kmmlu/direct/kmmlu_direct_gas_technology_and_engineering.yaml create mode 100644 lm_eval/tasks/kmmlu/direct/kmmlu_direct_geomatics.yaml create mode 100644 lm_eval/tasks/kmmlu/direct/kmmlu_direct_health.yaml create mode 100644 lm_eval/tasks/kmmlu/direct/kmmlu_direct_industrial_engineer.yaml create mode 100644 lm_eval/tasks/kmmlu/direct/kmmlu_direct_information_technology.yaml create mode 100644 lm_eval/tasks/kmmlu/direct/kmmlu_direct_interior_architecture_and_design.yaml create mode 100644 lm_eval/tasks/kmmlu/direct/kmmlu_direct_korean_history.yaml create mode 100644 lm_eval/tasks/kmmlu/direct/kmmlu_direct_law.yaml create mode 100644 lm_eval/tasks/kmmlu/direct/kmmlu_direct_machine_design_and_manufacturing.yaml create mode 100644 lm_eval/tasks/kmmlu/direct/kmmlu_direct_management.yaml create mode 100644 lm_eval/tasks/kmmlu/direct/kmmlu_direct_maritime_engineering.yaml create mode 100644 lm_eval/tasks/kmmlu/direct/kmmlu_direct_marketing.yaml create mode 100644 lm_eval/tasks/kmmlu/direct/kmmlu_direct_materials_engineering.yaml create mode 100644 lm_eval/tasks/kmmlu/direct/kmmlu_direct_math.yaml create mode 100644 lm_eval/tasks/kmmlu/direct/kmmlu_direct_mechanical_engineering.yaml create mode 100644 lm_eval/tasks/kmmlu/direct/kmmlu_direct_nondestructive_testing.yaml create mode 100644 lm_eval/tasks/kmmlu/direct/kmmlu_direct_patent.yaml create mode 100644 lm_eval/tasks/kmmlu/direct/kmmlu_direct_political_science_and_sociology.yaml create mode 100644 lm_eval/tasks/kmmlu/direct/kmmlu_direct_psychology.yaml create mode 100644 lm_eval/tasks/kmmlu/direct/kmmlu_direct_public_safety.yaml create mode 100644 lm_eval/tasks/kmmlu/direct/kmmlu_direct_railway_and_automotive_engineering.yaml create mode 100644 lm_eval/tasks/kmmlu/direct/kmmlu_direct_real_estate.yaml create mode 100644 lm_eval/tasks/kmmlu/direct/kmmlu_direct_refrigerating_machinery.yaml create mode 100644 lm_eval/tasks/kmmlu/direct/kmmlu_direct_social_welfare.yaml create mode 100644 lm_eval/tasks/kmmlu/direct/kmmlu_direct_taxation.yaml create mode 100644 lm_eval/tasks/kmmlu/direct/kmmlu_direct_telecommunications_and_wireless_technology.yaml create mode 100644 lm_eval/tasks/kmmlu/direct_hard/_direct_hard_kmmlu_yaml create mode 100644 lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_accounting.yaml create mode 100644 lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_agricultural_sciences.yaml create mode 100644 lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_aviation_engineering_and_maintenance.yaml create mode 100644 lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_biology.yaml create mode 100644 lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_chemical_engineering.yaml create mode 100644 lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_chemistry.yaml create mode 100644 lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_civil_engineering.yaml create mode 100644 lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_computer_science.yaml create mode 100644 lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_construction.yaml create mode 100644 lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_criminal_law.yaml create mode 100644 lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_ecology.yaml create mode 100644 lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_economics.yaml create mode 100644 lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_education.yaml create mode 100644 lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_electrical_engineering.yaml create mode 100644 lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_electronics_engineering.yaml create mode 100644 lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_energy_management.yaml create mode 100644 lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_environmental_science.yaml create mode 100644 lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_fashion.yaml create mode 100644 lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_food_processing.yaml create mode 100644 lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_gas_technology_and_engineering.yaml create mode 100644 lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_geomatics.yaml create mode 100644 lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_health.yaml create mode 100644 lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_industrial_engineer.yaml create mode 100644 lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_information_technology.yaml create mode 100644 lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_interior_architecture_and_design.yaml create mode 100644 lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_korean_history.yaml create mode 100644 lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_law.yaml create mode 100644 lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_machine_design_and_manufacturing.yaml create mode 100644 lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_management.yaml create mode 100644 lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_maritime_engineering.yaml create mode 100644 lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_marketing.yaml create mode 100644 lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_materials_engineering.yaml create mode 100644 lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_math.yaml create mode 100644 lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_mechanical_engineering.yaml create mode 100644 lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_nondestructive_testing.yaml create mode 100644 lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_patent.yaml create mode 100644 lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_political_science_and_sociology.yaml create mode 100644 lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_psychology.yaml create mode 100644 lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_public_safety.yaml create mode 100644 lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_railway_and_automotive_engineering.yaml create mode 100644 lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_real_estate.yaml create mode 100644 lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_refrigerating_machinery.yaml create mode 100644 lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_social_welfare.yaml create mode 100644 lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_taxation.yaml create mode 100644 lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_telecommunications_and_wireless_technology.yaml rename lm_eval/tasks/kmmlu/{_default_kmmlu_yaml => hard/_hard_kmmlu_yaml} (64%) create mode 100644 lm_eval/tasks/kmmlu/hard/kmmlu_hard_accounting.yaml create mode 100644 lm_eval/tasks/kmmlu/hard/kmmlu_hard_agricultural_sciences.yaml create mode 100644 lm_eval/tasks/kmmlu/hard/kmmlu_hard_aviation_engineering_and_maintenance.yaml create mode 100644 lm_eval/tasks/kmmlu/hard/kmmlu_hard_biology.yaml create mode 100644 lm_eval/tasks/kmmlu/hard/kmmlu_hard_chemical_engineering.yaml create mode 100644 lm_eval/tasks/kmmlu/hard/kmmlu_hard_chemistry.yaml create mode 100644 lm_eval/tasks/kmmlu/hard/kmmlu_hard_civil_engineering.yaml create mode 100644 lm_eval/tasks/kmmlu/hard/kmmlu_hard_computer_science.yaml create mode 100644 lm_eval/tasks/kmmlu/hard/kmmlu_hard_construction.yaml create mode 100644 lm_eval/tasks/kmmlu/hard/kmmlu_hard_criminal_law.yaml create mode 100644 lm_eval/tasks/kmmlu/hard/kmmlu_hard_ecology.yaml create mode 100644 lm_eval/tasks/kmmlu/hard/kmmlu_hard_economics.yaml create mode 100644 lm_eval/tasks/kmmlu/hard/kmmlu_hard_education.yaml create mode 100644 lm_eval/tasks/kmmlu/hard/kmmlu_hard_electrical_engineering.yaml create mode 100644 lm_eval/tasks/kmmlu/hard/kmmlu_hard_electronics_engineering.yaml create mode 100644 lm_eval/tasks/kmmlu/hard/kmmlu_hard_energy_management.yaml create mode 100644 lm_eval/tasks/kmmlu/hard/kmmlu_hard_environmental_science.yaml create mode 100644 lm_eval/tasks/kmmlu/hard/kmmlu_hard_fashion.yaml create mode 100644 lm_eval/tasks/kmmlu/hard/kmmlu_hard_food_processing.yaml create mode 100644 lm_eval/tasks/kmmlu/hard/kmmlu_hard_gas_technology_and_engineering.yaml create mode 100644 lm_eval/tasks/kmmlu/hard/kmmlu_hard_geomatics.yaml create mode 100644 lm_eval/tasks/kmmlu/hard/kmmlu_hard_health.yaml create mode 100644 lm_eval/tasks/kmmlu/hard/kmmlu_hard_industrial_engineer.yaml create mode 100644 lm_eval/tasks/kmmlu/hard/kmmlu_hard_information_technology.yaml create mode 100644 lm_eval/tasks/kmmlu/hard/kmmlu_hard_interior_architecture_and_design.yaml create mode 100644 lm_eval/tasks/kmmlu/hard/kmmlu_hard_korean_history.yaml create mode 100644 lm_eval/tasks/kmmlu/hard/kmmlu_hard_law.yaml create mode 100644 lm_eval/tasks/kmmlu/hard/kmmlu_hard_machine_design_and_manufacturing.yaml create mode 100644 lm_eval/tasks/kmmlu/hard/kmmlu_hard_management.yaml create mode 100644 lm_eval/tasks/kmmlu/hard/kmmlu_hard_maritime_engineering.yaml create mode 100644 lm_eval/tasks/kmmlu/hard/kmmlu_hard_marketing.yaml create mode 100644 lm_eval/tasks/kmmlu/hard/kmmlu_hard_materials_engineering.yaml create mode 100644 lm_eval/tasks/kmmlu/hard/kmmlu_hard_math.yaml create mode 100644 lm_eval/tasks/kmmlu/hard/kmmlu_hard_mechanical_engineering.yaml create mode 100644 lm_eval/tasks/kmmlu/hard/kmmlu_hard_nondestructive_testing.yaml create mode 100644 lm_eval/tasks/kmmlu/hard/kmmlu_hard_patent.yaml create mode 100644 lm_eval/tasks/kmmlu/hard/kmmlu_hard_political_science_and_sociology.yaml create mode 100644 lm_eval/tasks/kmmlu/hard/kmmlu_hard_psychology.yaml create mode 100644 lm_eval/tasks/kmmlu/hard/kmmlu_hard_public_safety.yaml create mode 100644 lm_eval/tasks/kmmlu/hard/kmmlu_hard_railway_and_automotive_engineering.yaml create mode 100644 lm_eval/tasks/kmmlu/hard/kmmlu_hard_real_estate.yaml create mode 100644 lm_eval/tasks/kmmlu/hard/kmmlu_hard_refrigerating_machinery.yaml create mode 100644 lm_eval/tasks/kmmlu/hard/kmmlu_hard_social_welfare.yaml create mode 100644 lm_eval/tasks/kmmlu/hard/kmmlu_hard_taxation.yaml create mode 100644 lm_eval/tasks/kmmlu/hard/kmmlu_hard_telecommunications_and_wireless_technology.yaml delete mode 100644 lm_eval/tasks/kmmlu/kmmlu_accounting.yaml delete mode 100644 lm_eval/tasks/kmmlu/kmmlu_agricultural_sciences.yaml delete mode 100644 lm_eval/tasks/kmmlu/kmmlu_aviation_engineering_and_maintenance.yaml delete mode 100644 lm_eval/tasks/kmmlu/kmmlu_biology.yaml delete mode 100644 lm_eval/tasks/kmmlu/kmmlu_chemical_engineering.yaml delete mode 100644 lm_eval/tasks/kmmlu/kmmlu_chemistry.yaml delete mode 100644 lm_eval/tasks/kmmlu/kmmlu_civil_engineering.yaml delete mode 100644 lm_eval/tasks/kmmlu/kmmlu_computer_science.yaml delete mode 100644 lm_eval/tasks/kmmlu/kmmlu_construction.yaml delete mode 100644 lm_eval/tasks/kmmlu/kmmlu_criminal_law.yaml delete mode 100644 lm_eval/tasks/kmmlu/kmmlu_ecology.yaml delete mode 100644 lm_eval/tasks/kmmlu/kmmlu_economics.yaml delete mode 100644 lm_eval/tasks/kmmlu/kmmlu_education.yaml delete mode 100644 lm_eval/tasks/kmmlu/kmmlu_electrical_engineering.yaml delete mode 100644 lm_eval/tasks/kmmlu/kmmlu_electronics_engineering.yaml delete mode 100644 lm_eval/tasks/kmmlu/kmmlu_energy_management.yaml delete mode 100644 lm_eval/tasks/kmmlu/kmmlu_environmental_science.yaml delete mode 100644 lm_eval/tasks/kmmlu/kmmlu_fashion.yaml delete mode 100644 lm_eval/tasks/kmmlu/kmmlu_food_processing.yaml delete mode 100644 lm_eval/tasks/kmmlu/kmmlu_gas_technology_and_engineering.yaml delete mode 100644 lm_eval/tasks/kmmlu/kmmlu_geomatics.yaml delete mode 100644 lm_eval/tasks/kmmlu/kmmlu_health.yaml delete mode 100644 lm_eval/tasks/kmmlu/kmmlu_industrial_engineer.yaml delete mode 100644 lm_eval/tasks/kmmlu/kmmlu_information_technology.yaml delete mode 100644 lm_eval/tasks/kmmlu/kmmlu_interior_architecture_and_design.yaml delete mode 100644 lm_eval/tasks/kmmlu/kmmlu_law.yaml delete mode 100644 lm_eval/tasks/kmmlu/kmmlu_machine_design_and_manufacturing.yaml delete mode 100644 lm_eval/tasks/kmmlu/kmmlu_management.yaml delete mode 100644 lm_eval/tasks/kmmlu/kmmlu_maritime_engineering.yaml delete mode 100644 lm_eval/tasks/kmmlu/kmmlu_marketing.yaml delete mode 100644 lm_eval/tasks/kmmlu/kmmlu_materials_engineering.yaml delete mode 100644 lm_eval/tasks/kmmlu/kmmlu_mechanical_engineering.yaml delete mode 100644 lm_eval/tasks/kmmlu/kmmlu_nondestructive_testing.yaml delete mode 100644 lm_eval/tasks/kmmlu/kmmlu_patent.yaml delete mode 100644 lm_eval/tasks/kmmlu/kmmlu_political_science_and_sociology.yaml delete mode 100644 lm_eval/tasks/kmmlu/kmmlu_psychology.yaml delete mode 100644 lm_eval/tasks/kmmlu/kmmlu_public_safety.yaml delete mode 100644 lm_eval/tasks/kmmlu/kmmlu_railway_and_automotive_engineering.yaml delete mode 100644 lm_eval/tasks/kmmlu/kmmlu_real_estate.yaml delete mode 100644 lm_eval/tasks/kmmlu/kmmlu_refrigerating_machinery.yaml delete mode 100644 lm_eval/tasks/kmmlu/kmmlu_social_welfare.yaml delete mode 100644 lm_eval/tasks/kmmlu/kmmlu_taxation.yaml delete mode 100644 lm_eval/tasks/kmmlu/kmmlu_telecommunications_and_wireless_technology.yaml diff --git a/lm_eval/tasks/kmmlu/README.md b/lm_eval/tasks/kmmlu/README.md index 60113013af..7fde78fdaa 100644 --- a/lm_eval/tasks/kmmlu/README.md +++ b/lm_eval/tasks/kmmlu/README.md @@ -2,29 +2,43 @@ ### Paper -Title: `K-MMLU(work in progress) ` -* ongoing project at publishing help/ non-english benchmark +Title: `KMMLU : Measuring Massive Multitask Language Understanding in Korean` -Abstract: `The K-MMLU (Korean-MMLU) is a comprehensive suite designed to evaluate the advanced knowledge and reasoning abilities of large language models (LLMs) within the Korean language and cultural context. This suite encompasses 45 topics, primarily focusing on expert-level subjects. It includes general subjects like Physics and Ecology, and law and political science, alongside specialized fields such as Non-Destructive Training and Maritime Engineering. The datasets are derived from Korean licensing exams, with about 90% of the questions including human accuracy based on the performance of human test-takers in these exams. K-MMLU is segmented into training, testing, and development subsets, with the test subset ranging from a minimum of 100 to a maximum of 1000 questions, totaling 35,000 questions. Additionally, a set of 10 questions is provided as a development set for few-shot exemplar development. At total, K-MMLU consists of 254,334 instances.` +Abstract: `We propose KMMLU, a new Korean benchmark with 35,030 expert-level multiple-choice questions across 45 subjects ranging from humanities to STEM. Unlike previous Korean benchmarks that are translated from existing English benchmarks, KMMLU is collected from original Korean exams, capturing linguistic and cultural aspects of the Korean language. We test 26 publicly available and proprietary LLMs, identifying significant room for improvement. The best publicly available model achieves 50.54% on KMMLU, far below the average human performance of 62.6%. This model was primarily trained for English and Chinese, not Korean. Current LLMs tailored to Korean, such as Polyglot-Ko, perform far worse. Surprisingly, even the most capable proprietary LLMs, e.g., GPT-4 and HyperCLOVA X, achieve 59.95% and 53.40%, respectively. This suggests that further work is needed to improve Korean LLMs, and KMMLU offers the right tool to track this progress. We make our dataset publicly available on the Hugging Face Hub and integrate the benchmark into EleutherAI's Language Model Evaluation Harness.` -Homepage: https://huggingface.co/datasets/HAERAE-HUB/K-MMLU-Preview +Note: lm-eval-harness is using the micro average as the default. To replicate the test results in the paper, take the macro average for the scores evaluated with lm-eval-harness + +Homepage: https://huggingface.co/datasets/HAERAE-HUB/KMMLU ### Citation -``` -We'll be updating this section soon. -``` +@article{son2024kmmlu, + title={KMMLU: Measuring Massive Multitask Language Understanding in Korean}, + author={Guijin Son and Hanwool Lee and Sungdong Kim and Seungone Kim and Niklas Muennighoff and Taekyoon Choi and Cheonbok Park and Kang Min Yoo and Stella Biderman}, + journal={arXiv preprint arXiv:2402.11548}, + year={2024} +} ### Groups and Tasks #### Groups * `kmmlu`: 'All 45 subjects of the KMMLU dataset, evaluated following the methodology in MMLU's original implementation' +* `kmmlu_direct`: 'kmmlu_direct solves questions using a straightforward *generative* multiple-choice question-answering approach' +* `kmmlu_hard`: 'kmmlu_hard comprises difficult questions that at least one proprietary model failed to answer correctly using log-likelihood approach' +* `kmmlu_hard_direct`: 'kmmlu_hard_direct solves questions of kmmlu_hard using direct(generative) approach' +* `kmmlu_hard_cot`: 'kmmlu_hard_cot includes 5-shot of exemplars for chain-of-thought approach' #### Tasks The following tasks evaluate subjects in the KMMLU dataset -- `kmmlu_{subject_english}` +- `kmmlu_direct_{subject_english}` + +The following tasks evaluate subjects in the KMMLU-Hard dataset +- `kmmlu_hard_{subject_english}` +- `kmmlu_hard_cot_{subject_english}` +- `kmmlu_hard_direct_{subject_english}` + ### Checklist diff --git a/lm_eval/tasks/kmmlu/cot_hard/_cot_kmmlu_yaml b/lm_eval/tasks/kmmlu/cot_hard/_cot_kmmlu_yaml new file mode 100644 index 0000000000..6314d2608c --- /dev/null +++ b/lm_eval/tasks/kmmlu/cot_hard/_cot_kmmlu_yaml @@ -0,0 +1,28 @@ +group: + - kmmlu + - kmmlu_hard_cot +dataset_path: HAERAE-HUB/KMMLU-HARD +output_type: generate_until +test_split: test +doc_to_target: "{{['A', 'B', 'C', 'D'][answer-1]}}" +metric_list: + - metric: exact_match + aggregation: mean + higher_is_better: true + ignore_case: true + ignore_punctuation: true +generation_kwargs: + until: + - "질문:" + do_sample: false + max_gen_toks: 2048 + temperature: 0.0 +filter_list: + - name: "get-answer" + filter: + - function: "regex" + regex_pattern: "(?<=정답은)(.*)(?=입니다.)" + regex_pattern: "(?<=정답은)\\s*[(]?(A|B|C|D)[)]?.*(?=입니다.)" + - function: "take_first" +metadata: + version: 2.0 diff --git a/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_accounting.yaml b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_accounting.yaml new file mode 100644 index 0000000000..5e9b90e0e7 --- /dev/null +++ b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_accounting.yaml @@ -0,0 +1,113 @@ +dataset_name: accounting +doc_to_text: '질문: 수정 전 잔액시산표의 차변 합계액은 ₩1,000,000이다. 보험료 미경과액 ₩30,000과 이자수익 미수액 ₩20,000을 + 계상한 후의 수정 후 잔액시산표 차변 합계액은 얼마인가? + + A.₩970,000 + + B.₩990,000 + + C.₩1,020,000 + + D.₩1,050,000 + + 정답: 차근 차근 생각해봅시다. 회계학 관련 정보를 위해 위키피디아를 참조하겠습니다. 주어진 문제는 수정 후 시산표의 합계에 영향을 주는 요소와 + 주지 않는 요소를 구분하고 이해하는 문제입니다. 이 경우, 보험료 미경과액과 이자수익 미수액이 추가되었습니다. 보험료 미경과액은 차변에 계상되어 + 있는 보험료(비용)을 감소 하면서 자산계정인 선급보험료가 동일금액이 차변에 증가하므로 영향을 주지 않습니다. 다음으로 이자수익 미수액 ₩20,000은 + 아직 받지 않은 이자를 의미합니다. 이자미수액은 잔액시산표에서 차변에 기록됩니다. , 원래의 차변 합계액 ₩1,000,000에 이자수익 미수액 + ₩20,000을 더하면, 수정 후의 차변 합계액은 ₩1,020,000이 됩니다. 따라서, 정답은 (C) 입니다. + + + 질문: 제조업을 영위하는 (주)상공이 결산 시 이자비용 미지급분에 대한 거래를 누락하였을 경우 재무제표에 미치는 영향으로 옳은 것은? + + A.매출총이익이 과소계상된다. + + B.영업이익이 과대계상된다. + + C.비유동부채가 과소계상된다. + + D.당기순이익이 과대계상된다. + + 정답: 차근 차근 생각해봅시다. 회계학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 이자비용 미지급분이란, 회사가 이자를 지급해야 하지만 + 아직 지급하지 않은 금액을 말합니다. 이는 기업의 부채로 간주되며, 이를 누락하게 되면 회계상의 문제가 발생할 수 있습니다. (A) 선택지의 매출총이익은 + 판매액에서 제조비용을 뺀 금액으로, 이자비용과는 직접적인 관련이 없습니다. 이자비용 미지급분을 누락하였다고 해서 매출총이익이 과소계상되는 것은 + 아닙니다. (B) 선택지의 영업이익은 매출총이익에서 판매비와 관리비를 뺀 금액입니다. 이자비용은 판매비나 관리비에 포함되지 않으므로, 이자비용 + 미지급분을 누락하였다고 해서 영업이익이 과대계상되는 것은 아닙니다. (C) 선택지의 비유동부채는 장기적으로 변제해야 하는 부채를 말합니다. 이자비용 + 미지급분은 단기적으로 변제해야 하는 부채로 간주될 수 있으나, 이를 누락하게 되면 전체 부채가 과소계상되는 결과를 초래할 수 있습니다. (D) + 선택지의 당기순이익은 수익에서 모든 비용을 뺀 금액입니다. 이자비용 미지급분을 누락하게 되면 이자비용이 과소계상되어 당기순이익이 과대계상되는 결과를 + 초래할 수 있습니다. , 이자비용 미지급분을 누락하였을 경우, 비유동부채와 당기순이익에 영향을 미칠 수 있습니다. 하지만, 주어진 선택지 중에서는 + 비유동부채가 아닌 당기순이익이 과대계상되는 것이 더 정확한 표현일 것입니다. 이는 이자비용이 누락되었을 때 비용이 과소계상되므로 순이익이 과대계상되기 + 때문입니다. 따라서, 정답은 (D) 입니다. + + + 질문: 현금및현금성자산에 대한 설명으로 옳지 않은 것은? + + A.현금성자산은 단기의 현금수요를 충족하기 위한 목적으로 보유한다. + + B.현금성자산으로 분류되기 위해서는 확정된 금액이 현금으로의 전환이 용이하고, 가치변동의 위험이 경미하여야 한다. + + C.취득당시 장기로 분류되었던 국ㆍ공채 중 결산일 현재 만기일이 3개월 이내인 국·공채를 현금성자산으로 분류한다. + + D.상환일이 정해져 있고 취득일로부터 상환일까지 기간이 3개월 이내인 우선주의 경우 현금성자산으로 처리한다. + + 정답: 차근 차근 생각해봅시다. 회계학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 현금성자산은 단기의 현금수요를 충족하기 위한 목적으로 + 보유하는 자산으로, 큰 거래비용 없이 현금으로 전환이 용이하고, 이자율 변동에 따른 가치 변동의 위험이 크지 않은 금융상품으로서, 취득 당시 만기일 + 또는 상환일이 3개월 이내인 것을 말합니다. (A)는 현금성자산의 정의와 일치하므로 옳은 설명입니다. (B)도 현금성자산의 분류 기준을 설명하고 + 있으므로 옳은 설명입니다. (C)의 경우, 취득당시 장기로 분류되었던 국ᆞ공채 중 결산일 현재 만기일이 3개월 이내인 국·공채는 단기금융상품으로 + 분류됩니다. 이 설명은 옳지 않습니다. (D)의 경우, 상환일이 정해져 있고 취득일로부터 상환일까지 기간이 3개월 이내인 우선주의 경우 현금성자산으로 + 처리할 수 있습니다. 이 설명도 옳은 설명입니다. 따라서, 정답은 (C) 입니다. + + + 질문: 금융자산과 금융부채에 속하는 항목으로 바르게 나타낸 것은? + + A.(금융자산) 선급금, (금융부채) 미지급비용 + + B.(금융자산) 미수금, (금융부채) 선수금 + + C.(금융자산) 단기대여금, (금융부채) 장기차입금 + + D.(금융자산) 재고자산, (금융부채) 선수수익 + + 정답: 차근 차근 생각해봅시다. 회계학 관련 정보를 위해 위키피디아를 참조하겠습니다. 금융자산과 금융부채는 기업이 자금을 조달하고 운용하는 과정에서 + 발생하는 자산과 부채를 말합니다. 이 때, 금융자산은 기업이 보유하고 있는 자산 중에서 현금이나 현금성자산으로 전환이 용이하고, 가치변동의 위험이 + 상대적으로 작은 자산을 말합니다. 반면에 금융부채는 기업이 상환해야 할 의무가 있는 부채 중에서 금융기관으로부터 차입한 차입금이나 사채 등을 말합니다. + 각 선택지를 살펴 보겠습니다. (A) 선급금은 상품이나 원재료 등을 매입하기 위해 미리 지급한 금액으로, 금융자산이 아닌 재고자산으로 분류됩니다. + 미지급비용은 이미 발생한 비용 중에서 아직 지급하지 않은 금액으로, 금융부채가 아닌 부채로 분류됩니다. (B) 미수금은 상품이나 제품 등을 판매하고 + 아직 받지 못한 금액으로, 금융자산에 해당됩니다. 선수금은 상품이나 제품 등을 주문받고 미리 받은 금액으로, 금융부채가 아닌 부채로 분류됩니다. + (C) 단기대여금은 상대방에게 대여한 금액 중에서 1년 이내에 회수할 예정인 금액으로, 금융자산에 해당됩니다. 장기차입금은 금융기관으로부터 차입한 + 차입금 중에서 1년 이후에 상환할 예정인 금액으로, 금융부채에 해당됩니다. (D) 재고자산은 기업이 판매를 목적으로 보유하고 있는 상품이나 제품, + 원재료 등을 말합니다. 선수수익은 고객으로부터 미리 받은 수익 중에서 아직 제공하지 않은 용역에 대한 대가로, 부채에 해당됩니다. 따라서, 정답은 + (C) 입니다. + + + 질문: 전기 말에 상품재고액 \560,000을 \650,000으로 잘못 계상한 경우, 당기의 매출원가와 당기순이익에 미치는 영향으로 옳은 것은? + (단, 재고자산 평가는 실지재고조사법을 적용 한다.) + + A.(매출원가) 과대, (당기순이익) 과소 + + B.(매출원가) 과대, (당기순이익) 과대 + + C.(매출원가) 과소, (당기순이익) 과소 + + D.(매출원가) 과소, (당기순이익) 과대 + + 정답: 차근 차근 생각해봅시다. 회계학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 매출원가와 당기순이익에 대해 이해해야 합니다. 매출원가는 + 판매된 상품을 생산하는 데 들어간 비용을 의미하며, 당기순이익은 매출에서 모든 비용을 뺀 순수익을 의미합니다. 상품재고액을 과대 계상한 경우, + 이는 회사가 실제로 보유하고 있는 재고보다 더 많은 재고를 보유하고 있다고 잘못 표시한 것을 의미합니다. 이는 재고자산의 가치를 과대평가한 것이므로, + 이에 따른 비용(매출원가) 역시 과대 계상됩니다. 매출원가가 과대 계상되면, 매출에서 매출원가를 뺀 이익인 당기순이익은 과소 계상됩니다. 왜냐하면 + 매출원가가 더 높아지면 이익은 줄어들기 때문입니다. , 상품재고액을 과대 계상한 경우 매출원가는 과대 계상되고, 당기순이익은 과소 계상됩니다. + ''따라서, 정답은 (A) 입니다. + + + 질문: {{question}} + + A.{{A}} + + B.{{B}} + + C.{{C}} + + D.{{D}} + + 정답: 차근 차근 생각해봅시다. 회계학 관련 정보를 위해 위키피디아를 참조하겠습니다.' +include: _cot_kmmlu_yaml +task: kmmlu_hard_cot_accounting diff --git a/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_agricultural_sciences.yaml b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_agricultural_sciences.yaml new file mode 100644 index 0000000000..9f95350702 --- /dev/null +++ b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_agricultural_sciences.yaml @@ -0,0 +1,113 @@ +dataset_name: agricultural_sciences +doc_to_text: '질문: 지하발아형 종자가 아닌 것은? + + A.콩 + + B.완두 + + C.보리 + + D.옥수수 + + 정답: 차근 차근 생각해봅시다. 농업 과학 관련 정보를 위해 위키피디아를 참조하겠습니다. 지하발아형(상배축신장형) 종자는 배유종자와 무배유종자로 + 나눌 수 있습니다. 배유종자에는 벼, 보리, 밀, 귀리, 옥수수가 포함되며, 무배유종자에는 완두, 잠두, 팥, 상추가 포함됩니다. 하지만 콩은 + 지하발아형 종자가 아니라 지상발아형 종자입니다. 따라서, 정답은 (A) 입니다. + + + 질문: 종자의 습윤저온층적(濕潤低溫層積) 저장 설명으로 가장 적합한 것은? + + A.습한 자루에 3∼6 ℃에서 1∼2주 처리 + + B.습한 모래에 1∼10 ℃에서 3∼4주 처리 + + C.습한 진흙에 2∼9 ℃에서 2∼3주 처리 + + D.습한 짚 속에 6∼10 ℃에서 1∼2주 처리 + + 정답: 차근 차근 생각해봅시다. 농업 과학 관련 정보를 위해 위키피디아를 참조하겠습니다. 종자의 습윤저온층적(濕潤低溫層積)이란, 일정한 기간 동안 + 종자를 습하고 저온의 환경에서 보관하여 종자 내부의 생리적, 생화학적 변화를 일으키는 처리 방법을 말합니다. 이는 종자의 발아를 촉진하거나 동조화시키는 + 데 사용됩니다. 먼저 각 선택지에 대해 검토해보겠습니다. (A) 선택지는 습한 자루에 3∼6 ℃에서 1∼2주 처리하는 방법을 제시하고 있습니다. + 이 방법은 습윤저온층적에 필요한 습도와 저온을 제공할 수 있지만, 종자의 종류에 따라 처리 기간이 충분하지 않을 수 있습니다. (B) 선택지는 + 습한 모래에 1∼10 ℃에서 3∼4주 처리하는 방법을 제시하고 있습니다. 이 방법은 습윤저온층적에 필요한 습도와 저온을 제공하며, 처리 기간도 + 상대적으로 길어 종자의 변화를 촉진시키는 데 충분할 수 있습니다. (C) 선택지는 습한 진흙에 2∼9 ℃에서 2∼3주 처리하는 방법을 제시하고 + 있습니다. 이 방법은 습윤저온층적에 필요한 습도와 저온을 제공하지만, 진흙은 종자에 부적절한 압력을 가하거나 종자를 손상시킬 수 있습니다. (D) + 선택지는 습한 짚 속에 6∼10 ℃에서 1∼2주 처리하는 방법을 제시하고 있습니다. 이 방법은 습윤저온층적에 필요한 습도를 제공할 수 있지만, + 온도 범위가 상대적으로 높고 처리 기간이 짧아 종자의 변화를 촉진시키는 데 충분하지 않을 수 있습니다. , 종자의 습윤저온층적 저장 설명으로 + 가장 적합한 것은 습한 모래에 1∼10 ℃에서 3∼4주 처리하는 방법인 (B) 선택지일 것으로 보입니다. 이 방법은 습윤저온층적에 필요한 조건을 + 충족시키며, 처리 기간도 종자의 변화를 촉진시키는 데 충분합니다. 따라서, 정답은 (B) 입니다. + + + 질문: 옥수수 복교잡종의 특징이 아닌 것은? + + A.종자값이 저렴하다. + + B.여러 환경조건에 대한 완충능력이 있다. + + C.개화기간이 길어 다른 교잡종보다 수분기회가 많아 이삭이 충실해진다. + + D.불량 환경조건일 때 종자의 균일도가 단교잡종이나 삼원교잡종 종자보다 낮다. + + 정답: 차근 차근 생각해봅시다. 농업 과학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 옥수수 복교잡종의 특징에 대해 알아보겠습니다. + 복교잡종은 두 개의 서로 다른 교잡종을 교배하여 만든 품종으로, 다양한 환경 조건에 대한 완충 능력이 있고, 개화 기간이 길어 다른 교잡종보다 + 수분 기회가 많아 이삭이 충실해지는 특징이 있습니다. 선택지를 하나씩 살펴보겠습니다. (A) 종자값이 저렴하다. - 복교잡종은 두 개의 교잡종을 + 교배하여 만들기 때문에, 단교잡종이나 삼원교잡종에 비해 종자값이 저렴할 수 있습니다. (B) 여러 환경조건에 대한 완충능력이 있다. - 복교잡종은 + 다양한 환경 조건에 대한 완충 능력이 있어, 불량 환경 조건에서도 비교적 높은 생산량을 유지할 수 있습니다. (C) 개화기간이 길어 다른 교잡종보다 + 수분기회가 많아 이삭이 충실해진다. - 복교잡종은 개화 기간이 길어 다른 교잡종보다 수분 기회가 많기 때문에 이삭이 충실해지는 특징이 있습니다. + (D) 불량 환경조건일 때 종자의 균일도가 단교잡종이나 삼원교잡종 종자보다 낮다. - 불량 환경 조건에서는 복교잡종의 종자 균일도가 단교잡종이나 + 삼원교잡종 종자보다 낮을 수 있습니다. 따라서, 정답은 (D) 입니다. + + + 질문: 완두 종자를 AㆍB 창고에 보관한 후 전기전도도 조사를 실시한 결과, A창고에 보관한 완 두 종자의 침출액이 더 많았다. 종자퇴화는 어느 + 것이 더 진전되었는가? + + A.OPTION창고 완두 종자가 더 퇴화되었다. + + B.OPTION창고 완두 종자가 더 퇴화되었다. + + C.OPTION창고와 OPTION창고 완두 종자의 퇴화는 똑같다. + + D.비교할 수 없다. + + 정답: 차근 차근 생각해봅시다. 농업 과학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 완두 종자의 퇴화와 전기전도도 조사의 관계를 이해해야 + 합니다. 종자의 퇴화는 씨앗의 생명력이나 발아력이 감소하는 현상을 말합니다. 이는 보관 상태, 온도, 습도 등 여러 요인에 의해 영향을 받습니다. + 전기전도도 조사는 종자의 퇴화 정도를 판단하는 데 널리 사용되는 방법 중 하나입니다. 이 방법은 종자에서 침출된 이온의 양을 측정하여 종자의 생체막 + 손상 정도를 판단하는 방법입니다. 즉, 전기전도도가 높으면 종자에서 많은 양의 이온이 침출되었음을 의미하며, 이는 종자의 생체막이 손상되었음을 + 나타냅니다. , A창고에 보관한 완두 종자의 침출액이 더 많았다는 것은 전기전도도가 높았음을 의미하며, 이는 A창고의 완두 종자가 더 많은 생체막 + 손상을 입었음을 나타냅니다. 이는 A창고의 완두 종자가 더 많이 퇴화되었음을 의미합니다. 따라서, 정답은 (A) 입니다. + + + 질문: 우량종자를 생산하는 방법으로 잘못된 것은? + + A.격리재배를 통하여 이종의 혼입을 막는다. + + B.무병지에서 채종한다. + + C.감자의 바이러스 병을 막기 위해 평지에서 채종한다. + + D.벼 종자는 평야지보다 분지에서 생산된 것이 임실이 좋아서 종자가치가 높다. + + 정답: 차근 차근 생각해봅시다. 농업 과학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저 각 선택지에 대해 이해를 해보겠습니다. (A) 선택지는 + 우량종자를 생산하는 방법 중 하나로 격리재배를 통해 이종의 혼입을 막는 방법을 말합니다. 이는 종자의 품질을 보장하기 위해 필요한 과정이므로 올바른 + 방법입니다. (B) 선택지는 무병지에서 채종하는 방법을 말합니다. 무병지는 병원균이 없는 땅을 의미하며, 병원균이 없는 상태에서 채종을 하면 병에 + 강한 우량종자를 얻을 수 있으므로 이 역시 올바른 방법입니다. (C) 선택지는 감자의 바이러스 병을 막기 위해 평지에서 채종한다는 내용입니다. + 감자는 바이러스 병에 취약한 식물로 알려져 있습니다. 하지만 그것이 평지에서 채종을 해야 한다는 것과 직접적인 연관성은 없습니다. 감자의 바이러스 + 병 예방은 주로 바이러스 자체를 통제하거나, 바이러스에 강한 품종을 선택하는 것 등이 중요하다고 알려져 있습니다. (D) 선택지는 벼 종자는 평야지보다 + 분지에서 생산된 것이 임실이 좋아서 종자가치가 높다는 내용입니다. 벼는 물을 많이 필요로 하는 식물로, 일반적으로 물이 잘 공급되는 분지에서 재배되는 + 것이 좋다고 알려져 있습니다. 이 역시 올바른 방법입니다. , 각 선택지를 분석한 결과 (C) 선택지인 ''감자의 바이러스 병을 막기 위해 + 평지에서 채종한다.''가 가장 잘못된 방법으로 보입니다. 이는 감자의 바이러스 병 예방과 평지에서의 채종 사이에 직접적인 연관성이 없기 때문입니다. + 따라서, 정답은 (C) 입니다. + + + 질문: {{question}} + + A.{{A}} + + B.{{B}} + + C.{{C}} + + D.{{D}} + + 정답: 차근 차근 생각해봅시다. 농업 과학 관련 정보를 위해 위키피디아를 참조하겠습니다.' +include: _cot_kmmlu_yaml +task: kmmlu_hard_cot_agricultural_sciences diff --git a/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_aviation_engineering_and_maintenance.yaml b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_aviation_engineering_and_maintenance.yaml new file mode 100644 index 0000000000..e7e9c089c9 --- /dev/null +++ b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_aviation_engineering_and_maintenance.yaml @@ -0,0 +1,120 @@ +dataset_name: aviation_engineering_and_maintenance +doc_to_text: '질문: 수평 등속도로 비행하는 항공기에 작용하는 공기력에 대한 설명으로 옳은것은? + + A.추력이 항력보다 크다. + + B.추력과 항력은 같다. + + C.양력이 비행기의 무게보다 크다. + + D.양력이 비행기의 무게보다 작다. + + 정답: 차근 차근 생각해봅시다. 항공 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 항공기가 수평 등속도로 비행하려면 모든 힘이 균형을 + 이루어야 합니다. 이는 뉴턴의 제1법칙, 즉 ''힘이 작용하지 않는 물체는 휴면 상태에서 계속 휴면 상태를 유지하거나, 균일한 속도로 직선 운동을 + 계속한다''에 따릅니다. , 항공기가 수평 등속도로 비행하려면 다음 두 가지 조건이 충족되어야 합니다. 1. 추력과 항력이 같아야 합니다. 추력은 + 엔진에서 나오는 힘으로 항공기를 전진시키고, 항력은 항공기가 공기를 통과하면서 겪는 저항입니다. 이 두 힘이 균형을 이루어야 항공기는 직선으로 + 일정한 속도로 비행할 수 있습니다. 2. 양력과 무게가 같아야 합니다. 양력은 항공기의 날개가 생성하는 힘으로 위로 작용하고, 무게는 중력으로 + 아래로 작용합니다. 이 두 힘이 균형을 이루어야 항공기는 수평 비행을 유지할 수 있습니다. 선택지를 살펴보면, (A). 추력이 항력보다 크다. + - 이 경우, 항공기는 가속하게 됩니다. , 이는 수평 등속도 비행과는 맞지 않습니다. (B). 추력과 항력은 같다. - 이는 수평 등속도 비행에 + 필요한 조건 중 하나입니다. (C). 양력이 비행기의 무게보다 크다. - 이 경우, 항공기는 상승하게 됩니다. , 이는 수평 등속도 비행과는 + 맞지 않습니다. (D). 양력이 비행기의 무게보다 작다. - 이 경우, 항공기는 하강하게 됩니다. , 이는 수평 등속도 비행과는 맞지 않습니다. + 따라서, 정답은 (B) 입니다. + + + 질문: 헬리콥터 비행시 역풍지역이 가장 커지게 되는 비행 상태는? + + A.정지비행 + + B.상승가속비행 + + C.자동회전비행 + + D.전진가속비행 + + 정답: 차근 차근 생각해봅시다. 항공 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 헬리콥터의 비행 상태는 주로 로터의 회전과 헬리콥터의 + 속도에 따라 결정됩니다. 헬리콥터의 역풍지역은 주로 로터 블레이드가 후진하는 영역을 말하며, 이 영역은 헬리콥터의 속도에 크게 영향을 받습니다. + (A) 정지비행에서는 헬리콥터가 고정된 위치에서 공중에 머무르는 상태를 말합니다. 이 상태에서는 로터 블레이드가 공기를 밀어내어 상승력을 생성하며, + 헬리콥터는 정지 상태에 있기 때문에 전방으로의 속도는 없습니다. 역풍지역은 상대적으로 작을 것입니다. (B) 상승가속비행에서는 헬리콥터가 위로 + 상승하면서 동시에 속도를 높이는 상태를 말합니다. 이 상태에서는 로터 블레이드가 공기를 밀어내어 상승력을 생성하고, 동시에 전방으로 가속하면서 + 속도를 높입니다. 역풍지역은 증가할 것입니다. (C) 자동회전비행에서는 엔진의 동력을 잃었을 때 로터 블레이드가 자유회전하면서 헬리콥터를 지탱하는 + 상태를 말합니다. 이 상태에서는 로터 블레이드의 회전이 공기 저항에 의해 유지되므로 역풍지역은 상대적으로 작을 것입니다. (D) 전진가속비행에서는 + 헬리콥터가 전방으로 속도를 높이는 상태를 말합니다. 이 상태에서는 헬리콥터의 전진 속도가 증가하므로, 로터 블레이드가 후진하는 영역인 역풍지역은 + 더욱 커질 것입니다. 이는 로터 블레이드의 한쪽이 전진하고 다른 한쪽이 후진하면서 생기는 디스크의 회전에 따른 현상입니다. 전진가속비행 상태에서 + 역풍지역이 가장 커질 것으로 예상됩니다. 따라서, 정답은 (D) 입니다. + + + 질문: A,B,C 3대의 비행기가 각각 10000m, 5000m, 1000m 의 고도에서 동일한 속도로 비행하고 있다. 각 비행기의 마하계가 지시하는 + 마하수의 크기를 비교한 것으로 옳은 것은? + + A.OPTION < OPTION < OPTION + + B.OPTION > OPTION > OPTION + + C.OPTION > OPTION > OPTION + + D.OPTION = OPTION = OPTION + + 정답: 차근 차근 생각해봅시다. 항공 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 마하수는 속도를 음속으로 나눈 값으로, 비행기의 속도를 + 측정하는 데 사용되는 단위입니다. 그러나 마하수는 고도에 따라 변하게 됩니다. 왜냐하면 대기의 밀도가 고도에 따라 변하기 때문입니다. 고도가 높아질수록 + 대기의 밀도가 낮아지고, 음속이 줄어들게 됩니다. 이로 인해 동일한 속도로 비행하는 비행기의 마하수는 고도가 높아질수록 커지게 됩니다. 즉, + 고도가 높은 A 비행기의 마하수가 가장 크고, 그 다음은 B, 마지막으로 가장 낮은 고도에서 비행하는 C 비행기의 마하수가 가장 작을 것입니다. + 따라서, 정답은 (B) 입니다. + + + 질문: 비행기 날개의 양력에 관한 설명으로 틀린 것은? + + A.양력은 날개 면적에 비례한다. + + B.양력은 유체의 밀도에 비례한다. + + C.양력은 날개의 무게에 비례한다. + + D.양력은 비행기 속도제곱에 비례한다. + + 정답: 차근 차근 생각해봅시다. 항공 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 양력은 비행기가 하늘을 날 수 있게 하는 중요한 + 힘입니다. 양력은 베르누이의 원리에 기반하여 생성되며, 이는 유체가 빠르게 움직일수록 그 유체의 압력이 낮아지는 원리를 설명합니다. 이 원리에 + 따르면, 비행기의 날개는 위쪽 표면(상부)이 아래쪽 표면(하부)보다 길게 설계되어 있어, 공기가 상부를 통과하는데 더 많은 시간이 소요됩니다. , + 날개 상부의 공기 압력은 날개 하부의 공기 압력보다 낮아지며, 이 차이로 인해 양력이 발생합니다. 이제 선택지를 하나씩 살펴보겠습니다. (A) + 양력은 날개 면적에 비례한다: 이는 맞는 말입니다. 날개의 면적이 클수록 더 많은 공기를 밀어내고, 더 큰 양력을 생성할 수 있습니다. (B) + 양력은 유체의 밀도에 비례한다: 이 역시 맞는 말입니다. 유체(여기서는 공기)의 밀도가 높을수록, 날개는 더 많은 양력을 생성할 수 있습니다. + (D) 양력은 비행기 속도제곱에 비례한다: 이는 맞는 말입니다. 양력은 비행기의 속도에 비례하는 것이 아니라, 비행기의 속도 제곱에 비례합니다. + 이는 양력 공식 L = 0.5 * Cl * p * V^2 * A에서 알 수 있습니다. 여기서 L은 양력, Cl은 리프트 계수, p는 공기 밀도, + V는 속도, A는 날개 면적입니다. (C) 양력은 날개의 무게에 비례한다: 이는 틀린 말입니다. 양력은 비행기의 무게에 직접적으로 비례하지 않습니다. + 사실, 양력은 비행기를 공중에 띄우기 위해 반드시 비행기의 무게를 초과해야 합니다. , 양력은 날개의 무게에 비례한다는 말은 틀린 말입니다. + 따라서, 정답은 (C) 입니다. + + + 질문: 항공기 날개에 쳐든각을 주는 주된 목적은? + + A.선회성능을 좋게 하기 위해서 + + B.날개저항을 적게 하기 위해서 + + C.날개끝 실속을 방지하기 위해서 + + D.옆놀이의 안정성 향상을 위해서 + + 정답: 차근 차근 생각해봅시다. 항공 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 항공기 날개에 쳐든각을 주는 것을 ''날개 트위스트''라고 + 부릅니다. 날개 트위스트는 항공기의 날개가 루트(날개의 가장 안쪽 부분)에서 팁(날개의 가장 바깥쪽 부분)까지 각도가 점차 변하는 것을 의미합니다. + 이는 주로 항공기의 안정성을 높이기 위해 사용되며, 특히 고속에서의 안정성을 향상시키는 데 도움이 됩니다. 선택지를 보면, (A) 선회성능을 좋게 + 하기 위해서는 날개의 트위스트와는 직접적인 관련이 없습니다. 선회성능은 주로 항공기의 조종면과 엔진 출력 등에 의해 결정됩니다. (B) 날개저항을 + 적게 하기 위해서는 트위스트가 직접적으로 영향을 주지 않습니다. 저항은 주로 항공기의 형상, 크기, 속도 등에 의해 결정되며, 날개의 트위스트는 + 이러한 요소들과는 별개의 요소입니다. (C) 날개끝 실속을 방지하기 위해서는 트위스트가 일부 도움이 될 수 있지만, 이는 주된 목적이 아닙니다. + 날개끝 실속은 주로 날개의 설계와 관련이 있으며, 트위스트는 이를 완전히 방지할 수 없습니다. (D) 옆놀이의 안정성 향상을 위해서는 트위스트가 + 중요한 역할을 합니다. 트위스트는 날개 팁 부분의 각도를 조절하여, 항공기가 고속에서도 안정적으로 비행할 수 있도록 돕습니다. 따라서, 정답은 + (D) 입니다. + + + 질문: {{question}} + + A.{{A}} + + B.{{B}} + + C.{{C}} + + D.{{D}} + + 정답: 차근 차근 생각해봅시다. 항공 공학 관련 정보를 위해 위키피디아를 참조하겠습니다.' +include: _cot_kmmlu_yaml +task: kmmlu_hard_cot_aviation_engineering_and_maintenance diff --git a/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_biology.yaml b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_biology.yaml new file mode 100644 index 0000000000..12cba9a7a6 --- /dev/null +++ b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_biology.yaml @@ -0,0 +1,112 @@ +dataset_name: biology +doc_to_text: '질문: 포도당의 특성이 아닌 것은? + + A.환원당 + + B.알도오스 + + C.헥소오스 + + D.퓨라노오스 + + 정답: 차근 차근 생각해봅시다. 생물학 관련 정보를 위해 위키피디아를 참조하겠습니다. 포도당은 가장 기본적인 단당류로, 생물학적 에너지의 주요한 + 원천입니다. (A) 환원당: 포도당은 환원당입니다. 환원당은 카르보닐 그룹이 있는 당류로, 이 카르보닐 그룹이 다른 화합물을 환원할 수 있는 특성을 + 가지고 있습니다. 포도당은 이러한 환원 반응을 일으킬 수 있으므로 환원당입니다. (B) 알도오스: 포도당은 알도오스입니다. 알도오스는 알데히드 + 그룹(-CHO)을 가진 당류를 의미합니다. 포도당은 이 알데히드 그룹을 가지고 있으므로 알도오스입니다. (C) 헥소오스: 포도당은 헥소오스입니다. + 헥소오스는 6개의 탄소 원자를 가진 당류를 의미합니다. 포도당은 6개의 탄소 원자를 가지고 있으므로 헥소오스입니다. (D) 퓨라노오스: 이것은 + 포도당의 특성이 아닙니다. 퓨라노오스는 5원 고리 구조를 가진 당류를 의미합니다. 포도당은 헥소오스 즉, 6원 고리 구조를 가지는 것이 일반적입니다. , + 포도당은 퓨라노오스가 아닙니다. 따라서, 정답은 (D) 입니다. + + + 질문: 미생물을 보존하는 방법 중 승화에 의한 수분이 제거되는 원리를 이용하는 것은? + + A.현탄액법 + + B.동결보존법 + + C.동결건조법 + + D.액체질소 보존법 + + 정답: 차근 차근 생각해봅시다. 생물학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 승화에 대해 알아보겠습니다. 승화는 물질이 고체 상태에서 + 기체 상태로 변화하는 것을 말합니다. 이는 수분이 제거되는 원리를 사용하는 방법 중 하나입니다. (A). 현탄액법은 미생물을 보존하는 방법 중 + 하나로, 미생물을 현탄액에 담가 보존하는 방법입니다. 이 방법은 승화의 원리를 사용하지 않습니다. (B). 동결보존법은 미생물을 극저온에서 보존하는 + 방법입니다. 이 방법은 미생물을 액체 질소 등의 극저온 환경에 노출시켜 보존하는 방법으로, 승화의 원리를 사용하지 않습니다. (C). 동결건조법은 + 미생물을 빠르게 동결한 후, 진공 상태에서 물을 제거하여 보존하는 방법입니다. 이 방법은 승화의 원리를 사용하여 물을 제거합니다. 동결된 미생물에서 + 물이 직접 기체 상태로 변화하게 되는데, 이것이 바로 승화입니다. (D). 액체질소 보존법은 미생물을 액체 질소에서 보존하는 방법입니다. 이 방법은 + 극저온에서 미생물을 보존하는 방법으로, 승화의 원리를 사용하지 않습니다. , 승화에 의한 수분이 제거되는 원리를 이용하는 미생물 보존 방법은 + 동결건조법입니다. 따라서, 정답은 (C) 입니다. + + + 질문: 세포가 한번 분열하는데 30분이 걸린다면, 1개의 세포가 2048개로 분열하는데 걸리는 시간은? (단, 세포는 죽지 않는다고 가정한다.) + + A.4시간 30분 + + B.5시간 + + C.5시간 30분 + + D.6시간 + + 정답: 차근 차근 생각해봅시다. 생물학 관련 정보를 위해 위키피디아를 참조하겠습니다. 세포가 분열하는데 30분이 걸린다는 것은, 1개의 세포가 + 2개로 분열하는데 30분이 필요하다는 것을 의미합니다. 이런 패턴이 계속된다면, 세포의 수는 2의 지수 형태로 증가하게 됩니다. 즉, 1, 2, + 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048 순으로 증가하게 됩니다. 이러한 증가 방식을 보면, 세포가 처음 + 1개에서 2개로 분열하는데 30분이 걸리고, 그 다음 2개에서 4개로 분열하는데 추가로 30분이 걸립니다. 이런 식으로 세포의 수가 2배로 증가할 + 때마다 30분씩 추가로 걸립니다. , 1개의 세포가 2048개로 분열하는데 걸리는 시간을 계산하려면, 2048이 2의 몇 승인지 알아내면 됩니다. + 2048은 2의 11승이므로, 11번의 분열이 필요하다는 것을 알 수 있습니다. 각 분열이 30분씩 걸리므로, 총 시간은 11 * 30 = 330분이 + 됩니다. 330분을 시간과 분으로 변환하면, 5시간 30분이 됩니다. 따라서, 정답은 (C) 입니다. + + + 질문: 10-6 N NaOH 수용액의 pH는? + + A.8 + + B.10 + + C.12 + + D.14 + + 정답: 차근 차근 생각해봅시다. 생물학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, NaOH는 강염기로 알려져 있습니다. 강염기는 수용액에서 + 완전히 이온화되어 수산화 이온(OH-)을 생성합니다. NaOH의 농도가 pH에 직접적인 영향을 미칩니다. pH는 아래의 공식을 사용하여 계산됩니다. + pH = -log[H+] 여기서 [H+]는 수산화 이온의 농도입니다. 그러나 우리는 NaOH의 농도를 알고 있으며, 이는 수산화 이온의 농도와 + 동일합니다. 우리는 이를 pOH로 변환해야 합니다. pOH는 아래의 공식을 사용하여 계산됩니다. pOH = -log[OH-] 여기서 [OH-]는 + 수산화 이온의 농도입니다. 주어진 문제에서 NaOH의 농도는 10^-6 N입니다. 이것을 pOH 공식에 대입하면, pOH = -log(10^-6) + = 6 이를 통해 알 수 있는 것은, 이 수용액의 pOH는 6이라는 것입니다. 그러나 우리는 pH를 찾고 있습니다. pH와 pOH는 다음과 같은 + 관계를 가지고 있습니다. pH + pOH = 14 pH는 14 - pOH = 14 - 6 = 8입니다. 따라서, 정답은 (A) 입니다. + + + 질문: 세포막의 안정성을 유지하기 위하여 고농도의 수소이온을 필요로 하며 중성 pH에서는 세포막이 파괴되어 성장할 수 없는 미생물은? + + A.절대호산성 미생물 + + B.통성호산성 미생물 + + C.통성호염성 미생물 + + D.절대호염성 미생물 + + 정답: 차근 차근 생각해봅시다. 생물학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 각 선택지에 대한 이해가 필요합니다. (A). 절대호산성 + 미생물: 이들은 극도의 산성 환경에서만 생존할 수 있는 미생물입니다. 즉, 중성의 환경에서 전혀 생육이 불가능합니다. (B). 통성호산성 미생물: + 이들은 산성 환경에서 성장하지만, 중성 또는 약 알칼리성 환경에서도 성장할 수 있는 미생물입니다. (C). 통성호염성 미생물: 이들은 염분이 많은 + 환경에서 성장하지만, 염분이 적은 환경에서도 성장할 수 있는 미생물입니다. (D). 절대호염성 미생물: 이들은 염분이 많은 환경에서만 성장할 수 + 있는 미생물입니다. 질문에서는 세포막의 안정성을 유지하기 위해 고농도의 수소이온이 필요하며, 중성 pH에서는 세포막이 파괴되어 성장할 수 없는 + 미생물에 대해 묻고 있습니다. 수소 이온의 농도는 pH와 관련이 있습니다. pH가 낮을수록 수소 이온의 농도가 높아지며, 이는 산성 환경을 의미합니다. , + 고농도의 수소 이온을 필요로 하는 미생물은 산성 환경에서 성장하는 미생물일 것입니다. 또한, 중성 pH에서 세포막이 파괴되어 성장할 수 없다는 + 점을 고려하면, 이 미생물은 중성 또는 알칼리성 환경에서는 성장할 수 없어야 합니다. 이러한 조건을 충족하는 미생물은 절대호산성 미생물입니다. + 절대호산성 미생물은 극도로 산성 환경에서만 생존할 수 있으며, 중성 또는 알칼리성 환경에서는 성장할 수 없습니다. 따라서, 정답은 (A) 입니다. + + + 질문: {{question}} + + A.{{A}} + + B.{{B}} + + C.{{C}} + + D.{{D}} + + 정답: 차근 차근 생각해봅시다. 생물학 관련 정보를 위해 위키피디아를 참조하겠습니다.' +include: _cot_kmmlu_yaml +task: kmmlu_hard_cot_biology diff --git a/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_chemical_engineering.yaml b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_chemical_engineering.yaml new file mode 100644 index 0000000000..504517ea79 --- /dev/null +++ b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_chemical_engineering.yaml @@ -0,0 +1,121 @@ +dataset_name: chemical_engineering +doc_to_text: '질문: 이상기체의 내부에너지에 대한 설명으로 옳은 것은? + + A.온도만의 함수이다. + + B.압력만의 함수이다. + + C.압력과 온도의 함수이다. + + D.압력이나 온도의 함수가 아니다. + + 정답: 차근 차근 생각해봅시다. 화학 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 이상기체의 내부에너지는 이상기체의 성질을 나타내는 중요한 + 요소 중 하나입니다. 이상기체는 기체 분자들 사이의 상호작용을 무시하고 분자들이 차지하는 부피를 무시하는 가정하에 만들어진 기체 모델입니다. 이 + 모델에서 기체의 내부에너지는 온도에만 의존한다고 알려져 있습니다. 선택지 (A)는 이상기체의 내부에너지가 온도만의 함수라는 내용으로, 이는 이상기체의 + 성질을 정확하게 반영하고 있습니다. 이상기체에서는 분자들 사이의 상호작용이 없으므로 압력은 내부에너지에 영향을 미치지 않습니다. 선택지 (B)는 + 이상기체의 내부에너지가 압력만의 함수라는 내용으로, 이는 이상기체의 성질을 잘못 이해한 것입니다. 이상기체에서는 분자들 사이의 상호작용이 없으므로 + 압력은 내부에너지에 영향을 미치지 않습니다. 선택지 (C)는 이상기체의 내부에너지가 압력과 온도의 함수라는 내용으로, 이 역시 이상기체의 성질을 + 잘못 이해한 것입니다. 이상기체에서는 분자들 사이의 상호작용이 없으므로 압력은 내부에너지에 영향을 미치지 않습니다. 선택지 (D)는 이상기체의 + 내부에너지가 압력이나 온도의 함수가 아니라는 내용으로, 이는 이상기체의 성질에 대한 잘못된 이해를 반영하고 있습니다. 이상기체의 내부에너지는 온도에만 + 의존합니다. 따라서, 정답은 (A) 입니다. + + + 질문: 기체가 단열 팽창한다면 엔트로피는 어떻게 되는가? + + A.감소 또는 불변 + + B.증가 또는 불변 + + C.불변 + + D.증가와 감소를 반복 + + 정답: 차근 차근 생각해봅시다. 화학 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 기체의 단열 팽창에 대해 생각해보면, 단열 팽창은 외부와의 + 열 교환 없이 기체가 팽창하는 것을 의미합니다. 이러한 과정에서 기체의 엔트로피는 어떻게 될까요? 먼저 엔트로피의 개념을 이해해야 합니다. 엔트로피는 + 물질의 무질서함을 나타내는 물리량으로, 시스템의 상태가 더 많은 방향으로 분산될 수록 엔트로피는 증가합니다. 이런 관점에서 보면, 기체가 단열 + 팽창하면 기체 분자들이 차지하는 공간이 더 커지므로 더 많은 상태를 가질 수 있게 되어 엔트로피가 증가할 것입니다. 또한, 열역학의 두 번째 법칙에 + 따르면, 고립된 시스템의 엔트로피는 항상 증가하거나 일정하게 유지됩니다. 단열 팽창 과정에서는 외부와의 열 교환 없이 일어나므로 이 과정을 고립된 + 시스템으로 볼 수 있습니다. 이 경우 엔트로피는 증가하거나 일정하게 유지될 것입니다. 이를 바탕으로 선택지를 보면, (B) 증가 또는 불변이 + 가장 적절한 답변으로 보입니다. 따라서, 정답은 (B) 입니다. + + + 질문: 100기압의 이상기체가 들어 있는 탱크에 수렴노즐(convergent nozzle)을 연결하여 기체를 가장 단시간에 뽑아내려고 한다. 제2탱크의 + 최대 허용압력은 약 몇 기압인가? (단, 비열비는 1.3 이다.) + + A.55 + + B.77 + + C.90 + + D.100 + + 정답: 차근 차근 생각해봅시다. 화학 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 이 문제는 이상기체가 수렴노즐을 통해 빠져나갈 때의 허용압력을 + 묻는 문제입니다. 이를 계산하기 위해서는 수렴노즐을 통해 이상기체가 흐를 때의 기체 동력학에 대한 이해가 필요합니다. 기본적으로, 이상기체가 수렴노즐을 + 통해 흐를 때, 노즐의 출구에서의 압력은 주변 압력에 도달할 때까지 계속 감소합니다. 이 때의 압력 감소율은 기체의 비열비에 의해 결정됩니다. + 문제에서 주어진 비열비는 1.3이므로, 이를 이용하여 계산할 수 있습니다. 이상기체의 동력학에서, 수렴노즐을 통해 기체가 흐를 때의 압력비는 다음과 + 같이 주어집니다: P2/P1 = (2/(n+1))^(n/(n-1)) 여기서 P1은 초기 압력 (100기압), P2는 최종 압력 (제2탱크의 최대 + 허용압력), n은 비열비 (1.3)입니다. 이 식을 이용하여 P2를 계산하면 다음과 같습니다: P2 = P1 * (2/(n+1))^(n/(n-1)) , + 계산 결과를 얻기 위해 주어진 값을 대입해보겠습니다. P2 = 100 * (2/(1.3+1))^(1.3/(1.3-1)) 이를 계산하면, P2의 + 값은 약 54.6가 나오는데, 이는 선택지 중에서 가장 가까운 55에 해당합니다. 제2탱크의 최대 허용압력은 약 55기압이 됩니다. 따라서, + 정답은 (A) 입니다. + + + 질문: 성분1과 성분2가 기-액 평형을 이루는 계에 대하여 라울(Raoult)의 법칙을 만족하는 기포점 압력 계산을 수행하였다. 계산결과에 대한 + 설명 중 틀린 것은? + + A.기포점 압력계산으로 P-x-y 선도를 나타낼 수 있다. + + B.기포점 압력 계산 결과에서 기상의 조성선은 직선이다. + + C.성분 1의 조성이 1 일 때의 압력은 성분 1의 증기압이다. + + D.공비점의 형성을 나타낼 수 없다. + + 정답: 차근 차근 생각해봅시다. 화학 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 라울의 법칙에 대해 알아보겠습니다. 라울의 법칙은 + 이상 기체에서의 부분 압력을 설명하는 법칙으로, 이는 순수 액체의 증기압과 그 액체의 몰 분율에 비례한다고 합니다. 이를 기반으로 각 선택지를 + 살펴보겠습니다. (A) 기포점 압력계산으로 P-x-y 선도를 나타낼 수 있다. P-x-y 선도는 이성분 혼합물의 기-액 평형을 그래프로 나타낸 + 것입니다. x와 y는 각각 액상과 기상의 몰 분율을, P는 총압을 나타냅니다. 라울의 법칙을 이용하면 이러한 P-x-y 선도를 그릴 수 있습니다. + (B) 기포점 압력 계산 결과에서 기상의 조성선은 직선이다. 라울의 법칙에 따르면, 기상의 조성선은 직선이 아닌 곡선 형태를 보입니다. 이 + 설명은 잘못되었습니다. (C) 성분 1의 조성이 1 일 때의 압력은 성분 1의 증기압이다. 이 설명은 맞습니다. 라울의 법칙에 따르면, 성분의 + 조성이 1, 즉 순수한 성분일 때 그 성분의 압력은 그 성분의 증기압과 같습니다. (D) 공비점의 형성을 나타낼 수 없다. 공비점은 두 성분이 + 혼합되어 있을 때, 특정 조건에서 기상과 액상의 조성이 같아지는 점을 말합니다. 라울의 법칙을 이용하면 이러한 공비점을 나타낼 수 있습니다. 따라서, + 정답은 (B) 입니다. + + + 질문: 정압열용량 Cp는 7/2R이고 정적열용량 Cv는 5/2R인 1몰의 이상기체가 압력 10bar, 부피 0.05m3에서 압력 1bar로 정용과정을 + 거쳐 변화할 때 기계적인 가역과정으로 가정하면 이 계에 부가된 열량 Q와 이 계가 한 일 W는 각각 얼마인가? + + A.Q=-11250J, W=0 + + B.Q=-15750J, W=0 + + C.Q=0, W=-11250J + + D.Q=0, W=-15750J + + 정답: 차근 차근 생각해봅시다. 화학 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 이상기체의 정용과정에서는 부피가 일정하므로, 열량 Q는 + 계가 한 일 W와 동일하게 됩니다. 이는 열역학의 제1법칙에 따른 것입니다. 이상기체의 정용과정에서 열량 Q는 Cv(T2-T1)이며, 여기서 Cv는 + 정적열용량, T1과 T2는 각각 초기와 최종 온도입니다. 이상기체방정식 PV=nRT를 이용하여 초기 온도 T1을 구할 수 있습니다. 여기서 P는 + 압력, V는 부피, n은 몰수, R은 기체상수입니다. 초기 상태에서 압력 P1은 10bar, 부피 V는 0.05m3, 몰수 n은 1mol, 기체상수 + R은 8.314J/(mol·K)입니다. T1 = P1V/nR = (10×10^5 Pa)(0.05m^3)/(1mol)(8.314J/(mol·K)) + = 6015K입니다. 최종 상태에서 압력 P2는 1bar이므로, 이상기체방정식을 이용하여 최종 온도 T2를 구하면, T2 = P2V/nR = (1×10^5 + Pa)(0.05m^3)/(1mol)(8.314J/(mol·K)) = 601.5K입니다. 열량 Q는 Cv(T2-T1) = (5/2R)(T2-T1) + = (5/2)(8.314J/(mol·K))(601.5K - 6015K) = -11250J입니다. 기계적인 가역과정에서 이상기체가 한 일 W는 -P1Vln(P2/P1)로 + 주어지며, 이때 ln은 자연로그를 의미합니다. 여기서 P1은 초기 압력, P2는 최종 압력, V는 부피입니다. W = -P1Vln(P2/P1) + = -(10×10^5 Pa)(0.05m^3)ln((1×10^5 Pa)/(10×10^5 Pa)) = 0입니다. 따라서, 정답은 (A) 입니다. + + + 질문: {{question}} + + A.{{A}} + + B.{{B}} + + C.{{C}} + + D.{{D}} + + 정답: 차근 차근 생각해봅시다. 화학 공학 관련 정보를 위해 위키피디아를 참조하겠습니다.' +include: _cot_kmmlu_yaml +task: kmmlu_hard_cot_chemical_engineering diff --git a/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_chemistry.yaml b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_chemistry.yaml new file mode 100644 index 0000000000..44a6f52596 --- /dev/null +++ b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_chemistry.yaml @@ -0,0 +1,110 @@ +dataset_name: chemistry +doc_to_text: '질문: 수산화나트륨(NaOH) 80g을 물에 녹여 전체 부피가 1000mL가 되게 하였다. 이 용액의 N농도는 얼마인가? + (단, 수산화나트륨의 분자량은 40 이다.) + + A.0.08N + + B.1N + + C.2N + + D.4N + + 정답: 차근 차근 생각해봅시다. 화학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, N농도는 몰농도를 의미하는 M농도에 수산화나트륨의 이온화 + 수를 곱한 것입니다. 수산화나트륨(NaOH)의 이온화 수는 1입니다. 물에 녹인 수산화나트륨의 몰농도를 계산해보겠습니다. 몰농도는 몰 수를 용액의 + 부피(L)로 나눈 값입니다. 수산화나트륨의 몰 수는 주어진 물질의 질량을 그 물질의 분자량으로 나눈 값입니다. 여기서 수산화나트륨의 질량은 80g, + 분자량은 40이므로 몰 수는 80g / 40 = 2mol입니다. 용액의 부피는 1000mL, 즉 1L입니다. 수산화나트륨의 몰농도는 몰 수 + 2mol을 용액의 부피 1L로 나눈 값, 즉 2M입니다. 수산화나트륨의 N농도는 이 몰농도에 이온화 수를 곱한 값이므로, 2M x 1 = 2N입니다. + 따라서, 정답은 (C) 입니다. + + + 질문: 칼륨(K) 원자는 19개의 양성자와 20개의 중성자를 가지고 있다. 원자번호와 질량수는 각각 얼마인가? + + A.9, 19 + + B.9, 39 + + C.19, 20 + + D.19, 39 + + 정답: 차근 차근 생각해봅시다. 화학 관련 정보를 위해 위키피디아를 참조하겠습니다. 원자의 기본 구조를 이해하면 이 질문에 답할 수 있습니다. + 원자번호는 원자의 핵에 있는 양성자의 수를 나타내며, 이는 원소의 고유한 특성을 결정합니다. , 칼륨(K) 원자가 19개의 양성자를 가지고 있다면, + 원자번호는 19입니다. 다음으로, 질량수는 원자의 핵에 있는 양성자와 중성자의 총 수를 나타냅니다. 칼륨(K) 원자가 19개의 양성자와 20개의 + 중성자를 가지고 있다면, 질량수는 양성자 19개와 중성자 20개를 합친 39입니다. , 칼륨(K) 원자의 원자번호는 19이고 질량수는 39입니다. + 이를 선택지와 비교하면, (D) 19, 39가 정답입니다. 따라서, 정답은 (D) 입니다. + + + 질문: “어떠한 화학반응이라도 반응물 전체의 질량과 생성물 전체의 질량은 서로 차이가 없고 완전히 같다” 라고 설명할 수 있는 법칙은? + + A.일정성분비의 법칙 + + B.배수비례의 법칙 + + C.질량보존의 법칙 + + D.기체반응의 법칙 + + 정답: 차근 차근 생각해봅시다. 화학 관련 정보를 위해 위키피디아를 참조하겠습니다. 이 질문은 화학의 기본 법칙 중 하나에 대한 것입니다. 먼저 + 선택지를 하나씩 살펴보겠습니다. (A) 일정성분비의 법칙: 이 법칙은 특정 화합물을 구성하는 원소들 사이의 질량비가 일정하다는 것을 말합니다. + 예를 들어, 물은 항상 수소와 산소의 질량비가 1:8로 일정하다는 것입니다. (B) 배수비례의 법칙: 이 법칙은 같은 원소가 다른 질량비를 가질 + 때, 그 비율이 정수배 관계에 있다는 것을 말합니다. 예를 들어, 수소와 산소가 반응하여 물을 만들 때와 수소과산화물을 만들 때, 산소의 질량비는 + 1:2로 배수 관계에 있다는 것입니다. (C) 질량보존의 법칙: 이 법칙은 화학 반응에서 반응물의 총 질량이 생성물의 총 질량과 같다는 것을 말합니다. + 즉, 어떠한 화학 반응에서도 질량은 보존된다는 것입니다. (D) 기체반응의 법칙: 이 법칙은 기체의 부피, 압력, 온도 등에 관한 법칙입니다. + 특히, 동일한 조건에서 같은 양의 기체는 동일한 수의 분자를 가진다는 것을 말합니다. 이렇게 각 선택지를 살펴본 결과, “어떠한 화학반응이라도 + 반응물 전체의 질량과 생성물 전체의 질량은 서로 차이가 없고 완전히 같다” 라는 설명은 질량보존의 법칙에 가장 부합하는 것으로 보입니다. 이 법칙은 + 화학 반응에서 질량의 변화가 없음을 의미하며, 이는 질문에서 요구하는 내용과 일치합니다. 따라서, 정답은 (C) 입니다. + + + 질문: 할로겐원소의 성질 중 원자번호가 증가할수록 작아지는 것은? + + A.금속성 + + B.반지름 + + C.이온화에너지 + + D.녹는점 + + 정답: 차근 차근 생각해봅시다. 화학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 할로겐 원소는 주기율표의 17족에 속하며, 플루오린(F), + 클로린(Cl), 브로민(Br), 요오드(I), 아스타틴(At) 등이 있습니다. 원자번호가 증가하면서 이들 원소의 성질이 어떻게 변하는지 살펴보겠습니다. + (A) 금속성: 원자번호가 증가함에 따라 할로겐 원소의 금속성은 증가합니다. 플루오린과 클로린은 비금속이지만, 아스타틴은 반금속으로 분류되기도 + 합니다. 원자번호가 증가할수록 금속성은 작아지지 않습니다. (B) 반지름: 원자번호가 증가하면서 원자의 껍질이 늘어나기 때문에 원자 반지름은 + 증가합니다. 원자번호가 증가할수록 반지름은 작아지지 않습니다. (C) 이온화에너지: 이온화 에너지는 원자의 전자를 떼어내는 데 필요한 에너지를 + 말합니다. 원자번호가 증가하면 원자 반지름이 커지고, 이에 따라 전자와 핵 사이의 거리가 멀어져 이온화 에너지가 줄어듭니다. 원자번호가 증가할수록 + 이온화 에너지는 작아집니다. (D) 녹는점: 할로겐 원소의 녹는점은 원자번호가 증가함에 따라 일반적으로 증가하는 경향이 있습니다. 플루오린의 녹는점은 + -219.67℃, 클로린은 -101.5℃, 브로민은 -7.2℃, 요오드는 113.7℃입니다. 원자번호가 증가할수록 녹는점은 작아지지 않습니다. + 따라서, 정답은 (C) 입니다. + + + 질문: 황산 49g을 물에 녹여 용액 1L을 만들었다. 이 수용액의 물 농도는 얼마인가? (단, 황산의 분자량은 98이다.) + + A.0.5 M + + B.1 M + + C.1.5 M + + D.2 M + + 정답: 차근 차근 생각해봅시다. 화학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 농도의 정의를 알아야 합니다. 농도는 용액의 단위 부피당 + 용질의 양을 의미합니다. 일반적으로 몰/리터(M) 단위로 표현합니다. 그리고 몰은 물질의 양을 나타내는 SI 단위로, 1몰은 6.02214076×10^23개의 + 입자를 가지고 있습니다. 이는 아보가드로 수라고 불리는 값입니다. 이 문제에서는 황산의 몰 수를 구하고 이를 용액의 부피인 1L로 나눠주면 됩니다. + 황산의 몰 수는 주어진 황산의 질량을 황산의 분자량으로 나눠주면 됩니다. 황산의 질량은 49g이고, 황산의 분자량은 98g/mol입니다. 황산의 + 몰 수는 49g ÷ 98g/mol = 0.5mol입니다. 이 수용액의 물 농도는 0.5mol/1L = 0.5M입니다. 따라서, 정답은 (A) + 입니다. + + + 질문: {{question}} + + A.{{A}} + + B.{{B}} + + C.{{C}} + + D.{{D}} + + 정답: 차근 차근 생각해봅시다. 화학 관련 정보를 위해 위키피디아를 참조하겠습니다.' +include: _cot_kmmlu_yaml +task: kmmlu_hard_cot_chemistry diff --git a/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_civil_engineering.yaml b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_civil_engineering.yaml new file mode 100644 index 0000000000..fc5ca33de8 --- /dev/null +++ b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_civil_engineering.yaml @@ -0,0 +1,129 @@ +dataset_name: civil_engineering +doc_to_text: '질문: 도시의 새로운 계획 패러다임의 방향이 아닌 것은? + + A.도 · 농 통합적 계획으로의 전환 + + B.에너지 절약형 도시개발로의 전환 + + C.입체적 · 기능 통합적 토지이용관리 + + D.시민참여의 확대와 계획 및 개발주체의 단일화 + + 정답: 차근 차근 생각해봅시다. 토목 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 도시 계획의 새로운 패러다임은 주로 지속 가능한 개발과 + 더불어 사회, 경제, 환경의 균형을 유지하려는 방향으로 변화하고 있습니다. (A) 도·농 통합적 계획으로의 전환은 도시와 농촌 간의 균형있는 발전을 + 위한 방향으로, 지속 가능한 개발을 위한 중요한 패러다임입니다. 이는 도시와 농촌 간의 상호 의존성을 인식하고, 두 지역 간의 경제적, 사회적, + 환경적 균형을 추구합니다. (B) 에너지 절약형 도시개발로의 전환은 에너지 효율성을 높이고, 에너지 소비를 줄이는 것을 목표로 합니다. 이는 환경 + 보호와 지속 가능한 개발을 위한 중요한 패러다임입니다. (C) 입체적 · 기능 통합적 토지이용관리는 다양한 기능과 활동을 효율적으로 수용하고, + 토지 이용의 다양성을 증진시키는 것을 목표로 합니다. 이는 토지 자원의 효율적인 활용을 위한 중요한 패러다임입니다. (D) 시민참여의 확대와 계획 + 및 개발주체의 단일화는 다소 상반되는 개념입니다. 시민 참여의 확대는 도시 계획과 개발 과정에서 시민들의 의견을 더욱 존중하고, 그들의 요구와 + 필요를 반영하는 것을 목표로 합니다. 반면에, 계획 및 개발주체의 단일화는 주로 효율성과 통합성을 추구하는 경향이 있습니다. 이 두 가지 개념은 + 동시에 존재하기 어렵습니다. 시민 참여의 확대는 다양한 의견과 요구를 수용하려는 노력을 필요로 하지만, 개발주체의 단일화는 주로 결정권을 한 곳에 + 집중시키려는 경향이 있습니다. , 도시의 새로운 계획 패러다임의 방향이 아닌 것은 ''시민참여의 확대와 계획 및 개발주체의 단일화''입니다. + 이 두 가지는 동시에 존재하기 어렵습니다. 시민 참여의 확대는 다양한 의견과 요구를 수용하려는 노력을 필요로 하지만, 개발주체의 단일화는 주로 + 결정권을 한 곳에 집중시키려는 경향이 있습니다. 이 두 가지 개념은 서로 상반되는 경향이 있어 동시에 존재하기 어렵습니다. 따라서, 정답은 (D) + 입니다. + + + 질문: 개별 필지에 대한 규제사항 및 토지이용계획사항을 확인하는 것으로, 해당 토지에 대한 용도지역ㆍ지구ㆍ구역, 도시ㆍ군계획시설, 도시계획사업과 + 입안내용, 그리고 각종 규제에 대한 저축 여부 등을 확인할 수 있는 자료는? + + A.토지대장 + + B.건축물대장 + + C.토지특성조사표 + + D.토지이용계획확인서 + + 정답: 차근 차근 생각해봅시다. 토목 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 개별 필지에 대한 규제사항 및 토지이용계획사항을 확인하는 + 자료를 찾아야 합니다. (A) 토지대장은 토지의 소유자, 소재지, 지목, 면적 등 토지의 기본적인 사항을 기록한 공적인 증명서입니다. 이는 토지의 + 기본적인 정보를 제공하지만, 규제사항이나 토지이용계획사항에 대한 정보는 포함하지 않습니다. (B) 건축물대장은 건축물의 위치, 구조, 용도, 면적 + 등 건축물에 관한 사항을 기록한 공적인 증명서입니다. 이는 건축물에 대한 정보를 제공하지만, 토지에 대한 규제사항이나 이용계획사항에 대한 정보는 + 포함하지 않습니다. (C) 토지특성조사표는 토지의 지리적, 지질학적 특성을 조사하여 작성한 표입니다. 이는 토지의 특성에 대한 정보를 제공하지만, + 규제사항이나 이용계획사항에 대한 정보는 포함하지 않습니다. (D) 토지이용계획확인서는 토지의 용도지역, 지구, 구역, 도시, 군계획시설, 도시계획사업과 + 입안내용, 그리고 각종 규제에 대한 저축 여부 등을 확인할 수 있는 공적인 증명서입니다. 이는 토지에 대한 규제사항 및 이용계획사항을 확인하는데 + 필요한 모든 정보를 포함하고 있습니다. 따라서, 정답은 (D) 입니다. + + + 질문: 중세시대 이슬람도시의 특성을 나타내고 있는 도시와 국가의 연결이 틀린 것은? + + A.바스라(OPTIONasra) - 튀니지 + + B.라바트(Rabat) - 모로코 + + C.푸스타트(Fustat) - 이집트 + + D.코르도바(OPTIONordoba) - 스페인 + + 정답: 차근 차근 생각해봅시다. 토목 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 선택지에 나와 있는 도시들이 중세시대 이슬람 도시의 + 특성을 나타내는 도시인지 확인해보겠습니다. (A) 바스라(Basra)는 이라크에 위치한 도시로, 중세 이슬람 시대에 바그다드와 함께 중요한 도시 + 중 하나였습니다. (B) 라바트(Rabat)는 모로코의 수도로, 중세 이슬람 시대에는 페스와 함께 모로코의 대표적인 도시였습니다. (C) 푸스타트(Fustat)는 + 이집트 카이로에 위치한 도시로, 중세 이슬람 시대에 건설된 도시 중 하나입니다. (D) 코르도바(Cordoba)는 스페인에 위치한 도시로, 중세 + 이슬람 시대에는 유럽에서 가장 큰 도시 중 하나였습니다. 이제 각 도시와 국가의 연결이 맞는지 확인해보겠습니다. (A) 바스라(Basra)는 이라크에 + 위치한 도시로, 튀니지와 연결되어 있지 않습니다. (B) 라바트(Rabat)는 모로코에 위치한 도시로, 모로코와 연결되어 있습니다. (C) 푸스타트(Fustat)는 + 이집트에 위치한 도시로, 이집트와 연결되어 있습니다. (D) 코르도바(Cordoba)는 스페인에 위치한 도시로, 스페인과 연결되어 있습니다. 따라서, + 정답은 (A) 입니다. + + + 질문: 새로운 도시계획 패러다임으로 적절하지 않은 것은? + + A.도ㆍ농 통합적 계획 지향 + + B.지속가능한 도시개발 지향 + + C.성장위주의 경제논리가 지배하는 도시개발 지향 + + D.시민참여 확대와 계획 및 개발주체의 다양화 지향 + + 정답: 차근 차근 생각해봅시다. 토목 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저 각 선택지가 무엇을 의미하는지 살펴보겠습니다. (A) + 도ㆍ농 통합적 계획 지향: 이는 도시와 농촌이 서로 독립적으로 발전하는 것이 아니라, 상호보완적이고 균형있는 발전을 추구하는 것을 의미합니다. + 즉, 도시와 농촌이 서로에게 필요한 자원과 기능을 제공하며, 상호 의존적인 관계를 유지하도록 계획하는 것입니다. (B) 지속가능한 도시개발 지향: + 이는 환경, 경제, 사회 등 다양한 측면에서 지속 가능한 도시 개발을 추구하는 것을 의미합니다. 즉, 현재 세대의 필요를 충족시키는 동시에 미래 + 세대의 필요를 충족시킬 수 있도록 도시를 계획하고 개발하는 것입니다. (D) 시민참여 확대와 계획 및 개발주체의 다양화 지향: 이는 도시계획과 + 개발 과정에서 시민들의 의견을 적극적으로 수렴하고, 다양한 주체들이 도시계획과 개발에 참여하는 것을 추구하는 것을 의미합니다. (C) 성장위주의 + 경제논리가 지배하는 도시개발 지향: 이는 경제적 성장을 최우선 목표로 삼고, 그를 위해 도시를 계획하고 개발하는 것을 의미합니다. 이는 단기적인 + 경제적 이익을 추구하는 경향이 있으며, 이로 인해 환경 파괴, 사회적 불평등 등의 문제가 발생할 수 있습니다. , 새로운 도시계획 패러다임에서는 + 지속가능성, 균형, 다양성 등을 중요하게 생각합니다. 이에 비해 성장위주의 경제논리가 지배하는 도시개발 지향은 단기적인 경제적 이익을 우선시하는 + 경향이 있어, 이는 새로운 도시계획 패러다임과는 맞지 않는 것으로 보입니다. 따라서, 정답은 (C) 입니다. + + + 질문: 부동산 소유자간 또는 개발업자와 구입자 사이에 체결되는 민사계약으로 지역제보다 훨씬 상세하고 엄격한 규정으로 되어 있으며, 일반적으로 토지ㆍ건물대장 + 및 권리서에 기재되어 부동산 매매 시 신규 구입자에게로 승계되는 것으로, 미국의 근대도시계획 성립기에 지역제의 바탕이 된 제도는? + + A.협약(covenant) + + B.획지분할규제(subdivision control) + + C.공도(official mapping) + + D.성장관리(growth management) + + 정답: 차근 차근 생각해봅시다. 토목 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 문제에서 요구하는 것은 부동산 소유자간 또는 개발업자와 + 구입자 사이에 체결되는 민사계약이며, 이 계약은 지역제보다 훨씬 상세하고 엄격한 규정으로 되어 있다는 것입니다. 그리고 이 계약은 토지, 건물대장 + 및 권리서에 기재되어 부동산 매매 시 신규 구입자에게로 승계되는 것입니다. 마지막으로, 이 계약은 미국의 근대도시계획 성립기에 지역제의 바탕이 + 된 제도라고 합니다. 선택지를 살펴보면, (A) 협약(covenant), (B) 획지분할규제(subdivision control), (C) 공도(official + mapping), (D) 성장관리(growth management)가 있습니다. (A) 협약(covenant)은 일반적으로 두 당사자 사이에 체결되는 + 계약을 의미하며, 부동산 매매에 있어서도 이용됩니다. 또한, 이 협약은 토지, 건물대장 및 권리서에 기재되어 부동산 매매 시 신규 구입자에게로 + 승계되는 것이 일반적입니다. (B) 획지분할규제(subdivision control)는 부동산 개발 과정에서 적용되는 규제로, 토지를 분할하여 + 개발하는 경우에 적용되는 규제입니다. 이 규제는 개발자가 토지를 분할하여 팔 때 적용되는 것이므로, 이는 부동산 소유자간의 계약이 아니라 개발업자와 + 구입자 사이의 계약에 더 가깝습니다. (C) 공도(official mapping)는 도시 계획을 위한 지도를 의미하며, 이는 도시의 미래 발전을 + 계획하는 데 사용됩니다. 이는 부동산 계약과는 직접적인 관련이 없습니다. (D) 성장관리(growth management)는 도시의 성장을 관리하고 + 통제하는 데 사용되는 정책이나 기법을 의미합니다. 이는 부동산 계약과는 직접적인 관련이 없습니다. , 문제에서 요구하는 부동산 소유자간 또는 + 개발업자와 구입자 사이에 체결되는 민사계약이며, 이 계약은 지역제보다 훨씬 상세하고 엄격한 규정으로 되어 있으며, 이 계약은 토지, 건물대장 및 + 권리서에 기재되어 부동산 매매 시 신규 구입자에게로 승계되는 것이며, 이 계약은 미국의 근대도시계획 성립기에 지역제의 바탕이 된 제도는 (A) + 협약(covenant)이 가장 적절한 선택입니다. 따라서, 정답은 (A) 입니다. + + + 질문: {{question}} + + A.{{A}} + + B.{{B}} + + C.{{C}} + + D.{{D}} + + 정답: 차근 차근 생각해봅시다. 토목 공학 관련 정보를 위해 위키피디아를 참조하겠습니다.' +include: _cot_kmmlu_yaml +task: kmmlu_hard_cot_civil_engineering diff --git a/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_computer_science.yaml b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_computer_science.yaml new file mode 100644 index 0000000000..928b3a63fd --- /dev/null +++ b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_computer_science.yaml @@ -0,0 +1,128 @@ +dataset_name: computer_science +doc_to_text: '질문: 암호 프로토콜 서비스에 대한 설명 중 옳지 않은 것은? + + A.비밀성 : 자료 유출의 방지 + + B.접근제어 : 프로토콜 데이터 부분의 접근 제어 + + C.무결성 : 메시지의 변조를 방지 + + D.부인봉쇄 : 송수신 사실의 부정 방지 + + 정답: 차근 차근 생각해봅시다. 컴퓨터 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 각 선택지에 대한 정확한 정의를 이해하는 것이 + 중요합니다. (A) 비밀성: 이는 데이터가 전송 중에 외부로부터 보호되어, 오직 수신자만이 그 내용을 이해할 수 있게 하는 것을 의미합니다. 이는 + ''자료 유출의 방지''와 일치하는 설명입니다. (B) 접근제어: 이는 데이터나 리소스에 대한 접근을 제어하는 것을 의미합니다. 이는 일반적으로 + 사용자의 권한을 확인하고, 해당 권한에 따라 데이터나 리소스에 접근할 수 있는지를 결정합니다. 하지만, ''프로토콜 데이터 부분의 접근 제어''라는 + 설명은 정확하지 않습니다. 접근제어는 일반적으로 데이터나 리소스에 대해 적용되지, 특정 프로토콜 데이터 부분에 대해 적용되지는 않습니다. (C) + 무결성: 이는 데이터가 전송 중에 변경되거나 손상되는 것을 방지하는 것을 의미합니다. 이는 ''메시지의 변조를 방지''와 일치하는 설명입니다. + (D) 부인봉쇄: 이는 데이터의 송수신 사실을 부정할 수 없게 하는 것을 의미합니다. 이는 ''송수신 사실의 부정 방지''와 일치하는 설명입니다. , + 정확하지 않은 설명은 (B) 접근제어: 프로토콜 데이터 부분의 접근 제어입니다. ''프로토콜 데이터 부분의 접근 제어''라는 설명은 접근제어의 + 정의와 일치하지 않습니다. 따라서, 정답은 (B) 입니다. + + + 질문: 인터넷상에서 시스템 보안 문제는 중요한 부분이다. 보안이 필요한 네트워크 통로를 단일화하여 이 출구를 보안 관리함으로써 외부로부터의 불법적인 + 접근을 막는 시스템은? + + A.해킹 + + B.펌웨어 + + C.크래킹 + + D.방화벽 + + 정답: 차근 차근 생각해봅시다. 컴퓨터 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 인터넷상에서 시스템 보안 문제를 해결하기 위한 방법에 + 대한 질문입니다. 각 선택지를 분석해보겠습니다. (A) 해킹: 해킹은 시스템의 보안을 침해하는 행위를 의미합니다. 해킹은 보안 문제를 해결하는 + 방법이 아니라 보안 문제를 일으키는 원인 중 하나입니다. 이 선택지는 정답이 될 수 없습니다. (B) 펌웨어: 펌웨어는 컴퓨터나 장치의 제어 + 및 운영에 필요한 소프트웨어를 의미합니다. 펌웨어는 장치의 기능을 실행하는데 필요하지만, 직접적으로 보안을 관리하는 시스템은 아닙니다. 이 + 선택지도 정답이 아닙니다. (C) 크래킹: 크래킹은 보안 시스템을 무력화하거나 소프트웨어의 보호 기능을 제거하는 행위를 의미합니다. 해킹과 마찬가지로 + 크래킹도 보안 문제를 일으키는 원인 중 하나이므로 이 선택지도 정답이 아닙니다. (D) 방화벽: 방화벽은 네트워크의 보안을 유지하기 위해 설계된 + 시스템입니다. 네트워크 통로를 단일화하여 이 출구를 보안 관리함으로써 외부로부터의 불법적인 접근을 막습니다. 이 설명은 질문에서 요구하는 시스템의 + 기능과 일치합니다. 따라서, 정답은 (D) 입니다. + + + 질문: 인터넷에서 일어날 수 있는 대표적인 보안사고 유형으로 어떤 침입 행위를 시도하기 위해 일정기간 위장한 상태를 유지하며, 코드 형태로 시스템의 + 특정 프로그램 내부에 존재 하는 것은? + + A.논리 폭탄 + + B.웜 + + C.트로이 목마 + + D.잠입 + + 정답: 차근 차근 생각해봅시다. 컴퓨터 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 이 질문은 인터넷 보안에 관한 것으로, 특정한 침입 + 행위를 위해 일정 기간 동안 위장하고, 코드 형태로 시스템의 특정 프로그램 내부에 존재하는 보안사고 유형에 대한 것입니다. 선택지를 하나씩 살펴보면, + (A) 논리 폭탄은 특정 조건이 충족될 때까지 자신의 존재를 숨기고 그 조건이 만족되면 행동을 시작하는 프로그램을 의미합니다. 하지만 이는 특정 + 시간 동안 위장하는 것이 아니라 특정 조건이 충족될 때까지 대기하는 것이므로 이 질문의 답이 아닙니다. (B) 웜은 네트워크를 통해 시스템에 침입하고 + 자신을 복제하여 다른 시스템에 전파하는 코드를 의미합니다. 웜은 자동으로 전파되지만 특정 프로그램 내부에 숨어있다가 공격하는 것은 아니므로 이 + 질문의 답이 아닙니다. (C) 트로이 목마는 사용자가 원하는 프로그램처럼 보이지만 실제로는 시스템에 해를 끼치는 코드를 실행하는 악성 프로그램입니다. + 트로이 목마는 사용자가 원하는 프로그램으로 위장하여 시스템에 침입하고, 일정 시간 동안 그 상태를 유지할 수 있습니다. (D) 잠입은 시스템에 + 무단으로 들어가 정보를 훔치는 행위를 의미합니다. 하지만 이는 특정 프로그램 내부에 숨어있다가 공격하는 것이 아니라 시스템 자체에 침입하는 것이므로 + 이 질문의 답이 아닙니다. , 이 질문의 답은 (C) 트로이 목마입니다. 이 악성 프로그램은 사용자가 원하는 프로그램으로 위장하여 시스템에 침입하고, + 일정 시간 동안 그 상태를 유지할 수 있습니다. 이는 질문에서 언급한 "일정 기간 동안 위장하고, 코드 형태로 시스템의 특정 프로그램 내부에 존재하는" + 보안사고 유형을 가장 잘 설명합니다. 따라서, 정답은 (C) 입니다. + + + 질문: DNS(Domain Name System) 서버 종류에 속하지 않는 것은? + + A.Primary Server + + B.OPTIONache Server + + C.Expert Server + + D.Master Name Server + + 정답: 차근 차근 생각해봅시다. 컴퓨터 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. DNS(Domain Name System)는 웹 브라우징에 + 있어 핵심적인 역할을 하는 시스템입니다. 이 시스템은 사람이 읽을 수 있는 도메인 이름을 컴퓨터가 이해할 수 있는 IP 주소로 변환하는 역할을 + 합니다. 이렇게 하면 사용자가 웹사이트의 IP 주소를 외우지 않고도 웹사이트를 방문할 수 있습니다. DNS 서버의 종류에 대해 알아보면 다음과 + 같습니다. (A). Primary Server: 이는 DNS 구조의 가장 중요한 서버입니다. 모든 DNS 레코드를 저장하고, 이 정보를 다른 DNS + 서버에 제공합니다. (B). Cache Server: 이 서버는 DNS 요청에 대한 응답을 임시로 저장하는 역할을 합니다. 이를 통해 같은 요청이 + 들어올 때마다 Primary Server에 접속하지 않고 빠르게 응답할 수 있습니다. (D). Master Name Server: 이는 Primary + Server와 같은 역할을 합니다. DNS 구조에서 가장 중요한 서버로, 모든 DNS 레코드를 저장하고, 이 정보를 다른 DNS 서버에 제공합니다. + 그러나, (C). Expert Server는 DNS 서버의 종류로 존재하지 않습니다. 따라서, 정답은 (C) 입니다. + + + 질문: 보안 OS(Secure OS)에 대한 설명 중 가장 옳지 않은 것은? + + A.OPTION1급은 보안에 대한 기능이 없는 것으로, MS-OPTIONOS 등이 이에 해당한다. + + B.OPTION1급은 사용자의 접근제어, OPTIONuditing, Shadow Password 등의 부가적인 기능이 제공된다. + + C.OPTION급의 보안OS는 다단계 보안을 제공하며, 필수적인 접근제어 등이 제공된다. + + D.OPTION급은 검증된 설계 수준으로서 수학적인 검증 과정이 요구된다. + + 정답: 차근 차근 생각해봅시다. 컴퓨터 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 보안 운영 체제(Secure OS)의 분류에 대한 설명 + 중에서 가장 옳지 않은 것을 찾으려면, 각 옵션에 제시된 내용을 TCSEC(Trusted Computer System Evaluation Criteria)의 + 기준에 따라 검토해야 합니다. TCSEC은 미국 국방부에서 개발한 시스템 보안 등급을 정의한 기준입니다. 각 등급은 다음과 같은 특징을 가집니다: + D등급 (Minimal Protection): 보안 설정이 전혀 이루어지지 않은 시스템. C1등급 (Discretionary Security Protection): + 일반적인 로그인 과정이 있으며, 사용자 간 침범이 차단됨. 사용자는 자신이 생성한 파일에 대한 권한 설정이 가능. C2등급 (Controlled + Access Protection): 계정별 로그인 가능, 그룹별 통제가 가능한 시스템. B1등급 (Labeled Security): 시스템에 보안 + 정책 적용 가능, 데이터에 보안 레벨 설정 가능. B2등급 (Structured Protection): B1 등급의 기능을 모두 포함, 정형화된 + 보안 정책 존재. B3등급 (Security Domains): 운영체제상 불필요한 영역 제거, 모듈별 분석 및 테스트 가능. 시스템 파일 및 디렉터리에 + 대한 접근 방식 지정, 위험 동작 사용자에 대한 백업 자동화. A1등급 (Verified Design): 수학적으로 완벽한 시스템 설계. 이 정보를 + 바탕으로 각 옵션을 검토해 보면: (A) D1급은 보안 기능이 없는 것으로 설명되어 있는데, 실제로 D등급은 보안 설정이 전혀 이루어지지 않은 + 시스템을 의미합니다. (B) C1급은 사용자의 접근 제어, 감사 추적(Auditing), Shadow Password 등의 부가적인 기능이 제공된다고 + 설명되어 있으나, 실제 C1 등급은 일반적인 로그인 과정이 있고 사용자 간 침범을 차단하는 정도의 기능을 제공합니다. 감사 추적이나 Shadow + Password는 C1에서 특별히 언급되지 않습니다. (C) B급의 보안 OS는 다단계 보안을 제공하며, 필수적인 접근제어 등이 제공된다고 설명되어 + 있으며, 이는 B등급의 특징을 정확하게 반영합니다. (D) A급은 검증된 설계 수준으로서 수학적인 검증 과정이 요구된다고 설명되어 있으며, 이는 + A1등급의 특징을 정확하게 반영합니다. 그러나, C1급은 주어진 설명에서 언급된 감사 추적(Auditing)이나 Shadow Password와 + 같은 부가적인 기능보다는 사용자 간 침범 차단과 사용자별 파일 권한 설정에 초점을 맞춘 것으로 정의됩니다. 따라서, 정답은 (B) 입니다. + + + 질문: {{question}} + + A.{{A}} + + B.{{B}} + + C.{{C}} + + D.{{D}} + + 정답: 차근 차근 생각해봅시다. 컴퓨터 공학 관련 정보를 위해 위키피디아를 참조하겠습니다.' +include: _cot_kmmlu_yaml +task: kmmlu_hard_cot_computer_science diff --git a/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_construction.yaml b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_construction.yaml new file mode 100644 index 0000000000..dcb53c1b9b --- /dev/null +++ b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_construction.yaml @@ -0,0 +1,115 @@ +dataset_name: construction +doc_to_text: '질문: 디젤기관에서 질소 산화물(NOX)의 발생을 억제하려면 어떻게 해야 하는가? + + A.흡기온도를 높인다. + + B.산소(O2)의 농도를 낮춘다. + + C.연소온도를 높인다. + + D.반응시간을 길게한다. + + 정답: 차근 차근 생각해봅시다. 건설 관련 정보를 위해 위키피디아를 참조하겠습니다. 디젤 엔진에서 질소 산화물(NOx)의 발생을 억제하려면 연소 + 과정에서의 조건을 조절해야 합니다. 질소 산화물은 고온에서 산소와 질소가 결합할 때 생성되는데, 이는 디젤 엔진의 연소 과정에서 일어납니다. (A) + 흡기 온도를 높인다: 흡기 온도를 높이면, 공기와 연료의 혼합물이 더욱 빠르게 연소하게 되고 이는 연소 온도를 높이게 됩니다. NOx의 생성을 + 증가시킬 수 있습니다. (B) 산소(O2)의 농도를 낮춘다: 산소 농도를 낮추면, 연소 과정에서 산소와 질소가 결합하여 NOx를 생성하는 것을 + 줄일 수 있습니다. NOx의 발생을 억제하는데 도움이 될 수 있습니다. (C) 연소 온도를 높인다: 연소 온도를 높이면, NOx의 생성이 증가합니다. + 이는 NOx가 고온에서 산소와 질소가 결합할 때 생성되기 때문입니다. (D) 반응 시간을 길게 한다: 이론적으로, 반응 시간을 길게 하면 연소 + 과정이 더욱 완전해지고, 이는 NOx의 생성을 줄일 수 있습니다. 그러나 실제로는 연소 시간이 길어지면 엔진의 효율이 떨어질 수 있으므로, 이 + 방법이 항상 적용 가능한 것은 아닙니다. , 산소의 농도를 낮추는 것이 디젤 엔진에서 NOx의 발생을 억제하는 가장 효과적인 방법으로 보입니다. + 이는 연소 과정에서 산소와 질소가 결합하여 NOx를 생성하는 것을 줄일 수 있기 때문입니다. 따라서, 정답은 (B) 입니다. + + + 질문: 전자제어 기관에서 산소센서가 피드백이 되는 조건은? + + A.냉각수온이 낮을 때 + + B.시동시 + + C.연료차단시 + + D.공전시 + + 정답: 차근 차근 생각해봅시다. 건설 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 산소센서가 피드백 되는 조건을 파악하기 위해 전자제어 + 기관에서의 산소센서 역할을 이해해야 합니다. 산소센서는 배기가스 중 산소 농도를 검출하여 ECU(전자제어장치)에 전달하는 역할을 합니다. 이를 + 통해 ECU는 엔진의 상태를 파악하고, 최적의 공연비를 유지할 수 있도록 제어합니다. 산소센서가 피드백 되는 조건은 다음과 같습니다. - 엔진이 + 가동 중일 때: 산소센서는 엔진이 가동 중일 때만 작동합니다. - 공연비가 적절할 때: 산소센서는 공연비가 적절할 때만 피드백 됩니다. 공연비란, + 공기와 연료의 비율을 말합니다. - 냉각수온이 정상일 때: 냉각수온이 낮으면 산소센서의 작동에 영향을 미칠 수 있습니다. 위의 조건을 바탕으로 + 선택지를 검토해보겠습니다. (A) 냉각수온이 낮을 때: 냉각수온이 낮으면 산소센서의 작동에 영향을 미칠 수 있으므로, 이는 피드백이 되는 조건이 + 아닙니다. (B) 시동시: 시동 시에는 엔진이 가동 중이지만, 공연비가 적절하지 않을 수 있으므로, 이는 피드백이 되는 조건이 아닙니다. (C) + 연료차단시: 연료차단시에는 엔진이 가동 중이지만, 공연비가 적절하지 않을 수 있으므로, 이는 피드백이 되는 조건이 아닙니다. (D) 공전시: 공전시에는 + 엔진이 가동 중이고, 공연비가 적절하게 유지되므로, 이는 피드백이 되는 조건입니다. 따라서, 정답은 (D) 입니다. + + + 질문: 크랭크축 메인저널의 외경이 규정보다 작을 때 일어나는 현상으로 가장 적당한 것은? + + A.오일유압의 압력저하로 적당한 오일의 공급량이 적어 오일의 오염도가 적다. + + B.오일간극이 적어 베어링의 소결이 생긴다. + + C.오일압력의 상승으로 각부에 윤활공급이 확실하다. + + D.운행중 소음이 많이 발생된다. + + 정답: 차근 차근 생각해봅시다. 건설 관련 정보를 위해 위키피디아를 참조하겠습니다. 크랭크축 메인저널의 외경이 규정보다 작을 때의 현상을 생각해보면, + 이는 크랭크축과 베어링 사이의 간극이 커지는 상황을 의미합니다. 크랭크축과 베어링 사이의 간극이 커지면, 이 간극 사이를 통과하는 엔진오일의 양이 + 많아지게 됩니다. 이로 인해 오일 압력이 감소하게 될 것입니다. 하지만, 선택지 A의 ''오일유압의 압력저하로 적당한 오일의 공급량이 적어 오일의 + 오염도가 적다''는 설명은 오일 압력이 감소했지만, 오일의 공급량이 적어지는 것은 아니며, 오염도가 적어지는 것도 아닙니다. 선택지 B의 ''오일간극이 + 적어 베어링의 소결이 생긴다''는 설명은 크랭크축의 외경이 작아져 오일간극이 커진 상황과는 반대의 상황을 설명하고 있습니다. 선택지 C의 ''오일압력의 + 상승으로 각부에 윤활공급이 확실하다''는 설명은 크랭크축의 외경이 작아져 오일 압력이 감소하는 상황과는 반대의 상황을 설명하고 있습니다. 선택지 + D의 ''운행중 소음이 많이 발생된다''는 설명은 크랭크축과 베어링 사이의 간극이 커져서 오일이 제대로 윤활을 하지 못하면, 마찰로 인해 소음이 + 발생할 수 있습니다. 따라서, 정답은 (D) 입니다. + + + 질문: 디젤엔진의 공기여과기가 막혔을 때 나타나는 현상이 아닌 것은? + + A.가속 불량 + + B.연료소비 과다 + + C.매연 과다배출 + + D.엔진오일 연소 + + 정답: 차근 차근 생각해봅시다. 건설 관련 정보를 위해 위키피디아를 참조하겠습니다. 디젤엔진의 공기여과기는 엔진이 외부에서 공기를 빨아들일 때 + 그 공기에 포함된 먼지나 이물질을 걸러내는 역할을 합니다. 이 공기여과기가 막혔을 때, 공기 흐름이 제대로 이루어지지 않아 엔진의 효율이 떨어질 + 수 있습니다. (A) 가속 불량: 공기여과기가 막혀 공기의 흐름이 제대로 이루어지지 않으면, 연료의 완전한 연소를 방해하게 되어 엔진의 출력이 + 떨어지고, 결국 가속력이 떨어질 수 있습니다. 이는 맞는 설명입니다. (B) 연료소비 과다: 엔진의 효율이 떨어지면 연료의 소비량이 증가하게 + 됩니다. 이는 공기여과기가 막힘으로 인해 공기와 연료의 비율이 제대로 맞지 않아 연료가 완전히 연소되지 않고 일부가 낭비되기 때문입니다. 이는 + 맞는 설명입니다. (C) 매연 과다배출: 공기여과기가 막혀 연료의 완전한 연소가 이루어지지 않으면, 미연소 연료가 배기가스와 함께 배출되어 매연이 + 증가하게 됩니다. 이는 맞는 설명입니다. (D) 엔진오일 연소: 엔진오일의 연소는 엔진오일이 엔진실린더 내로 유입되어 연소되는 현상을 말합니다. + 이는 주로 엔진의 내부 부품이 마모되거나 오일 밀봉부가 손상되어 발생하는 현상으로, 공기여과기의 상태와는 직접적인 관련이 없습니다. 이는 디젤엔진의 + 공기여과기가 막혔을 때 나타나는 현상이 아닌 것으로 보입니다. 따라서, 정답은 (D) 입니다. + + + 질문: 행정체적이 240cc이고 압축비가 9일 때 연소실 체적은 몇 cc인가? + + A.20cc + + B.30cc + + C.40cc + + D.65cc + + 정답: 차근 차근 생각해봅시다. 건설 관련 정보를 위해 위키피디아를 참조하겠습니다. 압축비는 피스톤이 최하단에서 최상단으로 이동했을 때 실린더 + 내부의 전체 부피와 피스톤이 최상단에 있을 때 남는 연소실의 부피의 비율을 나타냅니다. 수학적으로 표현하면: \[ \text{압축비} = \frac{\text{행정체적} + + \text{연소실 체적}}{\text{연소실 체적}} \] 이 식을 연소실 체적에 대해 풀면: \[ \text{연소실 체적} = \frac{\text{행정체적}}{\text{압축비} + - 1} \] 여기서 주어진 값은 행정체적이 240cc이고 압축비가 9입니다. 이를 식에 대입하여 연소실 체적을 계산해 보겠습니다. 행정체적 = + 240 압축비 = 9 연소실_체적 = 행정체적 / (압축비 - 1) = 240 / 8 = 30 연소실의 체적은 30cc입니다. 따라서, 정답은 + (B) 입니다. + + + 질문: {{question}} + + A.{{A}} + + B.{{B}} + + C.{{C}} + + D.{{D}} + + 정답: 차근 차근 생각해봅시다. 건설 관련 정보를 위해 위키피디아를 참조하겠습니다.' +include: _cot_kmmlu_yaml +task: kmmlu_hard_cot_construction diff --git a/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_criminal_law.yaml b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_criminal_law.yaml new file mode 100644 index 0000000000..94e3c9e474 --- /dev/null +++ b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_criminal_law.yaml @@ -0,0 +1,136 @@ +dataset_name: criminal_law +doc_to_text: '질문: 책임능력에 대한 설명으로 옳은 것은? + + A.심 신장애는 생물학적 요소 외에 심리학적 요소로서 정신병 또는 비정상적 정신 상태와 같은 정신적 장애로 말 미암아 사물에 대한 변별 능력과 + 그에 따른 행위 통제능력이 결여되거나 감소되었음을 요한다. + + B.심 신장애인의 행위인지 여부는 전문가의 감정, 그 행위의 전 후 사정이나 기록에 나타난 제반 자료를 종합하여 인정하되 , 공판정 에서의 피고인의 + 태도를 고려하여서는 안 된다. + + C.성적 측면에서의 성격적 결함에 따른 소아기 호증은 그 증상이 심각하여 원래의 의 미의 정신병이 있는 사람과 동 등하다고 평가할 수 있더라도 + 심신장애를 인정할 여지는 없다. + + D.위험의 발생을 예견할 수 있었는데도 자의로 심신장애를 야기한 경우는 원인에 있어서 자유로운 행위에 관한 형 법 제10조 제3항의 적용 대상이 + 아니다. + + 정답: 차근 차근 생각해봅시다. 형법 관련 정보를 위해 위키피디아를 참조하겠습니다. (A) 책임능력은 행위자가 자신의 행위의 결과를 인식하고 그에 + 대한 책임을 질 수 있는 능력을 말합니다. 이는 생물학적 요소와 심리학적 요소로 구성됩니다. 생물학적 요소는 신체적 또는 정신적 질환이나 장애를 + 의미하며, 심리학적 요소는 사물에 대한 변별 능력과 그에 따른 행위 통제능력을 의미합니다. 사물에 대한 변별 능력은 행위의 옳고 그름을 판단할 + 수 있는 능력을 말합니다. 행위 통제능력은 자신의 행동을 통제할 수 있는 능력을 말합니다. 이러한 능력이 결여되거나 감소된 경우에는 책임능력이 + 없다고 판단됩니다. (B)는 공판정에서의 피고인의 태도를 고려하지 않는다는 부분이 옳지 않습니다. 피고인의 태도는 책임능력을 판단하는 데 중요한 + 요소 중 하나입니다. (C)는 성적 측면에서의 성격적 결함에 따른 소아기호증은 심신장애를 인정할 여지가 있다는 것이 최근 대법원 판례의 입장입니다. 옳지 + 않습니다. (D)는 위험의 발생을 예견할 수 있었는데도 자의로 심신장애를 야기한 경우는 원인에 있어서 자유로운 행위에 관한 형법 제10조 제3항의 + 적용 대상이 됩니다. 옳지 않습니다. 따라서, 정답은 (A) 입니다. + + + 질문: 형법상 가석방 제도에 대한 설명으로 옳은 것은? + + A.형기에 산입된 판결 선고 전 구금의 일수는 가석방에 있어서 집행을 경과한 기간에 산입하지 아니한다. + + B.가석방의 기간은 무기형에 있어서는 20년으로 하고, 유기형에 있어서는 남은 형기로 하되, 그 기간은 10년을 초과할 수 없다. + + C.징역 또는 금고의 집행 중에 있는 자가 그 행상이 양호하여 개전의 정이 현저한 때에는 무기에 있어서는 10년, 유기에 있어서는 형기의 2분의 + 1을 경과한 후 행정처분으로 가석방을 할 수 있다. + + D.가석방의 처분을 받은 자가감시에 관한 규칙을 위배하거나, 보호관찰의 준수사항을 위반하고 그 정도가 무거운 때에는 가석방 처분을 취소할 수 있다. + + 정답: 차근 차근 생각해봅시다. 형법 관련 정보를 위해 위키피디아를 참조하겠습니다. (A) 형법 제57조 제1항에 따르면, 형기에 산입된 판결 + 선고 전 구금의 일수는 가석방에 있어서 집행을 경과한 기간에 산입한다고 명시되어 있습니다. (A)는 옳지 않습니다. (B) 형법 제73조의2에 + 따르면, 가석방의 기간은 무기형에 있어서는 10년으로 하고, 유기형에 있어서는 남은 형기로 하되, 그 기간은 10년을 초과할 수 없다고 명시되어 + 있습니다. (B)는 옳지 않습니다. (C) 형법 제72조 제1항에 따르면, 징역 또는 금고의 집행 중에 있는 자가 그 행상이 양호하여 개전의 + 정이 현저한 때에는 무기에 있어서는 10년, 유기에 있어서는 형기의 3분의 1을 경과한 후 행정처분으로 가석방을 할 수 있다고 명시되어 있습니다. (C)는 + 옳지 않습니다. (D) 형법 제75조에 따르면, 가석방의 처분을 받은 자가 감시에 관한 규칙을 위배하거나, 보호관찰의 준수사항을 위반하고 그 정도가 + 무거운 때에는 가석방 처분을 취소할 수 있다고 명시되어 있습니다. (D)는 옳은 설명입니다. 따라서, 정답은 (D) 입니다. + + + 질문: 공소시효에 대한 설명으로 옳지 않은 것은? + + A.범죄 후 법률의 개정에 의하여 법정형이 가 벼워진 경우에는 형법 제1조 제2항에 의하여 당해 범죄 사실에 적용될 가벼운 법정형인 신법의 법정형이 + 공소시효 기간의 기준이 된다. + + B.1개의 행위가 형법 상 사기죄와 변호사법 위반죄에 해당하고 양 죄가 상상적 경합 관계에 있는 경우, 변호사법 위반죄의 공소시효가 완성되었다면 + 사기죄의 공소시효도 완성된 것으로 보아야 한다. + + C.공범의 1인으로 기소된 자가 범죄의 증명이 없다는 이유로 무죄의 확정 판결을 선 고 받은 경우, 그는 공범이라고 할 수 없으므로 그에 대하여 + 제기된 공소는 진범에 대한 공소시효를 정 지시키는 효력이 없다. + + D.공범의 1인에 대한 공소시효 정지는 다른 공범자에게 대하여 그 효력이 미치는데 , 여기의 ‘공범’에는 뇌물공여죄와 뇌물수수죄 사이와 같은 대 + 향범 관계에 있는 자는 포함되지 않는다 . + + 정답: 차근 차근 생각해봅시다. 형법 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저 각 선택지가 어떤 내용을 담고 있는지 확인해봅시다. (A)는 + 범죄 후 법률의 개정에 따라 법정형이 가벼워진 경우, 가벼운 법정형의 신법이 공소시효 기간의 기준이 된다는 내용입니다. 형법 제1조 제2항에 따르면, + 범죄를 저지른 후 법률이 변경되어 처벌이 가벼워진 경우에는 그 가벼운 처벌을 적용해야 한다는 내용이므로 이는 맞는 내용입니다. (B)는 1개의 + 행위가 사기죄와 변호사법 위반죄에 해당하며, 두 죄가 상상적 경합 관계에 있는 경우, 변호사법 위반죄의 공소시효가 완성되면 사기죄의 공소시효도 + 완성된다는 내용입니다. 상상적 경합이란 하나의 행위로 여러 죄가 동시에 성립하는 경우를 말합니다. 그러나 각각의 죄는 독립적으로 공소시효가 적용되므로, + 한 죄의 공소시효가 완성되었다고 해서 다른 죄의 공소시효가 완성되는 것은 아닙니다. (C)는 공범에 대한 공소시효에 대한 내용입니다. 이 내용은 + 공범이 무죄 판결을 받은 경우, 그 공범에 대한 공소가 다른 진범에 대한 공소시효를 정지시키지 않는다는 내용입니다. 이는 형법의 공소시효에 대한 + 일반적인 원칙과 일치합니다. 공범이 무죄 판결을 받았다면, 그는 법적으로 공범이 아니므로 그에 대한 공소가 다른 진범에 대한 공소시효를 정지시키는 + 효력은 없습니다. (D)는 공범 중 한 명에 대한 공소시효 정지가 다른 공범에게 그 효력이 미치지만, 뇌물공여죄와 뇌물수수죄 사이와 같은 대향범 + 관계에 있는 자는 포함되지 않는다는 내용입니다. 이는 맞는 내용입니다. 대향범 관계는 한 죄를 저지른 자와 그 죄를 교사하거나 선동한 자 등이 + 서로 다른 죄를 저지른 관계를 말하며, 이 경우 각각의 죄는 독립적으로 공소시효가 적용됩니다. 따라서, 정답은 (B) 입니다. + + + 질문: 상소심에 대한 설명으로 옳지 않은 것은? + + A.피고인이 공소 기각의 판결에 대하여 무죄를 주장하며 상소하는 것은 상소 이익이 없으므로 허용되지 않는다 . + + B.상고심 판결의 파기 이유가 된 사실상의 판단은 당해 사건의 하급심에 대하여 기 속력을 가지며 , 이 경우에 파기 판결의 기 속력은 파기의 직접 + 이유가 된 원 심판결에 대한 소극적인 부정 판단에 한하여 생긴 다 . + + C.피고인이 제1심 판결에 대하여 양형 부당만을 항소이유로 내세워 항소하였다가 기각된 경우, 피고인은 그 항소심 판결에 대하여 사실 오인 또는 + 법리 오해의 위법이 있다는 것을 상고 이유로 삼을 수 없다. + + D.법률의 해석 ㆍ 적용을 그르친 나머지 피고인을 유죄로 잘못 인정한 항소심 판결에 대하여 검사만이 다른 사유를 들어 상고를 제기하였고 검사의 + 상고가 피고인의 이익을 위하여 제기된 것이 아님이 명백한 경우라면 , 상고법원은 직권으로 심판하여 무죄의 취지로 항소심 판결을 파기할 수 없다. + + 정답: 차근 차근 생각해봅시다. 형법 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저 각 선택지를 하나씩 살펴보겠습니다. (A)는 피고인이 + 공소 기각의 판결에 대해 무죄를 주장하며 상소하는 것은 상소 이익이 없으므로 허용되지 않는다는 내용입니다. 이는 피고인이 이미 공소 기각, 즉 + 무죄 판결을 받았음에도 무죄를 주장하며 상소하는 것은 실질적인 이익이 없으므로 상소가 허용되지 않는다는 법리를 설명하고 있습니다. 이는 법적으로 + 옳은 설명입니다. (B)는 상고심 판결의 파기 이유가 된 사실상의 판단은 당해 사건의 하급심에 대하여 기 속력을 가지며, 이 경우에 파기 판결의 + 기 속력은 파기의 직접 이유가 된 원 심판결에 대한 소극적인 부정 판단에 한하여 생긴다는 내용입니다. 이는 상고심 판결의 파기 이유가 된 사실 + 판단이 하급심에 대한 기속력을 가진다는 법리를 설명하고 있으며, 이는 법적으로 옳은 설명입니다. (C)는 피고인이 제1심 판결에 대하여 양형 부당만을 + 항소이유로 내세워 항소하였다가 기각된 경우, 피고인은 그 항소심 판결에 대하여 사실 오인 또는 법리 오해의 위법이 있다는 것을 상고 이유로 삼을 + 수 없다는 내용입니다. 이는 피고인이 양형 부당만을 항소이유로 내세웠다가 기각된 경우, 그 항소심 판결에 대해 새로운 상고 이유를 제시할 수 없다는 + 법리를 설명하고 있습니다. 이 역시 법적으로 옳은 설명입니다. (D)는 법률의 해석ㆍ적용을 그르친 나머지 피고인을 유죄로 잘못 인정한 항소심 판결에 + 대하여 검사만이 다른 사유를 들어 상고를 제기하였고 검사의 상고가 피고인의 이익을 위하여 제기된 것이 아님이 명백한 경우라면, 상고법원은 직권으로 + 심판하여 무죄의 취지로 항소심 판결을 파기할 수 없다는 내용입니다. 하지만, 법률의 해석ㆍ적용을 그르친 나머지 피고인을 유죄로 잘못 인정한 경우라면, + 상고법원은 검사의 상고가 피고인의 이익을 위하여 제기된 것이 아님에도 불구하고 직권으로 심판하여 무죄의 취지로 항소심 판결을 파기할 수 있습니다. 이 + 선택지는 잘못된 설명입니다. 따라서, 정답은 (D) 입니다. + + + 질문: 형법 제1조 제2항에 대한 설명으로 옳지 않은 것은? + + A.범죄 후 법률의 변경이 있더라도 형의 변경이 없는 경우에는 형법 제1조 제1항에 따라 행위 시법을 적용해야 한다. + + B.형의 경중의 비교는 원칙적으로 법정형을 표준으로 하고, 처단형이나 선고형에 의할 것은 아니다 . + + C.범죄 후 형벌법규의 위임을 받은 법령의 변경에 따라 범죄를 구성하지 아니하게 된 경우, 종전 법령이 범죄로 정하여 처벌한 것이 부당하였다는 + 반성적 고려에 따라 변경된 경우에 한하여 형 법 제1조 제2항이 적용된 다 . + + D.행위 시 양벌규정에는 법인에 대한 면책 규정이 없었으나 법률 개정으로 면책 규정이 추가된 경우, 법원은 형법 제1조 제2항에 따라 피고인에게 + 개정된 양벌규정을 적용해야 한다. + + 정답: 차근 차근 생각해봅시다. 형법 관련 정보를 위해 위키피디아를 참조하겠습니다. 형법 제1조 제2항에 따르면, 범죄 후 법률의 변경에 의하여 + 그 행위가 범죄를 구성하지 아니하거나 형이 구법보다 경한 때에는 신법에 의한다고 규정하고 있습니다. 즉, 법률이 변경된 경우에는 그 변경된 법률을 + 적용해야 한다는 것입니다. (A)는 옳은 설명입니다. 범죄 후 법률의 변경이 있더라도 형의 변경이 없는 경우에는 형법 제1조 제1항에 따라 행위 + 시법을 적용해야 합니다. (B)는 옳은 설명입니다. 형의 경중의 비교는 원칙적으로 법정형을 표준으로 하고, 처단형이나 선고형에 의할 것은 아닙니다. + (D)는 옳은 설명입니다. 행위 시 양벌규정에는 법인에 대한 면책 규정이 없었으나 법률 개정으로 면책 규정이 추가된 경우, 법원은 형법 제1조 + 제2항에 따라 피고인에게 개정된 양벌규정을 적용해야 합니다. (C)는 옳지 않은 설명입니다. 범죄 후 형벌법규의 위임을 받은 법령의 변경에 따라 + 범죄를 구성하지 아니하게 된 경우, 종전 법령이 범죄로 정하여 처벌한 것이 부당하였다는 반성적 고려에 따라 변경된 경우에 형법 제1조 제2항이 + 적용되는 것은 맞지만, 법령의 변경이 있더라도 그것이 반성적 고려에서 비롯된 것이 아니라면 형법 제1조 제2항이 적용되지 않습니다. 따라서, 정답은 + (C) 입니다. + + + 질문: {{question}} + + A.{{A}} + + B.{{B}} + + C.{{C}} + + D.{{D}} + + 정답: 차근 차근 생각해봅시다. 형법 관련 정보를 위해 위키피디아를 참조하겠습니다.' +include: _cot_kmmlu_yaml +task: kmmlu_hard_cot_criminal_law diff --git a/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_ecology.yaml b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_ecology.yaml new file mode 100644 index 0000000000..619042d1df --- /dev/null +++ b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_ecology.yaml @@ -0,0 +1,121 @@ +dataset_name: ecology +doc_to_text: '질문: 탄소순환에 관한 설명으로 옳은 것은? + + A.대기권에서 탄소는 주로 OPTIONO2, OPTIONO의 형태로 존재한다. + + B.생물체가 죽으면 미생물에 의하여 분해되어 유기태탄 소로 돌아간다. + + C.지구에서 탄소를 가장 많이 보유하고 있는 부분은 산림이다. + + D.녹색식물에 의하여 유기태탄소가 무기태탄소로 전환 된다. + + 정답: 차근 차근 생각해봅시다. 생태학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저 각 선택지에 대해 하나씩 살펴보겠습니다. (A) 대기권에서 + 탄소는 주로 CO2, CO의 형태로 존재한다. - 이 설명은 맞습니다. 대기권에서 탄소는 주로 이산화탄소(CO2)와 일산화탄소(CO)의 형태로 + 존재합니다. (B) 생물체가 죽으면 미생물에 의하여 분해되어 유기태탄 소로 돌아간다. - 이 설명도 맞습니다. 생물체가 죽으면 미생물에 의해 분해되어 + 다시 유기 탄소로 변환됩니다. (C) 지구에서 탄소를 가장 많이 보유하고 있는 부분은 산림이다. - 이 설명은 틀린 것 같습니다. 지구에서 가장 + 많은 탄소를 보유하고 있는 곳은 바다입니다. 바다는 지구 상에서 가장 큰 탄소 저장고로, 해양 생물체와 해양 퇴적물에 의해 대량의 탄소가 저장됩니다. + (D) 녹색식물에 의하여 유기태탄소가 무기태탄소로 전환 된다. - 이 설명은 틀립니다. 실제로는 녹색 식물이 무기 탄소를 유기 탄소로 전환합니다. + 이 과정은 광합성을 통해 이루어지며, 이 때 탄소는 대기 중의 이산화탄소에서 녹색 식물의 유기물로 전환됩니다. , 정확한 설명은 (A) 대기권에서 + 탄소는 주로 CO2, CO의 형태로 존재한다와 (B) 생물체가 죽으면 미생물에 의하여 분해되어 유기태탄 소로 돌아간다입니다. 그러나 이 중 하나만 + 선택해야 한다면, (A) 대기권에서 탄소는 주로 CO2, CO의 형태로 존재한다가 탄소순환에 대한 가장 기본적인 사실을 설명하고 있으므로 이를 + 선택하겠습니다. 따라서, 정답은 (A) 입니다. + + + 질문: 지표면으로부터 10-45km의 성층권에 존재하며 태양 으로부터 오는 자외선의 99%이상을 차단하여 피부암과 백내장 등의 발생을 막아주는 + 역할을 하는 물질은? + + A.오존 + + B.이산화탄소 + + C.프레온가스 + + D.양성자 α선 + + 정답: 차근 차근 생각해봅시다. 생태학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저 질문에서 주어진 정보를 확인해보겠습니다. 질문에서는 + ''지표면으로부터 10-45km의 성층권에 존재하며 태양으로부터 오는 자외선의 99% 이상을 차단하여 피부암과 백내장 등의 발생을 막아주는 역할을 + 하는 물질''에 대해 묻고 있습니다. (A) 오존에 대해 생각해보면, 오존은 대기 중에 존재하며 자외선을 차단하는 역할을 하는 것으로 알려져 있습니다. + 오존층은 지구 대기권 중에서 성층권에 위치해 있으며, 태양으로부터 오는 자외선 중 유해한 자외선 B를 흡수해줍니다. (B) 이산화탄소는 지구 대기 + 중에 존재하는 주요 온실가스 중 하나이지만, 자외선을 차단하는 역할에 대해서는 특별히 언급되지 않습니다. (C) 프레온가스는 냉장고나 에어컨 등에 + 사용되는 냉매로, 오존층 파괴에 기여하는 것으로 알려져 있습니다. 이 물질 자체가 자외선을 차단하는 역할을 하는 것은 아닙니다. (D) 양성자 + α선은 방사선의 일종으로, 이 물질이 자외선을 차단하는 역할을 하는 것은 아닙니다. , 위의 정보를 바탕으로 볼 때, 성층권에 존재하며 태양으로부터 + 오는 자외선의 99% 이상을 차단하여 피부암과 백내장 등의 발생을 막아주는 역할을 하는 물질은 오존입니다. 따라서, 정답은 (A) 입니다. + + + 질문: 콩과식물과 뿌리혹박테리아와 같이 두 종의 생물이 서로 상호작용하며 이익을 주고받는 관계를 의미하는 용어는? + + A.편리공생 + + B.상리공생 + + C.편해공생 + + D.자원이용 + + 정답: 차근 차근 생각해봅시다. 생태학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 질문에서 언급된 콩과식물과 뿌리혹박테리아의 관계를 + 생각해보겠습니다. 이 두 종의 생물이 서로 상호작용하며 이익을 주고받는 관계라는 점이 중요한 힌트입니다. 이런 관계를 일반적으로 공생관계라고 부릅니다. + (A). 편리공생은 한 종이 다른 종에 의해 이익을 받는 반면, 다른 종에게는 특별한 영향을 미치지 않는 관계를 의미합니다. , 이 용어는 두 + 종 모두가 이익을 얻는 상황을 설명하지 않습니다. (B). 상리공생은 두 종이 서로 이익을 주고받는 관계를 의미합니다. 이 용어는 콩과식물과 뿌리혹박테리아의 + 관계를 잘 설명하는 것 같습니다. (C). 편해공생은 한 종이 다른 종에게 해를 끼치는 반면, 다른 종에게는 특별한 영향을 미치지 않는 관계를 + 의미합니다. , 이 용어는 두 종 모두가 이익을 얻는 상황을 설명하지 않습니다. (D). 자원이용은 생물이 자신의 생존과 번식을 위해 주변 환경의 + 자원을 이용하는 행동을 의미합니다. 이 용어는 공생관계를 설명하는 것이 아니라, 생물의 일반적인 행동을 설명하는 용어입니다. , 콩과식물과 뿌리혹박테리아의 + 관계를 가장 잘 설명하는 용어는 ''상리공생''입니다. ''상리공생''은 두 종이 서로 이익을 주고받는 관계를 의미하므로, 이 용어가 이 질문의 + 정답일 것입니다. 따라서, 정답은 (B) 입니다. + + + 질문: 수은(Hg)을 함유하는 폐수가 방류되어 오염된 바다에서 잡은 어패류를 섭취함으로서 발생하는 병은? + + A.골연화증 + + B.미나마타병 + + C.피부흑색병 + + D.이따이이따이병 + + 정답: 차근 차근 생각해봅시다. 생태학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 수은(Hg)은 무거운 금속 중 하나로, 인체에 치명적인 + 독성을 가지고 있습니다. 그리고 어패류를 통해 인체에 들어오는 경우가 많습니다. 이에 대한 정보를 바탕으로 각 선택지를 살펴보겠습니다. (A) + 골연화증은 뼈가 약해지는 병으로, 일반적으로 고령화, 비타민 D 결핍, 칼슘 결핍 등으로 인해 발생합니다. 수은 오염과는 직접적인 관련성이 없습니다. + (B) 미나마타병은 1950년대 일본 미나마타시에서 처음 발생한 병으로, 수은 중독에 의해 발생하는 것으로 알려져 있습니다. 당시, 미나마타 시의 + 쿠니스토 가공 공장에서 아크릴아미드를 생산하는 과정에서 발생한 수은이 하수와 함께 바다로 유입되었고, 이로 인해 바다 생태계가 오염되었습니다. + 이렇게 오염된 바다에서 잡은 어패류를 섭취한 주민들이 미나마타병이라는 심각한 수은 중독 증상을 보였습니다. (C) 피부흑색병은 피부에 색소 침착이 + 일어나 피부가 검게 변하는 병으로, 일반적으로 피부에 직접적인 손상이나 특정 약물, 호르몬 불균형 등으로 인해 발생합니다. 수은 오염과는 직접적인 + 관련성이 없습니다. (D) 이따이이따이병은 실제로 존재하지 않는 병입니다. , 수은을 함유하는 폐수가 방류되어 오염된 바다에서 잡은 어패류를 + 섭취함으로서 발생하는 병은 미나마타병이라 할 수 있습니다. 따라서, 정답은 (B) 입니다. + + + 질문: 생태계의 구성요소에 관한 설명으로 틀린 것은? + + A.미량원소에는 몰리브덴, 망간, 철 등이 있다. + + B.생물계 안에는 탄소, 질소, 아연, 코발트와 같은 다량 원소가 있다. + + C.유기물질은 토성 및 물과 무기염류들의 보유력을 증진시킨다. + + D.다량원소들은 주로 유기체들이 직접 이용할 수 있는 이산화탄소, 물과 같은 간단한 화합물로 존재한다. + + 정답: 차근 차근 생각해봅시다. 생태학 관련 정보를 위해 위키피디아를 참조하겠습니다. 생태계의 구성요소에 대한 설명을 확인해보겠습니다. (A) + 옵션은 미량원소에 몰리브덴, 망간, 철 등이 있다고 말하고 있습니다. 미량원소는 생물체가 생존하고 성장하는데 필요한 원소 중에서 그 양이 매우 + 적은 것을 말합니다. 몰리브덴, 망간, 철은 실제로 미량원소로 분류되므로 이 설명은 올바릅니다. (B) 옵션은 생물계 안에는 탄소, 질소, 아연, + 코발트와 같은 다량 원소가 있다고 말하고 있습니다. 다량원소는 생물체가 생존하고 성장하는데 필요한 원소 중에서 그 양이 많은 것을 말합니다. 탄소와 + 질소는 확실히 다량원소로 분류되지만, 아연과 코발트는 일반적으로 미량원소로 분류됩니다. 이 설명에는 문제가 있어 보입니다. (C) 옵션은 유기물질이 + 토성 및 물과 무기염류들의 보유력을 증진시킨다고 말하고 있습니다. 유기물질은 토양의 물 분포, 구조, 영양소 보유력 등에 중요한 역할을 합니다. 이 + 설명은 올바릅니다. (D) 옵션은 다량원소들이 주로 유기체들이 직접 이용할 수 있는 이산화탄소, 물과 같은 간단한 화합물로 존재한다고 말하고 있습니다. + 이는 사실입니다. 예를 들어, 탄소는 이산화탄소의 형태로, 질소는 질소 가스나 암모니아의 형태로 존재합니다. , 위의 분석에 따르면, (B) + 옵션의 설명이 잘못되었습니다. 아연과 코발트는 일반적으로 미량원소로 분류되지만, 이 설명에서는 그들을 다량 원소로 잘못 분류하고 있습니다. 따라서, + 정답은 (B) 입니다. + + + 질문: {{question}} + + A.{{A}} + + B.{{B}} + + C.{{C}} + + D.{{D}} + + 정답: 차근 차근 생각해봅시다. 생태학 관련 정보를 위해 위키피디아를 참조하겠습니다.' +include: _cot_kmmlu_yaml +task: kmmlu_hard_cot_ecology diff --git a/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_economics.yaml b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_economics.yaml new file mode 100644 index 0000000000..1159bc7d9d --- /dev/null +++ b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_economics.yaml @@ -0,0 +1,122 @@ +dataset_name: economics +doc_to_text: '질문: 기업실체의 이해 관계자가 유용한 의사결정을 하기 위해서는 적시성 있는 정보가 필요하다. 이러한 정보수요를 충족시키기 + 위하여 기업 실체의 존속기간을 일정한 기간 단위로 분할하여 재무제표를 작성하는 기본가정은 무엇인가? + + A.기간별 보고 + + B.목적적합성 + + C.화폐단위의 안정 + + D.신뢰성 + + 정답: 차근 차근 생각해봅시다. 경제학 관련 정보를 위해 위키피디아를 참조하겠습니다. 기업실체의 이해 관계자가 유용한 의사결정을 하기 위해서는 + 적시성 있는 정보가 필요하다는 말은 기업의 재무 상황에 대한 정보가 시간적으로 지연 없이 제공되어야 한다는 것을 의미합니다. 이를 위해 기업 실체의 + 존속기간을 일정한 기간 단위로 분할하여 재무제표를 작성하는 기본가정을 찾아야 합니다. (A) 기간별 보고는 기업의 존속기간을 일정한 기간으로 분할하여 + 재무제표를 작성하고 이를 이해관계자에게 보고해야 한다는 원칙을 의미합니다. 이 원칙은 적시성 있는 정보 제공을 보장하며, 이해관계자가 유용한 의사결정을 + 할 수 있도록 돕습니다. , 기업실체의 존속기간을 일정한 기간 단위로 분할하여 재무제표를 작성하는 기본가정은 ''기간별 보고''가 가장 적합하다고 + 볼 수 있습니다. (B) 목적적합성은 재무정보가 특정 목적에 적합해야 한다는 원칙을 의미합니다. 이 원칙은 재무정보가 의사결정에 도움이 되기 위해 + 필요하지만, 이 경우에는 적시성과 직접적인 연관성이 없습니다. (C) 화폐단위의 안정은 재무정보가 안정된 화폐 단위로 표시되어야 한다는 원칙을 + 의미합니다. 이 원칙은 재무제표의 비교 가능성을 보장하지만, 이 경우에는 적시성과 직접적인 연관성이 없습니다. (D) 신뢰성은 재무정보가 정확하고 + 오류가 없어야 한다는 원칙을 의미합니다. 이 원칙은 재무제표가 신뢰성을 가질 때만 의사결정에 도움이 되지만, 이 경우에는 적시성에 직접적으로 관련되어 + 있지 않습니다. 따라서, 정답은 (A) 입니다. + + + 질문: 유형자산의 감가상각에 대한 설명으로 옳은 않은 것은? + + A.감가상각이란 감가상각대상금액을 내용연수에 걸쳐 합리적이고 체계적으로 배분하는 것을 말한다. + + B.감가상각대상금액은 취득원가에서 잔존가치를 차감한 금액으로 한다. + + C.정액법은 유형자산의 내용연수 동안 일정액의 감가상각액을 인식하는 방법이다. + + D.정률법을 적용하면 내용연수 초기보다 후기에 감가상각비를 더 많이 인식하게 된다. + + 정답: 차근 차근 생각해봅시다. 경제학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저 각 선택지에 대한 내용을 확인해봅시다. (A) 선택지는 + 감가상각에 대한 일반적인 정의를 제공합니다. 감가상각이란 기업이 자산을 사용함에 따라 그 가치가 감소하는 것을 회계적으로 반영하는 것을 말합니다. + 이는 자산의 사용기간 동안 체계적이고 합리적인 방식으로 이루어집니다. 이 선택지는 옳습니다. (B) 선택지는 감가상각 대상 금액에 대해 설명하고 + 있습니다. 감가상각 대상 금액은 일반적으로 자산의 취득원가에서 잔존가치를 뺀 금액입니다. 잔존가치는 자산의 사용기간이 끝난 후에도 여전히 가지고 + 있는 가치를 의미합니다. 이 선택지도 옳습니다. (C) 선택지는 정액법에 대해 설명하고 있습니다. 정액법은 감가상각의 한 방법으로, 이는 각 + 회계기간 동안 일정한 금액의 감가상각비를 인식하는 방법입니다. 이 선택지도 옳습니다. (D) 선택지는 정률법에 대해 설명하고 있습니다. 정률법은 + 감가상각의 한 방법으로, 자산의 장부가치에 일정한 비율을 적용하여 감가상각비를 계산하는 방법입니다. 이 방법을 사용하면, 사용기간이 길어질수록 + 감가상각비가 감소하게 됩니다. 이는 정률법이 장부가치(취득원가에서 누적 감가상각비를 뺀 금액)에 기반하기 때문입니다. , 이 선택지는 옳지 않습니다. + 따라서, 정답은 (D) 입니다. + + + 질문: (주)한공은 (주)서울 소유의 건물을 3년간 사용하기로 하는 전세계약을 체결하고, 전세금 10,000,000원을 지급하였다. (주)한공은 + 전세금 10,000,000원을 비유동자산 중 어떤 계정과목으로 표시하여야 하는가? + + A.장기외상매출금 + + B.구축물 + + C.임대보증금 + + D.임차보증금 + + 정답: 차근 차근 생각해봅시다. 경제학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 전세계약이란 임차인이 일정 기간 동안 건물 등을 사용할 + 권리를 얻기 위해 임대인에게 일정 금액을 지급하는 계약을 말합니다. 여기서 (주)한공은 임차인의 입장이며, (주)서울은 임대인의 입장입니다. 다음으로, + 전세금은 임차인이 임대인에게 건물 등을 사용할 권리를 얻기 위해 지급하는 금액을 말합니다. 이 금액은 임차인인 (주)한공이 임대인인 (주)서울에게 + 지급한 금액이므로, 이는 (주)한공의 비유동자산 중 하나로 간주될 수 있습니다. 선택지를 보면, (A) 장기외상매출금, (B) 구축물, (C) + 임대보증금, (D) 임차보증금이 있습니다. (A) 장기외상매출금은 장기적으로 회수가 예정된 매출금을 말하며, 이는 (주)한공이 전세금을 지급한 + 상황과는 관련이 없습니다. (B) 구축물은 (주)한공이 직접 건물을 건설하거나 개선하는 경우에 해당되므로, 이 역시 전세금을 지급한 상황과는 관련이 + 없습니다. (C) 임대보증금은 임대인이 임차인에게 보증금을 지급하는 경우에 해당되므로, 이는 (주)한공이 전세금을 지급한 상황과는 관련이 없습니다. + (D) 임차보증금은 임차인이 임대인에게 건물 등을 사용할 권리를 얻기 위해 지급하는 금액을 말합니다. 이는 (주)한공이 전세금 10,000,000원을 + 지급한 상황과 일치합니다. 따라서, 정답은 (D) 입니다. + + + 질문: 개인일반과세자 甲은 2014년 2월 10일에 부동산임대업을 폐업하였다. 甲이 2014년 1월 1일부터 2014년 2월 10일까지의 거래에 + 대한 부가가치세 확정 신고기한으로 옳은 것은? + + A.2014년 2월 25일 + + B.2014년 3월 25일 + + C.2014년 4월 25일 + + D.2014년 7월 25일 + + 정답: 차근 차근 생각해봅시다. 경제학 관련 정보를 위해 위키피디아를 참조하겠습니다. 개인일반과세자의 부가가치세 확정 신고 기간은 제1기(1월 + 1일부터 6월 30일까지)와 제2기(7월 1일부터 12월 31일까지)로 구분되며, 각 기의 확정 신고 기한은 다음과 같습니다. - 제1기 확정 + 신고: 매년 7월 1일부터 7월 25일까지 - 제2기 확정 신고: 매년 1월 1일부터 1월 25일까지 그러나, 이는 일반적인 사업 연도에 대한 + 확정신고기한이며, 폐업한 경우에는 다르게 적용됩니다. 폐업한 경우에는, 폐업일이 속하는 달의 말일로부터 25일 이내에 부가가치세 확정신고를 해야 + 합니다. 이를 바탕으로 질문에 대해 생각해보면, 甲이 2014년 2월 10일에 부동산임대업을 폐업하였으므로, 폐업일이 속하는 2월의 말일로부터 + 25일 이내인 2014년 3월 25일까지 확정신고를 해야 합니다. 따라서, 정답은 (B) 입니다. + + + 질문: (주)한공은 종원원이 퇴사하여 퇴직금 10,000,000원을 보통예금계좌에서 지급하였다. 이 거래를 회계처리한 후 나타나는 결과로 옳은 + 것은? (단, 종업원 퇴사직전 퇴직급여충당부채 잔액은 7,000,000원이다.) + + A.자산이 증가한다. + + B.자본금이 증가한다. + + C.부채가 감소한다. + + D.이익잉여금이 증가한다. + + 정답: 차근 차근 생각해봅시다. 경제학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, (주)한공이 종업원인 종원원에게 퇴직금 10,000,000원을 + 지급하였다고 합니다. 이는 회사의 자산인 ''보통예금''에서 10,000,000원이 줄어들었다는 의미입니다. 자산은 감소하였습니다. 이로 인해 + 선택지 A는 옳지 않습니다. 다음으로, 자본금이란 주주들이 회사에 투자한 금액을 말합니다. 이 경우에는 종원원의 퇴직금 지급과 관련하여 주주들이 + 추가적으로 회사에 투자한 내용이 없으므로, 자본금은 변동하지 않습니다. 선택지 B도 옳지 않습니다. 다음으로, 퇴직급여충당부채 잔액이 7,000,000원이었다고 + 합니다. 퇴직급여충당부채란 회사가 직원의 퇴직금을 지급할 의무를 미리 인식하고 이를 부채로 계상하는 것을 말합니다. 즉, 이는 회사의 부채입니다. + 종원원에게 퇴직금을 지급함으로써 이 부채는 감소하게 됩니다. 하지만, 퇴직금 10,000,000원 중에서 부채로 계상되어 있던 7,000,000원을 + 지급한 것이므로, 부채는 7,000,000원 감소하게 됩니다. 선택지 C는 옳습니다. 그런데 퇴직금 10,000,000원 중에서 부채로 계상되어 + 있던 금액을 초과하는 3,000,000원 (10,000,000원 - 7,000,000원)은 어떻게 처리되었을까요? 이 금액은 회사의 이익에서 차감되어야 + 합니다. 이는 이익잉여금, 즉 회사가 벌어들인 이익에서 퇴직금 등을 지급한 후 남은 금액이 감소한다는 의미입니다. 선택지 D는 옳지 않습니다. + 따라서, 정답은 (C) 입니다. + + + 질문: {{question}} + + A.{{A}} + + B.{{B}} + + C.{{C}} + + D.{{D}} + + 정답: 차근 차근 생각해봅시다. 경제학 관련 정보를 위해 위키피디아를 참조하겠습니다.' +include: _cot_kmmlu_yaml +task: kmmlu_hard_cot_economics diff --git a/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_education.yaml b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_education.yaml new file mode 100644 index 0000000000..745ad0b91b --- /dev/null +++ b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_education.yaml @@ -0,0 +1,115 @@ +dataset_name: education +doc_to_text: '질문: 신 교육 사회학에 대한 설명으로 옳지 않은 것은? + + A.학교 교육과정 또는 교육내용에 주목한다. + + B.불평등의 문제를 학교 교육 안에서 찾는다. + + C.학교에서 가르치는 지식의 사회적 성격을 탐구한다. + + D.구조기능주의에 기반하여 교육의 사회적 기능을 탐구한다. + + 정답: 차근 차근 생각해봅시다. 교육학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 신 교육 사회학은 학교 교육에 대한 사회학적 연구로서, + 학교 교육이 사회적으로 어떻게 구성되고 어떤 영향을 미치는지에 대한 탐구를 수행합니다. 이를 바탕으로 선택지를 살펴보겠습니다. (A) 학교 교육과정 + 또는 교육내용에 주목한다는 것은 신 교육 사회학의 주요한 특징 중 하나입니다. 신 교육 사회학은 교육과정이 사회적으로 구성되어 있으며, 이에 따라 + 학생들이 습득하는 지식과 가치가 영향을 받는다고 주장합니다. (B) 불평등의 문제를 학교 교육 안에서 찾는다는 것도 신 교육 사회학의 중요한 특징 + 중 하나입니다. 신 교육 사회학은 학교 교육이 사회적 불평등을 재생산하는 데에 기여한다고 주장합니다. (C) 학교에서 가르치는 지식의 사회적 성격을 + 탐구한다는 것은 신 교육 사회학의 핵심적인 주장 중 하나입니다. 신 교육 사회학은 지식이 사회적으로 구성되어 있으며, 학교에서 가르치는 지식 역시 + 사회적 맥락에 따라 형성된다고 주장합니다. (D) 구조기능주의에 기반하여 교육의 사회적 기능을 탐구한다는 것은 신 교육 사회학의 특징이 아닙니다. + 신 교육 사회학은 구조기능주의에 비판적이며, 교육의 사회적 기능을 다른 관점에서 해석합니다. 따라서, 정답은 (D) 입니다. + + + 질문: 피들러(Fiedler)의 리더십 상황이론에서 강조하는 ‘상황’ 요소에 포함되지 않는 것은? + + A.구성원의 성숙도 + + B.과업의 구조화 정도 + + C.지도자와 구성원의 관계 + + D.지도자가 구성원에 대해 가지고 있는 영향력의 정도 + + 정답: 차근 차근 생각해봅시다. 교육학 관련 정보를 위해 위키피디아를 참조하겠습니다. 피들러의 리더십 상황이론은 리더의 성향과 상황 요소를 중심으로 + 한 이론입니다. 이 이론에 따르면, 리더의 성향과 상황 요소의 적절한 조합이 효과적인 리더십을 만들어낸다는 것이 핵심입니다. 상황 요소에는 ''과업의 + 구조화 정도'', ''지도자와 구성원의 관계'', ''지도자가 구성원에 대해 가지고 있는 영향력의 정도'' 등이 포함됩니다. ''과업의 구조화 + 정도''는 과업이 얼마나 명확하게 정의되고, 어떻게 수행되어야 하는지에 대한 정도를 의미합니다. ''지도자와 구성원의 관계''는 상호 신뢰, 존경, + 감정적 애착 등을 포함합니다. ''지도자가 구성원에 대해 가지고 있는 영향력의 정도''는 리더의 권위와 영향력을 의미합니다. 그러나 ''구성원의 + 성숙도''는 허시-블랜차드의 리더십 이론에서 중요한 요소로 다루어지는 개념입니다. 이 이론에서는 구성원의 역량과 동기에 따라 리더십 스타일을 조절해야 + 한다는 주장을 하고 있습니다. , 피들러의 리더십 상황이론에서 강조하는 ''상황'' 요소에는 ''구성원의 성숙도''가 포함되지 않습니다. 이는 + 허시-블랜차드의 리더십 이론에서 중요하게 다루어지는 요소입니다. 따라서, 정답은 (A) 입니다. + + + 질문: 교육행정의 원리에 대한 설명으로 옳지 않은 것은? + + A.안정성 의 원리는 교육정책을 일관되고 지속적으로 추진해야 한다는 것이다. + + B.효율성 의 원리는 교육에 투입되는 비용을 상대적으로 적게 하면서 교육 목표를 달성하려는 것이다. + + C.자주 성의 원리는 지역의 특수성과 다양성을 반영하여 주민의 적극적인 의사와 자발적인 참여를 강조하는 것이다. + + D.민주성 의 원리는 이해당사자들의 의사를 적극적으로 반영하고 그들을 의사결정 과정에 적절하게 참여시켜야 한다는 것이다. + + 정답: 차근 차근 생각해봅시다. 교육학 관련 정보를 위해 위키피디아를 참조하겠습니다. 교육행정의 원리에 대해 알아보겠습니다. 우선 교육행정의 원리는 + 합법성, 기회균등, 자주성 존중, 지방분권, 민주성, 공공성, 효율성, 안정성 유지, 전문성 보장의 원리로 이루어진 9가지가 존재합니다. (A) + 안정성의 원리는 교육정책을 일관되고 지속적으로 추진해야 한다는 것으로, 교육의 효과를 높이고 사회적 안정을 유지하기 위해 중요합니다. (B) 효율성의 + 원리는 교육에 투입되는 비용을 상대적으로 적게 하면서 교육 목표를 달성하려는 것으로, 교육 예산을 효율적으로 활용하고 교육의 성과를 높이기 위해 + 중요합니다. (D) 민주성의 원리는 이해당사자들의 의사를 적극적으로 반영하고 그들을 의사결정 과정에 적절하게 참여시켜야 한다는 것으로, 교육행정의 + 공정성과 투명성을 높이고 교육의 발전을 이루기 위해 중요합니다. 하지만, (C) 자주성의 원리는 교육행정의 원리에 해당하지 않습니다. 따라서, + 정답은 (C) 입니다. + + + 질문: 문화실조론의 주장으로 옳지 않은 것은? + + A.학생의 학습 실패 중요 요인으로 학생의 문화적 경험 부족을 지목한다. + + B.문화적 상대주의 관점이며, 학생 간의 교육격차가 문화적 결핍 보다는 문화적 차이 때문이라고 본다. + + C.빈곤 가정의 결핍된 문화적 환경을 보상하기 위한 프로그램 중 하나가 헤드스타트 프로그램이다. + + D.학교에서 학생들의 성공과 실패는 유전적으로 결정된 것이 아니라고 본다. + + 정답: 차근 차근 생각해봅시다. 교육학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저 문화실조론에 대해 알아보겠습니다. 문화실조론은 1960년대 + 미국에서 빈곤층 아동들의 학업 성적 저하를 설명하기 위해 제기된 이론입니다. 이 이론은 학생들의 학업 성적 저하는 학생들이 가진 문화적 경험의 + 부족이 주된 원인이라고 주장합니다. 이에 따라 빈곤층 아동들의 문화적 경험을 풍부하게 하기 위한 여러 프로그램들이 제안되었는데, 그 중 하나가 + 헤드스타트 프로그램입니다. 선택지 (A)는 문화실조론의 주요 주장을 잘 나타내고 있습니다. 학생들의 학업 성적 저하는 학생들이 가진 문화적 경험의 + 부족 때문이라는 것이 이론의 핵심입니다. (A)는 문화실조론의 주장입니다. 선택지 (B)는 문화적 상대주의 관점을 언급하고 있습니다. 이는 + 문화실조론과는 약간 다른 관점입니다. 문화적 상대주의는 모든 문화가 동등하다는 주장이며, 이는 문화실조론이 주장하는 ''문화적 결핍''과는 상반되는 + 개념입니다. 문화실조론은 특정 문화(여기서는 빈곤층 아동들의 문화)가 결핍되었다고 보는 반면, 문화적 상대주의는 모든 문화가 동등하다고 보기 때문입니다. (B)는 + 문화실조론의 주장이 아닙니다. 선택지 (C)는 문화실조론이 주장하는 바를 잘 나타내고 있습니다. 빈곤층 아동들의 문화적 경험을 풍부하게 하기 위한 + 프로그램 중 하나가 헤드스타트 프로그램이라는 것이 이론의 주장입니다. 마지막으로 선택지 (D)는 학교에서 학생들의 성공과 실패는 유전적으로 결정된 + 것이 아니라고 보는 것입니다. 이는 문화실조론이 주장하는 바와 일치합니다. 문화실조론은 학생들의 학업 성적 저하는 학생들이 가진 문화적 경험의 + 부족이 주된 원인이라고 보기 때문입니다. 따라서, 정답은 (B) 입니다. + + + 질문: 평생교육법 상평생학습도시에 대한 설명으로 옳지 않은 것은? + + A.평생학습도시의 지정 및 지원에 필요한 사항은 교육부 장관이 정한다. + + B.전국평생학습도시협의회의 구성 및 운영에 필요한 사항은 교육부령으로 정한다. + + C.평생학습도 시 간의 연계․ 협력 및 정보교류의 증진을 위하여 전국 평생학습도시협의회를 둘 수 있다. + + D.국가는 지역사회의 평생교육 활성화를 위하여 시․군 및 자치구를 대상으로 평생학습도시를 지정 및 지원할 수 있다. + + 정답: 차근 차근 생각해봅시다. 교육학 관련 정보를 위해 위키피디아를 참조하겠습니다. 우선, 평생교육법을 확인해야 합니다. 평생교육법 제24조에 + 따르면, 국가는 지역사회의 평생교육 활성화를 위하여 시․군 및 자치구를 대상으로 평생학습도시를 지정 및 지원할 수 있다. 이를 통해 선택지 (D)는 + 정확하다는 것을 알 수 있습니다. 그리고 평생교육법 제24조의2에는 평생학습도시의 지정 및 지원에 필요한 사항은 교육부 장관이 정한다는 내용이 + 있습니다. 이를 통해 선택지 (A)도 옳다는 것을 확인할 수 있습니다. 또한, 평생교육법 제24조의3에서는 평생학습도시 간의 연계․협력 및 정보교류의 + 증진을 위하여 전국 평생학습도시협의회를 둘 수 있다는 내용이 있습니다. 선택지 (C)도 옳다는 것을 확인할 수 있습니다. 하지만, 평생교육법에는 + 전국평생학습도시협의회의 구성 및 운영에 필요한 사항은 교육부령으로 정한다는 내용은 없습니다. 이를 통해 선택지 (B)가 평생교육법 상평생학습도시에 + 대한 설명으로 옳지 않다는 것을 알 수 있습니다. 따라서, 정답은 (B) 입니다. + + + 질문: {{question}} + + A.{{A}} + + B.{{B}} + + C.{{C}} + + D.{{D}} + + 정답: 차근 차근 생각해봅시다. 교육학 관련 정보를 위해 위키피디아를 참조하겠습니다.' +include: _cot_kmmlu_yaml +task: kmmlu_hard_cot_education diff --git a/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_electrical_engineering.yaml b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_electrical_engineering.yaml new file mode 100644 index 0000000000..f6b81c0cf4 --- /dev/null +++ b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_electrical_engineering.yaml @@ -0,0 +1,124 @@ +dataset_name: electrical_engineering +doc_to_text: '질문: 곡선도로 조명상 조명기구의 배치 조건이 가장 적당한 것은? + + A.양측 배치의 경우는 지그재그식으로 한다. + + B.한쪽만 배치하는 경우는 커브 바깥쪽에 배치한다. + + C.직선도로에서 보다 등 간격을 조금 더 넓게 한다. + + D.곡선도로의 곡률 반지름이 클수록 등 간격을 짧게 한다. + + 정답: 차근 차근 생각해봅시다. 전기 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저 각 선택지에 대한 검토를 해보겠습니다. (A) 양측 + 배치의 경우는 지그재그식으로 한다. 지그재그식 배치는 보통 도로의 양측에 조명기구를 배치할 때 사용하는 방식입니다. 이 방식은 두 조명기구 사이의 + 거리를 적절하게 유지하면서도 도로의 전체적인 밝기를 유지할 수 있게 해줍니다. 하지만 이것이 곡선도로에서도 반드시 적용되는지에 대한 정보는 확인이 + 필요합니다. (B) 한쪽만 배치하는 경우는 커브 바깥쪽에 배치한다. 이 선택지는 로드 라이팅 디자인의 기본 원칙 중 하나로 보입니다. 곡선 도로에서 + 커브 바깥쪽에 조명을 배치하면, 운전자가 도로를 더 잘 볼 수 있습니다. 이는 운전자가 도로의 곡률을 더 잘 인식하게 하고, 사고 위험을 줄이는 + 데 도움이 됩니다. (C) 직선도로에서 보다 등 간격을 조금 더 넓게 한다. 이 선택지는 조명기구의 배치 간격에 관한 것입니다. 직선 도로에서는 + 조명기구 간의 거리가 일정하게 유지되지만, 곡선 도로에서는 조명기구 간의 거리를 넓게 유지해야 할 수도 있습니다. 이는 곡선 도로에서 운전자의 + 시야를 확보하기 위한 것일 수 있습니다. (D) 곡선도로의 곡률 반지름이 클수록 등 간격을 짧게 한다. 이 선택지는 곡선도로의 곡률 반지름에 따라 + 조명기구의 배치 간격을 조정하는 것을 제안하고 있습니다. 곡률 반지름이 큰 곡선도로에서는 도로가 덜 굽어 있으므로, 조명기구 간의 거리를 짧게 + 유지할 수 있습니다. 이는 도로의 밝기를 일정하게 유지하는 데 도움이 될 수 있습니다. 각 선택지를 분석한 결과, (B) 한쪽만 배치하는 경우는 + 커브 바깥쪽에 배치한다는 가장 합리적인 배치 방법으로 보입니다. 이 방법은 곡선 도로에서 운전자의 시야를 가장 잘 확보할 수 있게 해주기 때문입니다. + 다른 선택지들은 곡선 도로에서의 조명기구 배치에 대한 구체적인 가이드라인을 제공하지 않습니다. 따라서, 정답은 (B) 입니다. + + + 질문: 휘도 B[sb], 반지름 r[m]인 등휘도 완전 확산성 구 광원의 전광속 F[lm]은 얼마인가? + + A.4r2OPTION + + B.πr2OPTION + + C.π2r2OPTION + + D.4π2r2OPTION + + 정답: 차근 차근 생각해봅시다. 전기 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 등휘도 완전 확산성 구 광원에 대해 이해해야 합니다. + 이는 구 형태의 광원에서 모든 방향으로 동일한 강도의 빛이 발산되는 것을 의미합니다. 휘도(B)는 광도(I)를 표면적(A)으로 나눈 값으로 정의됩니다. + 즉, B = I/A입니다. 여기서 광도(I)는 빛의 강도를 나타내며, 단위는 루멘(lm)입니다. 표면적(A)는 단위 면적당 빛의 양을 나타내며, + 단위는 제곱미터(m^2)입니다. 등휘도 완전 확산성 구 광원의 경우, 모든 방향으로 동일한 강도의 빛이 발산되므로, 전광속(F)은 광원의 모든 + 표면에서 발산되는 총 빛의 양을 나타냅니다. 구의 표면적(A)은 4πr^2로 계산됩니다. , 광도(I)는 휘도(B)와 표면적(A)의 곱, 즉 + I = B * A이므로, I = B * 4πr^2가 됩니다. 전광속(F)는 광원의 모든 표면에서 발산되는 총 빛의 양이므로, 광도(I)와 동일합니다. , + F = I = B * 4πr^2입니다. 따라서, 정답은 (D) 입니다. + + + 질문: 200W 전구를 우유색 구형 글로브에 넣었을 경우 우유색 유리의 반사율은 40%, 투과율은 50%라고 할 때 글로브의 효율은 약 몇 %인가? + + A.20 + + B.40 + + C.50 + + D.83 + + 정답: 차근 차근 생각해봅시다. 전기 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 우선, 글로브의 효율을 계산하기 위해 우리는 먼저 어떤 + 양이 글로브를 통과하거나 반사되는지 알아야 합니다. 문제에서 주어진 것은 우유색 유리의 반사율이 40%, 투과율이 50%라는 것입니다. 이것은 + 우유색 유리가 받은 전체 에너지 중 40%는 반사되고, 50%는 통과한다는 것을 의미합니다. 그럼 남은 10%는 어디로 갔을까요? 이 부분은 문제에서 + 명시적으로 언급되지 않았지만, 일반적으로 이러한 유형의 문제에서는 나머지 에너지가 흡수되었다고 가정합니다. , 200W 전구의 경우, 40%는 + 반사되어 80W가 되고, 50%는 통과하여 100W가 됩니다. 글로브의 효율은 통과된 에너지와 반사된 에너지의 합을 전체 에너지로 나눈 것이므로, + (80W + 100W) / 200W = 0.9 또는 90%가 됩니다. 그러나 선택지 중에 90%는 없습니다. 이 경우, 문제의 정보가 잘못되었거나 + 제가 무언가를 잘못 이해하고 있는 것일 수 있습니다. 이러한 상황에서는 문제를 다시 확인하거나 추가 정보를 찾아보는 것이 좋습니다. 그러나 이 + 경우에는 추가 정보를 찾을 수 없으므로, 주어진 정보를 바탕으로 가장 가능성이 높은 답변을 선택해야 합니다. 이 문제에서는 글로브의 효율이 90%라고 + 계산되었지만, 선택지 중에서는 83%가 가장 가까운 값입니다. 따라서, 정답은 (D) 입니다. + + + 질문: 폭 24m인 거리의 양쪽에 20m의 간격으로 지그재그식으로 등주를 배치하여 도로상의 평균 조도를 5[lx]로 하고자 한다. 각 등주상에 + 몇 [lm]의 전구가 필요한가? (단, 도로면에서의 광속 이용률은 25%이다.) + + A.4000 + + B.4500 + + C.4800 + + D.5000 + + 정답: 차근 차근 생각해봅시다. 전기 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 이 문제를 해결하기 위해 조도와 플럭스에 대한 + 개념을 이해해야 합니다. 조도(lux, lx)는 단위 면적당 광속(lumen, lm)을 나타내는 단위입니다. 조도는 광속을 면적으로 나눈 값이라고 + 할 수 있습니다. 문제에서 주어진 정보를 바탕으로 필요한 광속을 계산해보겠습니다. 우선, 도로의 폭이 24m이고, 등주의 간격이 20m라는 정보를 + 통해 도로의 면적을 계산할 수 있습니다. 면적은 폭과 길이를 곱한 값이므로, 도로의 면적은 24m * 20m = 480m²입니다. 다음으로, 도로상의 + 평균 조도가 5lx라는 정보를 통해 필요한 총 광속을 계산할 수 있습니다. 조도가 면적당 광속이므로, 총 광속은 조도 * 면적입니다. 필요한 + 총 광속은 5lx * 480m² = 2400lm입니다. 그러나, 도로면에서의 광속 이용률이 25%라는 정보를 고려해야 합니다. 이는 도로에 비추어지는 + 전체 광속 중 실제로 도로면에서 이용되는 광속의 비율을 의미합니다. 실제로 필요한 광속은 계산된 총 광속을 이용률로 나눈 값이 됩니다. 즉, + 필요한 광속은 2400lm / 0.25 = 9600lm입니다. 하지만, 이는 도로 전체에 필요한 광속이므로, 등주 하나에 필요한 광속을 계산해야 + 합니다. 등주가 지그재그식으로 배치되어 있으므로, 하나의 등주는 2개의 도로 면적을 비추게 됩니다. 하나의 등주에 필요한 광속은 9600lm + / 2 = 4800lm입니다. 따라서, 정답은 (C) 입니다. + + + 질문: 플랭크의 방사법칙을 이용하여 온도를 측정하는 것은? + + A.광고온계 + + B.방사 온도계 + + C.열전 온도계 + + D.저항 온도계 + + 정답: 차근 차근 생각해봅시다. 전기 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 플랭크의 방사법칙은 물체가 방출하는 전자기 복사의 스펙트럼과 + 세기가 그 물체의 온도와 관련이 있다는 원리를 설명합니다. 이 원리를 이용하여 온도를 측정하는 장치는 물체가 방출하는 복사 에너지를 측정하여 온도를 + 결정합니다. 주어진 옵션들 중에서: (A) 광고온계 (Optical Pyrometer): 이 장치는 특정 파장(여기서는 0.65μm의 적색 단파장)의 + 가시광선을 이용해 온도를 측정합니다. 열원으로부터 방사되는 빛과 기기 내의 표준 열원으로부터 나오는 같은 파장의 빛의 강도를 비교함으로써 온도를 + 측정합니다. 이 방법은 비앙(Wien)의 분배법칙에 바탕을 두고 있으며, 흑체 또는 흑체 조건에서 방사되는 열 에너지의 파장과 강도가 온도에 따라 + 변화하는 원리를 이용합니다. (B) 방사 온도계 (Radiation Pyrometer): 이 장치는 물체로부터 방출되는 열방사(적외선)를 받아들여 + 온도를 측정합니다. 이 방법은 열전도를 이용하는 온도계와는 다르게 비접촉 방식이며, 고속으로 온도를 측정할 수 있습니다. (C) 열전 온도계 (Thermocouple): + 이 장치는 두 다른 금속의 접합점에서 발생하는 전압 변화를 측정하여 온도를 결정합니다. (D) 저항 온도계 (Resistance Thermometer): + 이 장치는 온도에 따라 변하는 재료의 전기 저항을 측정하여 온도를 결정합니다. 주어진 옵션들 중에서, 플랭크의 방사법칙을 이용하여 온도를 측정하는 + 장치는 광고온계(Optical Pyrometer)입니다. 이는 흑체 또는 비슷한 조건의 물체로부터 방사되는 가시광선의 강도를 통해 온도를 측정하는 + 방식을 사용하며, 흑체의 방사율을 1로 설정하여 보정하는 원리를 기반으로 합니다. 따라서, 정답은 (A) 입니다. + + + 질문: {{question}} + + A.{{A}} + + B.{{B}} + + C.{{C}} + + D.{{D}} + + 정답: 차근 차근 생각해봅시다. 전기 공학 관련 정보를 위해 위키피디아를 참조하겠습니다.' +include: _cot_kmmlu_yaml +task: kmmlu_hard_cot_electrical_engineering diff --git a/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_electronics_engineering.yaml b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_electronics_engineering.yaml new file mode 100644 index 0000000000..5320672680 --- /dev/null +++ b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_electronics_engineering.yaml @@ -0,0 +1,114 @@ +dataset_name: electronics_engineering +doc_to_text: '질문: C 언어에서 사용되는 자료형이 아닌 것은? + + A.double + + B.short + + C.integer + + D.float + + 정답: 차근 차근 생각해봅시다. 전자 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. C 언어에서는 여러가지 기본 자료형을 제공하고 있습니다. + (A) double은 C 언어에서 실수를 표현하는 자료형 중 하나로, float보다 더 넓은 범위의 실수를 표현할 수 있습니다. 이는 C 언어의 + 자료형입니다. (B) short는 C 언어에서 정수를 표현하는 자료형 중 하나로, int보다 작은 범위의 정수를 표현할 수 있습니다. 이 역시 + C 언어의 자료형입니다. (D) float은 C 언어에서 실수를 표현하는 자료형으로, double보다 작은 범위의 실수를 표현할 수 있습니다. + 이 역시 C 언어의 자료형입니다. 그러나 (C) integer는 C 언어의 자료형이 아닙니다. C 언어에서 정수를 표현하는 자료형은 int, short, + long 등이 있지만 ''integer''라는 자료형은 존재하지 않습니다. 따라서, 정답은 (C) 입니다. + + + 질문: 원시 프로그램을 컴파일러가 수행되는 기계에 대한 기계어로 번역하는 것이 아니라, 다른 기종에 대한 기계어로 번역하는 것은? + + A.linker + + B.debugger + + C.cross-compiler + + D.preprocessor + + 정답: 차근 차근 생각해봅시다. 전자 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 각 선택지에 대한 설명을 해보겠습니다. (A) + 링커(linker)는 여러 개의 오브젝트 파일들을 연결시켜 하나의 실행 파일을 만드는 역할을 합니다. 이는 컴파일 과정의 마지막 단계에서 일어나는 + 작업입니다. (B) 디버거(debugger)는 프로그램의 오류를 찾고 수정하는 데 사용되는 소프트웨어 도구입니다. 이는 실행 중인 프로그램을 모니터링하고, + 필요한 경우 중단시켜 변수의 값을 검사하거나 변경할 수 있습니다. (C) 크로스 컴파일러(cross-compiler)는 한 기종의 컴퓨터에서 실행되지만, + 다른 기종의 컴퓨터에서 실행될 수 있는 코드를 생성하는 컴파일러입니다. 이는 다른 하드웨어 아키텍처를 대상으로 코드를 생성할 때 사용됩니다. (D) + 프리프로세서(preprocessor)는 컴파일러가 소스 코드를 컴파일하기 전에 처리하는 프로그램입니다. 이는 주로 소스 코드 내의 매크로를 확장하거나, + 조건부 컴파일 지시자를 처리하는 데 사용됩니다. 질문에서는 ''원시 프로그램을 컴파일러가 수행되는 기계에 대한 기계어로 번역하는 것이 아니라, + 다른 기종에 대한 기계어로 번역하는 것''을 묻고 있습니다. 이 설명은 크로스 컴파일러(cross-compiler)의 기능과 일치합니다. 따라서, + 정답은 (C) 입니다. + + + 질문: BNF 심볼 중 택일을 의미하는 것은? + + A.::= + + B.<> + + C.| + + D.# + + 정답: 차근 차근 생각해봅시다. 전자 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. BNF(Backus-Naur Form)는 문법을 정의하는 + 메타 문법입니다. 이는 프로그래밍 언어나 데이터 구조의 문법을 표현하는 데 사용됩니다. BNF에서 사용되는 심볼들은 각각 특정한 의미를 가지고 + 있습니다. 선택지를 하나씩 살펴보면, (A) ::= 심볼은 BNF에서 "정의한다"는 의미를 가집니다. 즉, 왼쪽에 있는 식이나 요소가 오른쪽에 + 있는 식이나 요소로 정의된다는 것을 나타냅니다. (B) <> 심볼은 BNF에서 비터미널을 표현하는 데 사용됩니다. 비터미널이란, 규칙에 의해 다른 + 심볼로 대체될 수 있는 심볼을 의미합니다. (C). | : 이 심볼은 BNF에서 여러 선택 사항 중 하나를 선택할 수 있음을 나타냅니다. 예를 + 들어, A | B는 A나 B 중 하나를 선택할 수 있음을 의미합니다. (D) # 심볼은 일반적으로 BNF에서 사용되지 않는 심볼입니다. 따라서, + 정답은 (C) 입니다. + + + 질문: 로더(Loader)의 기능으로 볼 수 없는 것은? + + A.할당(allocation) + + B.연결(link) + + C.번역(translation) + + D.재배치(relocation) + + 정답: 차근 차근 생각해봅시다. 전자 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 로더(loader)는 컴퓨터 시스템에서 실행할 프로그램을 + 메모리에 적재하는 역할을 하는 프로그램입니다. 이를 위해 로더는 크게 세 가지 주요 기능을 수행합니다. 1. 할당(Allocation): 로더는 + 프로그램이 메모리 내에서 어디에 위치할지 결정합니다. 이를 위해 프로그램이 필요로 하는 메모리 공간을 찾아 할당하는 작업을 수행합니다. , ''할당''은 + 로더의 기능 중 하나입니다. 2. 연결(Linking): 프로그램은 여러 개의 모듈로 분할될 수 있습니다. 로더는 이러한 모듈들을 연결하여 하나의 + 실행 가능한 프로그램을 만듭니다. , ''연결'' 또한 로더의 기능 중 하나입니다. 3. 재배치(Relocation): 프로그램이 메모리 내의 + 특정 위치에 적재되면, 그 프로그램 내의 모든 주소는 적재된 위치를 기준으로 재배치됩니다. 이러한 작업을 로더가 수행하므로, ''재배치'' 또한 + 로더의 기능입니다. 그러나 ''번역(Translation)''은 로더의 기능이 아닙니다. 번역은 주로 컴파일러나 인터프리터가 수행하는 작업으로, + 고급 언어로 작성된 소스 코드를 저급 언어인 기계어로 변환하는 과정을 의미합니다. 이는 로더의 역할 범위를 벗어난 작업입니다. 따라서, 정답은 + (C) 입니다. + + + 질문: 운영체제가 제공하는 서비스로 볼 수 없는 것은? + + A.프로그래머가 작성한 응용 프로그램에 대한 오류를 자동으로 수정한다. + + B.파일의 생성, 판독, 삭제 등의 파일에 대한 조작을 지원한다. + + C.각종 자원에 대한 사용 내역이나 응답시간과 같은 성능향상을 위한 요소들을 기록하여 관리한다. + + D.컴퓨터 시스템의 하드웨어 오류를 발견하고 그에 대한 적절한 조치를 한다. + + 정답: 차근 차근 생각해봅시다. 전자 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 운영체제는 컴퓨터 시스템의 자원을 관리하고 응용 프로그램과 + 하드웨어 사이의 인터페이스 역할을 하는 소프트웨어입니다. 선택지 (A)는 프로그래머가 작성한 응용 프로그램에 대한 오류를 자동으로 수정한다는 내용입니다. + 하지만, 이는 운영체제의 기능이 아닙니다. 프로그램의 오류는 프로그래머나 개발자가 디버깅 과정을 통해 찾아내고 수정해야 합니다. 운영체제는 오류가 + 발생하면 그 정보를 프로그래머에게 전달할 수 있지만, 자동으로 수정하는 것은 아닙니다. 선택지 (B)는 파일의 생성, 판독, 삭제 등의 파일에 + 대한 조작을 지원한다는 내용입니다. 이는 운영체제의 핵심 기능 중 하나로, 파일 시스템 관리를 통해 사용자가 파일을 효과적으로 관리하고 사용할 + 수 있게 지원합니다. 선택지 (C)는 각종 자원에 대한 사용 내역이나 응답시간과 같은 성능향상을 위한 요소들을 기록하여 관리한다는 내용입니다. + 이 또한 운영체제의 중요한 기능 중 하나로, 시스템 성능을 모니터링하고 최적화하는 역할을 합니다. 마지막으로 선택지 (D)는 컴퓨터 시스템의 하드웨어 + 오류를 발견하고 그에 대한 적절한 조치를 한다는 내용입니다. 이 역시 운영체제의 기능으로, 하드웨어 오류를 감지하고 적절한 처리를 하여 시스템의 + 안정성을 유지하는 역할을 합니다. 따라서, 정답은 (A) 입니다. + + + 질문: {{question}} + + A.{{A}} + + B.{{B}} + + C.{{C}} + + D.{{D}} + + 정답: 차근 차근 생각해봅시다. 전자 공학 관련 정보를 위해 위키피디아를 참조하겠습니다.' +include: _cot_kmmlu_yaml +task: kmmlu_hard_cot_electronics_engineering diff --git a/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_energy_management.yaml b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_energy_management.yaml new file mode 100644 index 0000000000..0c1687d684 --- /dev/null +++ b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_energy_management.yaml @@ -0,0 +1,118 @@ +dataset_name: energy_management +doc_to_text: '질문: 이상적인 변압기에 대한 설명으로 옳은 것은? + + A.단자 전류의 비 I2/I1는 권수비와 같다. + + B.단자 전압의 비 V2/V1는 코일의 권수비와 같다. + + C.1차측 복소전력은 2차측 부하의 복소전력과 같다. + + D.1차측 단자에서 본 전체 임피던스는 부하 임피던스에 권수비의 자승의 역수를 곱한 것과 같다. + + 정답: 차근 차근 생각해봅시다. 에너지 관리 관련 정보를 위해 위키피디아를 참조하겠습니다. 이상적인 변압기에 대한 설명을 분석하기 위해 각 선택지를 + 살펴보겠습니다. (A) "단자 전류의 비 I2/I1는 권수비와 같다"는 이상적인 변압기에 대한 설명입니다. 이상적인 변압기에서는 1차측과 2차측의 + 권수비가 전류 비율을 결정합니다. 예를 들어, 1차측에 100회 권선, 2차측에 200회 권선이 있다면, 2차측의 전류는 1차측의 전류의 절반만큼 + 흐를 것입니다. 이것은 변압기의 근본적인 원리 중 하나입니다. (B) 선택지는 변압기의 단자 전압의 비는 코일의 권수비와 같다고 말하고 있습니다. + 이는 사실이 아닙니다. (C) 선택지는 "1차측 복소전력은 2차측 부하의 복소전력과 같다"고 합니다. 이상적인 변압기에서는 1차측과 2차측의 전력이 + 동일해야 합니다. 하지만 이는 복소전력에 관한 진술이므로, 더 구체적인 맥락이 필요합니다. (D) 선택지는 "1차측 단자에서 본 전체 임피던스는 + 부하 임피던스에 권수비의 자승의 역수를 곱한 것과 같다"고 합니다. 이것은 변압기의 임피던스 리플렉션 원리를 설명하지만 사실이 아닙니다. 따라서, + 정답은 (A) 입니다. + + + 질문: 어떤 회로에 E=200+j50(V)인 전압을 가했을 때 I=5+j5(A)의 전류가 흘렀다면 이 회로의 임피던스는 약 몇 Ω인가? + + A.0 + + B.∞ + + C.70+j30 + + D.25-j15 + + 정답: 차근 차근 생각해봅시다. 에너지 관리 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 회로의 임피던스 Z를 구하는 방법에 대해 알아보겠습니다. + 회로에서의 임피던스 Z는 전압 E를 전류 I로 나눈 값으로 구할 수 있습니다. 즉, Z = E/I 입니다. 여기서 주어진 E는 200+j50(V), + I는 5+j5(A)입니다. , Z = (200+j50) / (5+j5)를 계산하면 됩니다. 복소수의 나눗셈을 수행하기 위해서는 분모의 복소수를 + 켤레 복소수로 곱하여 실수로 만든 후 분자에도 같은 켤레 복소수를 곱합니다. 즉, Z = (200+j50) * (5-j5) / (5+j5) * + (5-j5)를 계산하면 됩니다. 분자를 계산하면 200*5 + 200*(-j5) + j50*5 + j50*(-j5) = 1000 - j1000 + + j250 + 250 = 1250 - j750 입니다. 분모를 계산하면 5*5 + 5*(-j5) + j5*5 + j5*(-j5) = 25 - + j25 + j25 + 25 = 50 입니다. , Z = (1250 - j750) / 50 = 25 - j15 입니다. 따라서, 정답은 (D) + 입니다. + + + 질문: 태양광발전 전지에서 직렬저항이 발생하는 원인이 아닌 것은? + + A.전면 및 후면 금속전극의 저항 + + B.태양광발전 전지 내의 누설전류 + + C.금속전극과 에미터, 베이스 사이의 접촉저항 + + D.태양광발전 전지의 에미터와 베이스를 통한 전류 흐름 + + 정답: 차근 차근 생각해봅시다. 에너지 관리 관련 정보를 위해 위키피디아를 참조하겠습니다. 정답 해설: 먼저, 직렬저항이 무엇인지 알아야 합니다. + 직렬저항은 전기 회로에서 여러 개의 저항이 연속적으로 연결되어 있는 것을 말합니다. 태양광발전 전지에서 직렬저항이 발생하는 원인은 다음과 같습니다. + (A) 전면 및 후면 금속전극의 저항: 태양광발전 전지의 전면과 후면에는 금속전극이 있습니다. 이 금속전극은 태양광발전 전지의 전기적 특성을 결정하는 + 중요한 요소 중 하나입니다. 하지만 금속전극 자체의 저항이 존재하기 때문에, 태양광발전 전지의 직렬저항이 발생할 수 있습니다. (B) 태양광발전 + 전지 내의 누설전류: 태양광발전 전지 내의 누설전류는 전지 내부에서 전류가 새어나가는 것을 말합니다. 이 누설전류는 태양광발전 전지의 효율을 저하시키고, + 수명을 단축시키는 원인 중 하나이지만, 직렬저항과는 직접적인 관련이 없습니다. (C) 금속전극과 에미터, 베이스 사이의 접촉저항: 태양광발전 전지의 + 금속전극과 에미터, 베이스 사이에는 접촉저항이 존재합니다. 이 접촉저항은 금속전극과 반도체 물질 사이의 접촉이 불완전할 때 발생하며, 태양광발전 + 전지의 효율을 저하시키는 원인 중 하나입니다. (D) 태양광발전 전지의 에미터와 베이스를 통한 전류 흐름: 태양광발전 전지의 에미터와 베이스는 + 전류가 흐르는 경로 중 하나입니다. 이 경로에서 전류가 흐르면 저항이 발생하며, 이 저항이 태양광발전 전지의 직렬저항을 증가시킬 수 있습니다. + 따라서, 정답은 (B) 입니다. + + + 질문: 서로 다른 두 종류의 금속을 접촉하여 두 접점의 온도를 다르게 하면 온도차에 의해서 열 기전력이 발생하고 미세한 전류가 흐르는 현상은? + + A.홀 효과(Hall effect) + + B.펠티에 효과(Peltier effect) + + C.제베크 효과(Seebeck effect) + + D.광도전 효과((photo-conductivity effect) + + 정답: 차근 차근 생각해봅시다. 에너지 관리 관련 정보를 위해 위키피디아를 참조하겠습니다. 서로 다른 두 종류의 금속을 접촉하여 두 접점의 온도를 + 다르게 하면 온도차에 의해서 열 기전력이 발생하고 미세한 전류가 흐르는 현상을 찾기 위해서는 각 선택지를 자세히 알아볼 필요가 있습니다. (A). + 홀 효과(Hall effect)는 자기장이 인가된 물질에 전류를 흘렸을 때, 자기장과 전류에 수직인 방향으로 전기적인 힘이 발생하는 현상을 말합니다. + 이는 전하 운반체의 종류와 밀도, 그리고 자기장의 세기에 의존합니다. (B). 펠티에 효과(Peltier effect)는 서로 다른 금속을 접합하여 + 전기를 흘렸을 때, 접합부의 양쪽에 열의 흡수 또는 발생이 일어나는 현상을 말합니다. 이는 전기 에너지가 열 에너지로 변환되는 현상으로, 열전 + 효과의 일종입니다. (C). 제베크 효과(Seebeck effect)는 서로 다른 금속 또는 반도체를 접합하여 전기를 흘렸을 때, 접합부의 양쪽에 + 온도차가 있으면 열기전력이 발생하는 현상을 말합니다. 이는 열 에너지가 전기 에너지로 변환되는 현상으로, 열전 효과의 일종입니다. (D). 광도전 + 효과((photo-conductivity effect)는 물질에 빛을 비추었을 때, 물질 내부의 전자가 빛 에너지를 받아 이동하면서 전기 전도도가 + 증가하는 현상을 말합니다. 이는 광전자 효과의 일종입니다. 위의 선택지 중에서 서로 다른 두 종류의 금속을 접촉하여 두 접점의 온도를 다르게 하면 + 온도차에 의해서 열 기전력이 발생하고 미세한 전류가 흐르는 현상을 설명하는 것은 (C). 제베크 효과(Seebeck effect)입니다. 따라서, + 정답은 (C) 입니다. + + + 질문: 태양광발전 모듈의 I-V 특성곡선에서 일사량에 따라 가장 많이 변화하는 것은? + + A.전압 + + B.전류 + + C.저항 + + D.커패시턴스 + + 정답: 차근 차근 생각해봅시다. 에너지 관리 관련 정보를 위해 위키피디아를 참조하겠습니다. 태양광발전 모듈의 I-V 특성곡선은 전류(I)와 전압(V)의 + 관계를 나타내는 곡선입니다. 이 곡선은 태양광 모듈의 작동 특성을 보여주며, 일사량, 온도 등의 변화에 따라 그 형태가 변합니다. 일사량은 태양의 + 빛이 얼마나 강하게 닿는지를 나타내는 값으로, 태양광발전 모듈의 전력 출력에 중요한 영향을 미칩니다. 일사량이 증가하면 태양광 모듈이 흡수하는 + 에너지가 증가하므로 전류가 증가합니다. 반면, 전압은 일사량에 상대적으로 덜 민감하며, 일사량이 변해도 전압의 변화는 그다지 크지 않습니다. 저항과 + 커패시턴스는 전자회로의 물리적 특성을 나타내는 값들로, 태양광발전 모듈의 I-V 특성곡선과는 직접적인 관련이 없습니다. 태양광발전 모듈의 저항은 + 일반적으로 일사량에 따라 변하지 않으며, 커패시턴스 역시 태양광발전 모듈의 출력에 영향을 주는 주요 요인이 아닙니다. , 태양광발전 모듈의 I-V + 특성곡선에서 일사량에 따라 가장 많이 변화하는 것은 전류입니다. 따라서, 정답은 (B) 입니다. + + + 질문: {{question}} + + A.{{A}} + + B.{{B}} + + C.{{C}} + + D.{{D}} + + 정답: 차근 차근 생각해봅시다. 에너지 관리 관련 정보를 위해 위키피디아를 참조하겠습니다.' +include: _cot_kmmlu_yaml +task: kmmlu_hard_cot_energy_management diff --git a/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_environmental_science.yaml b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_environmental_science.yaml new file mode 100644 index 0000000000..0febb13015 --- /dev/null +++ b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_environmental_science.yaml @@ -0,0 +1,116 @@ +dataset_name: environmental_science +doc_to_text: '질문: 혐기성 소화에서 독성을 유발 시킬 수 있느 물질의 농도(mg/L)로 가장 적절한 것은? + + A.Fe : 1000 + + B.Na : 3500 + + C.OPTIONa : 1500 + + D.Mg : 800 + + 정답: 차근 차근 생각해봅시다. 환경 과학 관련 정보를 위해 위키피디아를 참조하겠습니다. 혐기성 소화는 미생물이 산소 없이 유기물을 분해하는 과정입니다. + 이 과정에서 다양한 미네랄이 필요하며, 그 중 철(Fe), 나트륨(Na), 칼슘(Ca), 마그네슘(Mg) 등이 있습니다. 이들 미네랄의 적절한 + 농도는 혐기성 소화 과정의 효율성을 결정하며, 농도가 너무 높으면 독성을 유발할 수 있습니다. , 이 질문의 답을 찾기 위해서는 각 미네랄의 + 독성 농도를 확인해야 합니다. - 철(Fe)의 경우, 물에 대한 독성 농도는 1000mg/L 이상일 때 발생한다고 합니다. - 나트륨(Na)의 + 경우, 물에 대한 독성 농도는 2300mg/L 이상일 때 발생한다고 합니다. - 칼슘(Ca)의 경우, 물에 대한 독성 농도는 2000mg/L 이상일 + 때 발생한다고 합니다. - 마그네슘(Mg)의 경우, 물에 대한 독성 농도는 1250mg/L 이상일 때 발생한다고 합니다. 위의 정보를 바탕으로 + 보았을 때, 주어진 선택지 중에서 가장 적절한 독성 농도는 철(Fe)의 1000mg/L입니다. 이는 철(Fe)의 독성 농도가 1000mg/L 이상일 + 때 발생한다는 정보와 일치하기 때문입니다. 따라서, 정답은 (A) 입니다. + + + 질문: 도시폐기물의 유기성 성분 중 셀룰로오스에 해당하는 것은? + + A.6탄당의 중합체 + + B.아미노산 중합체 + + C.당, 전분 등 + + D.방향환과 메톡실기를 포함한 중합체 + + 정답: 차근 차근 생각해봅시다. 환경 과학 관련 정보를 위해 위키피디아를 참조하겠습니다. 셀룰로오스는 식물 세포벽의 주요 구성요소로, 대부분의 + 식물 세포에 존재합니다. 셀룰로오스는 탄수화물의 한 종류로, 긴 사슬 모양의 구조를 가지고 있습니다. 이 사슬은 당류인 글루코스의 수천 개 단위가 + 연결된 것으로 이루어져 있습니다. 이 글루코스 단위들은 화학적으로 연결되어 있어서, 셀룰로오스는 매우 강하고 튼튼한 물질이 됩니다. 선택지를 보면, + (A) 6탄당의 중합체, (B) 아미노산 중합체, (C) 당, 전분 등, (D) 방향환과 메톡실기를 포함한 중합체가 있습니다. (A) 6탄당의 + 중합체는 셀룰로오스의 정의에 가장 가깝습니다. 셀룰로오스는 기본적으로 6탄당인 글루코스의 중합체입니다. (B) 아미노산 중합체는 단백질을 형성하는 + 요소로, 셀룰로오스와는 무관합니다. (C) 당, 전분 등은 셀룰로오스의 구성 요소인 글루코스와 관련이 있지만, 셀룰로오스 자체를 정의하는 것은 + 아닙니다. (D) 방향환과 메톡실기를 포함한 중합체는 리그닌의 구조를 설명하는 것으로, 셀룰로오스와는 다른 식물 세포벽의 구성요소입니다. 따라서, + 정답은 (A) 입니다. + + + 질문: 완전히 건조시킨 폐기물 20g을 채취해 회분함량을 분석하였더니 5g 이었다. 폐기물의 함수율이 40% 이었다면, 습량기준으로 회분 중량비(%)는? + (단, 비중 = 1.0) + + A.5 + + B.10 + + C.15 + + D.20 + + 정답: 차근 차근 생각해봅시다. 환경 과학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저 문제에서 주어진 정보를 이해해보겠습니다. 1. 건조시킨 + 폐기물의 무게는 20g입니다. 2. 그 중 회분함량이 5g입니다. 3. 폐기물의 습도는 40%입니다. 여기서 회분 중량비를 구하라고 했는데, 회분 + 중량비는 회분함량을 습기를 포함한 전체 무게로 나눈 것을 퍼센트로 표현한 것입니다. , 먼저 습기를 포함한 전체 무게를 구해야 합니다. 건조시킨 + 폐기물의 무게는 20g이고, 이는 습도를 제거한 상태이므로, 이 무게는 전체 무게의 60%(100% - 40% = 60%)에 해당합니다. 전체 + 무게는 20g / 0.6 = 약 33.33g입니다. 이제 회분 중량비를 구할 수 있습니다. 회분 중량비 = (회분함량 / 습기를 포함한 전체 무게) + * 100% = (5g / 33.33g) * 100% = 약 15%입니다. 따라서, 정답은 (C) 입니다. + + + 질문: 소각방식 중 회전로(Rotary Kiln)에 대한 설명으로 옳지 않은 것은? + + A.넓은 범위의 액상, 고상 폐기물은 소각할 수 있다. + + B.일반적으로 회전속도는 0.3~1.5 rpm, 주변속도는 5~25 mm/sec 정도이다. + + C.예열, 혼합, 파쇄 등 전처리를 거쳐야만 주입이 가능하다. + + D.회전하는 원통형 소각로로서 경사진 구조로 되어있으며 길이와 직경의 비는 2~10 정도이다. + + 정답: 차근 차근 생각해봅시다. 환경 과학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 회전로(Rotary Kiln)에 대한 기본적인 + 정보를 확인해보겠습니다. 회전로는 원통형의 소각로로서 경사진 구조로 되어 있습니다. 그리고 이 회전로의 길이와 직경의 비는 일반적으로 2~10 + 정도로 알려져 있습니다. 선택지 (D)는 회전로에 대한 정확한 설명입니다. 다음으로, 회전로는 넓은 범위의 액상, 고상 폐기물을 소각할 수 + 있는 장점이 있습니다. 이는 회전로의 작동 원리와 관련이 있습니다. 회전로는 원통 내부에서 폐기물을 높은 온도로 가열하면서 소각하는 방식이기 때문에 + 다양한 종류의 폐기물을 처리할 수 있습니다. 선택지 (A)는 옳은 설명입니다. 회전로의 회전속도는 일반적으로 0.3~1.5 rpm, 주변속도는 + 5~25 mm/sec 정도로 알려져 있습니다. 이는 폐기물이 고르게 분배되어 효율적으로 소각되도록 하는데 필요한 조건입니다. 선택지 (B) + 역시 옳은 설명입니다. 마지막으로, 회전로에서 폐기물을 소각하기 전에는 예열, 혼합, 파쇄 등의 전처리 과정이 필요합니다. 하지만 이는 모든 폐기물에 + 적용되는 것은 아닙니다. 일부 폐기물은 이러한 전처리 과정 없이도 바로 회전로에 주입될 수 있습니다. 선택지 (C)는 ''모든 폐기물이 전처리를 + 거쳐야만 주입이 가능하다''는 점에서 부정확한 설명입니다. 따라서, 정답은 (C) 입니다. + + + 질문: 전과정평가(LCA)의 구성요소로 가장 거리가 먼 것은? + + A.개선평가 + + B.영향평가 + + C.과정분석 + + D.목록분석 + + 정답: 차근 차근 생각해봅시다. 환경 과학 관련 정보를 위해 위키피디아를 참조하겠습니다. 전과정평가(Life Cycle Assessment, LCA)의 + 주요 구성요소를 이해하고 각 옵션을 평가해보겠습니다. LCA는 제품이나 서비스의 전체 생애주기 동안의 환경적 영향을 평가하는 과정입니다. 일반적으로 + LCA는 다음 네 가지 주요 단계로 구성됩니다: 목적 및 범위 정의: LCA의 목적과 범위를 명확히 하는 단계입니다. 목록분석 (Inventory + Analysis): 제품이나 서비스의 생애주기 동안 발생하는 모든 입력(원자재, 에너지 등)과 출력(배출물, 폐기물 등)을 수집하는 과정입니다. + 영향평가 (Impact Assessment): 수집된 데이터를 바탕으로 환경적 영향을 평가하는 단계입니다. 해석: 수집된 데이터와 평가 결과를 + 분석하고 해석하는 단계입니다. 주어진 옵션들을 이러한 단계들과 비교해보면: (A) 개선평가: 이는 LCA의 일반적인 단계는 아닙니다. 하지만 LCA + 결과를 바탕으로 제품이나 과정의 환경적 영향을 개선하는 방안을 고려할 수 있습니다. (B) 영향평가 (Impact Assessment): 이는 + LCA의 주요 단계 중 하나입니다. (C) 과정분석: 이는 목록분석과 유사하게 들리지만, LCA의 전통적인 구성요소는 아닙니다. 과정분석은 보다 + 일반적인 용어로, 다양한 맥락에서 사용될 수 있습니다. (D) 목록분석 (Inventory Analysis): 이 역시 LCA의 핵심 단계 중 + 하나입니다. 따라서, 정답은 (C) 입니다. + + + 질문: {{question}} + + A.{{A}} + + B.{{B}} + + C.{{C}} + + D.{{D}} + + 정답: 차근 차근 생각해봅시다. 환경 과학 관련 정보를 위해 위키피디아를 참조하겠습니다.' +include: _cot_kmmlu_yaml +task: kmmlu_hard_cot_environmental_science diff --git a/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_fashion.yaml b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_fashion.yaml new file mode 100644 index 0000000000..3c6bb38544 --- /dev/null +++ b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_fashion.yaml @@ -0,0 +1,114 @@ +dataset_name: fashion +doc_to_text: '질문: 오점의 성분 중 충해의 원인이 되는 것은? + + A.단백질 + + B.무기물 + + C.염류 + + D.요소 + + 정답: 차근 차근 생각해봅시다. 의류학 관련 정보를 위해 위키피디아를 참조하겠습니다. 오점의 성분 중 충해의 원인이 되는 것을 찾기 위해서는 먼저 + 충해의 원인이 되는 성분이 무엇인지 알아야 합니다. 충해는 일반적으로 곤충이나 벌레 등이 식물이나 동물 등에 피해를 입히는 것을 말합니다. 이러한 + 충해의 원인은 다양하지만, 일반적으로 단백질과 같은 영양분이 충해의 원인이 되는 경우가 많습니다. 충해를 일으키는 곤충이나 벌레들은 대부분 단백질을 + 필요로 하기 때문에, 식물이나 동물의 단백질을 먹이로 삼습니다. , 오점의 성분 중 단백질이 충해의 원인이 될 가능성이 높습니다. 무기물, 염류, + 요소 등은 충해의 원인이 될 가능성이 상대적으로 낮습니다. 무기물은 식물이나 동물의 성장에 필요한 성분 중 하나이지만, 충해의 원인이 되는 경우는 + 드물며, 염류는 식물의 성장에 영향을 미칠 수 있지만, 충해의 원인이 되는 경우는 거의 없습니다. 요소는 단백질을 구성하는 성분 중 하나이지만, + 충해의 원인이 되는 경우는 거의 없습니다. 따라서, 정답은 (A) 입니다. + + + 질문: 비누의 특성 중 장점이 아닌 것은? + + A.산성용액에서도 사용할 수 있다. + + B.세탁한 직물의 촉감이 양호하다. + + C.합성세제보다 환경을 적게 오염시킨다. + + D.거품이 잘 생기고 헹굴 때에는 거품이 사라진다. + + 정답: 차근 차근 생각해봅시다. 의류학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저 각 선택지에 대해 검토해보겠습니다. (A) 비누는 기본적으로 + 알칼리성이기 때문에 산성 용액에서는 잘 작동하지 않습니다. 산과 알칼리는 서로 중화 반응을 일으키므로, 산성 용액에서 비누를 사용하면 비누의 세정력이 + 크게 떨어질 수 있습니다. (B) 비누는 일반적으로 세탁한 직물의 촉감을 부드럽게 만드는 특성이 있습니다. 이는 비누가 직물의 섬유 사이에 들어가서 + 섬유들이 서로 마찰하지 않도록 하는 역할을 하기 때문입니다. (C) 비누는 합성세제보다 환경 오염을 덜 일으키는 것으로 알려져 있습니다. 이는 + 비누가 자연에서 잘 분해되기 때문입니다. 반면 합성세제는 자연에서 잘 분해되지 않아 환경 오염을 일으킬 수 있습니다. (D) 비누는 거품이 잘 + 생기는 특성이 있습니다. 이는 비누가 물과 함께 사용될 때 표면 활성 효과를 일으켜 거품을 만들기 때문입니다. 또한 헹굴 때에는 이 거품이 사라지는 + 특성이 있습니다. 이 모든 정보를 종합해 보면, 비누의 특성 중 장점이 아닌 것은 ''산성용액에서도 사용할 수 있다''입니다. 왜냐하면 비누는 + 알칼리성이기 때문에 산성 용액에서는 잘 작동하지 않기 때문입니다. 따라서, 정답은 (A) 입니다. + + + 질문: 피복의 오염 부착 상태에 대한 설명 중 틀린 것은? + + A.화학결합에 의한 부착 : 섬유표면에 오염이 부착된 후 섬유와 오점 간에 결합이 화학결합하여 부착된 것이다. + + B.정전기에 의한 부착 : 오염입자와 섬유가 서로 다른 대전성(+ -로 나타나는 정전기 성질)을 띄고 있을 때 오염입자가 섬유에 부착된 것이다. + + C.분자 간 인력에 의한 부착 : 오염물질의 분자와 섬유 분자 간의 인력에 의해서 부착된 것이며 강한 분자간의 인력으로 인하여 쉽게 제거되지 아니한다. + + D.유지결합에 의한 부착 : 오염에 입자가 물의 엷은 막을 통해서 섬유에 부착된 것이다. + + 정답: 차근 차근 생각해봅시다. 의류학 관련 정보를 위해 위키피디아를 참조하겠습니다. 우선, 각 선택지에 대해 이해를 높이기 위해 각 부착 방식에 + 대해 자세히 알아보겠습니다. (A) 화학결합에 의한 부착: 이는 오염물질이 섬유 표면에 부착된 후, 섬유와 오염물질 간에 화학적인 결합이 이루어져 + 부착되는 경우를 말합니다. 이는 일반적으로 세탁이 어려운 경우에 해당합니다. (B) 정전기에 의한 부착: 오염 입자와 섬유가 서로 다른 대전성을 + 띠고 있을 때, 즉 한쪽이 양전하고 다른 한쪽이 음전할 때 오염 입자가 섬유에 부착되는 경우를 말합니다. 이는 일반적으로 건조한 환경에서 더 잘 + 일어납니다. (C) 분자 간 인력에 의한 부착: 이는 오염물질의 분자와 섬유 분자 간의 물리적인 인력(반발력이나 인력 등)에 의해 부착되는 경우를 + 말합니다. 이는 섬유와 오염물질 간의 인력이 강하여 세탁으로 쉽게 제거되지 않는 경우에 해당합니다. (D) 유지결합에 의한 부착: 이는 오염 입자가 + 물의 얇은 막을 통해 섬유에 부착되는 경우를 말합니다. 각 부착 방식에 대해 알아본 결과, (D)의 유지결합에 의한 부착의 설명이 부정확한 것으로 + 보입니다. 유지결합은 오염물질이 섬유 표면에 직접적으로 부착되는 것이 아니라, 물이나 기타 액체의 막을 통해 간접적으로 부착되는 경우를 말합니다. + 하지만, 선택지 (D)에서는 오염 입자가 ''물의 엷은 막을 통해서 섬유에 부착된 것''이라고 설명하고 있습니다. 이는 유지결합의 정의와 일치하지 + 않습니다. 따라서, 정답은 (D) 입니다. + + + 질문: 의류의 푸새가공에 사용하는 풀에 해당되지 않는 것은? + + A.전분 + + B.OPTION.M.OPTION + + C.L.OPTION.S + + D.P.V.OPTION + + 정답: 차근 차근 생각해봅시다. 의류학 관련 정보를 위해 위키피디아를 참조하겠습니다. 의류의 푸새가공에 사용하는 풀은 의류의 완성도를 높이고 제품의 + 품질을 유지하기 위해 사용됩니다. 이러한 풀에는 다양한 종류가 있습니다. (A) 전분: 전분은 식물의 줄기와 뿌리에서 발견되는 탄수화물의 한 종류로, + 의류 산업에서는 풀로 사용됩니다. 이는 옷에 바르면 품질을 유지하고 주름을 방지하는 데 도움이 됩니다. (B) C.M.C (Carboxymethyl + Cellulose): C.M.C는 셀룰로스 유도체 중 하나로, 의류 산업에서는 풀로 사용됩니다. C.M.C는 물에 잘 녹는 특성 때문에 의류에 + 사용되며, 의류의 완성도를 높이는 데 도움이 됩니다. (D) P.V.A (Polyvinyl Alcohol): P.V.A는 합성 수지의 일종으로, + 물에 잘 녹는 특성 때문에 의류 산업에서는 풀로 사용됩니다. P.V.A는 의류에 사용되면 품질을 유지하고 주름을 방지하는 데 도움이 됩니다. 그러나 + (C) L.A.S (Linear Alkylbenzene Sulfonate)는 합성 세제의 주요 성분 중 하나로, 의류 산업에서 풀로 사용되지 않습니다. + L.A.S는 주로 세탁제, 식기세척제 등에 사용되며, 그것은 강력한 세척력과 풍부한 거품을 제공합니다. 따라서, 정답은 (C) 입니다. + + + 질문: 클리닝 서비스 중 특수 서비스에 해당되는 것은? + + A.모 제품만 세정하는 서비스 + + B.웨트클리닝 서비스 + + C.워싱(Washing) 서비스 + + D.패션 케어(Fashion care) 서비스 + + 정답: 차근 차근 생각해봅시다. 의류학 관련 정보를 위해 위키피디아를 참조하겠습니다. 클리닝 서비스는 일반적으로 의류나 직물 제품을 세정하는 서비스를 + 말합니다. 이에는 다양한 방법이 있을 수 있습니다. (A) 선택지인 ''모 제품만 세정하는 서비스''는 특정 제품을 세정하는 서비스를 말하는 것 + 같습니다. 이는 특수 서비스라기 보다는 일반적인 클리닝 서비스에 해당할 것입니다. (B) 선택지인 ''웨트클리닝 서비스''는 물을 이용한 세탁 + 방식을 의미합니다. 이는 일반적인 세탁 방식 중 하나이므로 특수 서비스라고 보기 어렵습니다. (C) 선택지인 ''워싱(Washing) 서비스''도 + 물을 이용한 일반적인 세탁 방식을 의미합니다. 이 역시 특수 서비스라고 보기는 어렵습니다. (D) 선택지인 ''패션 케어(Fashion care) + 서비스''는 패션 아이템에 대한 전반적인 관리를 의미하는 것 같습니다. 이는 일반적인 세탁 방식이 아닌, 의류의 보관, 관리, 수선 등을 포함한 + 종합적인 서비스를 제공하는 것으로 보입니다. 이는 일반적인 클리닝 서비스와는 차별화된 서비스라고 볼 수 있습니다. 따라서, 정답은 (D) 입니다. + + + 질문: {{question}} + + A.{{A}} + + B.{{B}} + + C.{{C}} + + D.{{D}} + + 정답: 차근 차근 생각해봅시다. 의류학 관련 정보를 위해 위키피디아를 참조하겠습니다.' +include: _cot_kmmlu_yaml +task: kmmlu_hard_cot_fashion diff --git a/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_food_processing.yaml b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_food_processing.yaml new file mode 100644 index 0000000000..dbcd196390 --- /dev/null +++ b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_food_processing.yaml @@ -0,0 +1,112 @@ +dataset_name: food_processing +doc_to_text: '질문: 작물이 주로 이용하는 토양수분의 형태는? + + A.흡습수 + + B.모관수 + + C.중력수 + + D.지하수 + + 정답: 차근 차근 생각해봅시다. 식품 처리 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 토양수분에는 크게 네 가지 형태가 있습니다. 그것은 + 흡습수, 모관수, 중력수, 지하수입니다. 각각의 정의를 알아보겠습니다. 흡습수는 토양 입자 사이의 공기 중에 물 분자가 흡착되어 있는 형태의 물입니다. + 흡습력에 의해 토양 입자 표면에 밀착되어 있어 식물의 뿌리가 이를 흡수하기 어렵습니다. 모관수는 토양의 모관(미세한 틈)에 들어가 있는 물을 말합니다. + 이 물은 식물의 뿌리가 쉽게 흡수할 수 있으며, 식물이 생장하는 데 필요한 주요 수분 공급원입니다. 중력수는 토양의 모관을 통해 중력에 의해 아래로 + 흘러가는 물을 말합니다. 이 물은 토양 깊숙한 곳으로 흘러가거나 지하수로 변하게 됩니다. 지하수는 토양 표면 아래에 있는 물을 말합니다. 이 물은 + 일반적으로 식물의 뿌리가 닿지 못하는 깊이에 위치해 있습니다. 이러한 정보를 바탕으로, 작물이 주로 이용하는 토양수분의 형태를 생각해보면, 작물의 + 뿌리가 쉽게 흡수할 수 있는 형태의 물이어야 합니다. 그렇기 때문에, 작물이 주로 이용하는 토양수분의 형태는 모관수입니다. 따라서, 정답은 (B) + 입니다. + + + 질문: 신품종의 구비조건으로 틀린 것은? + + A.구별성 + + B.독립성 + + C.균일성 + + D.안정성 + + 정답: 차근 차근 생각해봅시다. 식품 처리 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저 신품종의 구비조건에 대해 이해하려면, 신품종이란 + 무엇인지 알아야 합니다. 신품종이란 기존에 알려진 품종과는 다른 새로운 품종을 말합니다. 그리고 이 신품종을 식물품종보호법에 따라 등록하려면 일정한 + 요건을 충족해야 합니다. 이를 ''신품종의 구비조건''이라고 합니다. 선택지를 보면, 구별성, 독립성, 균일성, 안정성이 있습니다. 이 중에서 + 어떤 것이 신품종의 구비조건이 아닌지 알아보겠습니다. (A) 구별성: 신품종은 기존의 품종과 구별될 수 있는 특성이 있어야 합니다. 구별성은 + 신품종의 구비조건 중 하나입니다. (B) 독립성: 이는 일반적으로 품종의 구비조건으로 언급되지 않습니다. 품종이 독립적이라는 것은 그 자체로 독립적인 + 특성을 가지고 있음을 의미하는 것 같지만, 실제로 신품종의 구비조건으로는 언급되지 않습니다. (C) 균일성: 신품종은 그 품종 내의 개체들이 일정한 + 특성을 보여야 합니다. 즉, 품종 내의 개체들이 균일하게 특성을 나타내야 합니다. 균일성은 신품종의 구비조건 중 하나입니다. (D) 안정성: + 신품종은 세대를 거치더라도 그 특성이 안정적으로 유지되어야 합니다. 안정성은 신품종의 구비조건 중 하나입니다. , 신품종의 구비조건으로 틀린 + 것은 ''독립성''입니다. 따라서, 정답은 (B) 입니다. + + + 질문: 씨감자의 병리적 퇴화의 주요 원인은? + + A.효소의 활력저하 + + B.비료 부족 + + C.바이러스 감염 + + D.이형 종자의 기계적 혼입 + + 정답: 차근 차근 생각해봅시다. 식품 처리 관련 정보를 위해 위키피디아를 참조하겠습니다. 씨감자의 병리적 퇴화는 여러 요인에 의해 발생할 수 있습니다. + (A) 효소의 활력저하: 씨감자는 식물이므로 효소의 활성이 저하되면 생장에 문제가 생길 수 있습니다. 그러나 효소 활성 저하는 일반적으로 특정 + 병리적 상태를 나타내기보다는 식물의 자연적인 노화 과정에서 일어나는 현상입니다. 이는 씨감자의 병리적 퇴화의 주요 원인이라고 보기 어렵습니다. + (B) 비료 부족: 비료는 식물의 건강한 성장을 돕는 중요한 요소입니다. 그러나 비료 부족은 씨감자의 성장을 저해할 수 있지만, 이는 병리적 퇴화를 + 직접적으로 초래하는 주요 원인이라고 보기는 어렵습니다. (C) 바이러스 감염: 바이러스는 식물의 병리적 퇴화를 초래할 수 있는 주요 요인 중 하나입니다. + 특히 씨감자는 바이러스에 매우 취약하며, 감염이 일단 시작되면 식물 전체에 빠르게 퍼져 병리적 퇴화를 일으킬 수 있습니다. (D) 이형 종자의 + 기계적 혼입: 이형 종자의 기계적 혼입은 씨감자의 품질을 저하시킬 수 있지만, 이는 병리적 퇴화의 주요 원인이라고 보기는 어렵습니다. 특히 씨감자는 + 감자 Y 바이러스(Potato Y virus) 등 여러 종류의 바이러스에 의해 병리적 퇴화를 겪는 경우가 많습니다. , 이러한 고려를 통해 바이러스 + 감염이 씨감자의 병리적 퇴화의 주요 원인일 가능성이 가장 높다고 볼 수 있습니다. 따라서, 정답은 (C) 입니다. + + + 질문: 괴경으로 번식하는 작물은? + + A.생강 + + B.마늘 + + C.감자 + + D.고구마 + + 정답: 차근 차근 생각해봅시다. 식품 처리 관련 정보를 위해 위키피디아를 참조하겠습니다. 정답 해설: 괴경으로 번식하는 작물을 찾기 위해서는 먼저 + 괴경의 뜻을 알아야 합니다. 괴경은 땅속줄기의 일부가 비대해져 저장양분을 축적하여 발달한 것으로, 덩이줄기라고도 합니다. 이러한 특징을 가진 작물을 + 선택지에서 찾아보면 다음과 같습니다. (A) 생강: 생강은 덩이줄기가 아닌 근경(뿌리줄기)으로 번식하는 작물입니다. (B) 마늘: 마늘도 생강과 + 마찬가지로 근경으로 번식하는 작물입니다. (C) 감자: 감자는 대표적인 괴경 작물로, 땅 속에서 자라는 덩이줄기가 번식에 사용됩니다. (D) 고구마: + 고구마는 괴근(덩이뿌리)으로 번식하는 작물입니다. 따라서, 정답은 (C) 입니다. + + + 질문: 기상생태형으로 분류할 때 우리나라 벼의 조생종은 어디에 속하는가? + + A.OPTIONlt형 + + B.bLt형 + + C.OPTIONLt형 + + D.blT형 + + 정답: 차근 차근 생각해봅시다. 식품 처리 관련 정보를 위해 위키피디아를 참조하겠습니다. 기상생태형으로 분류할 때 벼의 조생종이 속하는 유형을 + 파악하기 위해서는 기상생태형의 분류 방식을 이해해야 합니다. 기상생태형은 일반적으로 벼 등의 식물이 자라는 기후 조건을 기반으로 분류됩니다. 이 + 분류는 주로 온도(Temperature)와 일조 시간(Light)을 고려하여 이루어집니다. 한국의 기후 특성을 고려할 때, 여름철에는 일반적으로 + 온도가 높고 습도가 높은 편입니다. blT형은 기본영양생장성과 감광성이 작고(Little basic nutrition growth, Little + light sensitivity), 감온성이 큰(Big temperature sensitivity) 품종을 의미하는데 이 품종은 상대적으로 높은 + 온도에 더 민감하게 반응하며, 일장의 변화에는 덜 민감한 특성을 가지고 있어 한국의 기후 특성에서 효과적으로 성장할 수 있는 조건을 가지고 있습니다. + 따라서, 정답은 (D) 입니다. + + + 질문: {{question}} + + A.{{A}} + + B.{{B}} + + C.{{C}} + + D.{{D}} + + 정답: 차근 차근 생각해봅시다. 식품 처리 관련 정보를 위해 위키피디아를 참조하겠습니다.' +include: _cot_kmmlu_yaml +task: kmmlu_hard_cot_food_processing diff --git a/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_gas_technology_and_engineering.yaml b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_gas_technology_and_engineering.yaml new file mode 100644 index 0000000000..1cb308030c --- /dev/null +++ b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_gas_technology_and_engineering.yaml @@ -0,0 +1,118 @@ +dataset_name: gas_technology_and_engineering +doc_to_text: '질문: 건축물 내 도시가스 매설배관으로 부적합한 것은? + + A.동관 + + B.강관 + + C.스테인리스강 + + D.가스용 금속플렉시블호스 + + 정답: 차근 차근 생각해봅시다. 가스 기술 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 건축물 내에서 도시가스 매설배관에 사용되는 재료에 + 대한 규정에 따르면, 스테인리스강관, 동관, 가스용 금속플렉시블호스가 적절한 재료로 규정되어 있습니다. 이러한 규정은 배관의 안전성과 관련하여 + 매우 중요한 부분으로, 배관이 올바르게 설치되고 유지되는 것이 필수적입니다. 각 재료는 특정한 조건과 기준에 따라 설치되어야 하며, 예를 들어 + 동관은 금속제 보호관이나 보호판을 통해 추가적인 보호조치를 받아야 합니다. 선택지를 살펴보면, 강관이 명시적으로 부적합한 재료로 규정되지 않았습니다. , + 정답은 강관(B)이 아닙니다. 다른 선택지들인 동관(A), 스테인리스강(C), 그리고 가스용 금속플렉시블호스(D)는 모두 건축물 내 도시가스 매설배관으로 + 사용될 수 있는 재료로 지정되어 있습니다. 이러한 정보에 기반하여, 건축물 내 도시가스 매설배관으로 부적합한 것은 강관(B)이라는 결론에 도달할 + 수 있습니다. 따라서, 정답은 (B) 입니다. + + + 질문: 시안화수소를 충전한 용기는 충전 후 몇 시간 정치한 뒤 가스의 누출검사를 해야 하는가? + + A.6 + + B.12 + + C.18 + + D.24 + + 정답: 차근 차근 생각해봅시다. 가스 기술 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 시안화수소(Hydrogen Cyanide)에 + 대해 알아보겠습니다. 시안화수소는 매우 독성이 강한 가스로, 사람의 건강에 해로울 뿐만 아니라 환경에도 유해합니다. 이 가스를 다룰 때는 매우 + 주의해야 합니다. 그 다음으로, 가스를 충전한 용기의 누출 검사에 대해 알아보겠습니다. 가스 용기는 충전 후 안전하게 보관되어야 하며, 누출이 + 없는지 꼼꼼히 확인해야 합니다. 이는 가스의 종류에 관계없이 일반적으로 적용되는 안전 규정입니다. 하지만, 시안화수소를 충전한 용기가 충전 후 + 몇 시간 정치한 뒤에 누출 검사를 해야 하는지에 대한 구체적인 정보는 일반적인 지식으로는 알 수 없습니다. 이에 대한 정확한 정보를 얻기 위해서는 + 가스 기술 및 엔지니어링에 대한 전문적인 지식이 필요하며, 해당 분야의 규정이나 가이드라인을 참조해야 합니다. 시안화수소 가스를 충전한 용기에 + 대한 누출 검사 시기는 특정 업체나 기관의 내부 규정에 따라 다를 수 있습니다. 그러나 일반적으로 가스를 충전한 용기의 누출 검사는 충전 직후, + 그리고 정기적으로 수행되어야 합니다. 이는 가스의 독성 뿐만 아니라 압력 등의 위험성 때문입니다. 가장 안전한 방법은 가스를 충전한 직후, + 그리고 가능한 한 자주 누출 검사를 수행하는 것입니다. 하지만 이 질문에 대한 구체적인 답변을 제공하기 위해선, 각 선택지에 대한 구체적인 근거가 + 필요하며, 이를 위해선 시안화수소 가스를 다루는 특정 업체나 기관의 내부 규정을 참조해야 합니다. , 이 질문에 대한 정확한 답변을 제공하기는 + 어렵습니다. 이런 경우에는, 가장 일반적이고 안전한 방법을 선택하는 것이 가장 좋습니다. 가스를 충전한 용기의 누출 검사는 충전 직후, 그리고 + 가능한 한 자주 수행되어야 하므로, 가장 긴 시간을 선택하는 것이 가장 안전할 것입니다. 따라서, 정답은 (D) 입니다. + + + 질문: 도시가스공급시설의 공사계획 승인 및 신고대상에 대한 설명으로 틀린 것은? + + A.제조소 안에서 액화가스용저장탱크의 위치변경 공사는 공사계획 신고대상이다. + + B.밸브기지의 위치변경 공사는 공사계획 신고대상이다. + + C.호칭지름이 50㎜ 이하인 저압의 공급관을 설치하는 공사는 공사계획 신고대상에서 제외한다. + + D.저압인 사용자공급관 50m를 변경하는 공사는 공사계획 신고대상이다. + + 정답: 차근 차근 생각해봅시다. 가스 기술 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 이 질문에 대한 정확한 답변을 위해 각 선택지에 + 대한 도시가스공급시설의 공사계획 승인 및 신고대상에 관한 규정을 살펴보겠습니다. (A) 제조소 안에서 액화가스용저장탱크의 위치변경 공사: 일반적으로 + 이러한 종류의 공사는 중요하며 신고 대상일 가능성이 높습니다. (B) 밸브기지의 위치변경 공사: 밸브기지 내 배관 관련 공사는 공사계획 신고대상에 + 포함되지 않습니다. (C) 호칭지름이 50㎜ 이하인 저압의 공급관을 설치하는 공사: 호칭지름 50밀리미터 이하인 저압의 공급관 관련 공사는 공사계획 + 신고대상입니다. (D) 저압인 사용자공급관 50m를 변경하는 공사: 길이 50미터 미만인 저압 사용자공급관 관련 공사는 공사계획 신고대상입니다. + 따라서, 정답은 (B) 입니다. + + + 질문: 고압가스용 냉동기에 설치하는 안전장치의 구조에 대한 설명으로 틀린 것은? + + A.고압차단장치는 그 설정압력이 눈으로 판별할 수 있는 것으로 한다. + + B.고압차단장치는 원칙적으로 자동복귀방식으로 한다. + + C.안전밸브는 작동압력을 설정한 후 봉인될 수 있는 구조로 한다. + + D.안전밸브 각부의 가스통과 면적은 안전밸브의 구경면적 이상으로 한다. + + 정답: 차근 차근 생각해봅시다. 가스 기술 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저 각 선택지에 대한 설명을 이해하고, 그것이 + 고압가스용 냉동기에 설치하는 안전장치의 구조에 대한 일반적인 규칙과 일치하는지 확인해야 합니다. (A) 고압차단장치는 그 설정압력이 눈으로 판별할 + 수 있는 것으로 한다. - 고압차단장치는 가스의 압력이 설정 압력 이상으로 상승하면 자동으로 가스 흐름을 차단하는 장치입니다. 이는 과도한 압력으로 + 인한 사고를 방지합니다. 설정 압력이 눈으로 확인 가능하다는 것은 사용자가 안전장치의 작동 압력을 쉽게 확인하고 조정할 수 있음을 의미합니다. + 이는 일반적으로 안전장치의 중요한 기능 중 하나입니다. (B) 고압차단장치는 원칙적으로 자동복귀방식으로 한다. - 자동복귀방식이란 일시적으로 고압 + 상태가 해소되면 자동으로 원래 상태로 복귀하는 방식을 의미합니다. 하지만, 원칙적으로는 고압차단 장치는 수동복귀 방식으로 해야합니다. 이는 고압차당 + 장치의 중요한 특징중 하나입니다. (C) 안전밸브는 작동압력을 설정한 후 봉인될 수 있는 구조로 한다. - 안전밸브는 과도한 압력이 발생하면 자동으로 + 열려 압력을 해소하는 장치입니다. 작동 압력을 설정한 후 봉인한다는 것은 이 압력 설정이 임의로 변경되는 것을 방지하기 위함입니다. 이는 안전밸브의 + 중요한 특성 중 하나입니다. (D) 안전밸브 각부의 가스통과 면적은 안전밸브의 구경면적 이상으로 한다. - 이는 가스가 안전밸브를 통과할 때 발생할 + 수 있는 압력 감소를 최소화하기 위한 설계 원칙입니다. 즉, 안전밸브의 각 부분에서 가스의 통과 면적이 구경 면적보다 크게 설계되어야 합니다. + 따라서, 정답은 (B) 입니다. + + + 질문: 염소(Cl2)의 재해 방지용으로서 흡수제 및 재해제가 아닌 것은? + + A.가성소다 수용액 + + B.소석회 + + C.탄산소다 수용액 + + D.물 + + 정답: 차근 차근 생각해봅시다. 가스 기술 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 염소(Cl2)는 가연성이 없지만, 강력한 + 산화제이며, 인체에 치명적일 수 있는 독성 가스입니다. 염소의 누출이나 사고를 방지하고, 그로 인한 피해를 최소화하기 위해 다양한 흡수제나 + 재해제가 사용됩니다. (A) 가성소다 수용액은 염소 가스를 흡수하는 데 효과적입니다. 염소와 가성소다가 반응하면 무해한 염화나트륨과 물이 생성되므로, + 염소 가스의 누출을 방지하는 데 사용됩니다. (B) 소석회 역시 염소 가스를 흡수하는 데 효과적입니다. 소석회는 염소와 반응하여 염화칼슘을 생성하며, + 이는 무해한 화합물입니다. (C) 탄산소다 수용액도 염소 가스를 흡수하는 데 사용됩니다. 탄산소다는 염소와 반응하여 염화나트륨과 이산화탄소, 그리고 + 물을 생성합니다. 이 반응은 염소 가스를 안전하게 제거하는 데 도움이 됩니다. (D) 물은 염소 가스를 흡수하는 능력이 있지만, 그 효과는 위의 + 세 가지 물질에 비해 상대적으로 약합니다. 또한, 물과 염소가 반응하면 염산과 산소가 생성되는데, 이들은 모두 환경에 해롭습니다. 물은 염소 + 가스의 재해 방지용으로서의 흡수제나 재해제로서 적합하지 않습니다. 따라서, 정답은 (D) 입니다. + + + 질문: {{question}} + + A.{{A}} + + B.{{B}} + + C.{{C}} + + D.{{D}} + + 정답: 차근 차근 생각해봅시다. 가스 기술 공학 관련 정보를 위해 위키피디아를 참조하겠습니다.' +include: _cot_kmmlu_yaml +task: kmmlu_hard_cot_gas_technology_and_engineering diff --git a/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_geomatics.yaml b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_geomatics.yaml new file mode 100644 index 0000000000..811e41d81c --- /dev/null +++ b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_geomatics.yaml @@ -0,0 +1,110 @@ +dataset_name: geomatics +doc_to_text: '질문: 일람도 제도에서 붉은색 0.2mm 폭의 2선으로 제도하는 것은? + + A.수도용지 + + B.기타도로 + + C.철도용지 + + D.하천 + + 정답: 차근 차근 생각해봅시다. 기하학 관련 정보를 위해 위키피디아를 참조하겠습니다. 일람도 제도에서 사용되는 선의 종류와 색깔, 그리고 폭은 + 특정한 의미를 가지고 있습니다. 이를 통해 각 선이 표현하는 것이 무엇인지 파악할 수 있습니다. 일람도 제도 규정에 따르면, 붉은색 0.2mm + 폭의 2선은 ''철도용지''를 나타냅니다. 일람도는 지리 정보를 시각적으로 표현하는 방법 중 하나로, 각 선의 색상, 폭, 형태 등은 특정한 의미를 + 지니고 있습니다. 이러한 선들은 특정한 규칙에 따라 사용되며, 이 규칙은 일반적으로 국가나 기관의 표준에 따라 정해집니다. 붉은색 0.2mm 폭의 + 2선은 일반적으로 철도용지를 나타내는데 사용됩니다. 따라서, 정답은 (C) 입니다. + + + 질문: 방위가 S 20° 20′ W인 측선에 대한 방위각은? + + A.100° 20′ + + B.159° 40′ + + C.200° 20′ + + D.249° 40′ + + 정답: 차근 차근 생각해봅시다. 기하학 관련 정보를 위해 위키피디아를 참조하겠습니다. 방위각은 보통 북쪽을 기준으로 시계방향으로 측정하는 각도를 + 의미합니다. 주어진 방위는 ''S 20° 20′ W''인데, 이는 남쪽을 기준으로 서쪽으로 20° 20′ 회전한 방향을 의미합니다. 우리는 이를 + 북쪽을 기준으로 바꾸어 생각해야 합니다. 그러므로, 북쪽에서 시계방향으로 얼마나 회전해야 이 방향에 도달할 수 있는지 계산해야 합니다. 남쪽은 + 북쪽에서 시계방향으로 180° 회전한 방향입니다. , 남쪽에서 시계방향으로 20° 20′ 회전한 방향은 북쪽에서 시계방향으로 180° + 20° + 20′ 회전한 방향과 같습니다. 이를 계산하면, 200° 20′가 됩니다. 따라서, 정답은 (C) 입니다. + + + 질문: 경위의측량방법으로 세부측량을 한 지역의 필지별 면적측정 방법으로 옳은 것은? + + A.전자면적측정기법 + + B.좌표면적계산법 + + C.축척자삼사법 + + D.방안지조사법 + + 정답: 차근 차근 생각해봅시다. 기하학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 각 선택지에 대해 이해를 해보겠습니다. (A) 전자면적측정기법: + 이 방법은 전자적인 장비를 사용하여 면적을 측정하는 방법입니다. 보통 건물의 내부 공간이나 토지 등의 면적을 측정할 때 사용됩니다. (B) 좌표면적계산법: + 이 방법은 지도상의 좌표를 이용하여 면적을 계산하는 방법입니다. 지도상의 여러 지점의 좌표를 알고 있을 때, 이 좌표들을 이용하여 다각형의 면적을 + 계산할 수 있습니다. (C) 축척자삼사법: 이 방법은 지도상의 축척을 이용하여 면적을 측정하는 방법입니다. 지도의 축척과 실제 토지의 면적 사이의 + 관계를 이용하여 면적을 측정합니다. (D) 방안지조사법: 이 방법은 현장에서 직접 조사하여 면적을 측정하는 방법입니다. 토지의 실제 면적을 측정하거나 + 건물의 내부 공간을 측정할 때 사용됩니다. 그런데 여기서 ''경위의측량방법으로 세부측량을 한 지역의 필지별 면적측정 방법''이라는 질문에서 주목해야 + 할 부분은 ''경위의측량방법''입니다. 경위의측량은 지구의 곡률을 고려하지 않고, 평면상에서의 측량을 의미합니다. 이를 고려하면, 필지별 면적측정 + 방법으로 가장 적합한 것은 ''좌표를 이용한 면적계산법''이 될 것입니다. 왜냐하면, 좌표를 이용하면 평면상에서의 면적을 가장 정확하게 계산할 + 수 있기 때문입니다. 따라서, 정답은 (B) 입니다. + + + 질문: 목장용지의 부호 표기로 옳은 것은? + + A.전 + + B.장 + + C.목 + + D.용 + + 정답: 차근 차근 생각해봅시다. 기하학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저 Geomatics는 지리 정보과학을 의미하며, 지도학, + 측량학, GPS 기술 등을 포괄하는 학문입니다. 이 질문은 Geomatics의 한 분야인 지도학과 관련이 있습니다. 지도학에서는 특정 지역의 특성을 + 표현하기 위해 다양한 부호를 사용합니다. ''목장용지''는 주로 가축이 방목되는 땅을 의미하며, 이를 지도 상에서 표현할 때는 특정한 부호를 사용합니다. + 선택지 중에서 목장용지를 가장 잘 표현할 수 있는 부호를 찾아야 합니다. (A) 전: 일반적으로 ''전''은 농작물을 재배하는 농지를 의미합니다. 이는 + 목장용지를 표현하기에 적합하지 않습니다. (B) 장: ''장''은 일반적으로 장소나 공간을 의미하는 말로, 특정한 의미를 가지고 있지 않습니다. 이는 + 목장용지를 표현하기에 적합하지 않습니다. (C) 목: ''목''은 일반적으로 목장을 의미하는 말로, 가축이 방목되는 땅을 의미합니다. 이는 + 목장용지를 표현하기에 적합해 보입니다. (D) 용: ''용''은 일반적으로 용도를 의미하는 말로, 특정한 의미를 가지고 있지 않습니다. 이는 + 목장용지를 표현하기에 적합하지 않습니다. 따라서, 정답은 (C) 입니다. + + + 질문: 전자면적측정기에 따른 면적측정을 하는 경우, 교차를 구하기 위한 A = 0.0232M√F 공식 중 M의 값으로 옳은 것은? + + A.허용면적 + + B.축척분모 + + C.산출면적 + + D.보정계수 + + 정답: 차근 차근 생각해봅시다. 기하학 관련 정보를 위해 위키피디아를 참조하겠습니다. 전자면적측정기에 따른 면적측정 공식에서 M의 값에 대해 이해하려면, + 먼저 해당 공식이 어떤 것인지, 그리고 각 요소가 무엇을 의미하는지 알아야 합니다. 이 공식은 전자면적측정기를 사용하여 지형의 면적을 측정할 때 + 사용되는 공식입니다. 공식의 각 부분을 분석해보면, A는 측정된 면적, F는 측정된 거리를 의미하며, 0.0232는 상수입니다. 그렇다면 M은 + 무엇을 의미할까요? 선택지 중에서 M이 의미할 수 있는 것은 ''허용면적'', ''축척분모'', ''산출면적'', ''보정계수'' 네 가지입니다. + ''허용면적''이나 ''산출면적''은 면적을 나타내는 값이므로, 이 값들이 M에 해당할 가능성은 낮습니다. ''보정계수''는 측정값을 조정하는 + 데 사용되는 값이지만, 이 경우에는 M이 면적이 아닌 거리에 대한 값을 나타내는 것으로 보입니다. , ''축척분모''가 가장 가능성이 높습니다. + 축척분모는 지도의 축척을 나타내는 값으로, 실제 거리와 지도 상의 거리 사이의 비율을 의미합니다. 이 값이 M에 해당한다면, 공식은 실제 거리의 + 제곱근에 축척분모를 곱한 값이 측정된 면적이 될 것입니다. 이렇게 보면, 공식이 의미하는 바를 잘 나타내는 것 같습니다. 따라서, 정답은 (B) + 입니다. + + + 질문: {{question}} + + A.{{A}} + + B.{{B}} + + C.{{C}} + + D.{{D}} + + 정답: 차근 차근 생각해봅시다. 기하학 관련 정보를 위해 위키피디아를 참조하겠습니다.' +include: _cot_kmmlu_yaml +task: kmmlu_hard_cot_geomatics diff --git a/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_health.yaml b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_health.yaml new file mode 100644 index 0000000000..85267712d8 --- /dev/null +++ b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_health.yaml @@ -0,0 +1,117 @@ +dataset_name: health +doc_to_text: '질문: 도나베디안 (Donabedian) 의 보건의료 서비스 질 평가 중 구조적 접근은? + + A.면허제도 + + B.고객만족도 + + C.임상진료지침 + + D.의료 이용도 조사 + + 정답: 차근 차근 생각해봅시다. 건강학 관련 정보를 위해 위키피디아를 참조하겠습니다. 도나베디안의 보건의료 서비스 질 평가는 구조(Structure), + 과정(Process), 결과(Outcome)의 세 가지 요소로 이루어져 있습니다. 이 중에서 구조적 접근은 ''보건의료 서비스의 질을 평가하는 + 데 필요한 자원과 시스템을 말합니다. 이러한 구조적 접근은 의료기관의 물리적, 인적 자원, 그리고 그 자원을 운영하기 위한 시스템과 절차를 포함합니다. + 예를 들어, 의료기관의 시설과 장비, 의료인력의 수와 자격, 의료 서비스 제공을 위한 정책과 절차 등이 구조적 접근에 해당합니다. 선택지 중에서 + (A) 면허제도는 의료인력의 자격을 보장하는 시스템으로, 구조적 접근의 일부로 볼 수 있습니다. 반면에 (B) 고객만족도, (C) 임상진료지침, + (D) 의료 이용도 조사는 과정이나 결과에 더 가깝게 연관되어 있습니다. 고객만족도는 의료 서비스의 결과를 평가하는 한 가지 방법이며, 임상진료지침은 + 의료 서비스의 과정을 지침하는 도구입니다. 의료 이용도 조사는 의료 서비스의 이용 상황을 파악하는 방법으로, 과정이나 결과를 이해하는 데 도움이 + 됩니다. 따라서, 정답은 (A) 입니다. + + + 질문: 국민건강보험 요양급여의 기준에 관한 규칙 상 상급종합병원에서 1단계 요양급여를 제공받을 수 있는 경우는 ? + + A.혈우병 환자가 요양급여를 받는 경우 + + B.해당 상급 종합병원 직원의 직계 존 ․비속이 요양급여를 받는 경우 + + C.정신건강의학과에서 요양급여를 받는 경우 + + D.산전 진찰을 목적으로 요양급여를 받는 경우 + + 정답: 차근 차근 생각해봅시다. 건강학 관련 정보를 위해 위키피디아를 참조하겠습니다. 국민건강보험 요양급여의 기준에 관한 규칙에 따르면, 상급종합병원에서 + 1단계 요양급여를 받을 수 있는 경우는 다음과 같습니다. - 응급의료에 관한 법률 제2조제1호에 해당하는 응급환자 - 분만 시의 조산아 및 저체중아 + - 치과에서 요양급여를 받는 경우 - 장애인복지법 제32조에 따른 등록 장애인 또는 단순 물리치료가 아닌 작업치료ᆞ운동치료 등의 재활치료가 필요하다고 + 인정되는 자가 재활의학과에서 요양급여를 받는 경우 - 가정의학과에서 요양급여를 받는 경우 - 혈우병 환자가 요양급여를 받는 경우 , 위의 조건에 + 해당하지 않는 선택지인 (B). 해당 상급 종합병원 직원의 직계 존 .비속이 요양급여를 받는 경우와 (C). 정신건강의학과에서 요양급여를 받는 + 경우, (D). 산전 진찰을 목적으로 요양급여를 받는 경우는 상급종합병원에서 1단계 요양급여를 받을 수 없습니다. 따라서, 정답은 (A) 입니다. + + + 질문: 건강보험 재원 구성에 대한 설명으로 옳은 것은? + + A.건강보험 재원 중 가장 큰 비중을 차지하는 수입원은 국고 지원이 다 . + + B.매년 국민건강증진기금에서 당해 연도 보험료 예상 수입액의 6%에 상당하는 금액을 국민건강보험공단에 지원한 다 . + + C.매년 보험료 예상 수입액의 20%에 상당하는 금액을 국고로 지원하여 건강보험의 재정건전성을 확보하고 있다. + + D.건강보험 재정의 대부분은 지역가입자가 내는 보험료이다 . + + 정답: 차근 차근 생각해봅시다. 건강학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 건강보험의 재원 구성에 대해 알아야 합니다. 건강보험의 + 재원은 크게 가입자가 내는 보험료와 국고 지원으로 나눌 수 있습니다. (A)는 국고 지원이 건강보험 재원 중 가장 큰 비중을 차지한다고 주장하고 + 있습니다. 하지만, 건강보험 재원 중 가장 큰 비중을 차지하는 것은 가입자가 내는 보험료입니다. , (A)는 옳지 않습니다. (B)는 매년 국민건강증진기금에서 + 당해 연도 보험료 예상 수입액의 6%에 상당하는 금액을 국민건강보험공단에 지원한다고 주장하고 있습니다. 이는 사실입니다. 국민건강증진기금은 건강보험의 + 재원 중 하나로, 매년 일정한 금액을 국민건강보험공단에 지원하고 있습니다. , (B)는 옳은 설명입니다. (C)는 매년 보험료 예상 수입액의 + 20%에 상당하는 금액을 국고로 지원하여 건강보험의 재정 건전성을 확보하고 있다고 주장하고 있습니다. 하지만, 이는 사실이 아닙니다. 국고 지원은 + 보험료 예상 수입액의 20%가 아니라, 14%를 지원하고 있습니다. , (C)는 옳지 않습니다. (D)는 건강보험 재정의 대부분은 지역가입자가 + 내는 보험료라고 주장하고 있습니다. 하지만, 건강보험 재정의 대부분은 직장가입자가 내는 보험료로 이루어져 있습니다. 지역가입자가 내는 보험료는 + 건강보험 재정에서 차지하는 비중이 상대적으로 작습니다. , (D)는 옳지 않습니다. 따라서, 정답은 (B) 입니다. + + + 질문: 4병상으로 OECD 회원국 평균 4 4병상에 비해 약 2 8배 많았다 ① 효율성 (efficiency) ② 통합성 (integration) + ③ 양적 공급(quantity) ④ 분포(dist ribution coverage) 문 12 예산 집행 과정 중 중앙예산기관으로부터 배정된 예산을 + 각 중앙 부처의 장이 그 하부기관에게 나누어 주는 것은? + + A.예산의 편성 + + B.예산의 배정 + + C.예산의 재배정 + + D.지출원인행위 + + 정답: 차근 차근 생각해봅시다. 건강학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저 질문의 내용을 정리해보겠습니다. 질문은 두 가지 부분으로 + 나누어져 있는데, 첫 번째 부분은 4병상에 대한 내용이고, 두 번째 부분은 예산 집행 과정 중 중앙예산기관으로부터 배정된 예산을 각 중앙 부처의 + 장이 그 하부기관에게 나누어 주는 것에 대한 내용입니다. 첫 번째 부분은 질문의 문맥이 불완전하여 정확한 해석이 어렵습니다. 또한 이 부분은 선택지와 + 연관성이 없는 것으로 보입니다. 이 부분은 무시하고 두 번째 부분에 집중하겠습니다. 두 번째 부분의 질문은 예산 집행 과정 중 중앙예산기관으로부터 + 배정된 예산을 각 중앙 부처의 장이 그 하부기관에게 나누어 주는 것이 무엇인지에 대한 것입니다. 이에 대한 답을 찾기 위해 각 선택지의 의미를 + 살펴보겠습니다. (A). 예산의 편성: 예산을 작성하고 결정하는 과정을 말합니다. 이는 예산의 계획 단계에 해당합니다. (B). 예산의 배정: + 중앙예산기관이 각 부처에 예산을 배정하는 과정을 말합니다. (C). 예산의 재배정: 이미 배정된 예산을 다시 분배하는 과정을 말합니다. 이는 중앙 + 부처의 장이 그 하부기관에게 예산을 나누어 주는 과정에 해당합니다. (D). 지출원인행위: 예산이 지출되는 원인과 그에 따른 행위를 말합니다. + 이는 예산의 실행 단계에 해당합니다. , 중앙예산기관으로부터 배정된 예산을 각 중앙 부처의 장이 그 하부기관에게 나누어 주는 것은 ''예산의 + 재배정''에 해당합니다. 따라서, 정답은 (C) 입니다. + + + 질문: 국민건강증진법 상 명시된 국민건강증진기금의 사용 범위에 해당하지 않는 것은? + + A.건강생활지원사업 + + B.국민영양관리사업 + + C.구강건강관리사업 + + D.사업장 건강검진사업 + + 정답: 차근 차근 생각해봅시다. 건강학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, ''국민건강증진법''에 대해 검색하여 이 법률이 무엇인지, + 그리고 ''국민건강증진기금''이 어떻게 사용되는지에 대한 정보를 찾아보겠습니다. 이를 통해 각 선택지가 기금 사용 범위에 포함되는지 여부를 확인할 + 수 있습니다. ''국민건강증진법''은 국민의 건강증진을 위한 기본적인 방향과 기본적인 조치를 제시하는 법률이며, ''국민건강증진기금''은 이 법률에 + 따라 설립된 기금으로, 국민의 건강증진을 위한 다양한 사업에 사용됩니다. 이제 각 선택지를 하나씩 살펴보겠습니다. (A) 건강생활지원사업: 이는 + 국민의 건강한 생활습관 형성을 위한 사업으로, 국민건강증진기금의 사용 범위에 포함됩니다. (B) 국민영양관리사업: 이는 국민의 영양 상태 개선을 + 위한 사업으로, 국민건강증진기금의 사용 범위에 포함됩니다. (C) 구강건강관리사업: 이는 구강건강을 증진하기 위한 사업으로, 국민건강증진기금의 + 사용 범위에 포함됩니다. (D) 사업장 건강검진사업: 이는 사업장에서 근로자의 건강을 관리하기 위한 사업으로, 일반적으로는 사업장에서 자체적으로 + 실시하는 것이 일반적입니다. , 국민건강증진기금의 사용 범위에는 포함되지 않을 수 있습니다. 따라서, 정답은 (D) 입니다. + + + 질문: {{question}} + + A.{{A}} + + B.{{B}} + + C.{{C}} + + D.{{D}} + + 정답: 차근 차근 생각해봅시다. 건강학 관련 정보를 위해 위키피디아를 참조하겠습니다.' +include: _cot_kmmlu_yaml +task: kmmlu_hard_cot_health diff --git a/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_industrial_engineer.yaml b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_industrial_engineer.yaml new file mode 100644 index 0000000000..876c5f6d9d --- /dev/null +++ b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_industrial_engineer.yaml @@ -0,0 +1,113 @@ +dataset_name: industrial_engineer +doc_to_text: '질문: 수평밀링머신의 니(knee) 위에 전후 방향으로 이동하는 안내면의 명칭은? + + A.컬럼 + + B.아버 + + C.새들 + + D.커터 + + 정답: 차근 차근 생각해봅시다. 산업 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 수평밀링머신의 구조를 이해하겠습니다. 수평밀링머신은 + 주로 금속 가공에 사용되는 기계로, 회전하는 커터를 사용하여 원하는 모양과 크기의 제품을 만들어냅니다. 이 기계의 주요 구성 요소 중 하나가 ''니''라는 + 부분인데, 이는 일반적으로 기계의 테이블을 지지하는 부분을 가리킵니다. 선택지를 보면, (A) 컬럼, (B) 아버, (C) 새들, (D) 커터라는 + 항목들이 있습니다. 이 중에서 ''니'' 위에 전후 방향으로 이동하는 안내면의 명칭을 찾아야 합니다. - 컬럼(Column)은 기계의 주요 구조를 + 이루는 세로형태의 부분을 가리킵니다. 이는 ''니'' 위에 전후 방향으로 이동하는 안내면의 명칭이 아닙니다. - 아버(Arbor)는 밀링 머신에서 + 커터를 지지하는 축을 가리킵니다. 이 역시 ''니'' 위에 전후 방향으로 이동하는 안내면의 명칭이 아닙니다. - 새들(Saddle)은 밀링 머신에서 + ''니''와 ''테이블'' 사이에 위치하며, 테이블을 전후 방향으로 이동시키는 부분을 가리킵니다. - 커터(Cutter)는 밀링 머신에서 제품을 + 가공하는 데 사용되는 회전하는 부분을 가리킵니다. 이 역시 ''니'' 위에 전후 방향으로 이동하는 안내면의 명칭이 아닙니다. , ''니'' 위에 + 전후 방향으로 이동하는 안내면의 명칭은 ''새들''이 맞습니다. 따라서, 정답은 (C) 입니다. + + + 질문: 일반적으로 밀링 머신의 크기를 표시하는 방법에 해당되지 않는 것은? + + A.스핀들의 지름 또는 최대 이동거리 + + B.테이블의 최대 좌우 이동거리 + + C.테이블의 최대 전후 이동거리 + + D.테이블의 최대 상하 이동거리 + + 정답: 차근 차근 생각해봅시다. 산업 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 밀링 머신의 크기를 표시하는 방법은 일반적으로 머신의 + 이동 가능한 범위와 스핀들의 크기를 나타냅니다. 이동 가능한 범위는 테이블의 이동 거리를 통해 나타내며, 이는 테이블이 좌우로 이동하는 거리(X축), + 전후로 이동하는 거리(Y축), 상하로 이동하는 거리(Z축)를 포함합니다. 선택지 B, C, D는 밀링 머신의 크기를 표시하는 방법에 해당됩니다. + 스핀들의 크기도 밀링 머신의 크기를 표시하는 중요한 요소 중 하나입니다. 스핀들의 크기는 일반적으로 스핀들의 지름을 통해 나타냅니다. 하지만 ''스핀들의 + 최대 이동거리''라는 표현은 일반적으로 밀링 머신의 크기를 나타내는 방법에 해당되지 않습니다. 스핀들의 이동거리는 밀링 머신의 작동 범위를 나타내는 + 것이 아니라, 스핀들이 회전하는 축의 이동 거리를 의미합니다. 이는 크기를 나타내는 측정치가 아니며, 이 선택지는 문제의 질문에 해당되지 않습니다. + 따라서, 정답은 (A) 입니다. + + + 질문: 숫돌바퀴를 표시하는 방법으로 WA 60 K m V에서 60이 나타내는 것은? + + A.입도 + + B.조직 + + C.결합도 + + D.숫돌 입자 + + 정답: 차근 차근 생각해봅시다. 산업 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, ''WA 60 K m V''는 숫돌바퀴의 표기 + 방법 중 하나입니다. 여기서 각 문자와 숫자는 다음을 의미합니다: - ''WA''는 연마재의 종류를 나타냅니다. 여기서 ''W''는 흰색을 의미하고 + ''A''는 알루미늄 산화물을 의미합니다. - ''60''은 입도를 나타냅니다. 입도는 연마재 입자의 크기를 나타내는 값으로, 숫자가 작을수록 + 입자의 크기가 큽니다. - ''K''는 경도를 나타냅니다. 경도는 연마재의 경도를 나타내는 값으로, 알파벳이 뒤로 갈수록 경도가 높아집니다. - + ''m''은 조직을 나타냅니다. 조직은 연마재 입자가 바퀴에 얼마나 밀집하게 분포하는지를 나타내는 값입니다. - ''V''는 결합도를 나타냅니다. + 결합도는 연마재 입자를 바퀴에 고정시키는 물질의 강도를 나타내는 값입니다. , ''WA 60 K m V''에서 ''60''은 연마재 입자의 크기를 + 나타내는 입도를 의미합니다. 이에 따라 객관식 질문에서 ''60''이 나타내는 것은 입도입니다. 따라서, 정답은 (A) 입니다. + + + 질문: 측정점 검출기가 좌표를 검출하고 그 데이터를 컴퓨터가 처리하여 위치, 크기, 방향, 윤곽, 형상 등을 측정하는데 사용하는 측정기는? + + A.오토콜리메이터 + + B.3차원 측정기 + + C.광학식 각도기 + + D.광학식 클리노미터 + + 정답: 차근 차근 생각해봅시다. 산업 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저 각 선택지에 대한 설명을 찾아보겠습니다. (A) + 오토콜리메이터는 각도를 정확하게 측정하는 장치입니다. 이 장치는 주로 광학 실험에서 사용되며, 빛의 반사각을 측정하는 데 사용됩니다. (B) 3차원 + 측정기는 3차원 공간에서 객체의 위치와 크기를 측정하는 장치입니다. 이 장치는 주로 공학 및 제조 분야에서 사용되며, 정밀한 측정이 필요한 경우에 + 사용됩니다. (C) 광학식 각도기는 빛의 각도를 측정하는 장치입니다. 이 장치는 주로 광학 실험에서 사용되며, 빛의 굴절률을 측정하는 데 사용됩니다. + (D) 광학식 클리노미터는 각도를 측정하는 장치입니다. 이 장치는 주로 지질학에서 사용되며, 경사 각도를 측정하는 데 사용됩니다. 질문에서는 측정점 + 검출기가 좌표를 검출하고 그 데이터를 컴퓨터가 처리하여 위치, 크기, 방향, 윤곽, 형상 등을 측정하는데 사용하는 측정기에 대해 묻고 있습니다. + 이러한 기능을 가장 잘 수행할 수 있는 장치는 3차원 측정기입니다. 왜냐하면 3차원 측정기는 3차원 공간에서 객체의 위치와 크기를 측정할 수 있으며, + 이는 위치, 크기, 방향, 윤곽, 형상 등의 측정에 필요한 기능들을 모두 포함하고 있기 때문입니다. 따라서, 정답은 (B) 입니다. + + + 질문: 선반에서 절삭저항의 분력 중 탄소강을 가공할 때 가장 큰 절삭저항은? + + A.배분력 + + B.이송분력 + + C.횡분력 + + D.주분력 + + 정답: 차근 차근 생각해봅시다. 산업 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 절삭저항의 분력에 대해 이해해야 합니다. 절삭저항의 + 분력은 절삭 과정에서 발생하는 저항을 묘사하는데 사용되는 개념입니다. 이는 절삭 도구와 가공재 사이의 상호작용을 설명하는 데 사용되며, 절삭 과정의 + 효율성과 가공 품질에 중요한 영향을 미칩니다. 절삭저항의 분력에는 주로 네 가지가 있습니다: 배분력, 이송분력, 횡분력, 그리고 주분력입니다. + 이 중에서 가장 큰 절삭저항을 주는 것이 무엇인지 알아보기 위해, 각 분력에 대해 간략히 이해해 보겠습니다. - 배분력: 절삭면에서 도구를 밀어내려는 + 힘입니다. - 이송분력: 절삭면에 수직으로 작용하는 힘으로, 주로 칩의 이동을 제어합니다. - 횡분력: 절삭면에 수평으로 작용하는 힘으로, 도구를 + 절삭면에서 벗어나게 만드는 힘입니다. - 주분력: 절삭면에 작용하는 가장 주요한 힘으로, 절삭저항의 대부분을 차지합니다. 이러한 정보를 바탕으로, + 주분력이 절삭저항의 대부분을 차지하므로, 탄소강을 가공할 때 가장 큰 절삭저항을 주는 것은 주분력일 것이라고 추론할 수 있습니다. 따라서, 정답은 + (D) 입니다. + + + 질문: {{question}} + + A.{{A}} + + B.{{B}} + + C.{{C}} + + D.{{D}} + + 정답: 차근 차근 생각해봅시다. 산업 공학 관련 정보를 위해 위키피디아를 참조하겠습니다.' +include: _cot_kmmlu_yaml +task: kmmlu_hard_cot_industrial_engineer diff --git a/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_information_technology.yaml b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_information_technology.yaml new file mode 100644 index 0000000000..c26d6e40ab --- /dev/null +++ b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_information_technology.yaml @@ -0,0 +1,111 @@ +dataset_name: information_technology +doc_to_text: '질문: 실제 펄스 파형의 구간별 명칭에 대한 설명으로 틀린 것은? + + A.상승 시간(rise time)이란 입력 펄스의 최대 진폭의 10%에서 90%까지 상승하는데 걸리는 시간 + + B.하강 시간(fall time)이란 펄스의 하강 속도를 나타내는 척도로서 최대 90%에서 10%까지 하강하는데 소요되는 시간 + + C.새그(sag)란 이상적인 펄스 파형의 상승하는 부분이 기준 레벨보다 높은 부분 + + D.링잉(ringing)은 높은 주파수에서 공진되기 때문에 발생하는 것으로 펄스 상승 부분의 진동의 정도 + + 정답: 차근 차근 생각해봅시다. 정보 기술 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저 각 선택지에 대한 정확한 정의를 확인해보겠습니다. + (A) 상승 시간(rise time)은 일반적으로 펄스가 최저 수준에서 최고 수준까지 도달하는 데 걸리는 시간을 의미합니다. 특히, 입력 펄스의 + 최대 진폭의 10%에서 90%까지 상승하는데 걸리는 시간을 가리킵니다. 이 정의는 선택지와 일치합니다. (B) 하강 시간(fall time)은 + 펄스가 최고 수준에서 최저 수준까지 도달하는 데 걸리는 시간을 의미합니다. 특히, 최대 90%에서 10%까지 하강하는데 소요되는 시간을 가리킵니다. + 이 정의는 선택지와 일치합니다. (C) 새그(sag)는 전력 공급에서 전압이 일시적으로 떨어지는 현상을 의미합니다. 이상적인 펄스 파형의 상승하는 + 부분이 기준 레벨보다 높은 부분을 의미하는 것은 새그(sag)의 정의와 일치하지 않습니다. (D) 링잉(ringing)은 펄스의 상승 또는 하강 + 부분에서 발생하는 과도한 진동을 의미합니다. 높은 주파수에서 공진되기 때문에 발생하는 것이라는 설명은 링잉(ringing)의 원인 중 하나로 볼 + 수 있습니다. , 각 선택지의 정의를 확인한 결과, 새그(sag)의 정의가 문제의 선택지와 일치하지 않습니다. 따라서, 정답은 (C) 입니다. + + + 질문: 진폭 변조에서 변조된 파형의 최대값 전압이 35 V 이고 최소값 전압이 5 V 일 때 변조도는? + + A.0.60 + + B.0.65 + + C.0.70 + + D.0.75 + + 정답: 차근 차근 생각해봅시다. 정보 기술 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 진폭 변조에서 변조도를 계산하는 공식을 알아야 + 합니다. 변조도는 원래 신호의 진폭과 변조된 신호의 진폭의 차이를 나타내는 값입니다. 이는 변조된 신호의 진폭이 원래 신호의 진폭보다 얼마나 변했는지를 + 나타냅니다. 변조도는 다음과 같은 공식으로 계산됩니다: 변조도 = (변조된 파형의 최대값 전압 - 변조된 파형의 최소값 전압) / (변조된 파형의 + 최대값 전압 + 변조된 파형의 최소값 전압) 이 경우, 변조된 파형의 최대값 전압이 35V이고 최소값 전압이 5V입니다. , 이 값을 위의 공식에 + 대입하면 다음과 같습니다: 변조도 = (35V - 5V) / (35V + 5V) = 30V / 40V = 0.75 따라서, 정답은 (D) 입니다. + + + 질문: 6Ω과 3Ω의 저항을 직렬로 접속할 경우는 병렬로 접속할 경우의 몇 배가 되는가? + + A.3 + + B.4.5 + + C.6 + + D.7.5 + + 정답: 차근 차근 생각해봅시다. 정보 기술 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 저항의 직렬 연결과 병렬 연결에 대한 이해가 필요합니다. + 1. 직렬 연결: 저항들이 한 줄로 연결되어 있을 때, 총 저항은 각 저항의 합과 같습니다. R_total = R1 + R2 + ... + Rn + 2. 병렬 연결: 저항들이 병렬로 연결되어 있을 때, 총 저항은 각 저항의 역수의 합의 역수와 같습니다. 1/R_total = 1/R1 + 1/R2 + + ... + 1/Rn 이 문제에서 주어진 저항은 6Ω과 3Ω입니다. 직렬 연결의 경우, 총 저항은 각 저항의 합, 즉 6Ω + 3Ω = 9Ω가 + 됩니다. 병렬 연결의 경우, 총 저항은 각 저항의 역수의 합의 역수로, 1/(1/6 + 1/3) = 2Ω가 됩니다. , 직렬 연결의 저항은 병렬 + 연결의 저항의 몇 배인지를 묻는 문제이므로, 9Ω / 2Ω = 4.5배가 됩니다. 따라서, 정답은 (B) 입니다. + + + 질문: 이상적인 연산 증폭기의 특징에 대한 설명으로 틀린 것은? + + A.주파수 대역폭이 무한대(∞)이다. + + B.입력 임피던스가 무한대(∞)이다. + + C.동상 이득은 무한대(∞)이다. + + D.오픈 루프 전압 이득이 무한대(∞)이다. + + 정답: 차근 차근 생각해봅시다. 정보 기술 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저 각 선택지에 대해 하나씩 살펴보겠습니다. (A) + 선택지는 ''주파수 대역폭이 무한대(∞)이다''를 주장합니다. 이상적인 연산 증폭기의 경우, 주파수에 관계없이 동일한 이득을 유지하므로, 이는 + 사실상 무한대의 대역폭을 의미합니다. 이 선택지는 올바른 설명입니다. (B) 선택지는 ''입력 임피던스가 무한대(∞)이다''를 주장합니다. + 이상적인 연산 증폭기는 입력 부분에 아무런 전류가 흐르지 않도록 설계되어 있습니다. 이는 입력 임피던스가 무한대라는 것을 의미합니다. 이 선택지 + 역시 올바른 설명입니다. (C) 선택지는 ''동상 이득은 무한대(∞)이다''를 주장합니다. 하지만 이는 틀린 설명입니다. 동상 이득(common-mode + gain)은 두 입력 사이의 차이가 아닌, 두 입력이 동시에 변할 때 증폭기의 반응을 설명하는 데 사용됩니다. 이상적인 연산 증폭기에서는 두 입력이 + 동시에 변하더라도 출력이 변하지 않아야 하므로, 동상 이득은 0이어야 합니다. 이 선택지는 잘못된 설명입니다. (D) 선택지는 ''오픈 루프 + 전압 이득이 무한대(∞)이다''를 주장합니다. 이상적인 연산 증폭기는 입력과 출력 사이의 전압 차이를 최대한 크게 만들기 위해 오픈 루프 전압 + 이득이 무한대로 설계되어 있습니다. 이 선택지는 올바른 설명입니다. 따라서, 정답은 (C) 입니다. + + + 질문: 수정 발진 회로 중 피어스 B-E형 발진 회로는 컬렉터-이미터 간의 임피던스가 어떻게 될 때가 가장 안정한 발진을 지속하는가? + + A.용량성 + + B.유도성 + + C.저항성 + + D.용량성 혹은 저항성 + + 정답: 차근 차근 생각해봅시다. 정보 기술 관련 정보를 위해 위키피디아를 참조하겠습니다. 피어스 B-E형 발진 회로는 BJT(비접점 트랜지스터)를 + 사용하는 발진 회로 중 하나입니다. 이 회로에서는 컬렉터와 이미터 사이의 임피던스 특성이 발진의 안정성에 중요한 역할을 합니다. 용량성, 유도성, + 저항성 중 어떤 임피던스가 발진의 안정성에 가장 좋을지 고려해보겠습니다. 용량성 임피던스는 주파수가 높아질수록 저항이 감소하는 특성을 가지고 있습니다. + 이런 특성 때문에 발진 회로에서는 주파수가 높아질수록 회로의 안정성이 떨어질 수 있습니다. 용량성 임피던스는 발진의 안정성에 좋지 않습니다. + 유도성 임피던스는 주파수가 높아질수록 저항이 증가하는 특성을 가지고 있습니다. 이런 특성 때문에 발진 회로에서는 주파수가 높아질수록 회로의 안정성이 + 증가할 수 있습니다. 유도성 임피던스는 발진의 안정성에 좋습니다. 저항성 임피던스는 주파수에 관계없이 일정한 저항 값을 가지고 있습니다. 이런 + 특성 때문에 발진 회로에서는 주파수가 변화해도 회로의 안정성이 유지될 수 있습니다. 하지만, 발진 회로에서는 주파수의 변화에 따른 임피던스의 변화가 + 필요하기 때문에 저항성 임피던스만으로는 안정적인 발진을 유지하기 어렵습니다. , 피어스 B-E형 발진 회로에서는 컬렉터-이미터 간의 임피던스가 + 유도성일 때 가장 안정한 발진을 지속할 수 있습니다. 따라서, 정답은 (B) 입니다. + + + 질문: {{question}} + + A.{{A}} + + B.{{B}} + + C.{{C}} + + D.{{D}} + + 정답: 차근 차근 생각해봅시다. 정보 기술 관련 정보를 위해 위키피디아를 참조하겠습니다.' +include: _cot_kmmlu_yaml +task: kmmlu_hard_cot_information_technology diff --git a/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_interior_architecture_and_design.yaml b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_interior_architecture_and_design.yaml new file mode 100644 index 0000000000..1e5a8d7be8 --- /dev/null +++ b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_interior_architecture_and_design.yaml @@ -0,0 +1,123 @@ +dataset_name: interior_architecture_and_design +doc_to_text: '질문: 실내디자인의 원리 중 조화ㆍ통일ㆍ변화에 대한 설명으로 옳지 않은 것은? + + A.조화란 전체적인 조립방법이 모순없이 질서를 잡는 것을 말한다. + + B.조화에는 시각적으로 동일한 요소간에 이루어지는 유사조화와 이질적인 요소간에 이루어지는 대비조화가 있다. + + C.통일은 변화와 함께 모든 조형에 대한 미의 근원이 되는 원리이다. + + D.통일과 변화는 각각 독립된 것으로 상호대립관계에 있다. + + 정답: 차근 차근 생각해봅시다. 건축 디자인 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저 각 선택지에 대한 내용을 확인해보겠습니다. (A) + 조화란 전체적인 조립방법이 모순없이 질서를 잡는 것을 말한다. - 이는 조화의 정의에 부합합니다. 조화는 디자인 요소들이 서로 잘 어우러져 전체적인 + 질서와 균형을 이루는 것을 의미합니다. (B) 조화에는 시각적으로 동일한 요소간에 이루어지는 유사조화와 이질적인 요소간에 이루어지는 대비조화가 + 있다. - 이 역시 조화의 한 형태를 설명하고 있습니다. 유사조화는 같은 종류의 요소들이 서로 조화를 이루는 것을, 대비조화는 서로 다른 요소들이 + 조화를 이루는 것을 의미합니다. (C) 통일은 변화와 함께 모든 조형에 대한 미의 근원이 되는 원리이다. - 통일은 디자인 요소들이 일관성을 가지고 + 전체적으로 연결되는 것을 의미하며, 변화는 디자인에 다양성과 흥미를 더하는 요소입니다. 두 원리는 모두 디자인의 미를 창출하는 중요한 요소입니다. + (D) 통일과 변화는 각각 독립된 것으로 상호대립관계에 있다. - 이 선택지는 잘못된 내용입니다. 통일과 변화는 디자인의 중요한 원리로서, 상호 + 보완적인 관계에 있습니다. 통일 없이 변화만 있다면 디자인은 혼란스러울 것이고, 반대로 변화 없이 통일만 있다면 디자인은 단조로울 것입니다. 둘은 + 상호대립하는 것이 아니라, 상호보완적인 관계에 있습니다. 따라서, 정답은 (D) 입니다. + + + 질문: 건물과 일체화해서 만든 가구로서, 가구배치의 혼란을 없애고 공간을 최대한 활용할 수 있는 것은? + + A.모듈러 가구 + + B.가동 가구 + + C.유닛 가구 + + D.붙박이 가구 + + 정답: 차근 차근 생각해봅시다. 건축 디자인 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저 각 선택지의 정의를 이해하는 것이 중요합니다. + (A). 모듈러 가구: 모듈러 가구는 미리 제작된 독립적인 부품을 조립하여 사용하는 가구를 말합니다. 이 가구는 사용자의 필요에 따라 자유롭게 + 조립하거나 변경할 수 있습니다. (B). 가동 가구: 가동 가구는 위치를 쉽게 이동시킬 수 있는 가구를 말합니다. 이 가구는 공간의 배치를 쉽게 + 변경할 수 있어 유연성을 제공합니다. (C). 유닛 가구: 유닛 가구는 부분을 조립하여 다양한 형태를 만들 수 있는 가구를 의미합니다. 이 가구는 + 공간을 효율적으로 활용할 수 있습니다. (D). 붙박이 가구: 붙박이 가구는 건물의 일부로 설계되고 설치되는 가구를 말합니다. 이 가구는 공간을 + 최대한 활용하고 가구 배치의 혼란을 없앨 수 있습니다. 질문의 키워드는 ''건물과 일체화해서 만든 가구''와 ''가구배치의 혼란을 없애고 공간을 + 최대한 활용''입니다. 이 키워드를 기반으로 선택지를 살펴보면, 붙박이 가구가 가장 적합한 것으로 보입니다. 붙박이 가구는 건물과 일체화되어 설계되고, + 공간을 최대한 활용하며 가구 배치의 혼란을 없앨 수 있습니다. 따라서, 정답은 (D) 입니다. + + + 질문: 개보수(Renovation) 작업시 고려해야 할 사항으로 옳은 것은? + + A.현장 실측 조사를 통해 기존 공간의 현황을 명확하게 파악하여야 한다. + + B.기존 도면이 있을 경우 별도의 현장실측은 필요하지 않다. + + C.기존 건축 구조의 영향을 전혀 받지 않는다. + + D.전기 및 설비 관련사항에 대한 검토는 필요 없다. + + 정답: 차근 차근 생각해봅시다. 건축 디자인 관련 정보를 위해 위키피디아를 참조하겠습니다. 개보수(Renovation) 작업은 기존의 건물이나 + 공간을 새롭게 개선하거나 수정하는 작업을 말합니다. 이를 위해서는 다음과 같은 사항들을 고려해야 합니다. (A) 선택지에서는 현장 실측 조사를 + 통해 기존 공간의 현황을 명확하게 파악해야 한다고 합니다. 이는 매우 중요한 점입니다. 현장 실측 조사는 실제 공간의 구조, 크기, 위치 등을 + 정확하게 파악하는 것을 돕습니다. 이를 통해 설계 도면을 만들거나 기존 도면을 수정하는데 필요한 정확한 정보를 얻을 수 있습니다. 이는 개보수 + 작업시 반드시 고려해야 할 사항입니다. (B) 선택지에서는 기존 도면이 있을 경우 별도의 현장실측은 필요하지 않다고 합니다. 하지만 이는 옳지 + 않습니다. 기존 도면이 있더라도 현장의 실제 상황과 도면이 일치하지 않을 수 있습니다. 또한, 건물의 사용 중에 생긴 변화나 손상 등을 파악하기 + 위해서도 현장 실측이 필요합니다. (C) 선택지에서는 기존 건축 구조의 영향을 전혀 받지 않는다고 합니다. 하지만 이는 잘못된 정보입니다. 기존 + 건축 구조는 개보수 작업에 큰 영향을 미칩니다. 구조의 안전성, 변경 가능성 등을 고려해야 하며, 구조를 무시하고 개보수를 진행하면 안전 문제가 + 발생할 수 있습니다. (D) 선택지에서는 전기 및 설비 관련사항에 대한 검토는 필요 없다고 합니다. 하지만 이 역시 옳지 않습니다. 전기 및 설비 + 시스템은 건물의 중요한 부분으로, 이들의 상태와 기능을 확인하고 필요한 경우 개선하거나 변경해야 합니다. 따라서, 정답은 (A) 입니다. + + + 질문: 전시공간 전시실의 순회 유형에 대한 설명으로 옳은 것은? + + A.연속 순회형 : 순서별로 관람하기 때문에 지루하나 개개의 전시실을 폐쇄시키기에 유리하다. + + B.갤러리 및 복도형 : 하나의 전시실을 패쇄시키면 전체 동선의 흐름이 막히게 되므로 비교적 소규모 전시실에 적합하다. + + C.중앙홀형 : 중앙홀이 크면 동선의 혼란은 없으나 장래의 확장에는 무리가 있다. + + D.갤러리 및 복도형 : 별도의 전시실 없이 복도만을 전시장으로 사용하며 뉴욕의 근대미술관, 구겐하임 미술관 등이 대표적이다. + + 정답: 차근 차근 생각해봅시다. 건축 디자인 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 각 선택지에 대한 개념을 정확히 이해하고 그에 + 따른 전시공간 전시실의 순회 유형을 분석해야 합니다. (A) 연속 순회형: 이 유형은 관람객이 한 방향으로만 움직이도록 설계된 공간을 의미합니다. + 이는 관람객이 전시작품을 순서대로 볼 수 있게 해주지만, 각각의 전시실을 폐쇄하는 것이 용이하다는 점에서 장점이 있습니다. 그러나 이는 반드시 + 지루하다는 의미는 아닙니다. (B) 갤러리 및 복도형: 이 유형은 각 전시실이 복도를 통해 연결되어 있어, 한 전시실이 폐쇄되면 전체 동선의 흐름이 + 막히게 되는 구조를 의미합니다. 이는 소규모 전시실에 적합하다고 할 수 있습니다. (C) 중앙홀형: 이 유형은 중앙에 큰 공간이 위치하고, 그 + 주변에 전시실이 배치된 구조를 의미합니다. 중앙홀이 크면 동선의 혼란은 없지만, 장래의 확장에는 어려움이 있을 수 있습니다. (D) 갤러리 및 + 복도형: 이 유형은 별도의 전시실 없이 복도만을 전시장으로 사용하는 구조를 의미합니다. 이는 뉴욕의 근대미술관, 구겐하임 미술관 등에서 볼 수 + 있습니다. 각 선택지를 분석한 결과, (A) 선택지의 ''지루하다''는 표현은 연속 순회형의 특징을 정확하게 반영하지 않습니다. (B) 선택지는 + 갤러리 및 복도형의 특징을 잘 설명하고 있습니다. (C) 선택지는 중앙홀형의 특징을 잘 설명하고 있습니다. (D) 선택지는 복도만을 전시장으로 + 사용하는 갤러리 및 복도형의 특징을 잘 설명하고 있습니다. , 정확한 설명을 한 것은 (B), (C), (D) 선택지입니다. 그러나 질문에서는 + ''옳은 것''을 물어보고 있으므로 하나의 정답만 선택해야 합니다. 이 중에서 가장 일반적인 특징을 잘 설명하고 있는 것은 (C) 중앙홀형입니다. + 이는 중앙홀이 크면 동선의 혼란은 없으나, 장래의 확장에는 무리가 있다는 특징을 잘 반영하고 있습니다. 따라서, 정답은 (C) 입니다. + + + 질문: 공간의 최적치수 선정방법에 해당되지 않은 것은? + + A.최소값 +α의 방법 + + B.최대값 -α의 방법 + + C.조정값 ±α의 방법 + + D.목표값 ±α의 방법 + + 정답: 차근 차근 생각해봅시다. 건축 디자인 관련 정보를 위해 위키피디아를 참조하겠습니다. 공간의 최적치수 선정방법을 평가할 때, 각 옵션의 의미와 + 일반적인 설계 및 계획 과정에서 사용되는 방법론을 고려해야 합니다. 각 옵션을 살펴보겠습니다: (A) 최소값 +α의 방법: 이 방법은 주어진 공간에 + 대한 최소 요구치수에 어떤 마진(α)을 더하여 최적치수를 결정하는 방식입니다. 이는 안전 마진을 고려한 보수적인 접근법으로 볼 수 있습니다. (B) + 최대값 -α의 방법: 이 방법은 가능한 최대치수에서 어떤 마진(α)을 빼서 최적치수를 결정하는 방식입니다. 이 역시 마진을 고려하는 접근법으로, + 과도한 공간 활용을 방지하기 위한 것일 수 있습니다. (C) 조정값 ±α의 방법: 이 방법은 특정 조정값에 대해 상하로 일정 범위(±α) 내에서 + 최적치수를 결정하는 방식입니다. 이는 유연성을 제공하는 동시에 특정 범위 내에서 조정을 허용하는 방식으로 해석될 수 있습니다. (D) 목표값 ±α의 + 방법: 이 방법은 특정 목표치수에 대해 상하로 일정 범위(±α) 내에서 최적치수를 결정하는 방식입니다. 이는 목표치에 대한 허용 오차를 고려한 + 방법으로, 실제 설계 및 계획 과정에서 흔히 사용됩니다. 이 중에서 "조정값 ±α의 방법" (C)은 다소 모호하고 일반적인 설계 및 계획 방법론과 + 다를 수 있습니다. "조정값"이라는 용어는 특정 기준이나 목표치를 명확하게 지칭하지 않으며, 실제 설계 및 계획 과정에서는 보통 최소값, 최대값, + 또는 목표값과 같이 더 구체적이고 명확한 기준을 바탕으로 최적치수를 결정합니다. 따라서, 정답은 (C) 입니다. + + + 질문: {{question}} + + A.{{A}} + + B.{{B}} + + C.{{C}} + + D.{{D}} + + 정답: 차근 차근 생각해봅시다. 건축 디자인 관련 정보를 위해 위키피디아를 참조하겠습니다.' +include: _cot_kmmlu_yaml +task: kmmlu_hard_cot_interior_architecture_and_design diff --git a/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_korean_history.yaml b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_korean_history.yaml new file mode 100644 index 0000000000..18e265b604 --- /dev/null +++ b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_korean_history.yaml @@ -0,0 +1,128 @@ +dataset_name: korean_history +doc_to_text: '질문: (가)에 대한 설명으로 옳지 않은 것은? (가)은/는 의병계열과 애국계몽 운동 계열의 비밀결사가 모여 결성된 조직으로, + 총사령 박상진을 중심으로 독립군 양성을 목적으로 하였다. + + A.북간도에서 무장 독립 단체인 중광단을 조직하였다. + + B.군자금을 모집하고 친일파를 공격하였다. + + C.공화제 국가 수립을 지향하였다. + + D.경상도 일대에서 결성되어 전국 조직으로 확대하였다. + + 정답: 차근 차근 생각해봅시다. 한국사 관련 정보를 위해 위키피디아를 참조하겠습니다. 대한광복회는 1915년 7월 15일 대구 달성공원에서 한말 + 의병계열과 계몽운동계열이 연합하여 결성한 독립운동단체입니다. 이 단체는 국권 회복과 독립 달성을 목적으로 만주에 무관학교를 설립하고 독립군을 양성해 + 무력이 준비되면 일제와 전쟁을 치를 계획이었습니다. 또한 한인들을 만주로 이주시키고 농토를 개간해 식량과 병력을 공급할 계획도 가지고 있었습니다. + 대한광복회는 공화제 국가 수립을 지향하였으며, 이는 신민회가 공화주의를 주창한 것을 시작으로 독립운동가들 사이에서 공화주의 사상이 널리 퍼져 있었음을 + 보여줍니다. 대한광복회는 군자금을 모집하고 친일파를 공격하는 활동을 전개하였으며, 이를 위해 전국 각지에 상업조직으로 위장한 연락기관들을 설치하였습니다. + 또한 중국 단동과 장춘에도 여관과 잡화상을 설립해 연락 거점으로 삼았습니다. 그러나 대한광복회는 북간도에서 무장 독립 단체인 중광단을 조직하지 + 않았습니다. 중광단은 나철과 오기호 등 대종교(단군) 단체에서 결성한 무장투쟁 조직으로, 3.1운동 이후 중광단이 전신이 되어 북로군정서가 발족하였습니다. + 북로군정서는 청산리 대첩에서 김좌진 장군이 이끈 부대로 유명합니다. , (가)에 대한 설명으로 옳지 않은 것은 (A)입니다. 대한광복회는 북간도에서 + 무장 독립 단체인 중광단을 조직하지 않았으며, 이는 중광단과는 별개의 조직이었습니다. 따라서, 정답은 (A) 입니다. + + + 질문: (가) 지역에 대한 설명으로 옳은 것은? 나는 삼한(三韓) 산천의 음덕을 입어 대업을 이루었다.(가)는/은수덕(水德)이 순조로워 우리나라 + 지맥의 뿌리가 되니 대업을 만대에 전할 땅이다.왕은 춘하 추동네 계절의 중간달에 그곳에 가 100일 이상 머물러서 나라를 안녕케 하라. - 고려사- + + A.이곳에 대장도감을 설치하여 재조대장경을 만들었다. + + B.지눌이 이곳에서 수선사 결사운동을 펼쳤다. + + C.망이 ․망소이가 이곳에서 봉기하였다. + + D.몽골이 이곳에 동녕부를 두었다. + + 정답: 차근 차근 생각해봅시다. 한국사 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 주어진 고려사의 기록을 보면, (가) 지역은 삼한의 + 산천의 음덕을 입은 곳으로, 수덕이 순조롭고 우리나라 지맥의 뿌리가 되는 곳으로 묘사되어 있습니다. 이에 따라, 이 지역은 고려의 수도인 개경으로 + 추정됩니다. 이제, 선택지들을 살펴보겠습니다. (A) 이곳에 대장도감을 설치하여 재조대장경을 만들었다. - 재조대장경은 고려 고종 23년(1236)부터 + 38년(1251)까지 16년간에 걸쳐 완성된 팔만대장경으로, 이 작업은 강화도에서 이루어졌습니다. , (A)는 틀린 설명입니다. (B) 지눌이 + 이곳에서 수선사 결사운동을 펼쳤다. - 보조국사 지눌은 고려시대의 승려로, 송광사에서 수선사 결사운동을 펼쳤습니다. 송광사는 전라도 순천에 위치해 + 있습니다. , (B)는 틀린 설명입니다. (C) 망이 .망소이가 이곳에서 봉기하였다. - 망이 .망소이는 고려시대의 천민 출신으로, 공주 명학소에서 + 봉기를 일으켰습니다. , (C)는 틀린 설명입니다. (D) 몽골이 이곳에 동녕부를 두었다. - 몽골은 고려를 침입한 후, 서경에 동녕부를 설치하여 + 통치하였습니다. , (D)는 맞는 설명입니다. 따라서, 정답은 (D) 입니다. + + + 질문: 밑줄 친 ‘그’에 대한 설명으로 옳은 것은? 이 날 소정방이 부총관 김인문 등과 함께 기 벌포에 도착하여 백제 군사와 마주쳤다 . …(중략) + …소정방이 신라군이 늦게 왔다는 이유로 군문에서 신라 독군 김문영의 목을 베고 자 하니, 그가 군사들 앞에 나아가 “황산 전투를 보지도 않고 늦게 + 온 것을 이유로 우리를 죄 주려 하는구나 . 죄도 없이 치욕을 당할 수는 없으니, 결단코 먼저 당나라 군사와 결전을 한 후에 백제를 쳐야겠다 + .”라고 말하였다 . + + A.살수에서 수의 군대를 물리쳤다 . + + B.김춘추 의 신라 왕위 계승을 지원하였다 . + + C.청해진을 설치하고 해상 무역을 전개하였다 . + + D.대가야를 정벌하여 낙동강 유역을 확보하였다 . + + 정답: 차근 차근 생각해봅시다. 한국사 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저 ''그''가 가리키는 대상이 누구인지 확인해야 합니다. + 이 문장에서 ''그''는 신라 독군 김문영을 가리키고 있습니다. 선택지 중에서 김문영의 행적에 해당하는 것을 찾아야 합니다. 이제 선택지를 + 하나씩 살펴보겠습니다. (A) 살수에서 수의 군대를 물리쳤다. - 이 내용은 김유신이 살수 전투에서 수의 군대를 물리친 사건을 가리키는 것으로 + 보입니다. 김문영과는 관련이 없어 보입니다. (B) 김춘추의 신라 왕위 계승을 지원하였다. - 이 내용은 김유신이 김춘추의 왕위 계승을 지원한 + 사건을 가리키는 것으로 보입니다. 김문영이 김춘추의 왕위 계승을 지원한 것은 확실한 사실입니다. 김문영은 김춘추가 왕위를 계승하도록 도왔고, 이로 + 인해 신라는 삼국을 통일할 수 있었습니다. (C) 청해진을 설치하고 해상 무역을 전개하였다. - 이 내용은 진흥왕이 청해진을 설치하고 해상 무역을 + 전개한 사건을 가리키는 것으로 보입니다. 김문영과는 관련이 없어 보입니다. (D) 대가야를 정벌하여 낙동강 유역을 확보하였다. - 이 내용은 김유신이 + 대가야를 정벌하여 낙동강 유역을 확보한 사건을 가리키는 것으로 보입니다. 김문영과는 관련이 없어 보입니다. 위의 선택지 중에서 김문영의 행적을 + 가리키는 것은 "(B) 김춘추의 신라 왕위 계승을 지원하였다" 입니다. 따라서, 정답은 (B) 입니다. + + + 질문: 다음과 같은 대통령 선출 방식이 포함된 헌법의 내용으로 옳지 않은 것은? 제39조 + + A.대통령은 통일 주체국민회의에서 토론 없이 무기명 투표로 선거한 다 . + + B.통일주체국민회의에서 재적 대의원 과반수의 찬성을 얻은 자를 대통령 당선자로 한다. ①대통령은 국회를 해산할 수 있다. ②대통령의 임기는 7년으로 + 하며, 중임할 수 없다. + + C.대법원장은 대통령이 국회의 동의를 얻어 임명한 다 . + + D.대통령은 국정 전반에 걸쳐 필요한 긴급조치를 할 수 있다. + + 정답: 차근 차근 생각해봅시다. 한국사 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 질문에서 언급한 제39조를 찾아보겠습니다. 제39조는 + 대한민국 헌법에 나오는 내용으로, 대통령의 선출 방식과 관련된 내용을 담고 있습니다. 선택지 A, B, C, D 각각의 내용을 살펴보면서 제39조와 + 비교하겠습니다. (A) 대통령은 통일 주체국민회의에서 토론 없이 무기명 투표로 선거한 다. (B) 통일주체국민회의에서 재적 대의원 과반수의 찬성을 + 얻은 자를 대통령 당선자로 한다. ①대통령은 국회를 해산할 수 있다. ②대통령의 임기는 7년으로 하며, 중임할 수 없다. (C) 대법원장은 대통령이 + 국회의 동의를 얻어 임명한 다. (D) 대통령은 국정 전반에 걸쳐 필요한 긴급조치를 할 수 있다. (A)와 (B)는 대통령 선출 방식에 대한 내용이며, + (C)는 대법원장 임명에 대한 내용, (D)는 대통령의 권한에 대한 내용입니다. 제39조의 내용을 찾아보면, (A)와 (B)의 내용은 대통령 선출 + 방식에 대해 언급하고 있으나, 통일 주체국민회의에서 선출한다는 내용은 없습니다. 또한, (B)의 내용 중 대통령의 임기가 7년이며, 중임할 수 + 없다는 내용도 헌법에는 없습니다. (C)의 내용은 제104조에 나오는 대법원장 임명 방식에 대한 내용이며, 제39조와는 관련이 없습니다. (D)의 + 내용은 제76조에 나오는 대통령의 권한에 대한 내용으로, 제39조와는 관련이 없습니다. , 제39조와 관련된 내용이 아닌 것은 (C) 대법원장은 + 대통령이 국회의 동의를 얻어 임명한 다와 (D) 대통령은 국정 전반에 걸쳐 필요한 긴급조치를 할 수 있다입니다. 하지만 질문에서는 ''옳지 않은 + 것''을 묻고 있으므로, 제39조와 관련이 있으면서도 내용이 틀린 선택지를 찾아야 합니다. 그 결과, (B) 통일주체국민회의에서 재적 대의원 과반수의 + 찬성을 얻은 자를 대통령 당선자로 한다. ①대통령은 국회를 해산할 수 있다. ②대통령의 임기는 7년으로 하며, 중임할 수 없다가 옳지 않은 내용입니다. + 따라서, 정답은 (B) 입니다. + + + 질문: (가) 인물이 추진한 정책으로 옳지 않은 것은? 선비들 수만 명이 대궐 앞에 모여 만 동묘와 서원을 다시 설립할 것을 청하니, (가)이/가 + 크게 노하여 한성부의 조례(皂隷)와 병졸로 하여 금 한 강 밖으로 몰아내게 하고 드디어 천여 곳의 서원을 철폐하고 그 토지를 몰수하여 관에 속하게 + 하였다 .-대한계년사 - + + A.사창제를 실시하였다 . + + B.대전회통을 편찬하였다 . + + C.비변사의 기능을 강화하였다 . + + D.통상 수교 거부 정책을 추진하였다 . + + 정답: 차근 차근 생각해봅시다. 한국사 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 제시된 지문에서 (가) 인물이 추진한 정책으로 옳지 + 않은 것을 찾아야 합니다. 제시된 지문에서는 선비들이 만동묘와 서원을 다시 설립할 것을 청하자, (가) 인물이 크게 노하여 서원을 철폐하고 그 + 토지를 몰수한 것을 알 수 있습니다. 여기서, (가) 인물은 흥성대원군임을 알 수 있습니다. 선택지를 하나씩 살펴보면, (A) 사창제를 실시하였다 + - 사창제는 환곡의 문란을 해결하기 위해 실시한 정책으로, 흥선대원군이 추진한 정책 중 하나입니다. (B) 대전회통을 편찬하였다 - 대전회통은 + 조선시대의 법전으로, 흥선대원군이 편찬을 주도하였습니다. (C) 비변사의 기능을 강화하였다 - 비변사는 조선시대의 군사 기구로, 흥선대원군은 왕권 + 강화를 위해 비변사의 기능을 약화시켰습니다. (D) 통상 수교 거부 정책을 추진하였다 - 흥선대원군은 외세의 침략을 막기 위해 통상 수교 거부 + 정책을 추진하였습니다. 따라서, 정답은 (C) 입니다. + + + 질문: {{question}} + + A.{{A}} + + B.{{B}} + + C.{{C}} + + D.{{D}} + + 정답: 차근 차근 생각해봅시다. 한국사 관련 정보를 위해 위키피디아를 참조하겠습니다.' +include: _cot_kmmlu_yaml +task: kmmlu_hard_cot_korean_history diff --git a/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_law.yaml b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_law.yaml new file mode 100644 index 0000000000..bd85358034 --- /dev/null +++ b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_law.yaml @@ -0,0 +1,114 @@ +dataset_name: law +doc_to_text: '질문: “악법도 법이다”라는 말이 강조하고 있는 법의 이념은? + + A.법적 타당성 + + B.법적 안정성 + + C.법적 형평성 + + D.법적 효율성 + + 정답: 차근 차근 생각해봅시다. 법학 관련 정보를 위해 위키피디아를 참조하겠습니다. (A). 법적 타당성은 법이 윤리적, 논리적으로 옳은 것을 + 의미합니다. "악법도 법이다"라는 말은 법의 내용이 적절하지 않더라도 법을 존중하고 따라야 한다는 것을 강조하므로 법적 타당성을 강조하는 것은 + 아닙니다. (B) "악법도 법이다"라는 말은 고대 그리스의 철학자 소크라테스가 한 말로 알려져 있습니다. 이 말은 법적 안정성을 강조하는 것으로 + 해석됩니다. 법적 안정성은 법이 명확하고 일관되게 적용되어야 하며, 사람들이 법을 신뢰하고 따를 수 있어야 한다는 이념입니다. 악법도 법으로 인정하고 + 따라야 한다는 것은, 법적 안정성을 유지하기 위해서는 법의 내용이 적절하지 않더라도 일단은 법을 존중하고 따라야 한다는 것을 의미합니다. (C). + 법적 형평성은 법이 모든 사람에게 공정하게 적용되는 것을 의미합니다. "악법도 법이다"라는 말은 법의 내용이 적절하지 않더라도 법을 존중하고 따라야 + 한다는 것을 강조하므로 법적 형평성을 강조하는 것은 아닙니다. (D). 법적 효율성은 법이 사회적 목적을 효율적으로 달성하는 것을 의미합니다. + "악법도 법이다"라는 말은 법의 내용이 적절하지 않더라도 법을 존중하고 따라야 한다는 것을 강조하므로 법적 효율성을 강조하는 것은 아닙니다. 따라서, + 정답은 (B) 입니다. + + + 질문: 고소와 고발에 관한 설명으로 옳지 않은 것은? + + A.피해자가 아니면 고발할 수 없다. + + B.고소를 취소한 자는 다시 고소하지 못한다. + + C.고소의 취소는 대리인으로 하여금 하게 할 수 있다. + + D.고소와 고발은 서면 또는 구술로써 검사 또는 사법경찰관에게 해야 한다. + + 정답: 차근 차근 생각해봅시다. 법학 관련 정보를 위해 위키피디아를 참조하겠습니다. (A) 피해자가 아니면 고발할 수 없다. - 이는 사실이 아닙니다. + 고발은 범죄가 있다고 생각하는 사람이면 누구나 할 수 있습니다. (B) 고소를 취소한 자는 다시 고소하지 못한다. - 이는 사실입니다. 형사소송법 + 제232조 제2항에 따르면, 고소를 취소한 자는 다시 고소하지 못합니다. (C) 고소의 취소는 대리인으로 하여금 하게 할 수 있다. - 이는 사실입니다. + 형사소송법 제236조에 따르면, 고소 또는 그 취소는 대리인으로 하여금 하게 할 수 있습니다. (D) 고소와 고발은 서면 또는 구술로써 검사 또는 + 사법경찰관에게 해야 한다. - 이는 사실입니다. 형사소송법 제237조에 따르면, 고소 또는 고발은 서면 또는 구술로써 검사 또는 사법경찰관에게 + 하여야 합니다. 따라서, 정답은 (A) 입니다. + + + 질문: 민법상 소멸시효기간이 3년인 것은? + + A.의복의 사용료 채권 + + B.여관의 숙박료 채권 + + C.연예인의 임금 채권 + + D.도급받은 자의 공사에 관한 채권 + + 정답: 차근 차근 생각해봅시다. 법학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저 관련 법인 민법 제163조(3년의 단기소멸시효)에 대해 + 살펴보겠습니다. 다음 각호의 채권은 3년간 행사하지 아니하면 소멸시효가 완성한다. 1. 이자, 부양료, 급료, 사용료 기타 1년 이내의 기간으로 + 정한 금전 또는 물건의 지급을 목적으로 한 채권 2. 의사, 조산사, 간호사 및 약사의 치료, 근로 및 조제에 관한 채권 3. 도급받은 자, 기사 + 기타 공사의 설계 또는 감독에 종사하는 자의 공사에 관한 채권 4. 변호사, 변리사, 공증인, 공인회계사 및 법무사에 대한 직무상 보관한 서류의 + 반환을 청구하는 채권 5. 변호사, 변리사, 공증인, 공인회계사 및 법무사의 직무에 관한 채권 6. 생산자 및 상인이 판매한 생산물 및 상품의 + 대가 7. 수공업자 및 제조자의 업무에 관한 채권. 이제 각 선택지를 보겠습니다. (A) 의복의 사용료 채권은 이에 해당하지 않습니다. (B) + 여관의 숙박료 채권은 이에 해당하지 않습니다. (C) 연예인의 임금 채권은 이에 해당하지 않습니다. (D) 도급받은 자의 공사에 관한 채권: 도급받은 + 자의 공사에 관한 채권은 민법 제163조 제3호에 따라 3년의 단기소멸시효에 해당합니다. 따라서, 정답은 (D) 입니다. + + + 질문: 경비업법령상 집단민원현장으로 옳지 않은 것은? + + A.「노동조합 및 노동관계조정법」에 따라 노동관계 당사자가 노동쟁의 조정신청을 한 사업장 또는 쟁의행위가 발생한 사업장 + + B.「공유토지분할에 관한 특례법」에 따라 공유토지에 대한 소유권행사와 토지의 이용에 문제가 있는 장소 + + C.「도시 및 주거환경정비법」에 따른 정비사업과 관련하여 이해대립이 있어 다툼이 있는 장소 + + D.「행정대집행법」에 따라 대집행을 하는 장소 + + 정답: 차근 차근 생각해봅시다. 법학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저 경비업법이란, 경비업의 설립·운영 및 경비원의 교육 등에 + 관한 사항을 규정하여 경비업의 건전한 발전을 도모하고 국민생활의 안전을 유지하기 위한 법률입니다. 이 법률은 경비업체가 수행해야 하는 업무와 경비원의 + 역할, 그리고 그들이 준수해야 하는 규정들을 명시하고 있습니다. 경비업법에 따르면 집단민원현장이란 노동쟁의, 집회, 시위 등 대량의 사람들이 모여 + 문제를 일으키는 장소를 의미합니다. 그리고 이러한 장소에서는 경비원들이 경비업무를 수행하게 됩니다. 선택지를 보면, (A)는 노동조합 및 노동관계조정법에 + 따라 노동쟁의 조정신청을 한 사업장 또는 쟁의행위가 발생한 사업장, (B)는 공유토지분할에 관한 특례법에 따라 공유토지에 대한 소유권행사와 토지의 + 이용에 문제가 있는 장소, (C)는 도시 및 주거환경정비법에 따른 정비사업과 관련하여 이해대립이 있어 다툼이 있는 장소, 그리고 (D)는 행정대집행법에 + 따라 대집행을 하는 장소입니다. 이 중에서 (B)의 경우, 공유토지에 대한 소유권행사와 토지의 이용에 문제가 있는 장소는 집단민원현장에 해당되지 + 않습니다. 공유토지에 대한 소유권 행사와 토지의 이용에 문제가 있는 장소는 소유권자 간의 민사적인 문제를 다루는 장소로, 경비업법에서 정의하는 + ''집단민원현장''에는 해당되지 않습니다. 따라서, 정답은 (B) 입니다. + + + 질문: 컴퓨터범죄의 관리상 안전대책으로 옳은 것은? + + A.사후 구제방법이 우선적으로 수립되어야 한다. + + B.전체적인 시각에서 단기적으로 추진되어야 한다. + + C.예기치 못한 사고에 대비하기 위해 시스템 백업과 프로그램 백업이 필요하다. + + D.네트워크 취약성으로 발생하는 문제는 물리적 통제절차의 개선으로 해결해야 한다. + + 정답: 차근 차근 생각해봅시다. 법학 관련 정보를 위해 위키피디아를 참조하겠습니다. 컴퓨터 범죄의 관리상 안전대책은 다양한 측면에서 고려되어야 + 합니다. (A) 사후 구제방법이 우선적으로 수립되어야 한다는 것은 범죄가 발생한 후에 대처하는 방법으로, 예방보다는 대응에 초점을 맞춘 것입니다. + 이는 적극적인 대처 방법이지만, 예방적인 측면에서는 부족할 수 있습니다. (B) 전체적인 시각에서 단기적으로 추진되어야 한다는 것은, 컴퓨터 범죄의 + 안전대책을 전체적인 시각에서 바라보되, 시간적으로는 단기적인 관점에서 추진해야 한다는 것입니다. 이는 효율적인 대처 방법이지만, 장기적인 관점에서의 + 지속적인 개선이 필요할 수 있습니다. (C) 예기치 못한 사고에 대비하기 위해 시스템 백업과 프로그램 백업이 필요하다는 것은, 컴퓨터 시스템이나 + 프로그램이 손상되거나 파괴되는 경우를 대비하여 백업을 해두는 것입니다. 이는 매우 중요한 안전대책 중 하나입니다. (D) 네트워크 취약성으로 발생하는 + 문제는 물리적 통제절차의 개선으로 해결해야 한다는 것은, 네트워크 보안 문제를 해결하기 위해 물리적인 통제 절차를 개선하는 것입니다. 이는 네트워크 + 보안을 강화하는 데 매우 중요한 역할을 합니다. 따라서, 정답은 (C) 입니다. + + + 질문: {{question}} + + A.{{A}} + + B.{{B}} + + C.{{C}} + + D.{{D}} + + 정답: 차근 차근 생각해봅시다. 법학 관련 정보를 위해 위키피디아를 참조하겠습니다.' +include: _cot_kmmlu_yaml +task: kmmlu_hard_cot_law diff --git a/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_machine_design_and_manufacturing.yaml b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_machine_design_and_manufacturing.yaml new file mode 100644 index 0000000000..e559fb50cf --- /dev/null +++ b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_machine_design_and_manufacturing.yaml @@ -0,0 +1,116 @@ +dataset_name: machine_design_and_manufacturing +doc_to_text: '질문: 기어 감소기의 분류 중 평행축형 감속기가 아닌 것은? + + A.웜 기어 + + B.스퍼 기어 + + C.헬리컬 기어 + + D.더블 헬리컬 기어 + + 정답: 차근 차근 생각해봅시다. 기계 디자인 제조 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 각 선택지에 대한 기어의 특징과 분류를 + 이해해야 합니다. (A) 웜 기어(Worm gear)는 웜과 웜 휠로 구성되며, 웜 휠은 웜의 나사와 맞물려 회전하는 기어입니다. 웜 기어는 주로 + 고속 감속에 사용되며, 이는 웜의 나사가 한 바퀴 돌 때 웜 휠이 한 칸만 이동하기 때문입니다. 웜 기어는 평행축형 감속기가 아니라 직교축형 감속기에 + 속합니다. (B) 스퍼 기어(Spur gear)는 가장 기본적인 형태의 기어로, 기어의 모든 치톱이 원통의 축선 방향에 위치해 있습니다. 이들은 + 평행한 축 사이에서 힘을 전달하는 데 사용되므로, 평행축형 감속기에 속합니다. (C) 헬리컬 기어(Helical gear)는 기어의 치톱이 헬릭스 + 형태로 둘러져 있어, 기어가 맞물릴 때 접촉 면적이 크고, 작동이 부드럽고 소음이 적습니다. 헬리컬 기어는 평행축형 감속기에 속합니다. (D) + 더블 헬리컬 기어(Double helical gear)는 헬리컬 기어의 변형 형태로, 치톱이 ''V'' 모양을 이루며, 이는 기어의 축력을 상쇄하는 + 효과가 있습니다. 더블 헬리컬 기어 역시 평행축형 감속기에 속합니다. 따라서, 정답은 (A) 입니다. + + + 질문: 왕복식 압축기의 장점으로 맞는 것은? + + A.대용량이다. + + B.맥동압력이 없다. + + C.고압발생이 가능하다. + + D.윤활이 쉽다. + + 정답: 차근 차근 생각해봅시다. 기계 디자인 제조 관련 정보를 위해 위키피디아를 참조하겠습니다. 왕복식 압축기는 그 이름에서 알 수 있듯이, 압축기의 + 움직임이 왕복운동을 따르는 형태입니다. 이러한 구조의 특성상 다음과 같은 특징들을 가지고 있습니다. (A) 대용량이다: 왕복식 압축기는 일반적으로 + 소형에서 중형까지의 용량을 다루는데 적합하다고 알려져 있습니다. ''대용량''이라는 표현은 왕복식 압축기의 특성을 정확하게 반영하지 않습니다. + (B) 맥동압력이 없다: 왕복식 압축기는 피스톤이 실린더 내에서 왕복운동을 하면서 가스를 압축하고, 이 과정에서 맥동이 발생합니다. ''맥동압력이 + 없다''는 표현은 정확하지 않습니다. (C) 고압발생이 가능하다: 왕복식 압축기는 그 구조상 고압을 생성하는 데 적합합니다. 피스톤의 움직임에 + 의해 가스를 압축하므로, 상대적으로 높은 압력을 발생시킬 수 있습니다. (D) 윤활이 쉽다: 왕복식 압축기의 경우, 피스톤과 실린더 사이의 마찰을 + 줄이기 위해 윤활이 필요합니다. 하지만 이것이 ''윤활이 쉽다''라는 표현을 정당화하는 것은 아닙니다. 오히려 윤활 상태를 유지하고 관리하는 것은 + 중요한 유지보수 작업 중 하나입니다. , 정확한 정보를 바탕으로 각 선택지를 분석한 결과, 왕복식 압축기의 장점으로 가장 적절한 것은 ''고압발생이 + 가능하다''입니다. 따라서, 정답은 (C) 입니다. + + + 질문: 일시 정체로스를 해결하기 위한 대책이 아닌 것은? + + A.속도 가동률을 높인다. + + B.미세한 결함을 시정한다. + + C.현상을 잘 파악한다. + + D.최적조건을 파악한다. + + 정답: 차근 차근 생각해봅시다. 기계 디자인 제조 관련 정보를 위해 위키피디아를 참조하겠습니다. 일시 정체로스를 해결하기 위한 대책이 아닌 것을 + 찾기 위해서는, 일시 정체로스의 정의와 그에 따른 해결 방안을 알아야 합니다. 일시 정체로스는 생산 공정에서 발생하는 로스 중 하나로, 일정 시간 + 동안 생산이 정체되는 것을 의미합니다. 이러한 정체로스를 해결하기 위해서는 다양한 대책이 필요합니다. (A) 속도 가동률을 높이는 것은 일시 정체로스를 + 해결하는 대책 중 하나일 뿐, 모든 경우에 적용할 수 있는 것은 아닙니다. 때로는 속도 가동률을 높이는 것이 오히려 생산성을 떨어뜨릴 수도 있습니다. + (B) 미세한 결함을 시정하는 것도 중요한 대책 중 하나입니다. 미세한 결함이 있으면 생산이 중단되거나 지연될 수 있기 때문에, 이를 미리 발견하고 + 시정함으로써 정체로스를 예방할 수 있습니다. (C) 현상을 잘 파악하는 것도 중요합니다. 현상을 잘 파악하면 정체로스의 원인을 파악하고, 그에 + 따른 적절한 대책을 세울 수 있습니다. (D) 최적 조건을 파악하는 것은 일시 정체로스를 해결하는 데 중요한 역할을 합니다. 최적 조건을 파악하면 + 생산 공정의 효율성을 높일 수 있으며, 이는 정체로스를 예방하는 데 큰 도움이 됩니다. 따라서, 정답은 (A) 입니다. + + + 질문: 열에 의한 관의 팽창, 수축을 허용하여 과도한 응력 발생을 방지하는 이음쇠는? + + A.주철관 이음쇠 + + B.신축 관 이음쇠 + + C.패킹 이음쇠 + + D.나사 관 이음쇠 + + 정답: 차근 차근 생각해봅시다. 기계 디자인 제조 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 각 선택지에 대한 이해를 바탕으로 생각해보겠습니다. + (A) 주철관 이음쇠는 주로 철이나 철을 주재료로 한 합금으로 만들어진 관을 연결하는 데 사용됩니다. 그러나 주철관 이음쇠는 열에 의한 팽창과 + 수축에 대응하는 능력이 부족하다고 알려져 있습니다. (B) 신축 관 이음쇠는 이름에서 알 수 있듯이 ''신축성''이 중요한 특징입니다. 신축 관 + 이음쇠는 관의 길이가 변동되더라도 이음쇠가 이를 수용하도록 설계되어 있습니다. 이는 열에 의해 관이 팽창하거나 수축하는 것을 허용하며, 이로 인한 + 과도한 응력 발생을 방지할 수 있습니다. (C) 패킹 이음쇠는 물이나 기체의 누출을 방지하기 위해 주로 사용되는 이음쇠입니다. 패킹 이음쇠는 보통 + 고무 또는 실리콘 같은 소재로 만들어져 있으며, 이러한 소재는 열에 의한 팽창과 수축에 대응하는 능력이 제한적일 수 있습니다. (D) 나사 관 + 이음쇠는 나사로 두 관을 연결하는 방식의 이음쇠입니다. 이러한 이음쇠는 열에 의한 팽창과 수축에 대응하는 능력이 부족하다고 알려져 있습니다. , + 각 선택지를 고려해보면 열에 의한 팽창과 수축을 허용하고 과도한 응력 발생을 방지하는 이음쇠는 신축 관 이음쇠일 가능성이 높습니다. 따라서, 정답은 + (B) 입니다. + + + 질문: 해칭의 일반적인 원칙 중 틀린 것은? + + A.해칭은 가는 실선으로 그린다. + + B.해칭선의 간격은 해칭을 하는 단면의 크기에 따라 선택한다. + + C.해칭은 주된 중심선 또는 단면도의 주된 외형선에 대하여 90℃ 기울기로 그린다. + + D.인접한 단면의 해칭은 선의 방향 또는 각도를 바꾸든지, 아니면 그 간격을 바꾸어서 구별한다. + + 정답: 차근 차근 생각해봅시다. 기계 디자인 제조 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 각 선택지에 대한 내용을 이해하고 검증해보겠습니다. + (A) 선택지는 해칭이 가는 실선으로 그려진다는 내용입니다. 이는 일반적으로 맞는 내용입니다. 해칭은 기계 설계도나 제품 설계도에서 재료의 단면을 + 표시하는 데 사용되는 선을 말합니다. 이는 가는 실선으로 그려집니다. (B) 선택지는 해칭선의 간격이 해칭을 하는 단면의 크기에 따라 선택된다는 + 내용입니다. 이 역시 일반적으로 맞는 내용입니다. 해칭선의 간격은 그려지는 단면의 크기나 그림의 비율에 따라 결정됩니다. (D) 선택지는 인접한 + 단면의 해칭은 선의 방향 또는 각도를 바꾸든지, 아니면 그 간격을 바꾸어서 구별한다는 내용입니다. 이 역시 일반적으로 맞는 내용입니다. 인접한 + 단면의 해칭은 서로 구별하기 위해 선의 방향, 각도, 간격 등을 바꾸어 그립니다. 그러나 (C) 선택지는 해칭이 주된 중심선 또는 단면도의 주된 + 외형선에 대하여 90℃ 기울기로 그린다는 내용인데, 이는 잘못된 내용입니다. 일반적으로 해칭은 45도 기울기로 그려집니다. , 이 선택지는 해칭의 + 일반적인 원칙을 잘못 설명하고 있습니다. 따라서, 정답은 (C) 입니다. + + + 질문: {{question}} + + A.{{A}} + + B.{{B}} + + C.{{C}} + + D.{{D}} + + 정답: 차근 차근 생각해봅시다. 기계 디자인 제조 관련 정보를 위해 위키피디아를 참조하겠습니다.' +include: _cot_kmmlu_yaml +task: kmmlu_hard_cot_machine_design_and_manufacturing diff --git a/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_management.yaml b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_management.yaml new file mode 100644 index 0000000000..af383ad6fe --- /dev/null +++ b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_management.yaml @@ -0,0 +1,107 @@ +dataset_name: management +doc_to_text: '질문: ERP 도입의 최종 목적으로 가장 적합한 것은 무엇인가? + + A.조직문화 혁신 + + B.경영혁신의 수단 + + C.고객만족과 이윤극대화 + + D.기업 내부의 정보인프라 구축 + + 정답: 차근 차근 생각해봅시다. 경영학 관련 정보를 위해 위키피디아를 참조하겠습니다. ERP (Enterprise Resource Planning) + 시스템 도입의 최종 목적을 이해하기 위해서는 ERP의 기본 개념과 목표에 대해 살펴볼 필요가 있습니다. ERP 시스템은 기업의 다양한 업무 프로세스를 + 통합하고 관리하는 소프트웨어입니다. 이는 기업 내부의 자원을 효율적으로 관리하고, 기업 전체의 업무 과정을 유기적으로 연결하는 역할을 합니다. + ERP 시스템은 비즈니스 프로세스의 표준화와 단순화를 통해 비효율을 줄이고, 중복 업무를 축소합니다. 이러한 시스템은 실시간으로 정보를 관리하며, + 기업의 의사결정을 지원하는 경영 정보 시스템의 역할을 수행합니다. ERP 도입의 주요 목적은 고객 만족과 이윤 극대화에 있습니다. 이는 잘못된 + 관행의 제거, 비부가가치 업무의 축소, 재고비용 절감, 납기 단축, 정보 공유를 통한 매출 증대 등을 통해 달성됩니다. 또한, 경쟁력 강화 및 + 투명 경영을 실현하고 글로벌 경쟁에 대응하는 데에도 중요한 역할을 합니다. , ERP 도입의 최종 목적은 다양한 측면이 있지만, 가장 핵심적인 + 목적은 ''고객만족과 이윤 극대화''로 볼 수 있습니다. 이를 통해 기업의 경쟁력을 강화하고, 글로벌 시장에서의 지속 가능한 성장을 도모할 수 + 있습니다. 따라서, 정답은 (C) 입니다. + + + 질문: 재무상태표의 유동자산 항목에 해당하지 않는 것은? + + A.현금 + + B.투자자산 + + C.재고자산 + + D.매출채권 + + 정답: 차근 차근 생각해봅시다. 경영학 관련 정보를 위해 위키피디아를 참조하겠습니다. 재무상태표는 기업의 일정 시점의 재무상태를 나타내는 표로, + 자산, 부채, 자본으로 구성됩니다. 자산은 유동자산과 비유동자산으로 구분되는데, 유동자산은 1년 이내에 현금화할 수 있는 자산을 의미합니다. (A) + 현금: 통화 및 통화 대용증권을 포함한 즉시 현금으로 전환이 가능한 자산입니다. (B) 투자자산은 재무상태표의 유동자산 항목에 해당하지 않습니다. + 투자자산은 기업이 장기적인 투자수익을 얻기 위해 보유하는 자산으로, 1년 이내에 현금화할 수 없기 때문에 유동자산에 해당하지 않습니다. 대표적인 + 투자자산으로는 주식, 채권, 부동산 등이 있습니다. (C) 재고자산: 판매를 목적으로 보유하고 있는 자산으로, 상품, 제품, 원재료 등이 해당됩니다. + (D) 매출채권: 제품이나 상품을 판매하고 아직 대금을 회수하지 못한 채권입니다. 따라서, 정답은 (B) 입니다. + + + 질문: 중소기업기본법상 중소기업 옴부즈만에 관한 설명으로 옳은 것은? + + A.임기는 3년으로 하되, 한 번만 연임할 수 있다. + + B.업무에 관한 활동 결과보고서를 작성하여 매년 12월 말까지 규제개혁위원회와 중소벤처기업부 및 국회에 보고하여야 한다. + + C.중소기업 및 규제 분야의 학식과 경험이 많은 자 중에서 중소벤처기업부장관이 위촉한다. + + D.판사의 직에 5년 이상 있었던 사람은 중소기업 옴부즈만이 될 자격이 있다. + + 정답: 차근 차근 생각해봅시다. 경영학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 중소기업 옴부즈만에 대해 알아야 합니다. 중소기업 + 옴부즈만은 중소기업기본법 제22조에 따라 중소기업에 영향을 주는 규제 및 애로사항을 개선하기 위해 중소벤처기업부장관이 위촉하는 독립적인 전문가입니다. + 이제 선택지를 보겠습니다. (A)를 살펴보면, 중소기업 옴부즈만은 국무총리가 위촉되는 임기 3년의 독립적 정부기관이다. 한 번 연임이 가능하며, + 다른 중소기업청 관계 기관과는 달리, 규제개혁위원회의 동의를 받아 임명됩니다. 이는 옳은 설명입니다. (B)를 살펴보면, 중소기업기본법 제22조에 + 따라 중소기업 옴부즈만은 업무에 관한 활동 결과보고서를 작성하여 매년 1월 말까지 규제개혁위원회와 중소벤처기업부 및 국회에 보고하여야 한다고 명시되어 + 있습니다. 이는 틀린 설명입니다. (C)를 살펴보면, 중소기업 옴부즈만은 중소기업 및 규제 분야의 학식과 경험이 풍부한 사람 중에서 국무총리가 + 위촉한다고 명시되어 있습니다. 이는 틀린 설명입니다. (D)를 살펴보면, 중소기업기본법 제22조에 판사의 직에 5년 이상 있었던 사람은 중소기업 + 옴부즈만이 될 자격이 있다는 내용은 명시되어 있지 않습니다. 이는 옳지 않은 설명입니다. 따라서, 정답은 (A) 입니다. + + + 질문: 임금체계에 대한 설명으로 옳지 않은 것은? + + A.직무급은 종업원이 맡은 직무의 상대적 가치에 따라 임금을 결정하는 방식이다. + + B.연봉제란 개인의 능력발휘와 기여도(업적평가결과)에 따라 차등적인 임금을 결정하는 방식이다. + + C.직무성과급이란 기본급이 직무급이고, 고과승급과 인센티브를 운영하는 임금체계이다. + + D.직능급은 종업원이 수행하는 직무의 난이도를 기준으로 임금을 결정하는 방식이다. + + 정답: 차근 차근 생각해봅시다. 경영학 관련 정보를 위해 위키피디아를 참조하겠습니다. (A) 먼저, 직무급은 종업원이 맡은 직무의 상대적 가치에 + 따라 임금을 결정하는 방식입니다. 이는 직무의 중요도와 난이도, 책임 등을 평가하여 결정됩니다. (B) 다음으로, 연봉제는 개인의 능력발휘와 기여도(업적평가결과)에 + 따라 차등적인 임금을 결정하는 방식입니다. 이는 개인의 성과와 업적에 따라 임금이 변동될 수 있습니다. (C) 직무성과급은 기본급이 직무급이고, + 고과승급과 인센티브를 운영하는 임금체계입니다. 이는 직무의 가치와 성과에 따라 임금이 결정됩니다. (D) 마지막으로, 직능급은 종업원이 수행하는 + 직무의 난이도를 기준으로 임금을 결정하는 방식이 아니라, 종업원의 직무수행능력에 따라 임금을 결정하는 방식입니다. 따라서, 정답은 (D) 입니다. + + + 질문: 물류시스템에 관한 설명으로 옳은 것은? + + A.고객의 주문에 신속하게 반응할 수 있도록 재고를 최대한으로 유지한다. + + B.물류시스템을 생산지에서 소비지까지 연계되도록 구축한다. + + C.기업의 총비용을 최소화하기 위해 물류서비스 수준을 최대로 유지한다. + + D.물류합리화를 위해 기업내 각 부문별로 목표를 정하고 분산된 시스템을 구축한다. + + 정답: 차근 차근 생각해봅시다. 경영학 관련 정보를 위해 위키피디아를 참조하겠습니다. (A) 고객의 주문에 신속하게 반응하기 위해 재고를 최대한으로 + 유지하는 것은 물류 시스템의 목적 중 하나일 수 있지만, 이는 과도한 재고 유지 비용을 초래할 수 있습니다. (B) 물류시스템은 생산지에서 소비지까지 + 연계되도록 구축하는 것이 가장 중요한 역할 중 하나입니다. (C) 기업의 총비용을 최소화하기 위해 물류서비스 수준을 최대로 유지하는 것은 물류 + 시스템의 목적 중 하나일 수 있지만, 이는 고객 만족도를 저하시킬 수 있습니다. (D) 물류합리화를 위해 기업내 각 부문별로 목표를 정하고 분산된 + 시스템을 구축하는 것은 물류 시스템의 효율성을 높일 수 있지만, 이는 통합적인 관리가 어려울 수 있습니다. 따라서, 정답은 (B) 입니다. + + + 질문: {{question}} + + A.{{A}} + + B.{{B}} + + C.{{C}} + + D.{{D}} + + 정답: 차근 차근 생각해봅시다. 경영학 관련 정보를 위해 위키피디아를 참조하겠습니다.' +include: _cot_kmmlu_yaml +task: kmmlu_hard_cot_management diff --git a/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_maritime_engineering.yaml b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_maritime_engineering.yaml new file mode 100644 index 0000000000..72a45987f7 --- /dev/null +++ b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_maritime_engineering.yaml @@ -0,0 +1,129 @@ +dataset_name: maritime_engineering +doc_to_text: '질문: 복원력을 갖는 안정 평형 상태인 선박의 메타센터 높이의 조건은? + + A.GM > 0 + + B.GM = 0 + + C.GM < 0 + + D.GM = -1 + + 정답: 차근 차근 생각해봅시다. 해양 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 복원력(復原力, restoring force)이란 + 선박이 기울어졌을 때 원래의 위치로 되돌아가려는 힘을 의미합니다. 안정 평형 상태(stable equilibrium state)란 선박이 기울어져도 + 원래의 위치로 되돌아오는 상태를 말합니다. 메타센터 높이(GM, metacenter height)는 선박이 기울어졌을 때, 복원력의 중심과 무게중심 + 사이의 거리를 의미합니다. 이제 각 선택지를 살펴보겠습니다. (A) GM > 0: GM이 0보다 크면, 복원력의 중심이 무게중심보다 위에 위치하게 + 됩니다. 이 경우, 선박이 기울어지면 복원력이 작용하여 원래의 위치로 되돌아오게 됩니다. , GM > 0은 안정 평형 상태인 선박의 조건입니다. + (B) GM = 0: GM이 0이면, 복원력의 중심과 무게중심이 일치하게 됩니다. 이 경우, 선박이 기울어져도 복원력이 작용하지 않아 원래의 위치로 + 되돌아오지 않습니다. , GM = 0은 안정 평형 상태인 선박의 조건이 아닙니다. (C) GM < 0: GM이 0보다 작으면, 복원력의 중심이 + 무게중심보다 아래에 위치하게 됩니다. 이 경우, 선박이 기울어지면 복원력이 작용하여 원래의 위치로 되돌아오지 않고, 더욱 기울어지게 됩니다. , + GM < 0은 안정 평형 상태인 선박의 조건이 아닙니다. (D) GM = -1: GM이 -1인 경우는 안정 평형 상태인 선박의 조건이 아닙니다. + GM은 거리를 나타내는 물리량이므로 음수 값을 가질 수 없습니다. 따라서, 정답은 (A) 입니다. + + + 질문: 일반조선용 강재가 가져야 하는 성질은? + + A.냉간가공이 가능하고, 선상가열해도 좋은 것 + + B.냉간가공이 가능하고, 선상가열을 못하는 것 + + C.극저온(極低溫)에서 파괴되지 않는 것 + + D.용접할 수 없는 것 + + 정답: 차근 차근 생각해봅시다. 해양 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 일반조선용 강재는 배를 만드는데 사용되는 주요 재료입니다. 이 + 강재는 배를 만드는데 필요한 여러 가지 성질을 가져야 합니다. (A) 선택지는 냉간가공이 가능하다는 점과 선상가열해도 좋다는 점을 언급하고 있습니다. + 냉간가공이 가능하다는 것은 강재가 저온에서도 물리적 특성을 유지할 수 있다는 것을 의미하며, 이는 배가 극지방과 같은 매우 추운 환경에서도 안정적으로 + 작동할 수 있게 해줍니다. 또한 선상가열이 가능하다는 것은 강재가 열에 의해 손상되지 않는다는 것을 의미합니다. 이는 배가 열을 발생시키는 엔진 + 등의 장치를 안전하게 운용할 수 있게 해줍니다. (B) 선택지는 냉간가공이 가능하다는 점을 언급하고 있지만, 선상가열을 못한다는 점을 지적하고 + 있습니다. 이는 강재가 열에 약하다는 것을 의미하며, 이는 배의 안전성을 저해할 수 있습니다. (C) 선택지는 극저온에서 파괴되지 않는다는 점을 + 언급하고 있습니다. 이는 배가 극지방과 같은 매우 추운 환경에서도 안정적으로 작동할 수 있음을 의미합니다. 이는 (A) 선택지에서 언급한 냉간가공이 + 가능하다는 점과 비슷한 이점을 제공합니다. (D) 선택지는 용접할 수 없다는 점을 언급하고 있습니다. 이는 배를 만드는데 필요한 주요 기술 중 + 하나인 용접을 사용할 수 없다는 것을 의미하며, 이는 배를 제작하는 데 큰 장애가 될 수 있습니다. 이러한 분석을 통해, 일반조선용 강재는 냉간가공이 + 가능하고, 선상가열에도 견딜 수 있으며, 극저온에서도 안정적인 성질을 가져야 하며, 용접이 가능해야 한다는 것을 알 수 있습니다. 선택지 중에서는 + (A)와 (C)가 이러한 성질을 가장 잘 반영하고 있습니다. 그러나 (C)는 (A)가 가지고 있는 선상가열에 견딜 수 있다는 중요한 성질을 갖고 + 있지 않습니다. 따라서, 정답은 (A) 입니다. + + + 질문: 선형에 따라 분류한 선박의 종류에 해당되지 않는 것은? + + A.준설선 + + B.3도형선 + + C.평갑판선 + + D.트렁크선 + + 정답: 차근 차근 생각해봅시다. 해양 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 선형에 따라 분류한 선박의 종류를 알아보겠습니다. + 선형에 따른 선박의 종류는 크게 다음과 같이 나눌 수 있습니다. 1. 3도형선: 3개의 선체를 연결한 형태의 선박으로, 화물 수송에 사용됩니다. + 2. 평갑판선: 선체의 상부가 평평한 형태의 선박으로, 화물 수송에 사용됩니다. 3. 갑판일체선: 선체의 상부가 갑판과 일체화된 형태의 선박으로, + 화물 수송에 사용됩니다. 4. 트렁크선: 선체의 중앙에 트렁크(trunk)라는 큰 공간이 있는 선박으로, 화물 수송에 사용됩니다. 5. 유조선: + 원유나 석유 제품을 수송하는 선박입니다. 6. LNG선: 액화천연가스를 수송하는 선박입니다. 7. 컨테이너선: 컨테이너를 수송하는 선박입니다. + 8. 벌크선: 곡물, 철광석 등의 화물을 포장하지 않고 그대로 수송하는 선박입니다. 9. 여객선: 승객을 수송하는 선박입니다. 이제 선택지를 보겠습니다. + (A) 준설선: 준설선은 강이나 바다의 바닥을 파내어 수심을 깊게 하거나, 토사를 채취하는 데 사용되는 선박으로 선형에 따라 분류한 선박의 종류에 + 해당되지 않습니다. (B) 3도형선: 3개의 선체를 연결한 형태의 선박으로, 선형에 따라 분류한 선박의 종류에 해당됩니다. (C) 평갑판선: 선체의 + 상부가 평평한 형태의 선박으로, 선형에 따라 분류한 선박의 종류에 해당됩니다. (D) 트렁크선: 선체의 중앙에 트렁크(trunk)라는 큰 공간이 + 있는 선박으로, 선형에 따라 분류한 선박의 종류에 해당됩니다. 따라서, 정답은 (A) 입니다. + + + 질문: 따뜻하고 밀도가 낮은 물은 수심이 얕은 곳에 위치하며 차고 밀도가 높은 물은 수심이 깊은 곳에 위치한다. 이 때 두 물이 만나서 형성하는 + 경계면은? + + A.염분약층 + + B.열전도층 + + C.수온약층 + + D.조경층 + + 정답: 차근 차근 생각해봅시다. 해양 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 이 질문은 바다의 수층 구조에 관한 것입니다. + 바다의 수층 구조는 수온, 염분, 밀도 등에 따라 크게 세 가지 층으로 나뉘는데, 이는 표층층(surface layer), 중간층(thermocline/pycnocline/halocline), + 그리고 심해층(deep layer)입니다. 표층층은 수심 약 200m까지이며, 이곳에서는 바다의 온도와 염분이 거의 일정하다. 이 층은 일반적으로 + 따뜻하고 밀도가 낮습니다. 그 다음으로, 중간층은 수심 약 200m부터 1000m까지로, 이 층에서는 수온과 염분이 급격하게 변화합니다. , + 이 층은 밀도가 높은 층이라고 할 수 있습니다. 중간층에서 수온이 급격하게 변하는 부분을 ''수온약층(thermocline)'', 염분이 급격하게 + 변하는 부분을 ''염분약층(halocline)'', 밀도가 급격하게 변하는 부분을 ''밀도약층(pycnocline)''이라고 합니다. 마지막으로, + 심해층은 수심 1000m 이하로, 이곳에서는 수온과 염분이 거의 일정하며, 밀도가 가장 높습니다. , 질문에서 말하는 ''따뜻하고 밀도가 낮은 + 물''은 표층층을, ''차고 밀도가 높은 물''은 중간층을 의미하는 것으로 보입니다. 그리고 이 두 층 사이에서 수온과 밀도가 급격하게 변하는 + 경계면을 가리키는 것으로 해석할 수 있습니다. 그렇다면 선택지 중에서 어떤 것이 이 경계면을 가장 잘 설명하는지 살펴보겠습니다. (A) 염분약층은 + 염분이 급격하게 변하는 부분을 가리키는 용어입니다. 하지만 질문에서는 염분에 대한 언급이 없으므로 이 선택지는 제외할 수 있습니다. (B) 열전도층은 + 열이 전달되는 층을 가리키는 용어입니다. 이 용어는 바다의 수층 구조와는 직접적인 연관이 없으므로 이 선택지도 제외할 수 있습니다. (C) 수온약층은 + 수온이 급격하게 변하는 부분을 가리키는 용어입니다. 따뜻한 표층층과 찬 중간층 사이에서 수온이 급격하게 변하므로, 이 용어는 질문의 경계면을 잘 + 설명하는 것으로 보입니다. (D) 조경층은 바다의 수심에 따라 조류의 성질이 변하는 층을 가리키는 용어입니다. 이 용어는 바다의 수층 구조와는 + 직접적인 연관이 없으므로 이 선택지도 제외할 수 있습니다. 따라서, 정답은 (C) 입니다. + + + 질문: 압축공기에 포함된 불활성 기체로서 지방질에 용해가 잘되고 압력이 증가함에 따라 강한 마취효과를 내는 주된기체는? + + A.헬륨 + + B.산소 + + C.질소 + + D.아르곤 + + 정답: 차근 차근 생각해봅시다. 해양 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 각 선지에 대한 설명과 올바른 답변이 왜 맞는지에 대한 + 풀이 과정은 다음과 같습니다: (A) 헬륨: 헬륨은 불활성 기체로 알려져 있으며, 지방질에 용해되는 성질이나 마취 효과는 거의 없습니다. 헬륨은 + 주로 잠수할 때 질소 중독을 방지하기 위한 혼합 가스로 사용됩니다. (B) 산소: 산소는 압축 공기에 포함된 주요 기체 중 하나이며, 고압 상태에서 + 지방질에 용해되는 경향이 있습니다. 고압 산소는 혈액과 조직에 더 많이 용해되어 강한 마취 효과를 나타낼 수 있습니다. 이 현상은 산소 독성 또는 + 산소 마취로 알려져 있으며, 특히 잠수병과 관련된 깊은 잠수에서 중요한 역할을 합니다. (C) 질소: 질소는 지방질에 용해되거나 마취 효과를 나타내지 + 않습니다. 잠수병(디콤프레션 병증)은 주로 해수면 아래에서의 압력 변화로 인해 질소 기체가 혈액과 조직에서 과도하게 용해되었다가, 압력이 감소하면서 + 기체로 변환되어 발생하는 것으로, 질소 자체가 마취 효과를 내는 것은 아닙니다. (D) 아르곤: 아르곤도 불활성 기체로, 지방질에 용해되거나 마취 + 효과를 나타내지 않습니다. 아르곤은 주로 산업 공정에서 보호 가스로 사용됩니다. 따라서, 정답은 (B) 입니다. + + + 질문: {{question}} + + A.{{A}} + + B.{{B}} + + C.{{C}} + + D.{{D}} + + 정답: 차근 차근 생각해봅시다. 해양 공학 관련 정보를 위해 위키피디아를 참조하겠습니다.' +include: _cot_kmmlu_yaml +task: kmmlu_hard_cot_maritime_engineering diff --git a/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_marketing.yaml b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_marketing.yaml new file mode 100644 index 0000000000..a8a6d93cfb --- /dev/null +++ b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_marketing.yaml @@ -0,0 +1,122 @@ +dataset_name: marketing +doc_to_text: '질문: e-CRM상에서 고객유지를 위한 전략으로 맞지 않는 것은? + + A.주문에 대한 신속하고 정확한 대응 + + B.품질이 낮아도 저렴한 제품의 대량공급 + + C.배송 등 철저한 사후관리 + + D.기술적인 지원체제 구축 + + 정답: 차근 차근 생각해봅시다. 마케팅 관련 정보를 위해 위키피디아를 참조하겠습니다. e-CRM(Electronic Customer Relationship + Management)은 인터넷을 기반으로 한 고객관계관리를 의미합니다. 고객 유지를 위한 전략은 고객 만족도를 높이고 이탈을 방지하는 것이 목적입니다. + 선택지를 하나씩 살펴보겠습니다. (A). 주문에 대한 신속하고 정확한 대응: 고객이 주문한 제품이나 서비스를 빠르게 제공하고 정확하게 처리하는 + 것은 고객 만족도를 높일 수 있습니다. , 이는 고객 유지를 위한 전략으로 적합합니다. (B). 품질이 낮아도 저렴한 제품의 대량공급: 고객 + 만족도를 높이기 위해서는 제품의 품질이 중요합니다. 저렴한 제품을 대량 공급하는 것은 단기적으로는 고객을 유치할 수 있지만, 장기적으로는 고객 + 이탈을 유발할 수 있습니다. , 이는 고객 유지를 위한 전략으로 적합하지 않습니다. (C). 배송 등 철저한 사후관리: 제품을 배송한 후에도 + 고객의 요구에 적극적으로 대응하고, 문제가 발생한 경우 신속하게 해결하는 것은 고객 만족도를 높일 수 있습니다. , 이는 고객 유지를 위한 전략으로 + 적합합니다. (D). 기술적인 지원체제 구축: 고객이 제품이나 서비스를 이용하는 데 있어서 기술적인 문제가 발생한 경우, 이를 해결할 수 있는 + 지원체제를 구축하는 것은 고객 만족도를 높일 수 있습니다. , 이는 고객 유지를 위한 전략으로 적합합니다. 따라서, 정답은 (B) 입니다. + + + 질문: 데이터베이스 마케팅에서 사용되는 RFM의 세 가지 기준이 아닌 것은? + + A.얼마나 오랫동안 우리와 거래했는가? + + B.얼마나 최근에 우리 제품을 구매했는가? + + C.얼마나 자주 우리 제품을 구입하는가? + + D.우리 제품의 구입에 어느 정도의 돈을 쓰는가? + + 정답: 차근 차근 생각해봅시다. 마케팅 관련 정보를 위해 위키피디아를 참조하겠습니다. RFM은 데이터베이스 마케팅에서 중요한 개념으로, 고객의 + 가치를 평가하는 데 사용되는 세 가지 기준을 나타냅니다. RFM은 Recency(최근성), Frequency(빈도), Monetary Value(금액)의 + 약자입니다. (A) "얼마나 오랫동안 우리와 거래했는가?"는 고객이 얼마나 오래된 고객인지를 나타내는 지표이지만, RFM 모델에서는 직접적으로 + 고려되지 않습니다. RFM 모델은 최근에 고객이 얼마나 활동적이었는지(Recency), 고객이 얼마나 자주 구매했는지(Frequency), 그리고 + 고객이 얼마나 많은 돈을 썼는지(Monetary Value)를 중점적으로 보는 모델입니다. (B) "얼마나 최근에 우리 제품을 구매했는가?"는 + RFM 모델의 R인 Recency를 나타냅니다. 이는 고객이 가장 최근에 구매한 시점을 의미하며, 이는 고객의 최근 구매 행동을 반영합니다. (C) + "얼마나 자주 우리 제품을 구입하는가?"는 RFM 모델의 F인 Frequency를 나타냅니다. 이는 고객이 얼마나 자주 구매하는지를 의미하며, + 이는 고객의 구매 빈도를 반영합니다. (D) "우리 제품의 구입에 어느 정도의 돈을 쓰는가?"는 RFM 모델의 M인 Monetary Value를 + 나타냅니다. 이는 고객이 얼마나 많은 돈을 소비했는지를 의미하며, 이는 고객의 구매력을 반영합니다. , RFM 모델에서 직접적으로 고려되지 않는 + 것은 (A) "얼마나 오랫동안 우리와 거래했는가?"입니다. 이는 고객의 거래 기간을 나타내지만, RFM 모델은 최근성, 빈도, 금액에 초점을 맞추고 + 있습니다. 따라서, 정답은 (A) 입니다. + + + 질문: 아웃바운드 텔레마케팅에서 잠재고객을 구매고객으로 전환시키는 방법으로 볼 수 없는 것은? + + A.고객을 이해시키고 실질적 혜택 부여 + + B.무조건 가격할인을 통한 유도 + + C.관심이 많은 고객을 집중적으로 설득 + + D.쌍방간 커뮤니케이션 강화 + + 정답: 차근 차근 생각해봅시다. 마케팅 관련 정보를 위해 위키피디아를 참조하겠습니다. 아웃바운드 텔레마케팅은 기업이 직접 고객에게 연락하여 제품이나 + 서비스를 판매하는 방식을 말합니다. 이때, 잠재 고객을 구매 고객으로 전환시키는 방법에는 여러 가지가 있습니다. (A) 고객을 이해시키고 실질적 + 혜택 부여는 잠재 고객을 구매 고객으로 전환시키는 중요한 방법 중 하나입니다. 고객이 제품이나 서비스에 대한 이해를 가지고, 그것이 자신에게 어떤 + 실질적인 혜택을 줄 수 있는지를 알게 되면, 구매로 이어질 가능성이 높아집니다. (C) 관심이 많은 고객을 집중적으로 설득하는 것도 잠재 고객을 + 구매 고객으로 전환시키는 효과적인 방법입니다. 이미 제품이나 서비스에 대한 관심이 있는 고객을 대상으로 하면, 그들을 구매로 이끌 가능성이 더욱 + 높아집니다. (D) 쌍방간 커뮤니케이션 강화 역시 잠재 고객을 구매 고객으로 전환시키는 데 중요한 역할을 합니다. 고객과의 커뮤니케이션을 통해 + 고객의 필요와 원하는 것을 파악하고, 그에 맞는 제품이나 서비스를 제공하면 고객의 구매 결정을 유도할 수 있습니다. 그러나, (B) 무조건 가격할인을 + 통한 유도는 잠재 고객을 구매 고객으로 전환시키는 방법으로 적절하지 않을 수 있습니다. 가격할인은 단기적으로는 고객의 구매를 유도할 수 있지만, + 장기적으로는 기업의 이익을 해칠 수 있으며, 고객이 제품이나 서비스의 진정한 가치를 인지하지 못하게 만들 수 있습니다. 또한, 가격만으로 고객을 + 유도하는 것은 고객의 브랜드 충성도를 낮추고, 가격 경쟁에 빠져 기업의 경쟁력을 약화시킬 수 있습니다. 따라서, 정답은 (B) 입니다. + + + 질문: 회사가 제품에 대한 가격을 결정할 때 제품의 저가전략이 적합한 경우가 아닌 것은? + + A.시장수요의 가격탄력성이 낮을 때 + + B.경쟁기업에 비해 원가우위를 확보하고 있을 때 + + C.경쟁사가 많을 때 + + D.소비자들의 수요를 자극하고자 할 때 + + 정답: 차근 차근 생각해봅시다. 마케팅 관련 정보를 위해 위키피디아를 참조하겠습니다. 가장 먼저 저가전략이란 것은 회사가 제품의 가격을 낮추어 + 소비자들의 수요를 끌어들이거나, 경쟁사에 대한 가격 경쟁력을 확보하기 위해 사용하는 전략입니다. (A) 선택지를 보면, ''시장수요의 가격탄력성이 + 낮을 때''라고 되어 있습니다. 가격탄력성이란 가격 변동에 따른 수요 변동률을 의미하는데, 이 값이 낮다는 것은 가격이 변해도 소비자들의 수요에 + 크게 영향을 주지 않는다는 것을 의미합니다. 즉, 가격을 낮춰도 소비자들의 수요가 크게 증가하지 않을 것이므로, 이 경우 저가전략을 사용하는 것은 + 적합하지 않을 수 있습니다. (B) 선택지인 ''경쟁기업에 비해 원가우위를 확보하고 있을 때''는 저가전략을 사용하기 좋은 상황입니다. 원가우위를 + 확보하고 있다는 것은 동일한 제품을 더 낮은 비용으로 생산할 수 있다는 것을 의미하므로, 이 경우 회사는 가격을 낮추어도 이익을 낼 수 있습니다. 이 + 경우 저가전략이 적합합니다. (C) 선택지인 ''경쟁사가 많을 때''도 저가전략을 사용하기 좋은 상황입니다. 경쟁사가 많을 경우 소비자들의 선택권이 + 넓어지므로, 가격 경쟁력을 확보하기 위해 저가전략을 사용할 수 있습니다. (D) 선택지인 ''소비자들의 수요를 자극하고자 할 때''는 저가전략의 + 주요 목표 중 하나입니다. 가격을 낮추면 소비자들의 구매욕구를 자극할 수 있으므로, 이 경우에도 저가전략이 적합합니다. , 이러한 사항들을 종합해 + 보았을 때, 저가전략이 적합하지 않은 경우는 ''시장수요의 가격탄력성이 낮을 때''입니다. 이 경우에는 가격을 낮추어도 소비자들의 수요에 큰 영향을 + 미치지 못하므로, 저가전략을 사용하는 것은 효과적이지 않을 수 있습니다. 따라서, 정답은 (A) 입니다. + + + 질문: 아웃바운드 텔레마케팅의 판매촉진 강화를 위한 방안으로 잘못된 것은? + + A.상담원은 고객의 요구만을 열심히 경청하게 한다. + + B.상담원들에게 상품에 대한 사전지식을 철저히 준비토록 한다. + + C.고객에게 호감을 줄 수 있는 커뮤니케이션 기술을 갖추도록 한다. + + D.상담원은 고객의 반론에 대한 자연스러운 대응력을 갖추도록 한다. + + 정답: 차근 차근 생각해봅시다. 마케팅 관련 정보를 위해 위키피디아를 참조하겠습니다. 정답 해설: 아웃바운드 텔레마케팅은 고객에게 먼저 전화를 + 걸어 상품을 판매하거나 서비스를 제공하는 마케팅 방식입니다. , 판매촉진 강화를 위해서는 상담원이 적극적으로 고객을 설득하고, 상품에 대한 정보를 + 제공하는 것이 중요합니다. (A)는 고객의 요구만을 열심히 경청하게 한다는 것은 아웃바운드 텔레마케팅의 목적인 판매촉진 강화에 부합하지 않습니다. + 이는 고객의 요구를 파악하는 데에는 도움이 될 수 있지만, 판매를 이끌어내는 데에는 한계가 있습니다. (B), (C), (D)는 모두 아웃바운드 + 텔레마케팅의 판매촉진 강화를 위한 방안으로 적절한 것들입니다. 상담원이 상품에 대한 사전지식을 철저히 준비하면 고객에게 정확한 정보를 제공할 수 + 있고, 고객에게 호감을 줄 수 있는 커뮤니케이션 기술을 갖추면 고객과의 소통을 원활하게 할 수 있으며, 상담원이 고객의 반론에 대한 자연스러운 + 대응력을 갖추면 고객의 불만이나 반대를 효과적으로 처리할 수 있습니다. 따라서, 정답은 (A) 입니다. + + + 질문: {{question}} + + A.{{A}} + + B.{{B}} + + C.{{C}} + + D.{{D}} + + 정답: 차근 차근 생각해봅시다. 마케팅 관련 정보를 위해 위키피디아를 참조하겠습니다.' +include: _cot_kmmlu_yaml +task: kmmlu_hard_cot_marketing diff --git a/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_materials_engineering.yaml b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_materials_engineering.yaml new file mode 100644 index 0000000000..9cf2870758 --- /dev/null +++ b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_materials_engineering.yaml @@ -0,0 +1,118 @@ +dataset_name: materials_engineering +doc_to_text: '질문: 실온까지 온도를 내려서 다른 형상으로 변형시켰다가 다시 온도를 상승시키면 어느 일정한 온도이상에서 다시 원래의 형상으로 + 변화하는 합금은 + + A.제진합금 + + B.방진합금 + + C.비정질합금 + + D.형상기억합금 + + 정답: 차근 차근 생각해봅시다. 재료 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 각 선택지에 대한 합금의 특성을 이해해야 합니다. + (A). 제진합금: 제진합금은 주로 금속을 가공하는 과정에서 발생하는 열을 효과적으로 제거하는 데 사용되는 합금입니다. , 이 질문의 합금 특성과는 + 관련이 없어 보입니다. (B). 방진합금: 방진합금은 소음이나 진동을 줄이는 데 효과적인 합금입니다. 이 역시 질문의 합금 특성과는 관련이 없어 + 보입니다. (C). 비정질합금: 비정질합금은 금속 원자들이 정렬되지 않은 상태, 즉 비정질 상태로 고정되어 있어 특별한 기계적 특성을 가진 합금입니다. + 하지만 이 합금은 온도에 따라 형상이 변화하는 특성은 없습니다. (D). 형상기억합금: 형상기억합금은 특정 온도 이상에서 원래의 형상으로 돌아가는 + 특성을 가진 합금입니다. 이 합금은 ''형상기억 효과''라는 고유한 특성 때문에 특정 온도에서 물체의 형태가 변하고, 그 온도가 다시 내려가면 + 원래의 형태로 돌아오는 특성을 가집니다. , 질문에서 요구하는 ''실온까지 온도를 내려서 다른 형상으로 변형시켰다가 다시 온도를 상승시키면 어느 + 일정한 온도이상에서 다시 원래의 형상으로 변화하는 합금''은 형상기억합금이 가장 적합해 보입니다. 따라서, 정답은 (D) 입니다. + + + 질문: 잔류 오스테나이트를 마텐자이트로 변화시키는 열처리 방법은? + + A.연속냉각 변태 처리 + + B.등온 변태 처리 + + C.항온 변태 처리 + + D.심랭 처리 + + 정답: 차근 차근 생각해봅시다. 재료 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 잔류 오스테나이트와 마텐자이트에 대해 이해해야 + 합니다. 잔류 오스테나이트는 강철의 오스테나이트 구조가 완전히 변태되지 않아 잔류한 상태를 말하며, 마텐자이트는 강철의 오스테나이트 구조가 빠른 + 냉각에 의해 변태된 것을 말합니다. 이제 각 선택지에 대해 살펴보겠습니다. (A) 연속냉각 변태 처리는 강철을 연속적으로 냉각시켜 구조를 변화시키는 + 방법입니다. 이 방법은 오스테나이트를 마텐자이트로 변화시키는데 효과적일 수 있습니다. (B) 등온 변태 처리는 강철을 일정한 온도에서 변태시키는 + 방법입니다. 이 방법은 오스테나이트를 페라이트나 베이나이트로 변화시키는데 주로 사용됩니다. (C) 항온 변태 처리는 강철을 변태 온도에서 일정 + 시간 동안 유지하는 방법입니다. 이 방법은 오스테나이트를 페라이트나 베이나이트로 변화시키는데 주로 사용됩니다. (D) 심랭 처리는 강철을 매우 + 빠르게 냉각시키는 방법입니다. 이 방법은 오스테나이트를 마텐자이트로 변화시키는데 효과적입니다. , 잔류 오스테나이트를 마텐자이트로 변화시키는 + 열처리 방법은 연속냉각 변태 처리나 심랭 처리일 가능성이 높습니다. 하지만 심랭 처리가 더 빠른 냉각을 통해 마텐자이트로의 변화를 촉진시키므로, + 이 방법이 더 적합하다고 판단됩니다. 잔류 오스테나이트를 마텐자이트로 변화시키는 가장 효과적인 방법은 심랭 처리인데, 이는 오스테나이트가 빠른 + 냉각 과정에서 마텐자이트로 변태되기 때문입니다. 따라서, 정답은 (D) 입니다. + + + 질문: 면심입방격자의 배위수는 몇 개인가? + + A.8 + + B.12 + + C.16 + + D.24 + + 정답: 차근 차근 생각해봅시다. 재료 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 면심입방격자(face-centered cubic lattice, + FCC)는 각 면의 중심과 모서리에 원자가 위치한 입방격자입니다. 이 구조에서 한 원자는 주변에 있는 다른 원자 12개와 접촉하게 되므로, 배위수는 + 12입니다. 이를 자세히 설명하면, 면심입방격자는 입방격자의 8개 꼭지점에 원자가 하나씩 위치하고, 6개 면의 중심에도 원자가 하나씩 위치합니다. + 이때, 각 면의 중심에 위치한 원자는 그 면에 인접한 4개 꼭지점의 원자와 접촉하게 됩니다. 면 중심에 위치한 원자는 총 4개의 원자와 접촉하게 + 되며, 이는 총 6개의 면에 대해 동일하므로 4*6=24개의 원자와 접촉하는 것처럼 보입니다. 그러나, 각 면 중심의 원자는 서로 공유되므로 실제로 + 한 원자가 접촉하는 원자의 수는 24/2=12개가 됩니다. 이로써, 면심입방격자의 배위수는 12라는 결론을 도출할 수 있습니다. 따라서, 정답은 + (B) 입니다. + + + 질문: 금속재료에 외부의 힘을 가하여 원하는 형태로 변형시킴과 동시에 재료의 기계적 성질을 개선하는 가공법을 무엇이라 하는가? + + A.용접 + + B.절삭가공 + + C.소성가공 + + D.분말 야금 + + 정답: 차근 차근 생각해봅시다. 재료 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저 각 선택지에 대해 이해해보겠습니다. (A). 용접: + 두 개 이상의 금속을 고온으로 가열하여 붙이는 방법입니다. 이는 주로 두 개의 금속을 연결하는데 사용되며, 이 과정에서 금속의 형태를 변형시키거나 + 기계적 성질을 개선하는 것은 아닙니다. (B). 절삭가공: 금속을 절단하거나 깎아내어 원하는 형태로 만드는 가공법입니다. 이 방법은 주로 금속의 + 형태를 변형시키는 데 사용되지만, 재료의 기계적 성질을 개선하는 것은 아닙니다. (C). 소성가공: 금속재료에 외부의 힘을 가하여 원하는 형태로 + 변형시키고, 이 과정에서 재료의 기계적 성질을 개선하는 가공법입니다. 소성가공은 압력을 이용해 금속을 변형시키며, 이 과정에서 금속의 결정 구조가 + 재배열되어 기계적 성질이 개선됩니다. (D). 분말 야금: 금속 분말을 고온에서 가압하여 원하는 형태로 만드는 방법입니다. 이 방법은 주로 복잡한 + 형태의 금속 부품을 제조하는 데 사용되며, 이 과정에서 금속의 형태를 변형시키지만, 재료의 기계적 성질을 개선하는 것은 아닙니다. , 질문에서 + 주어진 정보를 기반으로 할 때, 금속재료에 외부의 힘을 가하여 원하는 형태로 변형시킴과 동시에 재료의 기계적 성질을 개선하는 가공법은 ''소성가공''이라 + 할 수 있습니다. 따라서, 정답은 (C) 입니다. + + + 질문: 냉간가공과 열간가공을 구별하는 기준이 되는 것은? + + A.변태점 + + B.탄성한도 + + C.재결성 온도 + + D.마무리 온도 + + 정답: 차근 차근 생각해봅시다. 재료 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 냉간가공과 열간가공의 차이를 알아보겠습니다. 냉간가공은 + 금속을 녹이지 않고, 상온에서 가공하는 방법을 말하며, 열간가공은 금속을 가열하여 가공하는 방법을 말합니다. 이 두 가공 방법의 차이는 가공하는 + 과정에서 금속의 온도에 있습니다. 그럼 이제 선택지를 하나씩 살펴보겠습니다. (A) 변태점: 이는 금속이 상태를 변화시키는 온도를 의미합니다. + 이는 냉간가공과 열간가공의 구별 기준이 될 수 없습니다. (B) 탄성한도: 이는 재료가 더 이상 탄성 변형을 견디지 못하고 비탄성 변형을 일으키기 + 시작하는 응력을 말합니다. 이 역시 냉간가공과 열간가공의 구별 기준이 될 수 없습니다. (D) 마무리 온도: 이는 열간가공 과정에서 마지막으로 + 도달하는 온도를 의미합니다. 이는 열간가공의 과정을 설명하는 용어로, 냉간가공과 열간가공을 구별하는 기준이 될 수 없습니다. (C) 재결성 온도: + 이는 금속이 냉간 가공에 의한 변형에서 회복되기 시작하는 온도를 말합니다. 이는 냉간가공과 열간가공을 구별하는 데 사용될 수 있습니다. 냉간가공은 + 재결성 온도 이하에서 이루어지며, 열간가공은 재결성 온도 이상에서 이루어집니다. , 냉간가공과 열간가공을 구별하는 기준은 재결성 온도라고 할 + 수 있습니다. 따라서, 정답은 (C) 입니다. + + + 질문: {{question}} + + A.{{A}} + + B.{{B}} + + C.{{C}} + + D.{{D}} + + 정답: 차근 차근 생각해봅시다. 재료 공학 관련 정보를 위해 위키피디아를 참조하겠습니다.' +include: _cot_kmmlu_yaml +task: kmmlu_hard_cot_materials_engineering diff --git a/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_math.yaml b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_math.yaml new file mode 100644 index 0000000000..ab0a868116 --- /dev/null +++ b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_math.yaml @@ -0,0 +1,126 @@ +dataset_name: math +doc_to_text: '질문: 이차방정식 x2 - 5x + 3 = 0의 두 근이 log5α와 log5β일 때, logαβ + logβα의 값은? + + A.17/3 + + B.19/3 + + C.21/5 + + D.23/5 + + 정답: 차근 차근 생각해봅시다. 수학 관련 정보를 위해 위키피디아를 참조하겠습니다. 이차방정식 \( x^2 - 5x + 3 = 0 \)의 두 근이 + \( \log_5 \alpha \)와 \( \log_5 \beta \)일 때, \( \log \alpha \beta + \log \beta \alpha + \)의 값을 찾는 문제입니다. 이차방정식의 해에 대한 비에타의 공식에 따르면, 두 근의 합은 \(-\frac{b}{a}\)이고, 두 근의 곱은 + \(\frac{c}{a}\)입니다. 여기서 \(a\), \(b\), \(c\)는 각각 이차방정식의 계수입니다. 주어진 방정식 \( x^2 - 5x + + 3 = 0 \)에서, \(a = 1\), \(b = -5\), \(c = 3\)이므로, 두 근의 합은 \(5\)이고, 두 근의 곱은 \(3\)입니다. + 이제, \( \log_5 \alpha \)와 \( \log_5 \beta \)가 근이므로 다음과 같은 두 조건을 갖습니다: 1. \( \log_5 + \alpha + \log_5 \beta = 5 \) 2. \( \log_5 \alpha \cdot \log_5 \beta = 3 \) 로그의 성질에 + 따라, \( \log \alpha \beta + \log \beta \alpha \)는 \( \log \alpha^2 \beta^2 \)로 표현할 + 수 있고, 이는 \( \log (\alpha \beta)^2 \)와 같습니다. \( \alpha \beta = 5^3 \) 이므로 (근의 곱에서), + 이는 다음과 같이 됩니다: \[ \log 5^6 \] \[ 6 \cdot \log 5 \] \( \log 5 \)는 1이므로, 이 식은 단순히 + 6이 됩니다. 그러나 주어진 식에는 \( \log_5 \alpha \)와 \( \log_5 \beta \)로 나누는 추가 연산과 이차식 전개가 + 포함되어 있습니다. 이미지에서 보여지는 식에 따라 계산을 해보면, 분수의 형태로 나타나는 두 로그의 합은 실제로 로그의 법칙을 사용하여 단순화할 + 수 있습니다. 그리고 이차식의 전개는 근의 합과 근의 곱으로 표현된 값을 사용하여 계산할 수 있습니다. 최종적으로, 이 식은 근의 합과 근의 곱의 + 관계를 사용하여 해를 구할 수 있으며, 식을 단순화한 결과 \( \frac{19}{3} \)이 답으로 나올 것입니다. 따라서, 정답은 (B) 입니다. + + + 질문: 좌표평면에서 원 (x-1)2 + (y-1)2 = 1을 y축에 대하여 대칭이동한 후 y축의 방향으로 1만큼 평행이동한 원 위의 임의의 점과 + 원점 사이의 거리의 최댓값을 a, 최솟값을 b라 할 때, a+b의 값은? + + A.√5 + + B.2√5 + + C.3√5 + + D.4√5 + + 정답: 차근 차근 생각해봅시다. 수학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 주어진 원의 중심은 (1, 1)이고 반지름은 1입니다. + 그런 다음 원을 y축에 대하여 대칭이동하면, 원의 중심은 (-1, 1)이 됩니다. 이는 y축에 대해 대칭이기 때문에 x좌표만 바뀌고 y좌표는 그대로입니다. + 그 다음으로 원을 y축의 방향으로 1만큼 평행이동하면, 원의 중심은 (-1, 2)가 됩니다. 이는 y축의 방향으로 평행이동하기 때문에 y좌표만 + 바뀌고 x좌표는 그대로입니다. 이제 원점과 이동한 원 위의 임의의 점과의 거리의 최댓값과 최솟값을 구해야 합니다. 원의 반지름이 1이므로, 원점과 + 원 위의 점 사이의 거리의 최댓값은 중심에서 원점까지의 거리에 반지름을 더한 값이고, 최솟값은 중심에서 원점까지의 거리에서 반지름을 뺀 값입니다. + 원의 중심 (-1, 2)와 원점 (0, 0) 사이의 거리는 √((-1-0)^2 + (2-0)^2) = √5입니다. 거리의 최댓값은 √5 + + 1, 최솟값은 √5 - 1입니다. 그러므로 a+b의 값은 (√5 + 1) + (√5 - 1) = 2√5입니다. 따라서, 정답은 (B) 입니다. + + + 질문: log3(-n3 + 15n2 - 66n + 80)의 값이 존재하도록 하는 모든 자연수 n의 값의 합은? + + A.8 + + B.10 + + C.12 + + D.14 + + 정답: 차근 차근 생각해봅시다. 수학 관련 정보를 위해 위키피디아를 참조하겠습니다. 문제는 log3(-n³ + 15n² - 66n + 80)의 + 값이 존재하도록 하는 모든 자연수 n의 합을 구하는 것이었습니다. 우선, 로그 함수 내부의 값이 양수가 되어야 합니다. 즉, -n³ + 15n² + - 66n + 80 > 0 이어야 합니다. 이 부등식을 풀기 위해서는, 우선 주어진 식을 인수분해할 필요가 있습니다. 식을 인수분해해보겠습니다: + - -n³ + 15n² - 66n + 80 - = -(n³ - 15n² + 66n - 80) 이제 n³ - 15n² + 66n - 80 = 0의 + 해를 구해야 합니다. 이는 3차 방정식이므로, 해를 찾기 위해서는 실제 계산이 필요합니다. 우선 간단한 정수해를 찾기 위해 n = 1, 2, 3, + ... 등을 대입해 볼 수 있습니다. 1, 2, 3, ... 등을 대입해 보며 식이 0이 되는 n의 값을 찾아보겠습니다. 그리고 그 값들을 기반으로 + 부등식 -n³ + 15n² - 66n + 80 > 0을 만족하는 n의 범위를 확인할 수 있습니다. 이제 필요한 계산을 해보겠습니다. 방정식 -n³ + + 15n² - 66n + 80 > 0을 만족하는 n의 값은 1, 6, 7입니다. 이는 이들 값에 대해 방정식의 결과가 양수가 되는 것을 의미합니다. , + 이러한 n의 값들의 합은 1 + 6 + 7 = 14입니다. 따라서, 정답은 (D) 입니다. + + + 질문: 점 C(2, -1)을 중심으로 하고 반지름의 길이가 √17인 원 위의 점 P(3, 3)에서의 접선과 점 Q(6, -2)에서의 접선이 만나는 + 점을 R이라 할 때, 사각형 CQRP의 넓이는? + + A.√17 + + B.2√17 + + C.17 + + D.34 + + 정답: 차근 차근 생각해봅시다. 수학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 점 C(2, -1)을 중심으로 하고 반지름의 길이가 + √17인 원 위의 점 P(3, 3)에서의 접선과 점 Q(6, -2)에서의 접선이 만나는 점을 R이라 할 때, 이 점들이 이루는 사각형 CQRP의 + 넓이를 구하는 문제입니다. 원의 중심과 접점을 잇는 선분은 접선에 수직이라는 성질을 이용하면, 점 P에서의 접선의 기울기는 PC와 수직이므로, + 점 P와 C의 좌표를 이용하여 PC의 기울기를 구하면, PC의 기울기는 (3 - (-1)) / (3 - 2) = 4 이고, 이에 수직인 접선의 + 기울기는 -1/4가 됩니다. 마찬가지로 점 Q에서의 접선의 기울기를 구하면, 점 Q와 C의 좌표를 이용하여 QC의 기울기는 (-2 - (-1)) + / (6 - 2) = -1/4 이고, 이에 수직인 접선의 기울기는 4가 됩니다. 점 P에서의 접선의 방정식은 y - 3 = -1/4 * (x + - 3), 점 Q에서의 접선의 방정식은 y + 2 = 4 * (x - 6) 이 됩니다. 이 두 접선이 만나는 점 R을 구하기 위해 두 접선의 방정식을 + 연립하여 풀면, x = 8/3, y = 5/3가 됩니다. 그리고 원의 중심 C와 점 P, Q, R의 거리를 구하면 CP = CQ = √17, CR + = √((8/3 - 2)^2 + (5/3 - (-1))^2) = √17이 됩니다. , 사각형 CQRP는 실제로는 정사각형이며, 그 넓이는 한 + 변의 길이의 제곱이므로 17이 됩니다. 따라서, 정답은 (C) 입니다. + + + 질문: x3 - 1 = 0의 한 허근을 ω라 할 때, ω + ω3 + ω5 + … + ω2017 + ω2019을 간단히 하면? + + A.0 + + B.ω + + C.ω+1 + + D.1 + + 정답: 차근 차근 생각해봅시다. 수학 관련 정보를 위해 위키피디아를 참조하겠습니다. x^3 - 1 = 0의 한 허근을 ω라고 하였으므로, ω^3 + = 1이 됩니다. 이제, 주어진 식을 보면 ω + ω^3 + ω^5 + ... + ω2017 + ω2019 입니다. ω^3 = 1이므로, ω^3, + ω^6, ω^9, ..., ω2016은 모두 1이 됩니다. , 주어진 식은 ω + 1 + ω^2 + ω^4 + ... + ω2018 + ω2020이 + 됩니다. ω^3 = 1이므로, ω^3, ω^6, ω^9, ..., ω2016은 모두 1이 됩니다. , ω^2 + ω^4 + ... + ω2018 + = (ω^2 + ω^4 + ... + ω2016) + ω^2017 + ω^2019 = ω^2017 + ω^2019 입니다. 주어진 식에 ω^2017 + + ω^2019를 대입하면 ω + 1 + (ω^2017 + ω^2019) + ω^2018 + ω^2020이 됩니다. ω^3 = 1이므로 ω^3n + = 1 (n은 3의 배수) 입니다. , ω^2018 = ω^3*672 = 1이고 ω^2020 = ω^3*670 = 1입니다. 주어진 식에 대입하면 + ω + 1 + (ω^2017 + ω^2019) + 1 + 1이 됩니다. ω^2017 + ω^2019 = ω^2 + ω^4 = (ω^2 + ω^4 + + ω^6 + ... + ω2016) + ω2017 + ω2019 = ω2017 + ω2019 입니다. , ω^2017 + ω^2019 = ω + + 1 입니다. 주어진 식에 ω + 1을 대입하면 ω + 1 + ω + 1 + 1 + 1이 됩니다. 따라서, 정답은 (C) 입니다. + + + 질문: {{question}} + + A.{{A}} + + B.{{B}} + + C.{{C}} + + D.{{D}} + + 정답: 차근 차근 생각해봅시다. 수학 관련 정보를 위해 위키피디아를 참조하겠습니다.' +include: _cot_kmmlu_yaml +task: kmmlu_hard_cot_math diff --git a/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_mechanical_engineering.yaml b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_mechanical_engineering.yaml new file mode 100644 index 0000000000..1023abcc9f --- /dev/null +++ b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_mechanical_engineering.yaml @@ -0,0 +1,111 @@ +dataset_name: mechanical_engineering +doc_to_text: '질문: 비틀림 각이 30°인 헬리컬 기어에서 잇수가 40이고 축직각모듈이 4일 때 피치원의 직경은 몇㎜인가? + + A.160 + + B.170.27 + + C.168 + + D.184.75 + + 정답: 차근 차근 생각해봅시다. 기계 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 헬리컬 기어에서 피치원의 직경을 계산하기 위해서는 축직각모듈과 + 잇수를 사용합니다. 피치원 직경은 일반적으로 축직각모듈과 잇수의 곱으로 계산됩니다. 수학적으로는 다음과 같이 표현됩니다: \[ \text{피치원 + 직경} = \text{축직각모듈} \times \text{잇수} \] 여기서 축직각모듈이 4이고 잇수가 40이므로, 피치원 직경은 4 × 40 + = 160mm입니다. 따라서, 정답은 (A) 입니다. + + + 질문: 열처리에서 재질을 경화시킬 목적으로 강을 오스테나이트 조직의 영역으로 가열한 후 급냉시키는 열처리는? + + A.뜨임 + + B.풀림 + + C.담금질 + + D.불림 + + 정답: 차근 차근 생각해봅시다. 기계 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 열처리의 목적은 강의 특성을 변경하거나 개선하는 것입니다. + 이는 강의 강도, 경도, 인성, 취성 등을 조절하는데 사용됩니다. 먼저 선택지를 하나씩 살펴보겠습니다. (A) 뜨임은 강재를 높은 온도로 가열한 + 후, 공기 중에서 천천히 냉각시키는 과정입니다. 이는 강재의 경도를 줄이고, 인성을 높이는 역할을 합니다. 이 경우, 강재는 오스테나이트 상태로 + 가열되지만, 이 후 급속히 냉각되는 것이 아니라 천천히 냉각되므로 이 선택지는 아닐 것 같습니다. (B) 풀림은 강재를 일정 온도로 가열한 후, + 이를 유지하는 과정을 말합니다. 이는 강재의 미세 구조를 안정화시키고, 내부 응력을 해소하는 역할을 합니다. 이 경우, 강재는 오스테나이트 상태로 + 가열되지만, 이 후 급속히 냉각되는 것이 아니라 천천히 냉각되므로 이 선택지도 아닐 것 같습니다. (C) 담금질은 강재를 오스테나이트 상태로 가열한 + 후, 이를 급속히 냉각하는 과정을 말합니다. 이는 강재의 경도와 강도를 크게 높이는 역할을 합니다. , 이 선택지가 가장 가능성이 높아 보입니다. + (D) 불림은 강재를 높은 온도로 가열한 후, 이를 유지하는 과정을 말합니다. 이는 강재의 내부 응력을 해소하고, 강도와 경도를 증가시키는 역할을 + 합니다. 이 경우, 강재는 오스테나이트 상태로 가열되지만, 이 후 급속히 냉각되는 것이 아니라 천천히 냉각되므로 이 선택지도 아닐 것 같습니다. + 따라서, 정답은 (C) 입니다. + + + 질문: Cu3.5 ~ 4.5%, Mg1 ~ 1.5%, Si0.5%, Mn0.5~1.0%, 나머지 Al인 합금으로 무게를 중요시한 항공기나 자동차에 + 사용되는 고력 Al합금인 것은? + + A.두랄루민 + + B.하이드로날륨 + + C.알드레이 + + D.내식 알루미늄 + + 정답: 차근 차근 생각해봅시다. 기계 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 질문에서 언급된 합금의 구성요소를 보면 Cu, + Mg, Si, Mn 그리고 Al이 있습니다. 이는 알루미늄 합금의 일종을 가리키는 것으로 보입니다. 그런데 이 중에서 무게를 중요시한 항공기나 + 자동차에 사용되는 고력 Al합금을 찾아야 합니다. 선택지 중에서 두랄루민, 하이드로날륨, 알드레이, 내식 알루미늄이 있습니다. 이들 중에서 합금의 + 구성요소와 사용되는 분야를 고려해야 합니다. 먼저 두랄루민에 대해 알아보겠습니다. 두랄루민은 고강도의 알루미늄 합금으로 알려져 있습니다. 이는 + 항공기 제작에 주로 사용되는데, 그 이유는 두랄루민이 가볍고 강도가 높기 때문입니다. 두랄루민의 주요 성분으로는 알루미늄, 구리, 망간, 마그네슘 + 등이 있습니다. 이는 질문에서 언급된 합금의 구성요소와 일치합니다. 다음으로 하이드로날륨, 알드레이, 내식 알루미늄에 대해 알아보겠습니다. 하이드로날륨은 + 물과 반응하여 수소를 생성하는 물질로, 이는 질문의 합금과는 많이 다릅니다. 알드레이는 러시아의 항공기 제조 회사로, 이 역시 질문의 합금과는 + 관련이 없습니다. 마지막으로 내식 알루미늄은 일반적으로 알루미늄의 내식성을 높이기 위해 다른 원소들을 첨가한 합금을 말합니다. 하지만 이는 특정한 + 합금을 가리키는 것이 아니므로, 이 역시 질문의 합금과는 많이 다릅니다. , 두랄루민이 질문에서 언급된 합금의 구성요소와 사용되는 분야, 그리고 + 고강도 Al합금이라는 점에서 가장 일치하는 것으로 보입니다. ''따라서, 정답은 (A) 입니다. + + + 질문: 미끄럼 베어링과 비교한 구름 베어링의 특징에 대한 설명으로 틀린 것은? + + A.마찰계수가 작고 특히 기동마찰이 적다. + + B.규격화되어 있어 표준형 양산품이 있다. + + C.진동하중에 강하고 호환성이 없다. + + D.전동체가 있어서 고속회전에 불리하다. + + 정답: 차근 차근 생각해봅시다. 기계 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 구름 베어링과 미끄럼 베어링의 특징을 비교해보면 다음과 + 같습니다. (A). 마찰계수가 작고 특히 기동마찰이 적다. - 구름 베어링은 전동체가 구름 운동을 하기 때문에 마찰계수가 작고, 기동마찰이 적습니다. + 이는 구름 베어링의 장점 중 하나입니다. (B). 규격화되어 있어 표준형 양산품이 있다. - 구름 베어링은 규격화되어 있어 표준형 양산품이 있습니다. + 이는 대량 생산이 가능하고, 가격이 저렴하다는 장점이 있습니다. (C). 진동하중에 강하고 호환성이 없다. - 구름 베어링은 전동체가 구름 운동을 + 하기 때문에 진동하중에 강합니다. 하지만 호환성에 대해서는, 구름 베어링은 다양한 규격이 존재하며, 규격에 맞는 제품을 사용하면 호환성이 있습니다. , + 이 선택지는 옳지 않습니다. (D). 전동체가 있어서 고속회전에 불리하다. - 구름 베어링은 전동체가 구름 운동을 하기 때문에 고속회전에 유리합니다. + 이는 구름 베어링의 장점 중 하나입니다. 따라서, 정답은 (C) 입니다. + + + 질문: V벨트는 단면 형상에 따라 구분되는데 가장 단면이 큰 벨트의 형은? + + A.OPTION + + B.OPTION + + C.E + + D.M + + 정답: 차근 차근 생각해봅시다. 기계 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, V벨트의 단면 형상에 대해 알아보겠습니다. V벨트는 + 이름에서 알 수 있듯이 ''V''자 형태의 단면을 가진 벨트입니다. 이 벨트는 다양한 형태와 크기로 제작되며, 일반적으로 알파벳을 사용하여 단면의 + 크기와 형태를 구분합니다. 이 알파벳은 보통 A, B, C, D, E 등으로 표현되며, 이 중에서 단면이 가장 큰 벨트는 어떤 것일까요? V벨트의 + 단면 크기는 알파벳이 뒤로 갈수록 커집니다 즉, A형은 B형보다 작고, B형은 C형보다 작으며, 이런 식으로 D형, E형으로 진행됩니다. , + 주어진 선택지 중에서 가장 단면이 큰 V벨트는 E형일 것입니다. 따라서, 정답은 (C) 입니다. + + + 질문: {{question}} + + A.{{A}} + + B.{{B}} + + C.{{C}} + + D.{{D}} + + 정답: 차근 차근 생각해봅시다. 기계 공학 관련 정보를 위해 위키피디아를 참조하겠습니다.' +include: _cot_kmmlu_yaml +task: kmmlu_hard_cot_mechanical_engineering diff --git a/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_nondestructive_testing.yaml b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_nondestructive_testing.yaml new file mode 100644 index 0000000000..3b74275b7e --- /dev/null +++ b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_nondestructive_testing.yaml @@ -0,0 +1,122 @@ +dataset_name: nondestructive_testing +doc_to_text: '질문: 침투탐상시험의 적용 방법에 대한 설명으로 옳은 것은? + + A.침투시간을 단축하기 위해서는 버너 등으로 탐상 시작 전에 침투액을 가열하여야 한다. + + B.습식현상법은 수세성 염색침투탐상시험에 실시하는 것이 효율성을 높일 수 있다. + + C.물과 전원이 없는 장소의 대형구조물 부분검사에는 후유화성 형광침투탐상시험이 적합하다. + + D.건식현상법은 수세성 또는 후유화성 형광침투액을 사용하는데 주로 이용된다. + + 정답: 차근 차근 생각해봅시다. 비파괴 검사 관련 정보를 위해 위키피디아를 참조하겠습니다. 침투탐상시험에 관한 각 선택지의 정확성을 분석하기 위해, + 침투탐상시험의 기본 원리와 방법에 대해 살펴보겠습니다. (A) 침투탐상시험에서 침투액을 가열하는 것에 대한 명확한 언급은 발견되지 않았습니다. + 침투탐상시험은 주로 표면에 남은 침투제를 제거하고, 현상제를 사용하여 균열이나 결함을 드러내는 과정을 포함합니다. 침투액의 효과적 사용에 대한 + 정보에서 가열에 관한 언급은 없었습니다. (B) 수세성 침투 탐상시험은 효과적이며, 습식 현상법이 적용될 수 있습니다. 침투액의 적용 후, 과잉 + 침투액을 제거하여 유화처리나 세척처리의 효율을 증대시키는 것이 중요합니다. 이는 습식 현상법이 수세성 염색침투탐상시험에 효율적으로 적용될 수 있음을 + 시사하지만 확실하지 않습니다. (C) 후유화성 침투액의 경우 유화 처리, 세척처리, 건조처리 등의 단계가 포함되며, 특히 물과 전원이 없는 장소에서의 + 사용에 대한 구체적 언급은 없었습니다. 하지만, 후유화성 침투액은 일반적으로 건식 현상법과 함께 사용됩니다. (D) 건식현상법은 수세성 침투액 + 및 후유화성 침투액과 함께 사용될 수 있습니다. 이는 선택지 D의 내용이 타당함을 시사합니다. 따라서, 정답은 (D) 입니다. + + + 질문: 전자기초음파 탐상의 특징으로 틀린 것은? + + A.전기, 음향변화 능률이 떨어진다. + + B.탐상감도가 약간 저하된다. + + C.접촉매질의 두께에 영향을 받는다. + + D.정밀한 두께 측정이나 음속 측정에 적합하다. + + 정답: 차근 차근 생각해봅시다. 비파괴 검사 관련 정보를 위해 위키피디아를 참조하겠습니다. 전자기초음파 탐상(EMAT: Electromagnetic + Acoustic Transducer)은 접촉매질이 필요 없는 비접촉 초음파 탐상 방법입니다. 이 방법은 초음파를 직접적으로 발생시키는 것이 아니라, + 전자기장을 이용하여 시료 내부에서 초음파를 발생시키는 방식입니다. (A) 선택지는 전자기초음파 탐상의 한계점 중 하나로, EMAT는 효율이 떨어질 + 수 있습니다. 이는 전자기장을 이용하여 시료 내부에서 초음파를 발생시키는 과정에서 일부 에너지 손실이 발생하기 때문입니다. , 이 선택지는 맞습니다. + (B) 선택지는 역시 EMAT의 한계점 중 하나입니다. 비접촉 방식이기 때문에, 전통적인 초음파 탐상 방법에 비해 탐상 감도가 약간 저하될 수 + 있습니다. , 이 선택지도 맞습니다. (C) 선택지는 EMAT의 장점 중 하나입니다. 전자기초음파 탐상은 접촉매질이 필요 없는 비접촉 방식이기 + 때문에, 접촉매질의 두께에 영향을 받지 않습니다. , 이 선택지는 틀립니다. (D) 선택지는 EMAT의 다른 장점 중 하나입니다. 비접촉 방식이기 + 때문에, 정밀한 두께 측정이나 음속 측정에 적합합니다. , 이 선택지는 맞습니다. 따라서, 정답은 (C) 입니다. + + + 질문: 비파괴검사법 중 시험체의 내부와 외부의 압력차를 이용하여 기체나 액체가 결함부를 통해 흘러 들어가거나 나오는 것을 감지하는 방법으로써 압력용기나 + 배관 등에 적용하기 적합한 시험법은? + + A.누설검사 + + B.침투탐상시험 + + C.자분탐상시험 + + D.초음파탐상시험 + + 정답: 차근 차근 생각해봅시다. 비파괴 검사 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 비파괴 검사법에 대해 간단히 설명하겠습니다. + 비파괴 검사법은 시험체를 파괴하지 않고 내부 결함이나 물성을 검사하는 방법을 말합니다. 이 중에서도 질문에서 언급한 검사법은 시험체의 내부와 외부의 + 압력차를 이용하여 기체나 액체가 결함부를 통해 흘러 들어가거나 나오는 것을 감지하는 방법입니다. 이것을 토대로 각 선택지를 살펴보겠습니다. (A) + 누설검사: 이 검사법은 압력용기나 배관 등에서 누설되는 기체나 액체를 감지하는 방법입니다. 이 검사법은 시험체 내부와 외부의 압력차를 이용하여 + 결함부를 통해 기체나 액체가 흘러 들어가거나 나오는 것을 감지합니다. (B) 침투탐상시험: 이 검사법은 표면에 발생한 작은 결함을 발견하기 위해 + 특별한 액체를 사용하는 방법입니다. 이 방법은 표면 결함을 찾는 데 효과적입니다. (C) 자분탐상시험: 이 검사법은 자성체의 표면 또는 근표면 + 결함을 찾는 데 사용됩니다. 이 방법은 자성체에 자기장을 인가하고, 자기력선의 이탈을 이용하여 결함을 찾아냅니다. (D) 초음파탐상시험: 이 검사법은 + 초음파를 이용하여 시험체의 내부 결함을 찾아내는 방법으로서, 압력차를 이용하지 않습니다. 이 방법은 내부의 깊은 부분까지 탐사할 수 있습니다. , + 내부와 외부의 압력차를 이용하여 기체나 액체가 결함부를 통해 흘러 들어가거나 나오는 것을 감지하는 방법으로서 압력용기나 배관 등에 적용하기 적합한 + 검사법은 ''누설검사''입니다. 따라서, 정답은 (A) 입니다. + + + 질문: 물리적 현상의 원리에 따른 비파괴검사 방법을 분류한 것 중 틀린 것은? + + A.광학-육안검사 + + B.열-누설검사 + + C.투과-방사선검사 + + D.전자기-와류탐상검사 + + 정답: 차근 차근 생각해봅시다. 비파괴 검사 관련 정보를 위해 위키피디아를 참조하겠습니다. 비파괴 검사(Nondestructive Testing, + NDT)는 재료나 제품이 사용 중인 상태에서 그 특성이나 상태를 검사하는 기술을 의미합니다. 이는 손상을 입히지 않고, 또는 기능을 손상시키지 + 않고 테스트를 수행합니다. 이러한 방법은 다양한 원리에 기반을 두고 있습니다. (A) 광학-육안검사: 이는 물체의 표면을 보고 결함을 찾는 가장 + 기본적인 검사 방법입니다. 이는 광학의 원리에 기반을 두고 있습니다. (B) 열-누설검사: 이는 열에 의한 누설을 감지하는 방법입니다. 열 이미지를 + 사용하여 누설을 찾을 수 있습니다. 이는 열의 원리에 기반을 두고 있습니다. (C) 투과-방사선검사: 이는 방사선을 사용하여 물체 내부의 결함을 + 찾는 방법입니다. 방사선은 물체를 투과하며, 결함이 있는 경우 방사선의 분포가 달라집니다. 이는 투과의 원리에 기반을 두고 있습니다. (D) 전자기-와류탐상검사: + 이는 전자기장을 사용하여 물체의 결함을 찾는 방법입니다. 전자기장은 물체의 표면에 왜곡을 일으키며, 이 왜곡을 측정하여 결함을 찾을 수 있습니다. + 이는 전자기의 원리에 기반을 두고 있습니다. 하지만, (B) 열-누설검사의 경우, 일반적으로 열에 의한 누설을 감지하는 방법은 ''열화상검사''라고 + 합니다. ''누설검사''는 주로 압력이나 가스 누설을 찾는데 사용되며, 이는 주로 ''음향'' 원리에 기반을 둡니다. , 이 중에서 ''열-누설검사''는 + 열의 원리를 이용한 비파괴 검사 방법이 아닙니다. ''누설검사''는 보통 ''음향'' 원리를 이용한 비파괴 검사 방법으로 분류됩니다. 그러므로 + 이 선택지는 틀린 분류를 나타냅니다. 따라서, 정답은 (B) 입니다. + + + 질문: 초음파탐상시험에서 공진법으로 시험체의 두께를 측정할 때 2MHz의 주파수에서 기본공명이 발생했다면 이 시험체의 두께는 몇 mm인가? (단, + 시험체 내의 초음파 속도는 4800m/s이다.) + + A.1.2 + + B.2.4 + + C.3.6 + + D.4.8 + + 정답: 차근 차근 생각해봅시다. 비파괴 검사 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 공진법이란 무엇인지부터 알아보겠습니다. 공진법은 + 물체가 자연스럽게 진동하는 특정 주파수, 즉 공명 주파수에서 물체가 크게 진동하도록 하는 방법입니다. 이 문제에서는 초음파탐상시험에서 공진법을 + 사용하여 시험체의 두께를 측정하는 상황을 가정하고 있습니다. 이때, 시험체 내의 초음파 속도는 4800m/s로 주어져 있습니다. 초음파탐상시험에서 + 공진법으로 두께를 측정할 때, 시험체의 두께는 기본공명 주파수와 시험체 내의 초음파 속도를 이용하여 계산할 수 있습니다. 이때, 기본공명 주파수는 + 시험체의 두께와 초음파 속도에 의해 결정됩니다. 공명 주파수는 초음파가 시험체의 두께를 왕복하는 주기와 일치할 때 발생합니다. , 기본공명 주파수는 + 초음파가 시험체의 두께를 한 번 왕복하는 주기에 해당합니다. , 시험체의 두께를 t라고 할 때, 기본공명 주파수 f는 초음파 속도 v와 시험체의 + 두께 t를 이용하여 다음과 같이 계산할 수 있습니다. f = v / (2t) 이 문제에서는 기본공명 주파수 f가 2MHz, 즉 2 * 10^6 + Hz이고, 초음파 속도 v는 4800m/s로 주어져 있습니다. 이를 위의 식에 대입하여 시험체의 두께 t를 계산하면 다음과 같습니다. t = v + / (2f) = 4800 / (2 * 2 * 10^6) = 0.0012m = 1.2mm 따라서, 정답은 (A) 입니다. + + + 질문: {{question}} + + A.{{A}} + + B.{{B}} + + C.{{C}} + + D.{{D}} + + 정답: 차근 차근 생각해봅시다. 비파괴 검사 관련 정보를 위해 위키피디아를 참조하겠습니다.' +include: _cot_kmmlu_yaml +task: kmmlu_hard_cot_nondestructive_testing diff --git a/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_patent.yaml b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_patent.yaml new file mode 100644 index 0000000000..d078622fd6 --- /dev/null +++ b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_patent.yaml @@ -0,0 +1,142 @@ +dataset_name: patent +doc_to_text: '질문: 특허협력조약(PCT)에 따른 국제특허출원에 관한 설명으로 옳지 않은 것은? + + A.국제특허출원의 출원인은 국내서면제출기간에 출원인의 성명 및 주소, 발명의 명칭 등을 기재한 서면을 특허청장에게 제출하여야 하는데, 그 서면을 + 국내서면제출기간에 제출하지 아니한 경우 특허청장은 보정기간을 정하여 보정을 명하여야 한다. + + B.특허법 제201조(국제특허출원의 국어번역문)제1항에 따라 국어번역문을 제출한 출원인은 국내서면제출기간(제201조제1항 단서에 따라 취지를 적은 + 서면이 제출된 경우에는 연장된 국어번역문 제출기간을 말한다)에 그 국어번역문을 갈음하여 새로운 국어번역문을 제출할 수 있으나 출원인이 출원심사의 + 청구를 한 후에는 허용되지 않는다. + + C.국제특허출원을 외국어로 출원한 출원인이 국내서면제출기간(제201조제1항 단서에 따라 취지를 적은 서면이 제출된 경우에는 연장된 국어번역문 제출기간을 + 말한다)에 발명의 설명 및 청구범위의 국어번역문을 제출하지 아니하면 그 국제특허출원을 취하한 것으로 본다. + + D.미국 기업이 미국 특허청을 수리관청으로 국제특허출원하고, 한국을 지정국으로 한 경우, 한국 출원일은 한국 특허청에 발명의 설명ㆍ청구범위ㆍ도면의 + 국어번역문을 제출한 날로 본다. + + 정답: 차근 차근 생각해봅시다. 특허법 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 선택지 (A)를 보면, 국제특허출원의 출원인은 국내서면제출기간에 + 출원인의 성명 및 주소, 발명의 명칭 등을 기재한 서면을 특허청장에게 제출하여야 하는데, 그 서면을 국내서면제출기간에 제출하지 아니한 경우 특허청장은 + 보정기간을 정하여 보정을 명하여야 한다고 설명하고 있습니다. 이는 PCT 조약 제21조에 따른 내용으로, 출원인은 국내서면제출기간에 필요한 정보를 + 제출해야 하며, 그렇지 않은 경우 보정기간이 부여된다는 것은 옳은 설명입니다. 다음으로, 선택지 (B)를 보면, 특허법 제201조(국제특허출원의 + 국어번역문)제1항에 따라 국어번역문을 제출한 출원인은 국내서면제출기간(제201조제1항 단서에 따라 취지를 적은 서면이 제출된 경우에는 연장된 국어번역문 + 제출기간을 말한다)에 그 국어번역문을 갈음하여 새로운 국어번역문을 제출할 수 있으나 출원인이 출원심사의 청구를 한 후에는 허용되지 않는다고 설명하고 + 있습니다. 이는 특허법 제201조에 따른 내용으로, 출원인은 국내서면제출기간 내에 새로운 국어번역문을 제출할 수 있지만, 출원심사 청구 후에는 + 허용되지 않는다는 것은 옳은 설명입니다. 선택지 (C)를 보면, 국제특허출원을 외국어로 출원한 출원인이 국내서면제출기간(제201조제1항 단서에 + 따라 취지를 적은 서면이 제출된 경우에는 연장된 국어번역문 제출기간을 말한다)에 발명의 설명 및 청구범위의 국어번역문을 제출하지 아니하면 그 국제특허출원을 + 취하한 것으로 본다고 설명하고 있습니다. 이는 특허법 제201조 제4항에 따른 내용으로, 출원인이 국어번역문을 제출하지 않은 경우 해당 출원은 + 취하된 것으로 간주된다는 것은 옳은 설명입니다. 마지막으로, 선택지 (D)를 보면, 미국 기업이 미국 특허청을 수리관청으로 국제특허출원하고, 한국을 + 지정국으로 한 경우, 한국 출원일은 한국 특허청에 발명의 설명ᆞ청구범위ᆞ도면의 국어번역문을 제출한 날로 본다고 설명하고 있습니다. 그러나, PCT + 조약에 따르면, 국제출원의 한국 출원일은 국제출원일이 됩니다. , 이 설명은 옳지 않습니다. 따라서, 정답은 (D) 입니다. + + + 질문: 특허권 존속기간의 연장에 관한 설명으로 옳은 것은? + + A.특허출원에 대하여 출원심사청구일부터 4년과 특허출원일부터 3년 중 늦은 날보다 지연되어 특허권의 설정등록이 이루어지는 경우에는 그 지연된 기간만큼 + 해당 특허권의 존속기간을 연장할 수 있다. + + B.등록지연에 따른 특허권 존속기간의 연장등록출원이 있는 때에는 그 존속기간은 연장된 것으로 보나, 그 출원에 관하여 연장등록거절결정이 확정된 + 때에는 그러하지 아니하다. + + C.등록지연에 따른 특허권 존속기간의 연장등록출원은 특허권의 설정등록일부터 3개월 이내에 출원하여야 한다. + + D.특허발명의 실시를 위하여 다른 법령의 규정에 의하여 허가등이 필요한 경우 이를 위한 활성ㆍ안전성 등의 시험으로 인하여 실시할 수 없었던 모든 + 기간만큼 그 특허권의 존속기간을 연장할 수 있다. + + 정답: 차근 차근 생각해봅시다. 특허법 관련 정보를 위해 위키피디아를 참조하겠습니다. 특허권의 설정등록일로부터 3개월 이내에 특허권 존속기간의 + 연장등록출원을 해야 한다는 말은 정확합니다. 이는 특허권의 설정등록이 지연된 경우에 적용되는 연장등록출원에 관한 설명입니다. 이 연장등록출원은 + 특허권의 설정등록이 특허출원일로부터 4년 또는 심사청구일로부터 3년 중 늦은 날로부터 지연된에 가능합니다. 이 연장등록출원은 설정등록일로부터 3개월 + 이내에 제출해야 하며, 연장기간에 대한 제한은 없습니다. 따라서, 정답은 (C) 입니다. + + + 질문: 특허권 침해의 손해배상에 관한 설명으로 옳지 않은 것은? (다툼이 있는 경우 에는 판례에 의함) + + A.법원은 특허권의 침해소송에서 당사자의 신청에 의하여 타당사자에 대하여 당해 침해행위로 인한 손해의 계산을 하는 데에 필요한 서류의 제출을 명할 + 수 있으며, 법원의 제출명령에도 불구하고 그 서류의 소지자가 그 제출을 거절할 정당한 이유가 있는 때에는 그 서류를 제출하지 않을 수 있다. + + B.특허법 제128조(손해액의 추정등) 제1항 규정을 적용함에 있어서 특허권자가 그 일실이익 손해액을 입증하기 위해서는 적어도 침해자가 침해행위를 + 하게 한 물건의 양도수량과 당해 침해행위가 없었다면 판매할 수 있었던 물건의 단위수량당 이익액을 입증하여야 한다. + + C.특허법 제128조(손해액의 추정등) 제2항에서의 침해행위에 의한 이익은 침해자가 특허침해행위에 의하여 얻게 된 것을 말하는데, 그 침해행위에도 + 불구하고 특허권자에게 손해가 없는 경우에도 침해자가 침해행위로 인하여 이익을 받았으면 이 규정을 적용할 수 있다. + + D.특허법 제128조(손해액의 추정등) 제3항에 의하여 특허발명의 실시에 대하여 통상받을 수 있는 금액에 상당하는 액을 결정함에 있어 당해 특허발명에 + 대하여 특허권자가 제3자와의 사이에 특허권 실시계약을 맺고 실시료를 받은 바 있다면 그 계약내용을 침해자에게도 유추적용하는 것이 현저하게 불합리하다는 + 특별한 사정이 없는 한 그 실시계약에서 정한 실시료를 참작하여 위 금액을 산정하여야 한다. + + 정답: 차근 차근 생각해봅시다. 특허법 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저 각 선택지가 어떤 내용인지 파악해봅시다. (A) 선택지는 + 법원이 특허권 침해 손해의 계산을 위해 필요한 서류 제출을 요청할 수 있고, 서류 제출을 거부할 정당한 이유가 있는 경우에는 제출하지 않을 수 + 있다는 내용입니다. (B) 선택지는 특허법 제128조 제1항을 적용할 때, 특허권자가 손해액을 입증하기 위해 침해자가 침해행위를 통해 판매한 물건의 + 수량과, 침해행위가 없었다면 판매할 수 있었던 물건의 단위수량당 이익액을 입증해야 한다는 내용입니다. (C) 선택지는 특허법 제128조 제2항에서의 + 침해행위에 의한 이익은 침해자가 특허침해행위에 의해 얻은 것을 의미하며, 특허권자에게 손해가 없는 경우에도 침해자가 침해행위로 인해 이익을 얻었다면 + 이 규정을 적용할 수 있다는 내용입니다. (D) 선택지는 특허법 제128조 제3항에 따라 특허발명의 실시에 대해 통상적으로 받을 수 있는 금액을 + 결정할 때, 특허권자가 제3자와 특허권 실시계약을 맺고 실시료를 받은 경우, 그 계약 내용을 참고하여 금액을 산정해야 한다는 내용입니다. 이 중에서 + 특허권 침해의 손해배상에 관한 설명으로 옳지 않은 것은 (C) 선택지입니다. 왜냐하면, 특허법 제128조 제2항에서는 침해행위에 의한 이익이란 + 침해자가 특허침해행위에 의해 얻은 이익을 의미하는 것은 맞지만, 특허권자에게 손해가 없는 경우에도 침해자가 침해행위로 인해 이익을 얻었다면 이 + 규정을 적용할 수 있다는 내용은 틀립니다. 특허권 침해의 손해배상은 특허권자가 손해를 입었을 때만 적용될 수 있습니다. 따라서, 정답은 (C) + 입니다. + + + 질문: 특허법상 대리인에 관한 설명으로 옳지 않은 것은? + + A.특허에 관한 절차를 밟는 자의 위임에 의한 대리인의 대리권은 본인의 사망이나 능력의 상실, 본인인 법인의 합병에 의한 소멸로 인하여 당연히 + 소멸한다. + + B.행위능력 또는 법정대리권이 없거나 특허에 관한 절차를 밟음에 필요한 수권이 흠결된 자가 밟은 절차는 보정된 당사자나 법정대리인의 추인이 있는 + 때에는 행위시에 소급하여 그 효력이 발생한다. + + C.특허에 관한 절차를 밟는 자의 대리인의 대리권은 이를 서면으로써 증명하여야 한다. + + D.특허에 관한 절차를 밟는 자의 대리인이 수인이 있는 때에는 특허청 또는 특허심판원에 대하여 각자가 본인을 대리한다. + + 정답: 차근 차근 생각해봅시다. 특허법 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 선택지 (A)를 살펴보면, 특허에 관한 절차를 밟는 + 자의 위임에 의한 대리인의 대리권은 본인의 사망이나 능력의 상실, 본인인 법인의 합병에 의한 소멸로 인하여 당연히 소멸한다고 설명하고 있습니다. + 이는 특허법 제5조 제2항에 규정된 내용으로, 대리인의 대리권은 본인의 사망이나 능력의 상실 등의 사유로 인해 소멸하는 것이 맞습니다. 다음으로, + 선택지 (B)를 살펴보면, 행위능력 또는 법정대리권이 없거나 특허에 관한 절차를 밟음에 필요한 수권이 흠결된 자가 밟은 절차는 보정된 당사자나 + 법정대리인의 추인이 있는 때에는 행위시에 소급하여 그 효력이 발생한다고 설명하고 있습니다. 이는 특허법 제5조 제3항에 규정된 내용으로, 대리권이 + 없는 자가 밟은 절차도 당사자나 법정대리인의 추인이 있으면 소급하여 효력이 발생하는 것이 맞습니다. 선택지 (C)를 살펴보면, 특허에 관한 절차를 + 밟는 자의 대리인의 대리권은 이를 서면으로써 증명하여야 한다고 설명하고 있습니다. 이는 특허법 제5조 제1항에 규정된 내용으로, 대리인의 대리권은 + 서면으로 증명되어야 하는 것이 맞습니다. 마지막으로, 선택지 (D)를 살펴보면, 특허에 관한 절차를 밟는 자의 대리인이 수인이 있는 때에는 특허청 + 또는 특허심판원에 대하여 각자가 본인을 대리한다고 설명하고 있습니다. 이는 특허법 제6조 제1항에 규정된 내용으로, 대리인이 여러 명인 경우 각자가 + 본인을 대리하는 것이 맞습니다. 따라서, 정답은 (A) 입니다. + + + 질문: 특허법 제30조(공지 등이 되지 아니한 발명으로 보는 경우)에 관한 설명으로 옳지 않은 것은? + + A.공지 등이 있는 날로부터 12개월 이내에 공지예외적용 신청을 수반하여 선출원을 한 경우, 해당 선출원을 기초로 한 국내우선권 주장출원을 위 + 공지 등이 있는 날로부터 12개월 이내에 하여야 특허법 제30조를 적용 받을 수 있다. + + B.특허법 제30조제1항제1호의 규정을 적용 받으려면 출원서에 그 취지를 적어야 하고 이를 증명할 수 있는 서류를 출원일로부터 30일 이내에 특허청장에게 + 제출하여야 한다. + + C.특허법 제30조는 발명이 출원 전에 공지되었다 하더라도 일정요건을 갖춘 경우 신규성이나 진보성에 관한 규정을 적용할 때 그 발명을 선행기술로 + 사용하지 않도록 하는 규정이지 출원일이 소급되는 것은 아니다. + + D.甲의 발명이 공개된 후 12개월 이내에 동일 발명을 출원하여 공지예외규정을 적용 받았고, 상기 출원일과 같은 날에 동일 발명에 대하여 乙이 + 출원을 한 경우, 특허법 제36조(선출원)를 적용하지 않더라도 乙은 특허를 받을 수 없다. + + 정답: 차근 차근 생각해봅시다. 특허법 관련 정보를 위해 위키피디아를 참조하겠습니다. (A)는 공지 등이 있는 날로부터 12개월 이내에 공지예외적용 + 신청을 수반하여 선출원을 한 경우, 해당 선출원을 기초로 한 국내우선권 주장출원을 위 공지 등이 있는 날로부터 12개월 이내에 하여야 특허법 제30조를 + 적용 받을 수 있다고 설명하고 있습니다. 그러나, 특허법 제30조 제1항에서는 선출원을 기초로 하지 않은 경우에도 공지예외적용을 신청할 수 있다고 + 규정하고 있습니다. , (A)는 옳지 않은 설명입니다. (B)는 특허법 제30조제1항제1호의 규정을 적용 받으려면 출원서에 그 취지를 적어야 + 하고 이를 증명할 수 있는 서류를 출원일로부터 30일 이내에 특허청장에게 제출하여야 한다고 설명하고 있습니다. 이는 특허법 제30조 제2항에 규정된 + 내용으로 옳은 설명입니다. (C)는 특허법 제30조는 발명이 출원 전에 공지되었다 하더라도 일정요건을 갖춘 경우 신규성이나 진보성에 관한 규정을 + 적용할 때 그 발명을 선행기술로 사용하지 않도록 하는 규정이지 출원일이 소급되는 것은 아니라고 설명하고 있습니다. 이는 특허법 제30조의 취지와 + 내용을 정확히 설명하고 있는 옳은 설명입니다. (D)는 甲의 발명이 공개된 후 12개월 이내에 동일 발명을 출원(A)하여 공지예외규정을 적용 받았고, + 상기 출원일과 같은 날에 동일 발명에 대하여 乙이 출원(B)을 한 경우, 특허법 제36조(선출원)를 적용하지 않더라도 乙은 특허를 받을 수 없다고 + 설명하고 있습니다. 그러나, 특허법 제36조에서는 동일한 발명에 대해서는 먼저 출원한 자만이 특허를 받을 수 있다고 규정하고 있으므로, 乙은 특허를 + 받을 수 없습니다. , (D)는 옳은 설명입니다. 따라서, 정답은 (A) 입니다. + + + 질문: {{question}} + + A.{{A}} + + B.{{B}} + + C.{{C}} + + D.{{D}} + + 정답: 차근 차근 생각해봅시다. 특허법 관련 정보를 위해 위키피디아를 참조하겠습니다.' +include: _cot_kmmlu_yaml +task: kmmlu_hard_cot_patent diff --git a/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_political_science_and_sociology.yaml b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_political_science_and_sociology.yaml new file mode 100644 index 0000000000..827a7df448 --- /dev/null +++ b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_political_science_and_sociology.yaml @@ -0,0 +1,123 @@ +dataset_name: political_science_and_sociology +doc_to_text: '질문: 실질소득이 증가할수록 해당 재화에 대한 수요가 감소하는 재화를 지칭하는 용어로 옳은 것은? + + A.대체재 + + B.보완재 + + C.열등재 + + D.정상재 + + 정답: 차근 차근 생각해봅시다. 정치 사회 관련 정보를 위해 위키피디아를 참조하겠습니다. 정답 해설: 실질소득이 증가할 때 해당 재화에 대한 수요가 + 감소하는 재화를 지칭하는 용어를 찾기 위해 각 선택지를 살펴보겠습니다. (A). 대체재는 한 재화의 가격이 상승할 때 다른 재화의 수요가 증가하는 + 관계를 가진 두 재화를 의미합니다. 실질소득과 직접적인 관련이 없으므로 정답이 아닙니다. (B). 보완재는 한 재화의 수요가 증가할 때 함께 수요가 + 증가하는 재화를 의미합니다. 실질소득과 직접적인 관련이 없으므로 정답이 아닙니다. (C). 열등재는 실질소득이 증가할 때 해당 재화의 수요가 감소하는 + 재화를 의미합니다. 이는 소득이 증가함에 따라 더 좋은 재화를 소비하게 되기 때문입니다. , 정답은 (C) 열등재입니다. (D). 정상재는 실질소득이 + 증가할 때 해당 재화의 수요가 증가하는 재화를 의미합니다. 이는 소득이 증가함에 따라 더 많은 재화를 소비하게 되기 때문입니다. 이는 우리가 일반적으로 + 생각하는 대부분의 재화에 해당합니다. 하지만, 이 문제에서는 실질소득이 증가할 때 해당 재화의 수요가 감소하는 재화를 찾아야 하므로 정답이 아닙니다. + 따라서, 정답은 (C) 입니다. + + + 질문: 하향식(top-down)과 상향식(bottom-up) 지역발전전략을 비교한 설명으로 옳지 않은 것은? + + A.하향식 전략은 효율성을 중시하는 반면, 상향식 전략은 민주성을 강조한다. + + B.하향식 전략은 외부 수요와 시장에 의존하는 반면, 상향식 전략은 지역 자원 활용의 극대화에 초점을 두고 있다. + + C.하향식 전략은 중심지역의 성장을 주변 지역으로 확산시키고, 상향식 전략은 대규모 지역사회의 발전을 자극할 수 있다. + + D.하향식 전략은 개별 지역의 특성을 반영하기 어렵다는 단점이 있으며, 상향식 전략은 개발도상국에서는 실천 가능성이 낮다는 단점이 있다. + + 정답: 차근 차근 생각해봅시다. 정치 사회 관련 정보를 위해 위키피디아를 참조하겠습니다. 하향식(top-down) 전략과 상향식(bottom-up) + 전략은 지역 발전 전략의 두 가지 주요 접근법입니다. (A) 선택지는 하향식 전략이 효율성을 중시하고, 상향식 전략이 민주성을 강조한다고 합니다. + 이는 사실입니다. 하향식 전략은 주로 중앙 정부 또는 주요 기관에서 정책이나 계획을 결정하고 이를 하위 조직에 전달하는 방식이므로 효율성이 중요합니다. + 반면에 상향식 전략은 지역 주민이나 조직에서 정책이나 계획을 제안하고 이를 상위 조직에 제출하는 방식이므로 민주성이 강조됩니다. (B) 선택지는 + 하향식 전략이 외부 수요와 시장에 의존하고, 상향식 전략이 지역 자원 활용의 극대화에 초점을 두고 있다고 합니다. 이 또한 사실입니다. 하향식 + 전략은 대부분 외부에서 결정된 정책이나 계획을 실행하기 때문에 외부 수요와 시장에 의존하는 경향이 있습니다. 반면에 상향식 전략은 지역의 자원과 + 능력을 최대한 활용하려는 노력이 중요하므로 지역 자원 활용의 극대화에 초점을 둡니다. (D) 선택지는 하향식 전략이 개별 지역의 특성을 반영하기 + 어렵다는 단점이 있고, 상향식 전략은 개발도상국에서는 실천 가능성이 낮다는 단점이 있다고 합니다. 이 역시 사실입니다. 하향식 전략은 중앙에서 + 결정된 정책이나 계획을 지역에 적용하기 때문에 개별 지역의 특성을 반영하기 어려울 수 있습니다. 반면에 상향식 전략은 지역의 참여와 자원을 필요로 + 하기 때문에 개발도상국에서는 자원 부족 등의 이유로 실천 가능성이 낮을 수 있습니다. 하지만 (C) 선택지는 하향식 전략이 중심지역의 성장을 주변 + 지역으로 확산시키고, 상향식 전략이 대규모 지역사회의 발전을 자극할 수 있다고 합니다. 이는 부정확합니다. 하향식 전략이 중심지역의 성장을 주변 + 지역으로 확산시키는 것은 사실이지만, 상향식 전략이 반드시 대규모 지역사회의 발전을 자극하는 것은 아닙니다. 상향식 전략은 지역사회의 참여와 지역 + 자원 활용에 초점을 맞추며, 이는 대규모 지역사회의 발전보다는 각 지역사회의 독특한 특성과 자원을 활용한 지역 개발에 더 집중하는 경향이 있습니다. + 따라서, 정답은 (C) 입니다. + + + 질문: 변이할 당 분석(shift-sh areanalysis)에서 가정하는 지역 산업 성장의 세 가지 요인이 아닌 것은? + + A.세계 경제 발전 효과(worlddevelopm enteffect) + + B.국가경제성장 효과(nationalgrowtheffect) + + C.산업구조 효과(industrialmixeffect) + + D.지역 할당 효과(regionalshareeffect) + + 정답: 차근 차근 생각해봅시다. 정치 사회 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 변이할 당 분석(shift-share analysis)에 + 대해 이해해야 합니다. 변이할 당 분석은 지역의 경제 성장을 설명하기 위한 방법 중 하나로, 그 경제 성장을 여러 요인으로 분해하여 각각의 영향력을 + 분석하는 방법입니다. 변이할 당 분석에서는 보통 세 가지 주요 요인을 고려합니다. 1. 국가경제성장 효과(nationalgrowtheffect): + 이는 국가 전체의 경제 성장률이 지역 경제에 미치는 영향을 나타냅니다. 국가 전체의 경제 성장이 있으면, 그 영향력은 모든 지역에 미칩니다. 2. + 산업구조 효과(industrialmixeffect): 이는 특정 지역의 산업 구조가 그 지역의 경제 성장에 어떤 영향을 미치는지를 나타냅니다. + 예를 들어, 어떤 지역이 빠르게 성장하는 산업에 집중되어 있다면, 그 지역의 경제 성장률은 국가 평균보다 높을 수 있습니다. 3. 지역 할당 효과(regionalshareeffect): + 이는 특정 지역이 특정 산업에 대해 어떤 비중을 차지하고 있는지를 나타냅니다. 특정 산업이 그 지역에서 큰 비중을 차지하고 있다면, 그 산업의 + 성장률이 그 지역의 경제 성장에 큰 영향을 미칠 수 있습니다. 이 세 가지 요인을 고려하여 지역의 경제 성장을 분석하는 것이 변이할 당 분석의 + 기본적인 아이디어입니다. 그러나 선택지 중 ''세계 경제 발전 효과(worlddevelopmenteffect)''는 변이할 당 분석에서 고려되는 + 요인이 아닙니다. 세계 경제의 발전 효과는 지역 경제에 영향을 미칠 수 있지만, 변이할 당 분석의 틀 안에서는 고려되지 않는 요인입니다. 따라서, + 정답은 (A) 입니다. + + + 질문: 지역보건법 시행령 상 지방자치단체장이 매년 보건소를 통하여 지역 주민을 대상으로 실시한 지역사회 건강실태조사 결과를 통보해야 하는 대상은 + ? + + A.행정안전부 장관 + + B.질병관리청장 + + C.한국건강증진개발원장 + + D.보건복지부 장관 + + 정답: 차근 차근 생각해봅시다. 정치 사회 관련 정보를 위해 위키피디아를 참조하겠습니다. "지역보건법 시행령" 제22조에는 "지방자치단체장은 매년 + 보건소를 통하여 지역 주민을 대상으로 실시한 지역사회 건강실태조사 결과를 질병관리청장에게 통보하여야 한다."라고 명시되어 있습니다. , 정확한 + 답변은 질병관리청장이 되겠습니다. 그 이유는 질병관리청이 우리나라에서 감염병의 예방 및 관리, 공중보건 업무, 보건의료 연구 등을 담당하고 있기 + 때문입니다. 이러한 역할을 수행하기 위해 지역사회의 건강실태를 파악하는 것이 중요하고, 이를 위해 지방자치단체장이 실시한 조사 결과를 받아야 합니다. + 따라서, 정답은 (B) 입니다. + + + 질문: 도시마케팅(citym arketing)에 대한 설명으로 옳지 않은 것은? + + A.도시를 하나의 상품이라고 인식하는 것으로 도시가 다른 도시들과 시장을 형성하여 경쟁한다고 본다. + + B.도시마케팅의 대상에는 투자기업이나 관광객뿐만 아니라 방문객 및 기존의 주민도 포함된다. + + C.지역 정체성의 확립은 도시마케팅의 등장과 함께 더욱 중요해지고 있다. + + D.내생적 전략의 성격을 갖기 때문에 도시마케팅의 공간적 범위는 국내로 한정된다. + + 정답: 차근 차근 생각해봅시다. 정치 사회 관련 정보를 위해 위키피디아를 참조하겠습니다. 도시마케팅에 대한 개념을 이해하기 위해 각 선택지를 분석해보겠습니다. + (A) 도시를 하나의 상품이라고 인식하는 것으로 도시가 다른 도시들과 시장을 형성하여 경쟁한다고 본다. 이 설명은 도시마케팅의 핵심 개념을 잘 + 반영하고 있습니다. 도시마케팅은 도시를 마치 상품처럼 판매하려는 시도로, 다른 도시들과 경쟁하는 시장을 형성한다는 점에서 맞습니다. (B) 도시마케팅의 + 대상에는 투자기업이나 관광객뿐만 아니라 방문객 및 기존의 주민도 포함된다. 도시마케팅의 목표는 다양한 이해관계자를 대상으로 도시의 이미지를 향상시키고, + 투자, 관광 등을 유도하는 것입니다. 투자기업, 관광객, 방문객, 기존 주민 모두 도시마케팅의 대상이 될 수 있습니다. (C) 지역 정체성의 + 확립은 도시마케팅의 등장과 함께 더욱 중요해지고 있다. 지역 정체성의 확립은 도시마케팅에서 중요한 요소입니다. 도시마케팅은 도시의 독특한 특성과 + 장점을 강조하여 그 도시를 독특하게 만드는데, 이는 지역 정체성의 확립을 통해 이루어집니다. (D) 내생적 전략의 성격을 갖기 때문에 도시마케팅의 + 공간적 범위는 국내로 한정된다. 도시마케팅은 국내뿐만 아니라 국제적인 범위에서도 활용되는 전략입니다. 도시의 이미지를 국제적으로 홍보하고, 외국인 + 투자자나 관광객을 유치하는 것이 도시마케팅의 일부이기 때문입니다. 도시마케팅의 공간적 범위가 국내로만 한정되어 있다는 것은 잘못된 설명입니다. + 따라서, 정답은 (D) 입니다. + + + 질문: {{question}} + + A.{{A}} + + B.{{B}} + + C.{{C}} + + D.{{D}} + + 정답: 차근 차근 생각해봅시다. 정치 사회 관련 정보를 위해 위키피디아를 참조하겠습니다.' +include: _cot_kmmlu_yaml +task: kmmlu_hard_cot_political_science_and_sociology diff --git a/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_psychology.yaml b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_psychology.yaml new file mode 100644 index 0000000000..82d732ce29 --- /dev/null +++ b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_psychology.yaml @@ -0,0 +1,127 @@ +dataset_name: psychology +doc_to_text: '질문: 정서적인 아픔이 너무 커서 그 일이 전혀 기억이 나지 않거나 그 일의 일부 조각들만이 기억되는 현상은? + + A.억압(repression) + + B.간섭(interference) + + C.인출실패(retrieval failure) + + D.쇠퇴(decay) + + 정답: 차근 차근 생각해봅시다. 심리학 관련 정보를 위해 위키피디아를 참조하겠습니다. 정서적인 아픔이 너무 커서 그 일이 전혀 기억이 나지 않거나 + 그 일의 일부 조각들만이 기억되는 현상에 대한 선택지 중에서 가장 적합한 것을 찾아보겠습니다. (A) 억압(repression): 이는 프로이트의 + 이론에서 나온 개념으로, 불쾌한 사건이나 경험을 잊어버리려는 무의식적인 노력을 의미합니다. 이는 주로 트라우마적인 경험을 다루는 방식으로, 사람들이 + 그 경험을 기억하지 못하게 하는 방식입니다. (B) 간섭(interference): 이는 새로운 정보가 기존의 정보를 잊게 하는 현상을 의미합니다. + 예를 들어, 당신이 새로운 전화번호를 배우면서 이전의 전화번호를 잊어버리는 것과 같은 현상입니다. 이는 질문의 상황과는 맞지 않습니다. (C) + 인출실패(retrieval failure): 이는 기억은 존재하지만 그것을 떠올리는 데 실패하는 현상을 의미합니다. 이는 주로 장기기억에 영향을 + 미칩니다. 하지만, 이 현상은 주로 기억의 접근성 문제와 관련이 있으며, 질문의 상황과는 맞지 않습니다. (D) 쇠퇴(decay): 이는 정보가 + 시간이 지나면서 잊혀지는 현상을 의미합니다. 이는 주로 단기기억에 영향을 미칩니다. 하지만, 이 현상은 주로 시간의 흐름과 관련이 있으며, 질문의 + 상황과는 맞지 않습니다. , 위의 해설을 바탕으로 보았을 때, 정서적인 아픔이 너무 커서 그 일이 전혀 기억이 나지 않거나 그 일의 일부 조각들만이 + 기억되는 현상은 ''억압(repression)''이 가장 적합한 것으로 보입니다. 이는 불쾌한 사건이나 경험을 잊어버리려는 무의식적인 노력을 의미하며, + 이 현상은 주로 트라우마적인 경험을 다루는 방식으로, 사람들이 그 경험을 기억하지 못하게 하는 방식입니다. 따라서, 정답은 (A) 입니다. + + + 질문: 반두라(A. Bandura)의 관찰학습에 관한 설명으로 옳지 않은 것은? + + A.모델의 행동에 집중한다면 반드시 모방하게 된다. + + B.모델은 반드시 실제 인물이 아니라도 효과가 있다. + + C.학습이 이루어지기 위해서는 모델의 행동을 기억해야 한다. + + D.행동, 환경, 개인은 서로 양방향적 영향을 미친다. + + 정답: 차근 차근 생각해봅시다. 심리학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 반두라의 관찰학습 이론에 대해 간략히 설명하겠습니다. + 관찰학습 이론은 사람이 다른 사람의 행동을 관찰하고, 그 결과를 보고 학습하는 과정을 설명합니다. 이 이론에 따르면, 학습은 반드시 행동의 결과를 + 경험하거나 보상을 받아야만 이루어지는 것은 아닙니다. 단지 다른 사람의 행동을 관찰하는 것만으로도 학습이 가능하다는 것이죠. 선택지를 하나씩 살펴보겠습니다. + (A) 모델의 행동에 집중한다면 반드시 모방하게 된다. 반두라의 관찰학습 이론에서는 모델의 행동에 집중하면 학습이 이루어진다고 설명하지만, 반드시 + 모방하게 된다는 것은 아닙니다. 관찰자는 모델의 행동을 관찰하고, 그 결과를 평가한 후에 스스로의 행동을 결정합니다. 즉, 모델의 행동을 그대로 + 모방하는 것이 아니라, 그 행동의 결과를 고려하여 자신의 행동을 결정하게 됩니다. (B) 모델은 반드시 실제 인물이 아니라도 효과가 있다. 이 + 설명은 옳습니다. 반두라는 모델이 반드시 실제 인물일 필요는 없다고 말했습니다. 즉, 모델은 실제 사람일 수도 있고, 애니메이션 캐릭터나 동물 + 등 다양한 형태가 될 수 있습니다. (C) 학습이 이루어지기 위해서는 모델의 행동을 기억해야 한다. 이 설명도 옳습니다. 관찰학습 이론에 따르면, + 관찰자는 모델의 행동을 관찰하고, 그 행동을 기억해야 합니다. 그래야 나중에 그 행동을 모방하거나, 그 행동의 결과를 고려하여 자신의 행동을 결정할 + 수 있습니다. (D) 행동, 환경, 개인은 서로 양방향적 영향을 미친다. 이 설명은 반두라의 ''삼위일체 이론''에 해당하는 내용입니다. 이 이론은 + 행동, 개인(인지적 요인 포함), 그리고 환경이 서로 상호작용하여 행동을 결정한다는 것을 주장합니다. 이 세 가지 요인은 동등한 위치에 있으며, + 한 가지 요인이 변하면 다른 요인들도 변하게 된다는 것이 이 이론의 핵심입니다. 따라서, 정답은 (A) 입니다. + + + 질문: 숙달목표지향성과 수행목표지향성에 관한 설명으로 옳지 않은 것은? + + A.수행목표지향성이 높은 학생은 타인과의 비교를 통하여 자신의 성공여부를 판단한다. + + B.숙달목표지향성이 낮은 학생은 도전적 과제를 선호한다. + + C.규준지향평가는 숙달목표지향성 발달에 부정적 영향을 미친다. + + D.숙달목표지향성이 높은 학생은 지능에 대한 고정 신념(entity beliefs)보다 증가 신념(incremental beliefs)이 강하다. + + 정답: 차근 차근 생각해봅시다. 심리학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 숙달목표지향성(mastery goal orientation)과 + 수행목표지향성(performance goal orientation)에 대해 이해해야 합니다. 숙달목표지향성은 개인이 자신의 능력을 개발하고, 실력을 + 향상시키는 것에 초점을 맞추는 경향을 의미합니다. 반면, 수행목표지향성은 개인이 자신의 능력을 타인과 비교하며, 자신의 성공을 측정하는 경향을 + 의미합니다. 선택지를 보면, (A) 수행목표지향성이 높은 학생이 타인과의 비교를 통해 자신의 성공여부를 판단한다는 설명은 맞습니다. 수행목표지향성은 + 타인과의 비교를 통해 자신의 능력을 측정하는 경향이 있기 때문입니다. (B) 숙달목표지향성이 낮은 학생이 도전적 과제를 선호한다는 말은 일반적으로 + 틀린 설명입니다. 왜냐하면 숙달목표지향성이 높은 학생들이 자신의 능력을 개발하고 싶어하는 경향이 있기 때문에 새로운 도전이나 어려운 과제를 선호하는 + 경향이 있습니다. (C) 규준지향평가는 숙달목표지향성 발달에 부정적 영향을 미친다는 설명도 맞습니다. 규준지향평가는 개인의 성과를 표준이나 기준에 + 따라 평가하는 것을 의미하며, 이는 개인의 능력 개발보다는 타인과의 비교에 초점을 맞추게 되므로 숙달목표지향성에는 부정적인 영향을 미칠 수 있습니다. + (D) 숙달목표지향성이 높은 학생은 지능에 대한 고정 신념(entity beliefs)보다 증가 신념(incremental beliefs)이 강하다는 + 설명도 맞습니다. 숙달목표지향성이 높은 학생들은 자신의 능력이 시간과 노력에 따라 발전할 수 있다는 증가 신념을 가지는 경향이 있습니다. 따라서, + 정답은 (B) 입니다. + + + 질문: 수퍼비전에 관한 설명으로 옳지 않은 것은? + + A.수퍼비전 관계는 수퍼비전이 진행되면서 변화한다. + + B.내담자를 보호하는 것은 수퍼비전의 중요한 목적이다. + + C.프로이트(S. Freud)의 수요모임이 수퍼비전의 시발점이라 할 수 있다. + + D.수퍼바이저가 평가할 경우에 생산적인 수퍼비전 관계가 이루어지지 않는다. + + 정답: 차근 차근 생각해봅시다. 심리학 관련 정보를 위해 위키피디아를 참조하겠습니다. 수퍼비전에 관한 설명으로 옳지 않은 것을 고르는 문제입니다. + (A) 수퍼비전 관계는 수퍼비전이 진행되면서 변화한다는 것은 맞는 말입니다. 수퍼비전 초기에는 수퍼바이저와 수퍼바이지 간에 신뢰를 구축하고, 역할을 + 명확하게 정의하는 등의 작업이 필요하며, 이러한 과정을 통해 서로를 이해하고 신뢰하게 되면서 수퍼비전 관계가 발전합니다. (B) 내담자를 보호하는 + 것은 수퍼비전의 중요한 목적 중 하나입니다. 수퍼바이저는 수퍼바이지가 내담자를 적절히 다루지 못할 위험이 있는 경우, 이를 미리 파악하고 적절한 + 조치를 취할 수 있도록 도와주어야 합니다. (C) 프로이트(S. Freud)의 수요모임이 수퍼비전의 시발점이라 할 수 있다는 것은 맞는 말입니다. + 프로이트는 자신의 이론을 발전시키는 과정에서 자신의 제자들과 함께 수요모임을 진행하였고, 이를 통해 제자들에게 자신의 이론을 전달하고, 제자들의 + 임상 경험을 공유하였습니다. (D) 수퍼바이저가 평가할 경우에 생산적인 수퍼비전 관계가 이루어지지 않는다는 것은 옳지 않은 말입니다. 수퍼바이저는 + 수퍼바이지의 행동이나 성과를 평가하고, 이에 대한 피드백을 제공해야 합니다. 평가가 없다면 수퍼바이지의 성장과 발전을 기대하기 어렵습니다. 따라서, + 정답은 (D) 입니다. + + + 질문: 고급 상담자의 상담 특징은? + + A.내담자를 이해하기 보다는 상담자로서 어떻게 반응해야 하는지를 더 생각한다. + + B.자신과 타인에 대한 감정을 알아차리기 힘들어 불안해한다. + + C.내담자에게 의도적으로 주의를 기울이고 중요한 정보를 수집하고 인식할 수 있다. + + D.내담자와 상담자의 상호관계에 대한 역동을 이해하기 힘들어 한다. + + 정답: 차근 차근 생각해봅시다. 심리학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저 각 선택지에 대한 분석을 해보겠습니다. (A) 선택지는 + 상담자가 내담자를 이해하기 보다는 상담자로서 어떻게 반응해야 하는지를 더 생각한다는 내용입니다. 이는 상담자가 내담자를 이해하려는 노력보다는 자신의 + 반응에 더 집중한다는 내용으로, 고급 상담자라면 내담자를 이해하려는 노력이 먼저일 것입니다. (B) 선택지는 상담자가 자신과 타인에 대한 감정을 + 알아차리기 힘들어 불안해한다는 내용입니다. 이는 상담자의 역량을 의심하는 내용으로, 고급 상담자라면 자신과 타인의 감정을 잘 알아차리고 이를 상담에 + 활용할 수 있어야 합니다. (C) 선택지는 상담자가 내담자에게 주의를 기울이고 중요한 정보를 수집하고 인식할 수 있다는 내용입니다. 이는 상담자의 + 기본적인 역량 중 하나로 보입니다. 고급 상담자라면 더욱 더 이러한 역량을 갖추고 있을 것입니다. (D) 선택지는 상담자가 내담자와 상담자의 상호관계에 + 대한 역동을 이해하기 힘들어 한다는 내용입니다. 이는 상담자가 상담 과정에서의 관계 역동을 이해하는 데 어려움을 겪는다는 내용으로, 고급 상담자라면 + 이러한 관계 역동을 잘 이해하고 이를 상담에 활용할 수 있어야 합니다. , 이러한 분석을 통해 고급 상담자의 특징은 (C) 내담자에게 의도적으로 + 주의를 기울이고 중요한 정보를 수집하고 인식할 수 있다는 것으로 보입니다. 이는 상담자의 기본적인 역량을 넘어서서 고급 상담자가 갖추어야 할 능력으로 + 보입니다. 따라서, 정답은 (C) 입니다. + + + 질문: {{question}} + + A.{{A}} + + B.{{B}} + + C.{{C}} + + D.{{D}} + + 정답: 차근 차근 생각해봅시다. 심리학 관련 정보를 위해 위키피디아를 참조하겠습니다.' +include: _cot_kmmlu_yaml +task: kmmlu_hard_cot_psychology diff --git a/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_public_safety.yaml b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_public_safety.yaml new file mode 100644 index 0000000000..86942ef3b4 --- /dev/null +++ b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_public_safety.yaml @@ -0,0 +1,123 @@ +dataset_name: public_safety +doc_to_text: '질문: 산업안전보건법령상 법령 요지의 게시 등과 안전ㆍ보건표지의 부착 등에 관한 설명으로 옳지 않은 것은? + + A.근로자대표는 작업환경측정의 결과를 통지할 것을 사업주에게 요청할 수 있고, 사업주는 이에 성실히 응하여야 한다. + + B.야간에 필요한 안전ㆍ보건표지는 야광물질을 사용하는 등 쉽게 알아볼 수 있도록 제작하여야 한다. + + C.안전ㆍ보건표지의 표시를 명백히 하기 위하여 필요한 경우에는 안전ㆍ보건표지의 주위에 표시사항을 글자로 덧붙여 적을 수 있으며, 이 경우 글자는 + 노란색 바탕에 검은색 한글고딕체로 표기하여야 한다. + + D.안전ㆍ보건표지의 성질상 설치하거나 부착하는 것이 곤란한 경우에는 해당 물체에 직접 도장(塗裝)할 수 있다. + + 정답: 차근 차근 생각해봅시다. 공공 안전 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 각 선택지에 대한 내용을 살펴보겠습니다. (A) + 선택지는 근로자대표가 작업환경 측정 결과를 사업주에게 통지 요청을 할 수 있고, 사업주는 이에 성실히 응해야 한다는 내용입니다. 이 내용은 산업안전보건법 + 제28조의2에 명시되어 있습니다. 이 선택지는 옳습니다. (B) 선택지는 야간에 필요한 안전ㆍ보건표지는 야광물질을 사용하는 등 쉽게 알아볼 + 수 있도록 제작해야 한다는 내용입니다. 이 내용은 산업안전보건법 시행규칙 제77조의2에 따라, 야간에는 야광물질을 사용하여 쉽게 알아볼 수 있도록 + 해야 한다고 명시되어 있습니다. 이 선택지는 옳습니다. (C) 선택지는 안전ㆍ보건표지의 표시를 명백히 하기 위하여 필요한 경우에는 안전ㆍ보건표지의 + 주위에 표시사항을 글자로 덧붙여 적을 수 있으며, 이 경우 글자는 노란색 바탕에 검은색 한글고딕체로 표기해야 한다는 내용입니다. 하지만, 산업안전보건법 + 시행규칙 제77조의2에서는 글자 색상이나 폰트에 대한 구체적인 규정을 하지 않았습니다. 이 선택지는 옳지 않습니다. (D) 선택지는 안전ㆍ보건표지의 + 성질상 설치하거나 부착하는 것이 곤란한 경우에는 해당 물체에 직접 도장(塗裝)할 수 있다는 내용입니다. 이 내용은 산업안전보건법 시행규칙 제77조의2에 + 따라, 안전표지의 성질상 설치하거나 부착하기 어려운 경우에는 해당 물체에 직접 도장할 수 있다고 명시되어 있습니다. 이 선택지는 옳습니다. + 따라서, 정답은 (C) 입니다. + + + 질문: 사업주 갑(甲)의 사업장에 산업재해가 발생하였다. 이 경우 갑(甲)이 기록ㆍ보존해야 할 사항으로 산업안전보건법령상 명시되지 않은 것은? + (다만, 법령에 따른 산업재해조사표 사본을 보존하거나 요양신청서의 사본에 재해 재발방지 계획을 첨부하여 보존한 경우에 해당하지 아니 한다.) + + A.사업장의 개요 + + B.근로자의 인적 사항 및 재산 보유현황 + + C.재해 발생의 일시 및 장소 + + D.재해 발생의 원인 및 과정 + + 정답: 차근 차근 생각해봅시다. 공공 안전 관련 정보를 위해 위키피디아를 참조하겠습니다. 산업안전보건법은 산업재해의 예방 및 산업재해로 인한 근로자의 + 보호를 위해 필요한 사항을 규정하고 있습니다. 사업주가 기록 및 보존해야 하는 사항에 대해 살펴보면, (A) 사업장의 개요: 사업장의 규모, 종류, + 위치 등에 대한 정보는 산업재해의 상황 파악 및 예방에 중요한 요소이므로 이는 기록 및 보존해야 하는 사항에 해당합니다. (B) 근로자의 인적 + 사항 및 재산 보유현황: 이는 산업재해의 발생 원인이나 예방과 직접적인 연관성이 없습니다. 산업재해의 발생과 근로자의 재산 보유현황은 별개의 사항이며, + 이를 기록 및 보존하는 것은 산업안전보건법에서 요구하는 사항이 아닙니다. (C) 재해 발생의 일시 및 장소: 재해 발생 시간과 장소는 재해의 원인 + 분석 및 예방책 수립에 중요한 정보이므로 이 역시 기록 및 보존해야 하는 사항입니다. (D) 재해 발생의 원인 및 과정: 재해의 원인과 과정을 + 기록하는 것은 재해의 원인을 파악하고, 비슷한 상황에서의 재해를 예방하기 위한 중요한 절차입니다. 이 역시 기록 및 보존해야 하는 사항입니다. , + 사업주 갑(甲)이 기록ㆍ보존해야 할 사항으로 산업안전보건법령상 명시되지 않은 것은 ''근로자의 인적 사항 및 재산 보유현황''입니다. 따라서, + 정답은 (B) 입니다. + + + 질문: 산업안전보건법령상 안전ㆍ보건 관리체제에 관한 설명으로 옳지 않은 것은? + + A.사업주는 안전보건관리책임자를 선임하였을 때에는 그 선임 사실 및 법령에 따른 업무의 수행내용을 증명할 수 있는 서류를 갖춰 둬야 한다. + + B.안전보건관리책임자는 안전관리자와 보건관리자를 지휘ㆍ감독한다. + + C.사업주는 안전보건조정자로 하여금 근로자의 건강진단 등 건강관리에 관한 업무를 총괄관리하도록 하여야 한다. + + D.사업주는 관리감독자에게 법령에 따른 업무 수행에 필요한 권한을 부여하고 시설ㆍ장비ㆍ예산, 그 밖의 업무수행에 필요한 지원을 하여야 한다. + + 정답: 차근 차근 생각해봅시다. 공공 안전 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저 각 선택지를 하나씩 분석해보겠습니다. (A) 선택지는 + 사업주가 안전보건관리책임자를 선임하였을 때, 그 선임 사실 및 법령에 따른 업무의 수행내용을 증명할 수 있는 서류를 갖추어야 한다고 되어있습니다. + 이 내용은 산업안전보건법에 따라 사업주가 안전보건관리체제를 운영하는데 필요한 요건 중 하나입니다. 이 선택지는 옳습니다. (B) 선택지는 안전보건관리책임자가 + 안전관리자와 보건관리자를 지휘ㆍ감독한다고 되어있습니다. 이 역시 산업안전보건법에 따라 안전보건관리책임자의 역할 중 하나입니다. 이 선택지는 + 옳습니다. (C) 선택지는 사업주가 안전보건조정자로 하여금 근로자의 건강진단 등 건강관리에 관한 업무를 총괄관리하도록 하여야 한다고 되어있습니다. + 하지만, 산업안전보건법에 따르면, 안전보건조정자의 역할은 안전보건관리체제의 운영을 총괄하고, 사업주와 안전보건관리책임자 사이의 조정 역할을 수행하는 + 것이며, 근로자의 건강진단 등 건강관리에 관한 업무를 총괄하는 것은 보건관리자의 역할입니다. 이 선택지는 옳지 않습니다. (D) 선택지는 사업주가 + 관리감독자에게 법령에 따른 업무 수행에 필요한 권한을 부여하고 시설ㆍ장비ㆍ예산, 그 밖의 업무수행에 필요한 지원을 하여야 한다고 되어있습니다. + 이 역시 산업안전보건법에 따라 사업주의 의무 중 하나입니다. 이 선택지는 옳습니다. 따라서, 정답은 (C) 입니다. + + + 질문: 산업안전보건법령상 안전보건관리규정에 관한 설명으로 옳지 않은 것은? + + A.소프트웨어 개발 및 공급업에서 상시 근로자 100명을 사용하는 사업장은 안전보건관리규정을 작성하여야 한다. + + B.안전보건관리규정의 내용에는 작업지휘자 배치 등에 관한 사항이 포함되어야 한다. + + C.안전보건관리규정은 해당 사업장에 적용되는 단체협약 및 취업규칙에 반할 수 없다. + + D.안전보건관리규정에 관하여는 산업안전보건법에서 규정한 것을 제외하고는 그 성질에 반하지 아니하는 범위에서 「근로기준법」의 취업규칙에 관한 규정을 + 준용한다. + + 정답: 차근 차근 생각해봅시다. 공공 안전 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 각 선택지에 대해 검토해보겠습니다. (A) 선택지는 + 산업안전보건법 제25조의1에서 "사업주는 사업장의 안전 및 보건을 유지하기 위하여 다음 각 호의 사항이 포함된 안전보건관리규정을 작성하여야 한다."라고 + 규정하고 있습니다. 소프트웨어 개발 및 공급업의 경우 상시 근로자가 300명을 초과할때 안전보건관리규정을 작성해야 합니다. (B) 선택지는 산업안전보건법 + 제26조의2에서 "안전보건관리규정의 내용에는 작업지휘자 배치 등에 관한 사항이 포함되어야 한다."라고 명시하고 있습니다. 이 선택지는 정확한 + 내용입니다. (C) 선택지는 안전보건관리규정이 단체협약 및 취업규칙에 반할 수 없다는 내용입니다. 이는 사업장의 안전보건을 위한 기본적인 원칙이므로 + 이 선택지는 정확한 내용입니다. (D) 선택지는 안전보건관리규정에 관하여는 산업안전보건법에서 규정한 것을 제외하고는 그 성질에 반하지 아니하는 + 범위에서 「근로기준법」의 취업규칙에 관한 규정을 준용한다는 내용입니다. 이 역시 안전보건관리규정의 성질을 반영한 내용이므로 이 선택지는 정확한 + 내용입니다. , 위 내용을 종합하면 (A) 선택지가 산업안전보건법령상 안전보건관리규정에 관한 설명으로 옳지 않은 것입니다. 이는 산업안전보건법에서 + 규정한 대로 특정 업종과 근로자 수에 따라 안전보건관리규정을 작성해야 하는데, 이를 정확히 반영하지 않았기 때문입니다. 따라서, 정답은 (A) + 입니다. + + + 질문: 산업안전보건법령상 산업안전보건위원회의 심의ㆍ의결을 거쳐야 하는 사항에 해당하지 않는 것은? + + A.유해하거나 위험한 기계ㆍ기구와 그 밖의 설비를 도입한 경우 안전ㆍ보건조치에 관한 사항 + + B.안전ㆍ보건과 관련된 안전장치 구입 시의 적격품 여부 확인에 관한 사항 + + C.산업재해에 관한 통계의 기록 및 유지에 관한 사항 + + D.산업재해 예방계획의 수립에 관한 사항 + + 정답: 차근 차근 생각해봅시다. 공공 안전 관련 정보를 위해 위키피디아를 참조하겠습니다. 산업안전보건법령에 따르면, 산업안전보건위원회의 심의ᆞ의결을 + 거쳐야 하는 사항은 다음과 같습니다. 1. 안전 및 보건에 관한 중요 사항 2. 유해하거나 위험한 기계ᆞ기구와 그 밖의 설비를 도입한 경우 안전ᆞ보건조치에 + 관한 사항 3. 안전ᆞ보건과 관련된 안전장치 및 보호구 구입 시의 적격품 여부 확인에 관한 사항 4. 산업재해에 관한 통계의 기록 및 유지에 관한 + 사항 5. 안전ᆞ보건 관련 인력ᆞ시설 및 장비 등의 현황 파악과 관리에 관한 사항 6. 산업재해 예방 및 재발 방지대책 수립에 관한 사항 7. + 안전ᆞ보건에 관한 규정의 제정 또는 개정에 관한 사항 8. 작업환경의 측정 등 작업환경의 점검 및 개선에 관한 사항 9. 근로자의 건강진단 등 + 건강관리에 관한 사항 10. 중대재해의 원인조사 및 재발 방지대책 수립에 관한 사항 11. 산업안전ᆞ보건과 관련된 그 밖의 사항 , 선택지 중에서 + 산업안전보건위원회의 심의ᆞ의결을 거치지 않아도 되는 사항은 (B) 안전ᆞ보건과 관련된 안전장치 구입 시의 적격품 여부 확인에 관한 사항입니다. + 따라서, 정답은 (B) 입니다. + + + 질문: {{question}} + + A.{{A}} + + B.{{B}} + + C.{{C}} + + D.{{D}} + + 정답: 차근 차근 생각해봅시다. 공공 안전 관련 정보를 위해 위키피디아를 참조하겠습니다.' +include: _cot_kmmlu_yaml +task: kmmlu_hard_cot_public_safety diff --git a/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_railway_and_automotive_engineering.yaml b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_railway_and_automotive_engineering.yaml new file mode 100644 index 0000000000..ec538789af --- /dev/null +++ b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_railway_and_automotive_engineering.yaml @@ -0,0 +1,118 @@ +dataset_name: railway_and_automotive_engineering +doc_to_text: '질문: 경유를 사용하는 자동차에서 배출되는 오염물질과 가장 거리가 먼 것은? + + A.매연 + + B.알데히드 + + C.입자상물질 + + D.질소산화물 + + 정답: 차근 차근 생각해봅시다. 철도 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 경유를 사용하는 자동차에서 배출되는 오염물질을 + 알아보겠습니다. 경유를 사용하는 자동차는 주로 디젤 엔진을 사용하는데, 이 엔진은 고온 고압의 환경에서 연료를 연소시키기 때문에 다양한 오염물질을 + 배출합니다. 대표적인 오염물질로는 매연, 입자상물질, 질소산화물 등이 있습니다. (A) 매연은 연료가 불완전하게 연소하면서 발생하는 검은 연기로, + 대기오염을 유발하는 대표적인 물질 중 하나입니다. (C) 입자상물질은 경유가 연소하면서 발생하는 미세한 입자로, 대기 중에 떠다니며 호흡기 질환 + 등을 유발할 수 있습니다. (D) 질소산화물은 고온 고압의 환경에서 질소가 산소와 결합하여 발생하는 물질로, 대기 중에서 화학 반응을 일으켜 미세먼지 + 등의 2차 오염물질을 생성할 수 있습니다. 반면, (B) 알데히드는 주로 휘발성 유기화합물(VOC)이 산화하면서 발생하는 물질로, 경유를 사용하는 + 자동차에서는 배출되지 않는 물질입니다. 따라서, 정답은 (B) 입니다. + + + 질문: 믹서 방식의 LPG엔진과 비교한 LPI엔진의 장점으로 틀린 것은? + + A.연료의 보관성 향상 + + B.역화 발생 문제 개선 + + C.겨울철 냉간 시동성 향상 + + D.정밀한 공연비 제어로 연비 향상 + + 정답: 차근 차근 생각해봅시다. 철도 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 믹서 방식의 LPG엔진과 비교한 LPI엔진의 장점을 살펴보면, + (A) 연료의 보관성 향상: LPG는 액화된 상태에서 보관되며, 믹서 방식과 LPI 방식 모두 연료의 보관성에는 큰 차이가 없습니다. LPI는 + 액체 연료를 직접 분사하는 방식이므로, 연료의 보관성이 더욱 향상될 수 있습니다. (B) 역화 발생 문제 개선: LPG엔진에서는 역화라는 현상이 + 발생할 수 있는데, 이는 연료가 기화되지 않고 액체 상태로 존재하면서 발생하는 문제입니다. LPI엔진은 연료를 직접 분사하는 방식을 사용하므로, + 이런 역화 현상을 개선할 수 있습니다. (C) 겨울철 냉간 시동성 향상: LPG는 냉간에서 기화하기 어려운 성질이 있어, 겨울철 냉간 시동성이 + 떨어질 수 있습니다. 그러나 LPI엔진은 연료를 직접 분사하는 방식을 사용하므로, 이런 문제를 해결하고 냉간 시동성을 향상시킬 수 있습니다. (D) + 정밀한 공연비 제어로 연비 향상: LPI엔진은 연료를 직접 분사하는 방식을 사용하므로, 연료의 분사와 혼합을 더욱 정밀하게 제어할 수 있습니다. + 이로 인해 연비를 향상시킬 수 있습니다. , 모든 선택지가 LPI엔진의 장점을 정확하게 나타내고 있습니다. 그러나 문제에서 요구하는 것은 잘못된 + 장점을 찾는 것이므로, 이를 고려하면 선택지 중에서 가장 덜 중요한 장점을 찾아야 합니다. 이 경우, (A) 연료의 보관성 향상이 LPG엔진과 + LPI엔진 간에 가장 큰 차이를 만들지 못하는 요소일 수 있습니다. 왜냐하면 LPG는 원래 액화되어 보관되는 연료이기 때문에, 믹서 방식과 LPI + 방식 사이에 연료의 보관성에 큰 차이를 만들지는 못합니다. 따라서, 정답은 (A) 입니다. + + + 질문: 실린더 지름과 행정이 70×70㎜이고, 회전속도가 3000rpm인 기관의 밸브 지름은 약 몇 ㎜ 인가? (단, 밸브를 통과하는 가스의 속도는 + 50m/sec이다.) + + A.12.2 + + B.26.2 + + C.32.5 + + D.46.5 + + 정답: 차근 차근 생각해봅시다. 철도 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 밸브의 지름을 찾기 위해서는 밸브를 통과하는 가스의 + 체적 흐름률을 알아야 합니다. 체적 흐름률은 실린더의 퇴적 체적과 엔진의 회전 속도에 의해 결정됩니다. 실린더의 퇴적 체적은 π/4 * 실린더 + 지름^2 * 행정입니다. 문제에서 주어진 실린더 지름과 행정은 각각 70mm입니다. , 실린더의 퇴적 체적은 π/4 * 70mm^2 * 70mm + = 269,391 mm^3 또는 0.269391 m^3입니다. 엔진의 회전속도는 3000rpm입니다. 이는 분당 3000회전을 의미하므로, 초당 + 회전수는 3000/60 = 50회전입니다. , 밸브를 통과하는 가스의 체적 흐름률은 실린더의 퇴적 체적 * 엔진의 회전속도 = 0.269391 + m^3/회전 * 50회전/초 = 13.46955 m^3/sec입니다. 밸브를 통과하는 가스의 속도는 50m/sec로 주어졌습니다. , 밸브의 + 지름은 체적 흐름률 / (π/4 * 가스의 속도)의 제곱근으로 계산할 수 있습니다. 이를 계산하면, 밸브의 지름 = (13.46955 m^3/sec + / (π/4 * 50m/sec))^0.5 = 0.262 m 또는 262 mm입니다. 따라서, 정답은 (B) 입니다. + + + 질문: 행정 체적이 800cc, 크랭크축 회전수 1000rpm, 체적효율 80%, 2행정 사이클 기관의 흡기중량 유량은 몇 g/s인가? (단, + 흡기의 비중량은 1.25kg/m3이다.) + + A.11.67 + + B.13.33 + + C.16.67 + + D.20.33 + + 정답: 차근 차근 생각해봅시다. 철도 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 이 문제는 기관의 흡기 중량 유량을 계산하는 것입니다. + 흡기 중량 유량은 기관이 흡입하는 공기의 양을 의미합니다. 문제에서 주어진 정보를 바탕으로 계산해보겠습니다. 행정 체적(V)은 800cc, 크랭크축 + 회전수(N)는 1000rpm, 체적효율(ηv)는 80%, 2행정 사이클 기관이므로, 이 모든 정보를 토대로 흡기중량 유량(Qm)을 계산할 수 있습니다. + 그리고 흡기의 비중량(ρ)은 1.25kg/m3입니다. 흡기 중량 유량은 다음과 같이 계산할 수 있습니다. Qm = (V * N * ηv * ρ) + / (2 * 60) 먼저, 행정 체적(V)은 cc에서 m3로 변환해야 합니다. 1m3 = 10^6 cc이므로, V = 800cc = 0.0008 + m3입니다. 그 다음, 체적효율(ηv)는 퍼센트에서 소수로 변환해야 합니다. ηv = 80% = 0.8입니다. 이제 모든 값을 대입하여 계산해보겠습니다. + Qm = (0.0008 m3 * 1000 rpm * 0.8 * 1.25 kg/m3) / (2 * 60) = 0.01333 kg/s 이 값을 g/s로 + 변환하려면 1kg = 1000g을 사용하면 됩니다. , Qm = 0.01333 kg/s = 13.33 g/s입니다. 따라서, 정답은 (B) 입니다. + + + 질문: 유체 커플링식 냉각 팬에 대한 설명으로 틀린 것은? + + A.라디에이터 앞쪽에 설치 + + B.물 펌프축과 일체로 회전 + + C.라디에이터 통풍을 도와줌 + + D.기관의 과냉 및 소음방지를 위해 일정 회전수이상 시 슬립 발생 + + 정답: 차근 차근 생각해봅시다. 철도 공학 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 유체 커플링식 냉각 팬이 무엇인지부터 알아야 합니다. + 유체 커플링식 냉각 팬은 유체 커플링을 이용하여 물 펌프와 일체로 회전하는 냉각 팬입니다. 유체 커플링은 기관의 회전수에 따라 자동으로 회전수를 + 조절하여 기관의 과냉 및 소음 방지를 위해 일정 회전수 이상 시 슬립이 발생하도록 합니다. 이제 선택지를 하나씩 살펴보겠습니다. (A) 라디에이터 + 앞쪽에 설치: 유체 커플링식 냉각 팬은 팬과 물펌프 사이에 설치됩니다. 이는 틀린 설명입니다. (B) 물 펌프축과 일체로 회전: 유체 커플링식 + 냉각 팬은 물 펌프축과 일체로 회전합니다. 이는 유체 커플링을 이용하여 물 펌프와 함께 회전하기 때문입니다. (C) 라디에이터 통풍을 도와줌: + 유체 커플링식 냉각 팬은 라디에이터의 통풍을 도와줍니다. 이는 엔진의 열을 효과적으로 식혀주기 위한 것입니다. (D) 기관의 과냉 및 소음방지를 + 위해 일정 회전수 이상 시 슬립 발생: 유체 커플링식 냉각 팬은 기관의 과냉 및 소음 방지를 위해 일정 회전수 이상 시 슬립이 발생합니다. 이는 + 유체 커플링의 특성 때문입니다. 따라서, 정답은 (A) 입니다. + + + 질문: {{question}} + + A.{{A}} + + B.{{B}} + + C.{{C}} + + D.{{D}} + + 정답: 차근 차근 생각해봅시다. 철도 공학 관련 정보를 위해 위키피디아를 참조하겠습니다.' +include: _cot_kmmlu_yaml +task: kmmlu_hard_cot_railway_and_automotive_engineering diff --git a/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_real_estate.yaml b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_real_estate.yaml new file mode 100644 index 0000000000..138da1e5d1 --- /dev/null +++ b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_real_estate.yaml @@ -0,0 +1,121 @@ +dataset_name: real_estate +doc_to_text: '질문: 공인중개사법령상 법인인 개업공인중개사의 중개사무소등록증 원본 또는 사본이 첨부되어야 하는 경우에 해당하지 않는 것은? + + A.중개사무소 이전신고 + + B.중개사무소 폐업신고 + + C.분사무소 설치신고 + + D.분사무소 폐업신고 + + 정답: 차근 차근 생각해봅시다. 부동산 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 공인중개사법에 따르면, 법인인 개업공인중개사가 중개사무소를 + 등록하려면 등록증의 원본 또는 사본을 첨부해야 합니다. 이 규정은 중개사무소의 설치, 이전, 폐업 등의 경우에 모두 적용됩니다. (A) 중개사무소 + 이전신고의 경우, 중개사무소의 위치가 변경되는 것이므로, 중개사무소등록증의 원본 또는 사본을 첨부해야 합니다. (B) 중개사무소 폐업신고의 경우에도, + 중개사무소의 운영을 중단하는 것이므로, 중개사무소등록증의 원본 또는 사본을 첨부해야 합니다. (C) 분사무소 설치신고의 경우에는 중개사무소등록증을 + 필요로 하지 않습니다. 중개사무소등록증은 분사무소의 휴업과 폐업에만 요구됩니다. (D) 분사무소 폐업신고의 경우, 분사무소의 운영을 중단하는 것이므로, + 중개사무소등록증의 원본 또는 사본을 첨부해야 합니다. 따라서, 정답은 (C) 입니다. + + + 질문: 공인중개사법령상 중개대상물의 표시ㆍ광고 및 모니터링에 관한 설명으로 틀린 것은? + + A.개업공인중개사는 의뢰받은 중개대상물에 대하여 표시ㆍ광고를 하려면 개업공인중개사, 소속공인중개사 및 중개보조원에 관한 사항을 명시해야 한다. + + B.개업공인중개사는 중개대상물이 존재하지 않아서 실제로 거래를 할 수 없는 중개대상물에 대한 광고와 같은 부당한 표시ㆍ광고를 해서는 안 된다. + + C.개업공인중개사는 중개대상물의 가격 등 내용을 과장되게 하는 부당한 표시ㆍ광고를 해서는 안 된다. + + D.국토교통부장관은 인터넷을 이용한 중개대상물에 대한 표시ㆍ광고의 규정준수 여부에 관하여 기본 모니터링과 수시 모니터링을 할 수 있다. + + 정답: 차근 차근 생각해봅시다. 부동산 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 공인중개사법령에 따라 중개대상물의 표시·광고 및 모니터링에 + 관한 규정을 살펴보겠습니다. (A) 개업공인중개사가 의뢰받은 중개대상물에 대해 표시·광고를 할 때, 소속공인중개사나 중개보조원에 관한 사항을 명시해야 + 하는 것은 의무가 아닙니다. (B) 개업공인중개사는 중개대상물이 존재하지 않아서 실제로 거래를 할 수 없는 중개대상물에 대한 광고와 같은 부당한 + 표시·광고를 해서는 안 됩니다. 이는 소비자의 피해를 방지하고, 중개시장의 공정성을 유지하기 위한 것입니다. (C) 개업공인중개사는 중개대상물의 + 가격 등 내용을 과장되게 하는 부당한 표시·광고를 해서는 안 됩니다. 이 역시 소비자의 피해를 방지하고, 중개시장의 공정성을 유지하기 위한 것입니다. + (D) 국토교통부장관은 인터넷을 이용한 중개대상물에 대한 표시·광고의 규정 준수 여부에 관하여 기본 모니터링과 수시 모니터링을 할 수 있습니다. + 이는 중개대상물에 대한 표시·광고가 규정에 맞게 이루어지고 있는지 확인하고, 부당한 표시·광고를 방지하기 위한 것입니다. 따라서, 정답은 (A) + 입니다. + + + 질문: 공인중개사법령상 중개사무소 명청에 관한 설명으로 옳은 것은? + + A.공인중개사인 개업공인중개사는 그 사무소의 명칭에 "공인중개사사무소" 또는 "부동산중개"라는 문자를 사용하여야 한다. + + B.공인중개사가 중개사무소의 개설등록을 하지 않은 경우, 그 사무소에 "공인중개사사부소"라는 명칭을 사용할 수 없지만, "부동산중개"라는 명칭은 + 사용할 수 있다. + + C.공인중개사인 개업공인중개사가 관련 법령에 따른 옥외광고물을 설치하는 경우, 중개사무소등록증에 표기된 개업공인중개사의 성명을 표기할 필요는 없다. + + D.중개사무소 개설등록을 하지 않은 공인중개사가 "부동산중개"라는 명칭을 사용한 경우, 국토교통부장관은 그 명칭이 사용된 간판 등의 철거를 명할 + 수 있다. + + 정답: 차근 차근 생각해봅시다. 부동산 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 공인중개사법령상 중개사무소 명칭에 관한 설명으로 옳은 + 것을 찾아야 합니다. (A) 선택지를 보면, 공인중개사인 개업공인중개사는 그 사무소의 명칭에 "공인중개사사무소" 또는 "부동산중개"라는 문자를 + 사용하여야 한다고 명시되어 있습니다. 이는 공인중개사법 제 18조 제1항에 규정되어 있는 내용으로 옳은 설명입니다. (B) 선택지를 보면, 공인중개사가 + 중개사무소의 개설등록을 하지 않은 경우, 그 사무소에 "공인중개사사무소"라는 명칭을 사용할 수 없지만, "부동산중개"라는 명칭은 사용할 수 있다고 + 되어 있습니다. 이는 옳지 않은 설명입니다. 공인중개사법 제 18조 제2항에 따르면, 중개사무소의 개설등록을 하지 않은 자는 "공인중개사사무소", + "부동산중개" 또는 이와 유사한 명칭을 사용하여서는 아니된다고 규정되어 있습니다. (C) 선택지를 보면, 공인중개사인 개업공인중개사가 관련 법령에 + 따른 옥외광고물을 설치하는 경우, 중개사무소등록증에 표기된 개업공인중개사의 성명을 표기할 필요는 없다고 되어 있습니다. 이는 옳지 않은 설명입니다. + 공인중개사법 시행령 제 17조의 2에 따르면, 개업공인중개사가 법 제18조제3항에 따라 옥외광고물을 설치하는 경우 중개사무소등록증에 표기된 개업공인중개사의 + 성명을 표기하여야 합니다. (D) 선택지를 보면, 중개사무소 개설등록을 하지 않은 공인중개사가 "부동산중개"라는 명칭을 사용한 경우, 국토교통부장관은 + 그 명칭이 사용된 간판 등의 철거를 명할 수 있다고 되어 있습니다. 이는 옳지 않은 설명입니다. 공인중개사가 아닌 자는 "공인중개사사무소", "부동산중개" + 또는 이와 유사한 명칭을 사용하여서는 아니되지만, 이를 위반한 경우 국토교통부장관이 아닌 해당 등록관청이 철거를 명하게 됩니다. 따라서, 정답은 + (A) 입니다. + + + 질문: 공인중개사법령상 공인중개사 자격시험 등에 관한 설명으로 옳은 것은? + + A.국토교통부장관이 직접 시험을 시행하려는 경우에는 미리 공인중개사 정책심의위원회의 의결을 거치지 않아도 된다. + + B.공인중개사자격증의 재교부를 신청하는 자는 재교부신청서를 국토교통부장관에게 제출해야 한다. + + C.국토교통부장관은 공인중개사시험의 합격자에게 공인중개사자격증을 교부해야 한다. + + D.시험시행기관장은 시험에서 부정한 행위를 한 응시자에 대해서는 그 시험을 무효로 하고, 그 처분이 있은 날부터 5년간 시험응시자격을 정지한다. + + 정답: 차근 차근 생각해봅시다. 부동산 관련 정보를 위해 위키피디아를 참조하겠습니다. 공인중개사법령상 공인중개사 자격시험 등에 관한 설명으로 옳은 + 것을 고르는 문제입니다. 선택지를 하나씩 살펴보며 정답을 찾아보겠습니다. (A) 국토교통부장관이 직접 시험을 시행하려는 경우에는 미리 공인중개사 + 정책심의위원회의 의결을 거치지 않아도 된다. - 공인중개사 정책심의위원회는 공인중개사의 시험 등에 관한 사항을 심의하는 기관으로, 국토교통부장관이 + 시험을 시행할 때는 이 위원회의 의결을 거쳐야 합니다. 이 선택지는 옳지 않습니다. (B) 공인중개사자격증의 재교부를 신청하는 자는 재교부신청서를 + 국토교통부장관에게 제출해야 한다. - 공인중개사 자격증의 재교부를 신청하는 경우, 재교부신청서를 작성하여 시·도지사에게 제출해야 합니다. 이 + 선택지도 옳지 않습니다. (C) 국토교통부장관은 공인중개사시험의 합격자에게 공인중개사자격증을 교부해야 한다. - 공인중개사 자격시험에 합격한 사람은 + 시·도지사로부터 자격증을 교부받아야 합니다. 이 선택지도 옳지 않습니다. (D) 시험시행기관장은 시험에서 부정한 행위를 한 응시자에 대해서는 + 그 시험을 무효로 하고, 그 처분이 있은 날부터 5년간 시험응시자격을 정지한다. - 공인중개사법령에 따르면 시험시행기관장은 시험에서 부정한 행위를 + 한 응시자에 대해 그 시험을 무효로 하고, 처분일로부터 5년간 응시자격을 정지할 수 있습니다. 이 선택지는 옳은 설명입니다. 따라서, 정답은 + (D) 입니다. + + + 질문: 공인중개사법령상 중개사무소의 설치 등에 관한 설명으로 틀린 것은? + + A.개업공인중개사는 그 등록관천의 관할구역안에 1개의 중개사무소만을 둘수 있다. + + B.개업공인중개사는 천막 그 밖에 이동이 용이한 임시 중개시설물을 설치하여서는 아니된다. + + C.법인이 아닌 개업공인중개사는 분사무소를 둘수 없다. + + D.개업공인중개사는 등록관청의 관할구역 외의 지역에 있는 중개대상물을 중개할 수 없다. + + 정답: 차근 차근 생각해봅시다. 부동산 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 각 선택지에 대한 내용을 확인하겠습니다. (A) 개업공인중개사는 + 그 등록관청의 관할구역안에 1개의 중개사무소만을 둘 수 있다. 이 내용은 공인중개사법에 따라 개업공인중개사가 등록한 관할구역 안에 1개의 중개사무소를 + 설치해야 한다는 것을 의미합니다. 이는 공인중개사법에 따라 올바른 내용입니다. (B) 개업공인중개사는 천막 그 밖에 이동이 용이한 임시 중개시설물을 + 설치하여서는 아니된다. 이 내용은 공인중개사법에 따라 개업공인중개사가 천막이나 이동이 용이한 임시 중개시설물을 설치해서는 안된다는 것을 의미합니다. + 이는 공인중개사법에 따라 올바른 내용입니다. (C) 법인이 아닌 개업공인중개사는 분사무소를 둘 수 없다. 이 내용은 공인중개사법에 따라 법인이 + 아닌 개업공인중개사는 분사무소를 설치할 수 없다는 것을 의미합니다. 이는 공인중개사법에 따라 올바른 내용입니다. (D) 개업공인중개사는 등록관청의 + 관할구역 외의 지역에 있는 중개대상물을 중개할 수 없다. 이 내용은 공인중개사법에 따라 개업공인중개사가 등록한 관할구역 외의 지역에 있는 중개대상물을 + 중개할 수 없다는 것을 의미합니다. 하지만, 공인중개사법에 따르면 개업공인중개사는 등록한 관할구역 외의 지역에 있는 중개대상물을 중개할 수 있습니다. 이 + 내용은 잘못된 내용입니다. 따라서, 정답은 (D) 입니다. + + + 질문: {{question}} + + A.{{A}} + + B.{{B}} + + C.{{C}} + + D.{{D}} + + 정답: 차근 차근 생각해봅시다. 부동산 관련 정보를 위해 위키피디아를 참조하겠습니다.' +include: _cot_kmmlu_yaml +task: kmmlu_hard_cot_real_estate diff --git a/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_refrigerating_machinery.yaml b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_refrigerating_machinery.yaml new file mode 100644 index 0000000000..eea4a218f2 --- /dev/null +++ b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_refrigerating_machinery.yaml @@ -0,0 +1,119 @@ +dataset_name: refrigerating_machinery +doc_to_text: '질문: 보일러 입구의 압력이 9800 kN/m2 이고, 응축기의 압력이 4900 N/m2 일 때 펌프 일은 약 몇 kJ/kg + 인가? (단, 물의 비체적은 0.001 m3/kg 이다.) + + A.-9.79 + + B.-15.17 + + C.-87.25 + + D.-180.52 + + 정답: 차근 차근 생각해봅시다. 냉동 기계 관련 정보를 위해 위키피디아를 참조하겠습니다. 펌프 일은 펌프에 의해 수행되는 일을 나타내며, 보일러와 + 응축기 간의 압력 차이에 의해 발생합니다. 펌프 일은 보통 펌프 입구와 출구 사이의 압력 차이와 물의 비체적을 곱하여 계산됩니다. 펌프 일(Wp)은 + 다음과 같은 공식으로 계산할 수 있습니다. Wp = v * (P2 - P1) 여기서 v는 물의 비체적(0.001 m3/kg), P2는 보일러의 + 압력(9800 kN/m2 = 9800000 N/m2), P1은 응축기의 압력(4900 N/m2)입니다. , 펌프 일은 다음과 같이 계산됩니다. + Wp = 0.001 m3/kg * (9800000 N/m2 - 4900 N/m2) = 9795100 J/kg = 9795.1 kJ/kg 하지만, + 이 값은 양수인데, 선택지 모두 음수입니다. 이는 펌프 일을 구할 때 압력 단위를 맞추지 않아서 발생한 문제입니다. 펌프 입구와 출구의 압력 단위를 + 같게 맞추어 계산해야 합니다. , 보일러의 압력을 N/m2 단위로 변환하면 9800 kN/m2 = 9800000 N/m2입니다. 그러므로, 펌프 + 일은 다음과 같이 다시 계산됩니다. Wp = 0.001 m3/kg * (9800000 N/m2 - 4900 N/m2) = 9795100 J/kg + = 9.7951 kJ/kg 그러나 이 값도 선택지에 없습니다. 문제가 있는 것 같습니다. 다시 확인해보니, 펌프 일의 부호가 음수인 이유를 찾았습니다. + 펌프 일은 시스템에 에너지를 공급하는 것이므로, 일반적으로 음수로 표시됩니다. , 계산한 펌프 일에 음수 부호를 붙여주면 됩니다. 그래서, 펌프 + 일은 -9.7951 kJ/kg로 계산되며, 이는 선택지 A에 가장 가까운 값입니다. 따라서, 정답은 (A) 입니다. + + + 질문: 피스턴-실린더 장치 내에 있는 공기가 0.3m3에서 0.1m3으로 압축되었다. 압축되는 동안 압력과 체적 사이에 P=aV-2의 관계가 성립하며, + 계수 a=6 kPaㆍm2 이다. 이 과정 동안 공기가 한 일은 얼마인가? + + A.-53.3 kJ + + B.-1.1 kJ + + C.253 kJ + + D.-40 kJ + + 정답: 차근 차근 생각해봅시다. 냉동 기계 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 이 문제는 공기가 수행하는 일을 계산하는 문제입니다. + 주어진 정보를 바탕으로 공기가 수행하는 일을 계산하는 공식을 이용하면 됩니다. 피스턴-실린더 장치에서의 공기가 수행하는 일은 보통 압력과 체적의 + 변화에 따라 결정됩니다. 이 문제에서는 압력과 체적 사이에 P=aV-2의 관계가 성립한다고 주어졌습니다. 이 관계식은 압력이 체적의 제곱에 반비례하며, + 계수 a는 6 kPaㆍm2로 주어졌습니다. 일반적으로 가스의 압축에 의해 수행되는 일은 압력과 체적의 변화에 따른 적분으로 계산할 수 있습니다. + 즉, 공기가 수행하는 일 W는 다음과 같이 표현됩니다: W = ∫PdV 여기서 P는 압력, V는 체적, dV는 체적의 미소 변화량입니다. 이 경우, + 압력 P는 체적 V에 대한 함수로 주어졌으므로, 이를 대입하여 적분을 수행하면 됩니다. , 공기가 수행하는 일 W는 다음과 같이 계산됩니다: + W = ∫PdV = ∫(aV-2)dV = a∫V-2dV = a[V-1/-1] (체적이 0.3m3에서 0.1m3으로 변할 때) = -6[(0.1)^-1 + - (0.3)^-1] kJ = -6[10 - 3.33] kJ = -6*6.67 kJ = -40 kJ , 공기가 수행하는 일은 -40 kJ입니다. + 이는 압축 과정에서 공기가 일을 하는 것이 아니라, 일을 받는 것을 의미합니다. 즉, 외부에서 공기를 압축하기 위해 40 kJ의 에너지를 공급받았다는 + 것을 의미합니다. 따라서, 정답은 (D) 입니다. + + + 질문: 어떤 유체의 밀도가 741 kg/m3 이다. 이 유체의 비체적은 약 몇 m3kg인가? + + A.0.78×10-3 + + B.1.35×10-3 + + C.2.35×10-3 + + D.2.98×10-3 + + 정답: 차근 차근 생각해봅시다. 냉동 기계 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 비체적이란 무엇인지 알아야 합니다. 비체적은 어떤 + 물질의 질량 당 부피를 나타내는 물리량으로, 그 단위는 m3/kg입니다. 이는 밀도의 역수와 같습니다. 이 문제에서 주어진 유체의 밀도는 741 + kg/m3입니다. 비체적을 구하려면 이 밀도의 역수를 취하면 됩니다. 즉, 1/741 m3/kg를 계산하면 됩니다. 1/741을 계산하면 약 0.00135 + m3/kg가 나옵니다. 이를 지수 표기법으로 표현하면 1.35×10-3 m3/kg입니다. 따라서, 정답은 (B) 입니다. + + + 질문: 1 kg의 기체가 압력 50 kPa, 체적 2.5m3 상태에서 압력 1.2 MPa, 체적 0.2m3의 상태로 변하였다. 엔탈피의 변화량은 + 약 몇 kJ 인가? (단, 내부에너지의 증가 U2-U1=0이다.) + + A.306 + + B.206 + + C.155 + + D.115 + + 정답: 차근 차근 생각해봅시다. 냉동 기계 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 이 문제는 열역학의 첫 번째 법칙에 관한 문제입니다. + 열역학의 첫 번째 법칙은 에너지 보존의 법칙을 표현한 것으로, 고립 시스템의 총 에너지는 일정하다는 내용입니다. 문제에서 주어진 내부에너지의 증가 + U2-U1=0이라는 정보는 이 시스템에서 내부에너지의 변화가 없다는 것을 의미합니다. 그 다음으로 엔탈피의 변화량을 알아내기 위해서는 엔탈피의 + 정의를 알아야 합니다. 엔탈피 H는 시스템의 내부에너지 U와 그 시스템의 압력 P와 체적 V의 곱의 합으로 정의됩니다. 즉, H = U + PV입니다. 엔탈피의 + 변화 ΔH는 내부에너지의 변화 ΔU와 압력-체적 작용의 변화 Δ(PV)의 합이 됩니다. 문제에서 내부에너지의 변화는 0이므로, ΔH는 Δ(PV)와 + 같습니다. 압력-체적 작용의 변화는 최종 상태의 PV 값에서 초기 상태의 PV 값을 뺀 것입니다. 즉, Δ(PV) = (P2V2) - (P1V1)입니다. + 여기서 주의할 점은 압력과 체적의 단위입니다. 문제에서 주어진 압력의 단위는 kPa와 MPa이고, 체적의 단위는 m3입니다. 이를 모두 같은 단위로 + 맞추어야 합니다. 1 MPa = 1000 kPa이므로, 1.2 MPa는 1200 kPa입니다. , Δ(PV) = (1200 kPa * 0.2 + m3) - (50 kPa * 2.5 m3) = 240 kPa*m3 - 125 kPa*m3 = 115 kPa*m3입니다. 마지막으로, kPa*m3를 + kJ로 변환해야 합니다. 1 kPa*m3는 1 kJ와 같습니다. , ΔH는 115 kJ입니다. 따라서, 정답은 (D) 입니다. + + + 질문: 주위의 온도가 27℃일 때, -73℃에서 1kJ의 냉동효과를 얻으려 한다. 냉동 사이클을 구동하는데 필요한 최소일은 얼마인가? + + A.2 kJ + + B.1.5 kJ + + C.1 kJ + + D.0.5 kJ + + 정답: 차근 차근 생각해봅시다. 냉동 기계 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저 이 문제는 냉동 사이클에 대한 문제이며, 냉동 사이클의 + 성능을 평가하는 지표 중 하나인 ''최소일''에 대한 문제입니다. 냉동 사이클에서 최소일은 카르노 사이클에 의해 결정되며, 이는 절대온도에 비례하여 + 결정됩니다. 카르노 사이클에서 냉동효과(Qc)를 얻기 위해 필요한 일(W)는 다음의 공식에 의해 결정됩니다: W = Qc * (Th - Tc) + / Tc 여기서 Th는 높은 온도(절대온도로 표현)이며, Tc는 낮은 온도(절대온도로 표현)입니다. 이 문제에서는 Th가 27℃, Tc가 -73℃입니다. + 그러나 이 온도들은 절대온도로 변환해야 합니다. 절대온도는 켈빈(K)으로 표현되며, 섭씨온도를 켈빈으로 변환하는 공식은 K = ℃ + 273.15입니다. Th + = 27℃ + 273.15 = 300.15K, Tc = -73℃ + 273.15 = 200.15K입니다. 그러므로, W = 1kJ * (300.15K + - 200.15K) / 200.15K = 0.5kJ입니다. 따라서, 정답은 (D) 입니다. + + + 질문: {{question}} + + A.{{A}} + + B.{{B}} + + C.{{C}} + + D.{{D}} + + 정답: 차근 차근 생각해봅시다. 냉동 기계 관련 정보를 위해 위키피디아를 참조하겠습니다.' +include: _cot_kmmlu_yaml +task: kmmlu_hard_cot_refrigerating_machinery diff --git a/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_social_welfare.yaml b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_social_welfare.yaml new file mode 100644 index 0000000000..9e62e78a4a --- /dev/null +++ b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_social_welfare.yaml @@ -0,0 +1,122 @@ +dataset_name: social_welfare +doc_to_text: '질문: 우리나라 사회보장제도 운영주체의 책임에 관한 원칙으로 옳은 것은? + + A.사회보험은 국가의 책임으로 시행한다. + + B.공공부조는 지방자치단체가 전적으로 책임지고 시행한다. + + C.사회서비스는 지방자치단체만의 책임으로 시행한다. + + D.국가는 사회보장에 관하여 민간단체의 참여를 제한한다. + + 정답: 차근 차근 생각해봅시다. 사회 복지 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 사회보장제도 운영주체의 책임에 관한 원칙을 확인하기 + 위해 사회보장기본법을 찾아보겠습니다. 사회보장기본법 제5조에 따르면, "국가와 지방자치단체는 국가발전의 수준에 부응하는 사회보장제도를 확립하고 + 매년 이에 필요한 재원을 조달하여야 한다."고 명시되어 있습니다. 또한, 제27조에는 "사회보험은 국가의 책임으로 시행한다."고 되어 있습니다. , + 선택지 중에서 (A) 사회보험은 국가의 책임으로 시행한다. 가 옳은 것으로 확인됩니다. (B) 공공부조는 지방자치단체가 전적으로 책임지고 시행한다는 + 것은 옳지 않습니다. 사회보장기본법 제24조에 따르면, "국가 및 지방자치단체는 생활유지능력이 없거나 생활이 어려운 국민의 보호와 지원을 위하여 + 필요한 경우에는 공공부조를 실시한다."고 되어 있습니다. 이는 공공부조가 국가와 지방자치단체의 공동 책임으로 시행되는 것을 의미합니다. (C) + 사회서비스는 지방자치단체만의 책임으로 시행한다는 것도 옳지 않습니다. 사회보장기본법 제28조에 따르면, "국가 및 지방자치단체는 사회서비스를 국가발전에 + 필요한 사회서비스의 원활한 제공과 국민의 복지증진을 위하여 적정한 수준으로 제공하여야 한다."고 되어 있습니다. 이는 사회서비스가 국가와 지방자치단체의 + 공동 책임으로 시행되는 것을 의미합니다. (D) 국가는 사회보장에 관하여 민간단체의 참여를 제한한다는 것도 옳지 않습니다. 사회보장기본법 제40조에 + 따르면, "국가와 지방자치단체는 사회보장에 대한 민간부문의 참여를 조장할 수 있도록 정책을 개발·시행하고 그 여건을 조성하여야 한다."고 되어 + 있습니다. 이는 국가가 사회보장에 관하여 민간단체의 참여를 조장하고 참여를 유도해야 한다는 것을 의미합니다. 따라서, 정답은 (A) 입니다. + + + 질문: 1942년 베버리지 보고서에서 규정한 5대 악에 해당되지 않는 것은? + + A.무지 + + B.질병 + + C.산업재해 + + D.나태 + + 정답: 차근 차근 생각해봅시다. 사회 복지 관련 정보를 위해 위키피디아를 참조하겠습니다. 1942년에 발표된 베버리지 보고서는 사회복지의 기본적인 + 원칙을 제시했으며, 이 보고서에서는 ''5대 악''이라는 개념을 도입했습니다. ''5대 악''은 사회복지의 목표가 해결해야 할 문제로, 궁핍(want), + 질병(disease), 무지(ignorance), 불결(squalor), 나태(idleness) 을 지칭합니다. 이 중에서 선택지에 주어진 것들을 + 확인해보면, 무지(A), 질병(B), 나태(D)는 베버리지 보고서의 ''5대 악''에 포함되어 있습니다. 반면에 산업재해(C)는 ''5대 악''에 + 직접적으로 언급된 내용이 아닙니다. , 1942년 베버리지 보고서에서 규정한 5대 악에 해당되지 않는 것은 ''산업재해''입니다. 따라서, 정답은 + (C) 입니다. + + + 질문: 사회보험과 민영보험의 차이점에 관한 설명으로 옳지 않은 것은? + + A.사회보험은 현금급여를 원칙으로 하고, 민영보험은 현물급여를 원칙으로 한다. + + B.사회보험은 대부분 국가 또는 공법인이 운영하지만 민영보험은 사기업이 운영한다. + + C.사회보험은 강제로 가입되지만 민영보험은 임의로 가입한다. + + D.사회보험은 국가가 주로 독점하지만 민영보험은 사기업들이 경쟁한다. + + 정답: 차근 차근 생각해봅시다. 사회 복지 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 사회보험과 민영보험의 차이점을 비교해보겠습니다. + - 사회보험은 국민에게 발생하는 사회적 위험을 보험의 방식으로 대처함으로써 국민의 건강과 소득을 보장하는 제도입니다. 이는 국가가 법에 의해 가입을 + 의무화하고 있으며, 대부분의 재원을 국가가 부담합니다. - 반면에 민영보험은 개인이나 기업이 자신의 필요에 따라 가입하는 보험으로, 보험회사가 + 운영하며 보험료를 개인이나 기업이 부담합니다. 이제 선택지를 하나씩 살펴보겠습니다. (A) 사회보험은 현금급여를 원칙으로 하고, 민영보험은 현물급여를 + 원칙으로 한다는 설명은 옳지 않습니다. 사회보험과 민영보험 모두 현금급여와 현물급여를 제공할 수 있습니다. 예를 들어, 국민건강보험은 의료서비스를 + 제공하는 현물급여와 함께 진료비를 지급하는 현금급여를 제공하고, 자동차보험은 수리비나 치료비 등의 현금급여와 함께 차량 수리나 치료 등의 현물급여를 + 제공합니다. (B) 사회보험은 대부분 국가 또는 공법인이 운영하지만 민영보험은 사기업이 운영한다는 설명은 맞습니다. 사회보험은 국민의 복지를 증진하기 + 위한 것으로, 국가가 운영하는 것이 일반적입니다. 반면에 민영보험은 이윤을 추구하는 사기업이 운영합니다. (C) 사회보험은 강제로 가입되지만 민영보험은 + 임의로 가입한다는 설명도 맞습니다. 사회보험은 국민의 사회적 위험을 대비하기 위해 강제로 가입해야 합니다. 반면에 민영보험은 개인이나 기업이 자신의 + 필요에 따라 가입 여부를 결정할 수 있습니다. (D) 사회보험은 국가가 주로 독점하지만 민영보험은 사기업들이 경쟁한다는 설명도 맞습니다. 사회보험은 + 국민의 복지를 증진하기 위해 국가가 독점적으로 운영하는 것이 일반적입니다. 반면에 민영보험은 사기업들이 경쟁을 통해 운영됩니다. 따라서, 정답은 + (A) 입니다. + + + 질문: 조지와 윌딩(V. George & P. Wilding, 1976; 1994)의 사회복지모형에서 복지국가의 확대를 가장 지지하는 이념은? + + A.신우파 + + B.반집합주의 + + C.마르크스주의 + + D.페이비언 사회주의 + + 정답: 차근 차근 생각해봅시다. 사회 복지 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 조지와 윌딩(V. George & P. Wilding, + 1976; 1994)의 사회복지모형은 다음과 같이 4가지 이념으로 구성되어 있습니다. 1. 반집합주의(Anti-Collectivism): 개인주의에 + 기반하여 국가의 개입을 최소화하고 시장경제를 강조하며, 사회복지는 개인의 책임으로 간주합니다. 2. 소극적 집합주의(Reluctant Collectivism): + 자유주의에 기반하여 국가 개입의 필요성은 인정하나, 최소한의 수준에 그쳐야 한다고 주장하며, 사회복지는 기본적인 욕구를 충족시키는 것으로 제한합니다. + 3. 페이비언 사회주의(Fabian Socialism): 점진적 개혁을 추구하며, 국가의 적극적인 개입을 통해 평등과 사회적 정의를 실현하고자 + 합니다. 이를 위해 누진세, 사회보험 등의 정책을 지지합니다. 4. 마르크스주의(Marxism): 자본주의를 부정하고, 국가의 개입을 통해 평등한 + 사회를 구현하고자 하며, 이를 위해 생산수단의 공유화를 주장합니다. 이러한 이념들 중에서 복지국가의 확대를 가장 지지하는 이념은 페이비언 사회주의입니다. + 페이비언 사회주의는 국가의 적극적인 개입을 통해 평등과 사회적 정의를 실현하고자 하며, 이를 위해 누진세, 사회보험 등의 정책을 지지합니다. 이러한 + 정책들은 복지국가의 확대를 뒷받침하는 중요한 요소들입니다. 따라서, 정답은 (D) 입니다. + + + 질문: 사회복지정책의 원칙과 기능에 관한 설명으로 옳지 않은 것은? + + A.소득을 재분배하는 기능을 한다. + + B.능력에 비례한 배분을 원칙으로 한다. + + C.경제의 자동안정화 기능을 한다. + + D.국민의 최저생활을 보장하는 기능을 한다. + + 정답: 차근 차근 생각해봅시다. 사회 복지 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 사회복지정책의 원칙과 기능에 대해 알아보겠습니다. + 사회복지정책은 사회적 불평등을 해소하고, 모든 사람이 기본적인 생활을 유지할 수 있도록 지원하는 정책입니다. 이러한 정책은 국가나 지역 사회의 + 복지를 향상시키는 데 중점을 두고 있습니다. 선택지를 하나씩 살펴보겠습니다. (A) 소득을 재분배하는 기능을 한다. - 이는 사회복지정책의 주요 + 기능 중 하나입니다. 소득재분배를 통해 사회적 불평등을 해소하려는 목표를 가지고 있습니다. (B) 능력에 비례한 배분을 원칙으로 한다. - 이는 + 사회복지정책의 원칙과는 거리가 먼 개념입니다. 사회복지정책은 능력이 아닌 필요에 따라 지원을 하는 것이 원칙입니다. (C) 경제의 자동안정화 기능을 + 한다. - 이 역시 사회복지정책의 중요한 기능 중 하나입니다. 사회복지정책은 경제적 불안정을 완화하고, 경제의 안정화에 기여합니다. (D) 국민의 + 최저생활을 보장하는 기능을 한다. - 이 역시 사회복지정책의 중요한 기능입니다. 국민의 최저생활 보장은 사회복지정책의 핵심적인 목표입니다. , + 사회복지정책의 원칙과 기능에 관한 설명으로 옳지 않은 것은 ''능력에 비례한 배분을 원칙으로 한다''는 (B) 선택지입니다. 이는 사회복지정책의 + 본질적인 목표와 원칙을 반영하지 못하고 있습니다. 사회복지정책은 능력이 아닌 필요에 따라 지원을 하는 것이 원칙이며, 이를 통해 사회적 불평등을 + 해소하고 모든 사람이 기본적인 생활을 유지할 수 있도록 지원하는 것이 목표입니다. 따라서, 정답은 (B) 입니다. + + + 질문: {{question}} + + A.{{A}} + + B.{{B}} + + C.{{C}} + + D.{{D}} + + 정답: 차근 차근 생각해봅시다. 사회 복지 관련 정보를 위해 위키피디아를 참조하겠습니다.' +include: _cot_kmmlu_yaml +task: kmmlu_hard_cot_social_welfare diff --git a/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_taxation.yaml b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_taxation.yaml new file mode 100644 index 0000000000..0248f108d6 --- /dev/null +++ b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_taxation.yaml @@ -0,0 +1,133 @@ +dataset_name: taxation +doc_to_text: '질문: 지방세기본법 상 서류의 송달에 대한 설명으로 옳은 것은? + + A.연대 납세의무자에게 대표자가 없으면 납세의 고지와 독촉에 관한 서류는 연대 납세의무자 중 지방세를 징수하기 유리한 자에게만 송달하여야 한다. + + B.서류를 교부하였을 때에는 수령인이 서명 또는 날인을 거부하면 그 사실을 송달서에 적어야 한다. + + C.서류의 송달을 받아야 할 자가 사전 반대한 경우가 아니면 전자 송달의 방식으로 서류를 송달할 수 있다. + + D.서류를 송달받을 자가 주소, 거소, 사무소 및 영업소 외의 다른 장소를 송달받을 장소로 요청한 경우 그 장소에 송달하여야 한다. + + 정답: 차근 차근 생각해봅시다. 세법 관련 정보를 위해 위키피디아를 참조하겠습니다. (A) 연대 납세의무자에게 대표자가 없으면 납세의 고지와 독촉에 + 관한 서류는 연대 납세의무자 중 지방세를 징수하기 유리한 자에게만 송달하여야 한다는 설명은 옳지 않습니다. 연대납세의무자에게 대표자가 없으면 연대납세의무자 + 모두에게 서류를 송달해야 합니다. (B) 서류를 교부하였을 때에는 수령인이 서명 또는 날인을 거부하면 그 사실을 송달서에 적어야 한다는 설명은 + 옳은 설명입니다. 지방세기본법 제24조에 따르면 송달하는 서류에 수령인이 서명 또는 날인을 거부하면 그 사실을 송달서에 적어야 합니다. (C) + 서류의 송달을 받아야 할 자가 사전에 반대한 경우가 아니면 전자 송달의 방식으로 서류를 송달할 수 있다는 설명은 옳지 않습니다. 서류의 송달을 + 받아야 할 자가 동의한 경우에만 전자송달을 할 수 있습니다. (D) 서류를 송달받을 자가 주소, 거소, 사무소 및 영업소 외의 다른 장소를 송달받을 + 장소로 요청한 경우 그 장소에 송달하여야 한다는 설명은 옳지 않습니다. 서류를 송달받을 자가 송달받을 장소를 지정한 경우에는 그 장소에 송달해야 + 하지만, 송달받을 장소를 지정하지 않은 경우에는 주소, 거소, 영업소 또는 사무소에 송달해야 합니다. 따라서, 정답은 (B) 입니다. + + + 질문: 관세법상 통관의 통칙에 대한 설명으로 옳지 않은 것은? + + A.세관장은 다른 법령에 따라 수입 후 특정한 용도로 사용하여야 하는 등의 의무가 부가되어 있는 물품에 대하여는 문서로써 해당의무를 이행할 것을 + 요구할 수 있다. + + B.세관장은 관세 보전을 위하여 필요하다고 인정할 때에는 대통령령으로 정하는 바에 따라 수입하는 물품에 통관표지를 첨부할 것을 명할 수 있다. + + C.관세청장이나 세관장은 감시에 필요하다고 인정될 때에는 통관역 ․통관장 또는 특정한 세관에서 통관할 수 있는 물품을 제한할 수 있다. + + D.세관장은 외국 물품의 일시 양륙에 따라 일시적으로 육지에 내려진 외국 물품의 원산지가 우리나라로 허위표시된 물품 이더라도 유치할 수 없다. + + 정답: 차근 차근 생각해봅시다. 세법 관련 정보를 위해 위키피디아를 참조하겠습니다. 관세법상 통관의 통칙에 대한 설명으로 옳지 않은 것을 찾기 + 위해 각 선택지를 검토해보겠습니다. (A) 선택지는 "세관장은 다른 법령에 따라 수입 후 특정한 용도로 사용하여야 하는 등의 의무가 부가되어 있는 + 물품에 대하여는 문서로써 해당 의무를 이행할 것을 요구할 수 있다"는 내용을 담고 있습니다. 이는 관세법 제 227조에 명시되어 있으며, 세관장은 + 수입신고가 수리된 물품이 다른 법령에 따라 수입 후 특정 용도로 사용하거나 그 밖의 조건을 충족해야 하는 경우 해당 법령에서 정하는 바에 따라 + 필요한 조치를 할 수 있습니다. (A) 선택지는 옳은 설명입니다. (B) 선택지는 "세관장은 관세 보전을 위하여 필요하다고 인정할 때에는 대통령령으로 + 정하는 바에 따라 수입하는 물품에 통관표지를 첨부할 것을 명할 수 있다"는 내용을 담고 있습니다. 이는 관세법 제228조에 명시되어 있으며, 세관장은 + 관세의 부과·징수를 위해 필요하다고 인정되면 수입신고 대상 물품에 통관표지를 첨부할 것을 명할 수 있습니다. (B) 선택지도 옳은 설명입니다. + (C) 선택지는 "관세청장이나 세관장은 감시에 필요하다고 인정될 때에는 통관역 .통관장 또는 특정한 세관에서 통관할 수 있는 물품을 제한할 수 + 있다"는 내용을 담고 있습니다. 이는 관세법 제236조에 명시되어 있으며, 관세청장이나 세관장은 감시상 필요하다고 인정되면 통관역·통관장 또는 + 특정 세관에서 통관할 수 있는 물품을 제한할 수 있습니다. (C) 선택지도 옳은 설명입니다. (D) 선택지는 "세관장은 외국 물품의 일시 양륙에 + 따라 일시적으로 육지에 내려진 외국 물품의 원산지가 우리나라로 허위표시된 물품 이더라도 유치할 수 없다"는 내용을 담고 있습니다. 그러나 이는 + 사실이 아닙니다. 관세법 제231조에 따르면, 세관장은 외국 물품이 원산지의 표시가 명확하지 아니하거나 그 밖에 대통령령으로 정하는 원산지표시의 + 요건을 갖추지 아니한 경우에는 그 외국 물품을 유치할 수 있습니다. (D) 선택지는 옳지 않은 설명입니다. 따라서, 정답은 (D) 입니다. + + + 질문: 관세법령상 세액의 확정에 대한 설명으로 옳지 않은 것은? + + A.납세의무자는 신고납부한 세액이 부족하다는 것을 알게 되었을 때에는 신고납부한 날부터 6개월 이내에 대통령령으로 정하는 바에 따라 해당 세액을 + 보정하여 줄 것을 세관장에게 신청할 수 있다. + + B.납세의무자는 신고납부한 세액이 과다한 것을 알게 되었을 때에는 최초로 납세신고를 한 날부터 5년 이내에 대통령령으로 정하는 바에 따라 신고한 + 세액의 경정을 세관장에게 청구할 수 있다. + + C.경정청구에 따른 세관장의 통지에 이의가 있는 청구인은 그 통지를 받은 날부터 2개월 이내에 관세청장에게 국세의 정상 가격과 관세의 과세가 격간의 + 조정을 신청할 수 있다. + + D.세관장은 납세의무자가 납부하여야 하는 세액이 1만원 미만인 경우에는 이를 징수하지 아니한다. + + 정답: 차근 차근 생각해봅시다. 세법 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저 각 선택지에 대한 내용을 분석해보겠습니다. (A) 선택지는 + 납세의무자가 신고납부한 세액이 부족하다는 것을 알게 되었을 때, 6개월 이내에 해당 세액을 보정하여 줄 것을 세관장에게 신청할 수 있다는 내용입니다. + 이 내용은 관세법 제30조에 따라 납세의무자가 신고한 세액이 부족하다는 사실을 알게 된 경우, 그 부족한 세액을 보충납부할 수 있다는 규정이 있습니다. 이 + 선택지는 옳습니다. (B) 선택지는 납세의무자가 신고납부한 세액이 과다하다는 것을 알게 되었을 때, 5년 이내에 신고한 세액의 경정을 세관장에게 + 청구할 수 있다는 내용입니다. 이 내용은 관세법 제38조에 따라 납세의무자가 신고한 세액이 과다하다는 사실을 알게 된 경우, 그 과다한 세액의 + 반환을 청구할 수 있다는 규정이 있습니다. 이 선택지는 옳습니다. (C) 선택지는 경정청구에 따른 세관장의 통지에 이의가 있는 청구인이, 통지를 + 받은 날부터 2개월 이내에 관세청장에게 국세의 정상 가격과 관세의 과세가 격간의 조정을 신청할 수 있다는 내용입니다. 이 내용은 관세법 제38조의2에 + 따라 납세의무자가 세관장의 결정에 불복할 경우 이의신청을 할 수 있으며, 이의신청은 통지를 받은 날로부터 90일 이내에 하여야 합니다. 그러나 + 이 선택지에서는 ''2개월 이내''라고 명시하고 있어, 이 부분이 잘못된 정보입니다. (D) 선택지는 세관장이 납세의무자가 납부하여야 하는 세액이 + 1만원 미만인 경우에는 이를 징수하지 않는다는 내용입니다. 이 내용은 관세법 제29조에 따라 세액이 1만원 미만인 경우에는 징수하지 않는다는 규정이 + 있습니다. 이 선택지는 옳습니다. 따라서, 정답은 (C) 입니다. + + + 질문: 관세법령상 기간과 기한에 대한 설명으로 옳은 것은? + + A.관세법 에 따른 기간을 계산할 때 관세법 제252조(수입신고 수리 전반출)에 따른 수입신고 수리 전반 출 승인을 받은 경우에는 그승인 일을 + 수입신고의 수리일로 본다. + + B.관세법 에 따른 기간의 계산은 관세법 에 특별한 규정이 있는 것을 제외하고는 민원처리에 관한 법률 에 따른다. + + C.관세법 시행령 제1조의 5(월별 납부) 제2항의 규정에 의하여 월별 납부의 승인을 받은 납세의무자가 관세를 납부기한까지 납부하지 아니하는 때에는, + 세관장은 월별 납부의 승인을 취소할 수 있다. + + D.세관장은 관세법 제10조(천재지변 등으로 인한 기한의 연장)에 따라 납부기한을 연장하는 때에는 기획재정부 장관이 정하는 기준에 의하여야 하며, + 납부자의 신청으로 납부기한을 연장하는 경우 관세법 제39조(부과고지)에 따른 납부고지를 생략할 수 있다. + + 정답: 차근 차근 생각해봅시다. 세법 관련 정보를 위해 위키피디아를 참조하겠습니다. 관세법령상 기간과 기한에 대한 설명으로 옳은 것을 찾기 위해서는 + 각 선택지를 검토해야 합니다. (A) 선택지는 관세법 제252조(수입신고 수리 전반출)에 따른 수입신고 수리 전반 출 승인을 받은 경우에는 그 + 승인 일을 수입신고의 수리일로 본다는 내용입니다. 이는 관세법령상 기간과 기한에 대한 설명으로 적절하므로, (A) 선택지는 정답일 가능성이 높습니다. + (B) 선택지는 관세법에 따른 기간의 계산은 관세법에 특별한 규정이 있는 것을 제외하고는 민원처리에 관한 법률에 따른다는 내용입니다. 이는 관세법령상 + 기간과 기한에 대한 설명으로 적절하지 않습니다. , (B) 선택지는 정답이 아닙니다. (C) 선택지는 관세법 시행령 제1조의 5(월별 납부) + 제2항의 규정에 의하여 월별 납부의 승인을 받은 납세의무자가 관세를 납부기한까지 납부하지 아니하는 때에는 세관장은 월별 납부의 승인을 취소할 수 + 있다는 내용입니다. 이는 관세법령상 기간과 기한에 대한 설명으로 적절하지 않으므로, (C) 선택지는 정답이 아닙니다. (D) 선택지는 세관장은 + 관세법 제10조(천재지변 등으로 인한 기한의 연장)에 따라 납부기한을 연장하는 때에는 기획재정부 장관이 정하는 기준에 의하여야 하며, 납부자의 + 신청으로 납부기한을 연장하는 경우 관세법 제39조(부과고지)에 따른 납부고지를 생략할 수 있다는 내용입니다. 이는 관세법령상 기간과 기한에 대한 + 설명으로 적절하지 않으므로, (D) 선택지는 정답이 아닙니다. 따라서, 정답은 (A) 입니다. + + + 질문: 관세법상 ‘정부용품 등의 면세’를 적용받을 수 있는 물품에 해당하지 않는 것은? + + A.정보처리 기술을 응용한 공장 자동화기계 ․기구 ․설비 및 그 핵심 부분품으로서 기획재정부령으로 정하는 물품 + + B.과학기술 정보통신부 장관이 국가의 안전보장을 위하여 긴요하다고 인정하여 수입하는 비상통신용 물품 + + C.상수도 수질을 측정하기 위하 여 지방자치단체가 수입하는 물품으로서 기획재정부령으로 정하는 물품 + + D.국가정보원장이 국가의 안전보장 목적의 수행상 긴요하다고 인정하여 수입하는 물품 + + 정답: 차근 차근 생각해봅시다. 세법 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 관세법상 ''정부용품 등의 면세''에 대해 알아보겠습니다. + ''정부용품 등의 면세''는 특정 목적을 위해 정부가 수입하는 물품에 대해 관세를 면제하는 것을 말합니다. 이는 국가의 공공적인 목적을 위해 수입하는 + 물품에 대한 경제적 부담을 줄이기 위한 조치입니다. 다음으로 각 선택지에 대해 분석해보겠습니다. (A) 선택지는 정보처리 기술을 응용한 공장 자동화기계 + 등의 물품으로, 기획재정부령으로 정하는 물품을 의미합니다. 해당 선택지의 경우에는 정보처리 기술을 응용한 공장 자동화기계 등의 물품이지만, 이 + 물품이 반드시 기획재정부령으로 정해진 특정 물품이어야 면세를 적용받을 수 있다는 점이 특이하게 보입니다. , 이 선택지의 물품이 기획재정부령으로 + 정해진 특정 물품이 아닌 경우에는 면세를 적용받을 수 없을 것으로 판단됩니다. (B) 선택지는 과학기술 정보통신부 장관이 국가의 안전보장을 위해 + 긴요하다고 인정하여 수입하는 비상통신용 물품을 의미합니다. 이 또한 국가의 안전보장을 위해 필요한 물품이므로 면세 대상에 해당할 것으로 보입니다. + (C) 선택지는 상수도 수질을 측정하기 위해 지방자치단체가 수입하는 물품으로, 기획재정부령으로 정하는 물품을 의미합니다. 이는 공공의 안전과 건강을 + 위해 필요한 물품이므로 면세 대상에 해당할 것으로 보입니다. (D) 선택지는 국가정보원장이 국가의 안전보장 목적의 수행상 긴요하다고 인정하여 수입하는 + 물품을 의미합니다. 이 또한 국가의 안전보장을 위해 필요한 물품이므로 면세 대상에 해당할 것으로 보입니다. 따라서, 정답은 (A) 입니다. + + + 질문: {{question}} + + A.{{A}} + + B.{{B}} + + C.{{C}} + + D.{{D}} + + 정답: 차근 차근 생각해봅시다. 세법 관련 정보를 위해 위키피디아를 참조하겠습니다.' +include: _cot_kmmlu_yaml +task: kmmlu_hard_cot_taxation diff --git a/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_telecommunications_and_wireless_technology.yaml b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_telecommunications_and_wireless_technology.yaml new file mode 100644 index 0000000000..1e7e5cc09e --- /dev/null +++ b/lm_eval/tasks/kmmlu/cot_hard/kmmlu_cot_hard_telecommunications_and_wireless_technology.yaml @@ -0,0 +1,115 @@ +dataset_name: telecommunications_and_wireless_technology +doc_to_text: '질문: 주파수 대역에 따른 RFID 특징 중 틀린 것은? + + A.UHF대역 : 900㎒ 대역과 433㎒ 대역이 사용됨 + + B.13.56㎒ : ISM 밴드 대역으로 UHF대역보다 인식거리가 짧음 + + C.2.45㎓ : 능동형과 수동형의 두 가지 형태가 사용됨 + + D.135㎑ 미만 : 자기장이 아닌 전기장 결합으로 동작함 + + 정답: 차근 차근 생각해봅시다. 무선 정보통신 관련 정보를 위해 위키피디아를 참조하겠습니다. RFID(Radio Frequency Identification)는 + 무선 주파수 신호를 사용하여 태그에 저장된 정보를 읽거나 쓰는 기술입니다. RFID 시스템은 주파수 대역에 따라 다양한 특징을 가지며, 이는 시스템의 + 성능과 용도에 영향을 미칩니다. (A) UHF 대역: UHF(Ultra High Frequency) 대역은 300 MHz에서 3 GHz 사이의 + 주파수를 포함합니다. RFID에서는 주로 860 MHz에서 960 MHz 범위가 사용되며, 433 MHz 대역도 사용되는 경우가 있습니다. 이 + 선택지는 올바릅니다. (B) 13.56 MHz: 이 주파수는 HF(High Frequency) 대역에 속하며, ISM(Industrial, Scientific, + and Medical) 밴드로도 알려져 있습니다. UHF 대역보다 인식 거리가 짧은 것이 일반적이므로, 이 선택지도 올바릅니다. (C) 2.45 + GHz: 이 주파수는 또한 ISM 밴드에 속하며, RFID에서는 주로 능동형 태그에 사용됩니다. 수동형 태그도 이 주파수를 사용할 수 있지만, + 일반적으로 능동형 태그가 더 널리 사용됩니다. 이 선택지도 올바르다고 볼 수 있습니다. (D) 135 KHz 미만: 이 주파수는 LF(Low Frequency) + 대역에 속합니다. LF RFID 시스템은 주로 자기장 결합을 사용하여 동작하며, 전기장 결합은 주로 더 높은 주파수 대역에서 사용됩니다. 이 + 선택지는 잘못된 정보를 제공하고 있습니다. 따라서, 정답은 (D) 입니다. + + + 질문: 현재 국내에서 항만 지역에만 제한적으로 사용되는 반능동형 RFID 시스템의 주파수 대역은? + + A.433㎒ 대역 + + B.900㎒ 대역 + + C.13.56㎒ 대역 + + D.2.45㎓ 대역 + + 정답: 차근 차근 생각해봅시다. 무선 정보통신 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, RFID 시스템에 대해 이해해야 합니다. RFID는 + Radio Frequency Identification의 약자로, 무선 주파수를 이용하여 정보를 저장하고 읽는 시스템을 말합니다. 이 시스템은 + 태그, 리더기, 그리고 관련된 데이터베이스로 구성되어 있습니다. 태그는 물체에 부착되며, 주파수를 통해 정보를 전송합니다. 리더기는 태그의 정보를 + 읽어 데이터베이스에 저장하거나 처리합니다. 이러한 RFID 시스템은 물류, 유통, 보안 등 다양한 분야에서 활용되고 있습니다. 다음으로, 반능동형 + RFID에 대해 알아보겠습니다. 반능동형 RFID는 태그가 리더기의 신호를 받아 그 에너지를 이용해 정보를 되돌려 보내는 형태의 RFID를 말합니다. + 이러한 반능동형 RFID는 주로 물류 트래킹, 차량 트래킹, 자산 관리 등에 활용됩니다. 이제, 주파수 대역에 대해 알아보겠습니다. RFID는 + 사용 목적에 따라 다양한 주파수 대역을 사용합니다. 일반적으로, 낮은 주파수 대역은 짧은 거리에서 작동하며, 높은 주파수 대역은 더 넓은 거리에서 + 작동합니다. 국내에서 항만 지역에 제한적으로 사용되는 반능동형 RFID 시스템은 433㎒ 대역을 사용합니다. 이 주파수 대역은 국제적으로 자유롭게 + 사용할 수 있는 ISM 대역 중 하나이며, 이 대역을 사용하는 RFID 시스템은 주로 차량 추적, 컨테이너 추적 등에 활용됩니다. 따라서, 정답은 + (A) 입니다. + + + 질문: 리더의 안테나 출력이 0.5W라고 할 때 dBm의 환산 값은? (단,log105≒ 0.7) + + A.0.7 dOPTIONm + + B.-7 dOPTIONm + + C.27 dOPTIONm + + D.37 dOPTIONm + + 정답: 차근 차근 생각해봅시다. 무선 정보통신 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, dBm은 전력을 나타내는 단위로, 1mW를 + 기준으로 한 로그 스케일입니다. dBm의 계산 공식은 다음과 같습니다: dBm = 10 * log10(전력(W) / 1mW) 이 문제에서는 리더의 + 안테나 출력이 0.5W로 주어졌습니다. 그런데, dBm은 mW를 기준으로 하므로, 이 값을 mW로 변환해야 합니다. 1W = 1000mW 이므로, + 0.5W = 500mW입니다. 이제 dBm로 변환해보겠습니다. dBm = 10 * log10(500mW / 1mW) = 10 * log10(500) + = 10 * 2.7 (log105≒ 0.7이므로, log10(500)는 log10(5) + log10(100)으로 계산할 수 있으며, 이를 통해 + 약 2.7로 추정할 수 있습니다.) , dBm은 약 27입니다. 이는 선택지 C와 일치합니다. 따라서, 정답은 (C) 입니다. + + + 질문: 후방 산란(back-scattering) 방식에 대한 설명으로 틀린 것은? + + A.리더와 태그는 전자파 결합 방식이다. + + B.안테나를 통한 원거리장에서의 전자기파에 의해 이루어지므로 원거리장 조건인 λ/2π보다 가까운 거리에서 이루어진다. + + C.UHF 수동태그에서 이용한다. + + D.태그의 레이더 단면적(ROPTIONS: radar cross section)을 변화시키는 방식이다. + + 정답: 차근 차근 생각해봅시다. 무선 정보통신 관련 정보를 위해 위키피디아를 참조하겠습니다. 먼저, 후방 산란(back-scattering) 방식이란 + RFID 기술에서 리더와 태그 간의 통신 방식 중 하나입니다. 리더에서 전송한 전자기파를 태그가 반사하여 다시 리더로 전송하는 방식으로, UHF + 수동태그에서 이용됩니다. 이 방식에서는 리더와 태그가 전자파 결합 방식으로 통신하며, 태그의 레이더 단면적(RCS: radar cross section)을 + 변화시키는 방식입니다. 이제 선택지를 하나씩 살펴보겠습니다. (A) 리더와 태그는 전자파 결합 방식이다. - 이는 옳은 설명입니다. 후방 산란 + 방식은 리더와 태그가 전자파 결합 방식으로 통신합니다. (B) 안테나를 통한 원거리장에서의 전자기파에 의해 이루어지므로 원거리장 조건인 λ/2π보다 + 가까운 거리에서 이루어진다. - 이는 옳지 않은 설명입니다. 후방 산란 방식은 안테나를 통한 원거리장에서의 전자기파에 의해 이루어지는 것은 맞지만, + 원거리장 조건인 λ/2π보다 먼 거리에서 이루어집니다. (C) UHF 수동태그에서 이용한다. - 이는 옳은 설명입니다. UHF 수동태그는 후방 + 산란 방식을 이용하여 리더와 통신합니다. (D) 태그의 레이더 단면적(RCS: radar cross section)을 변화시키는 방식이다. - + 이는 옳은 설명입니다. 후방 산란 방식은 태그의 레이더 단면적을 변화시키는 방식으로 동작합니다. 따라서, 정답은 (B) 입니다. + + + 질문: 전자파가 자유공간을 진행할 때 거리와 전력 밀도와의 관계는? + + A.거리가 2배가 되면 전력 밀도도 2배가 된다. + + B.거리가 2배가 되면 전력 밀도는 1/2배가 된다. + + C.거리가 2배가 되면 전력 밀도는 4배가 된다. + + D.거리가 2배가 되면 전력 밀도는 1/4배가 된다. + + 정답: 차근 차근 생각해봅시다. 무선 정보통신 관련 정보를 위해 위키피디아를 참조하겠습니다. 전자파가 자유공간을 진행할 때, 거리와 전력 밀도와의 + 관계를 이해하기 위해서는 전자기파의 특성을 고려해야 합니다. 전자기파는 전기장과 자기장이 서로 수직으로 진동하며 공간을 전파하는 파동입니다. 이 + 때, 전자기파의 전력 밀도는 전기장과 자기장의 제곱에 비례합니다. 전력 밀도를 P, 전기장을 E, 자기장을 H라고 하면, P = (E^2 + H^2) + / 2 로 나타낼 수 있습니다. 이때, 전자기파의 세기는 거리에 따라 지수적으로 감소합니다. 즉, 거리가 r배 증가하면, 전자기파의 세기는 1/r^2배 + 감소합니다. , 거리가 2배가 되면, 전자기파의 세기는 1/4배가 됩니다. 그리고 전력 밀도는 전기장과 자기장의 제곱에 비례하므로, 거리가 2배가 + 되면 전력 밀도는 1/4배가 됩니다. 따라서, 정답은 (D) 입니다. + + + 질문: {{question}} + + A.{{A}} + + B.{{B}} + + C.{{C}} + + D.{{D}} + + 정답: 차근 차근 생각해봅시다. 무선 정보통신 관련 정보를 위해 위키피디아를 참조하겠습니다.' +include: _cot_kmmlu_yaml +task: kmmlu_hard_cot_telecommunications_and_wireless_technology diff --git a/lm_eval/tasks/kmmlu/direct/_direct_kmmlu_yaml b/lm_eval/tasks/kmmlu/direct/_direct_kmmlu_yaml new file mode 100644 index 0000000000..9a4a6dbcf0 --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct/_direct_kmmlu_yaml @@ -0,0 +1,27 @@ +group: + - kmmlu + - kmmlu_direct +dataset_path: HAERAE-HUB/KMMLU +output_type: generate_until +test_split: test +fewshot_split: dev +doc_to_text: "{{question.strip()}}\nA. {{A}}\nB. {{B}}\nC. {{C}}\nD. {{D}}\n정답:" +doc_to_target: "{{['A', 'B', 'C', 'D'][answer-1]}}" +metric_list: + - metric: exact_match + aggregation: mean + higher_is_better: true + ignore_case: true + ignore_punctuation: true + regexes_to_ignore: + - " " +generation_kwargs: + until: + - "Q:" + - "\n\n" + - "" + - "." + do_sample: false + temperature: 0.0 +metadata: + version: 2.0 diff --git a/lm_eval/tasks/kmmlu/direct/kmmlu_direct_accounting.yaml b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_accounting.yaml new file mode 100644 index 0000000000..d7736e8d5b --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_accounting.yaml @@ -0,0 +1,3 @@ +dataset_name: Accounting +include: _direct_kmmlu_yaml +task: kmmlu_direct_accounting diff --git a/lm_eval/tasks/kmmlu/direct/kmmlu_direct_agricultural_sciences.yaml b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_agricultural_sciences.yaml new file mode 100644 index 0000000000..5bf1fa4b56 --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_agricultural_sciences.yaml @@ -0,0 +1,3 @@ +dataset_name: Agricultural-Sciences +include: _direct_kmmlu_yaml +task: kmmlu_direct_agricultural_sciences diff --git a/lm_eval/tasks/kmmlu/direct/kmmlu_direct_aviation_engineering_and_maintenance.yaml b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_aviation_engineering_and_maintenance.yaml new file mode 100644 index 0000000000..a9a621931a --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_aviation_engineering_and_maintenance.yaml @@ -0,0 +1,3 @@ +dataset_name: Aviation-Engineering-and-Maintenance +include: _direct_kmmlu_yaml +task: kmmlu_direct_aviation_engineering_and_maintenance diff --git a/lm_eval/tasks/kmmlu/direct/kmmlu_direct_biology.yaml b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_biology.yaml new file mode 100644 index 0000000000..ebe1765b34 --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_biology.yaml @@ -0,0 +1,3 @@ +dataset_name: Biology +include: _direct_kmmlu_yaml +task: kmmlu_direct_biology diff --git a/lm_eval/tasks/kmmlu/direct/kmmlu_direct_chemical_engineering.yaml b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_chemical_engineering.yaml new file mode 100644 index 0000000000..e5875bb7e8 --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_chemical_engineering.yaml @@ -0,0 +1,3 @@ +dataset_name: Chemical-Engineering +include: _direct_kmmlu_yaml +task: kmmlu_direct_chemical_engineering diff --git a/lm_eval/tasks/kmmlu/direct/kmmlu_direct_chemistry.yaml b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_chemistry.yaml new file mode 100644 index 0000000000..edabfb67dd --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_chemistry.yaml @@ -0,0 +1,3 @@ +dataset_name: Chemistry +include: _direct_kmmlu_yaml +task: kmmlu_direct_chemistry diff --git a/lm_eval/tasks/kmmlu/direct/kmmlu_direct_civil_engineering.yaml b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_civil_engineering.yaml new file mode 100644 index 0000000000..98ed98dd2c --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_civil_engineering.yaml @@ -0,0 +1,3 @@ +dataset_name: Civil-Engineering +include: _direct_kmmlu_yaml +task: kmmlu_direct_civil_engineering diff --git a/lm_eval/tasks/kmmlu/direct/kmmlu_direct_computer_science.yaml b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_computer_science.yaml new file mode 100644 index 0000000000..c546e738d6 --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_computer_science.yaml @@ -0,0 +1,3 @@ +dataset_name: Computer-Science +include: _direct_kmmlu_yaml +task: kmmlu_direct_computer_science diff --git a/lm_eval/tasks/kmmlu/direct/kmmlu_direct_construction.yaml b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_construction.yaml new file mode 100644 index 0000000000..a0af2a16cf --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_construction.yaml @@ -0,0 +1,3 @@ +dataset_name: Construction +include: _direct_kmmlu_yaml +task: kmmlu_direct_construction diff --git a/lm_eval/tasks/kmmlu/direct/kmmlu_direct_criminal_law.yaml b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_criminal_law.yaml new file mode 100644 index 0000000000..9dfdfabc59 --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_criminal_law.yaml @@ -0,0 +1,3 @@ +dataset_name: Criminal-Law +include: _direct_kmmlu_yaml +task: kmmlu_direct_criminal_law diff --git a/lm_eval/tasks/kmmlu/direct/kmmlu_direct_ecology.yaml b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_ecology.yaml new file mode 100644 index 0000000000..9d182903e2 --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_ecology.yaml @@ -0,0 +1,3 @@ +dataset_name: Ecology +include: _direct_kmmlu_yaml +task: kmmlu_direct_ecology diff --git a/lm_eval/tasks/kmmlu/direct/kmmlu_direct_economics.yaml b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_economics.yaml new file mode 100644 index 0000000000..db4d78405a --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_economics.yaml @@ -0,0 +1,3 @@ +dataset_name: Economics +include: _direct_kmmlu_yaml +task: kmmlu_direct_economics diff --git a/lm_eval/tasks/kmmlu/direct/kmmlu_direct_education.yaml b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_education.yaml new file mode 100644 index 0000000000..74887e76f3 --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_education.yaml @@ -0,0 +1,3 @@ +dataset_name: Education +include: _direct_kmmlu_yaml +task: kmmlu_direct_education diff --git a/lm_eval/tasks/kmmlu/direct/kmmlu_direct_electrical_engineering.yaml b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_electrical_engineering.yaml new file mode 100644 index 0000000000..3455d50715 --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_electrical_engineering.yaml @@ -0,0 +1,3 @@ +dataset_name: Electrical-Engineering +include: _direct_kmmlu_yaml +task: kmmlu_direct_electrical_engineering diff --git a/lm_eval/tasks/kmmlu/direct/kmmlu_direct_electronics_engineering.yaml b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_electronics_engineering.yaml new file mode 100644 index 0000000000..b45aa3083c --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_electronics_engineering.yaml @@ -0,0 +1,3 @@ +dataset_name: Electronics-Engineering +include: _direct_kmmlu_yaml +task: kmmlu_direct_electronics_engineering diff --git a/lm_eval/tasks/kmmlu/direct/kmmlu_direct_energy_management.yaml b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_energy_management.yaml new file mode 100644 index 0000000000..b4fb806b38 --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_energy_management.yaml @@ -0,0 +1,3 @@ +dataset_name: Energy-Management +include: _direct_kmmlu_yaml +task: kmmlu_direct_energy_management diff --git a/lm_eval/tasks/kmmlu/direct/kmmlu_direct_environmental_science.yaml b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_environmental_science.yaml new file mode 100644 index 0000000000..1670ff16ba --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_environmental_science.yaml @@ -0,0 +1,3 @@ +dataset_name: Environmental-Science +include: _direct_kmmlu_yaml +task: kmmlu_direct_environmental_science diff --git a/lm_eval/tasks/kmmlu/direct/kmmlu_direct_fashion.yaml b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_fashion.yaml new file mode 100644 index 0000000000..aef8043aa4 --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_fashion.yaml @@ -0,0 +1,3 @@ +dataset_name: Fashion +include: _direct_kmmlu_yaml +task: kmmlu_direct_fashion diff --git a/lm_eval/tasks/kmmlu/direct/kmmlu_direct_food_processing.yaml b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_food_processing.yaml new file mode 100644 index 0000000000..f49b087fc2 --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_food_processing.yaml @@ -0,0 +1,3 @@ +dataset_name: Food-Processing +include: _direct_kmmlu_yaml +task: kmmlu_direct_food_processing diff --git a/lm_eval/tasks/kmmlu/direct/kmmlu_direct_gas_technology_and_engineering.yaml b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_gas_technology_and_engineering.yaml new file mode 100644 index 0000000000..00b7021c5c --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_gas_technology_and_engineering.yaml @@ -0,0 +1,3 @@ +dataset_name: Gas-Technology-and-Engineering +include: _direct_kmmlu_yaml +task: kmmlu_direct_gas_technology_and_engineering diff --git a/lm_eval/tasks/kmmlu/direct/kmmlu_direct_geomatics.yaml b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_geomatics.yaml new file mode 100644 index 0000000000..5d8dc70db5 --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_geomatics.yaml @@ -0,0 +1,3 @@ +dataset_name: Geomatics +include: _direct_kmmlu_yaml +task: kmmlu_direct_geomatics diff --git a/lm_eval/tasks/kmmlu/direct/kmmlu_direct_health.yaml b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_health.yaml new file mode 100644 index 0000000000..3f0d77eb78 --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_health.yaml @@ -0,0 +1,3 @@ +dataset_name: Health +include: _direct_kmmlu_yaml +task: kmmlu_direct_health diff --git a/lm_eval/tasks/kmmlu/direct/kmmlu_direct_industrial_engineer.yaml b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_industrial_engineer.yaml new file mode 100644 index 0000000000..39ea0bcf05 --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_industrial_engineer.yaml @@ -0,0 +1,3 @@ +dataset_name: Industrial-Engineer +include: _direct_kmmlu_yaml +task: kmmlu_direct_industrial_engineer diff --git a/lm_eval/tasks/kmmlu/direct/kmmlu_direct_information_technology.yaml b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_information_technology.yaml new file mode 100644 index 0000000000..c42e80eda1 --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_information_technology.yaml @@ -0,0 +1,3 @@ +dataset_name: Information-Technology +include: _direct_kmmlu_yaml +task: kmmlu_direct_information_technology diff --git a/lm_eval/tasks/kmmlu/direct/kmmlu_direct_interior_architecture_and_design.yaml b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_interior_architecture_and_design.yaml new file mode 100644 index 0000000000..842534aa0a --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_interior_architecture_and_design.yaml @@ -0,0 +1,3 @@ +dataset_name: Interior-Architecture-and-Design +include: _direct_kmmlu_yaml +task: kmmlu_direct_interior_architecture_and_design diff --git a/lm_eval/tasks/kmmlu/direct/kmmlu_direct_korean_history.yaml b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_korean_history.yaml new file mode 100644 index 0000000000..f1aa277a70 --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_korean_history.yaml @@ -0,0 +1,3 @@ +dataset_name: Korean-History +include: _direct_kmmlu_yaml +task: kmmlu_direct_korean_history diff --git a/lm_eval/tasks/kmmlu/direct/kmmlu_direct_law.yaml b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_law.yaml new file mode 100644 index 0000000000..602f8982f6 --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_law.yaml @@ -0,0 +1,3 @@ +dataset_name: Law +include: _direct_kmmlu_yaml +task: kmmlu_direct_law diff --git a/lm_eval/tasks/kmmlu/direct/kmmlu_direct_machine_design_and_manufacturing.yaml b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_machine_design_and_manufacturing.yaml new file mode 100644 index 0000000000..bfb923c2a9 --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_machine_design_and_manufacturing.yaml @@ -0,0 +1,3 @@ +dataset_name: Machine-Design-and-Manufacturing +include: _direct_kmmlu_yaml +task: kmmlu_direct_machine_design_and_manufacturing diff --git a/lm_eval/tasks/kmmlu/direct/kmmlu_direct_management.yaml b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_management.yaml new file mode 100644 index 0000000000..7352a1360b --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_management.yaml @@ -0,0 +1,3 @@ +dataset_name: Management +include: _direct_kmmlu_yaml +task: kmmlu_direct_management diff --git a/lm_eval/tasks/kmmlu/direct/kmmlu_direct_maritime_engineering.yaml b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_maritime_engineering.yaml new file mode 100644 index 0000000000..fa0c8f319f --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_maritime_engineering.yaml @@ -0,0 +1,3 @@ +dataset_name: Maritime-Engineering +include: _direct_kmmlu_yaml +task: kmmlu_direct_maritime_engineering diff --git a/lm_eval/tasks/kmmlu/direct/kmmlu_direct_marketing.yaml b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_marketing.yaml new file mode 100644 index 0000000000..c3b524d853 --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_marketing.yaml @@ -0,0 +1,3 @@ +dataset_name: Marketing +include: _direct_kmmlu_yaml +task: kmmlu_direct_marketing diff --git a/lm_eval/tasks/kmmlu/direct/kmmlu_direct_materials_engineering.yaml b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_materials_engineering.yaml new file mode 100644 index 0000000000..f04e0975a0 --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_materials_engineering.yaml @@ -0,0 +1,3 @@ +dataset_name: Materials-Engineering +include: _direct_kmmlu_yaml +task: kmmlu_direct_materials_engineering diff --git a/lm_eval/tasks/kmmlu/direct/kmmlu_direct_math.yaml b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_math.yaml new file mode 100644 index 0000000000..6c5d28af05 --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_math.yaml @@ -0,0 +1,3 @@ +dataset_name: Math +include: _direct_kmmlu_yaml +task: kmmlu_direct_math diff --git a/lm_eval/tasks/kmmlu/direct/kmmlu_direct_mechanical_engineering.yaml b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_mechanical_engineering.yaml new file mode 100644 index 0000000000..a253535adb --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_mechanical_engineering.yaml @@ -0,0 +1,3 @@ +dataset_name: Mechanical-Engineering +include: _direct_kmmlu_yaml +task: kmmlu_direct_mechanical_engineering diff --git a/lm_eval/tasks/kmmlu/direct/kmmlu_direct_nondestructive_testing.yaml b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_nondestructive_testing.yaml new file mode 100644 index 0000000000..3b8dc7e784 --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_nondestructive_testing.yaml @@ -0,0 +1,3 @@ +dataset_name: Nondestructive-Testing +include: _direct_kmmlu_yaml +task: kmmlu_direct_nondestructive_testing diff --git a/lm_eval/tasks/kmmlu/direct/kmmlu_direct_patent.yaml b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_patent.yaml new file mode 100644 index 0000000000..2afff2c373 --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_patent.yaml @@ -0,0 +1,3 @@ +dataset_name: Patent +include: _direct_kmmlu_yaml +task: kmmlu_direct_patent diff --git a/lm_eval/tasks/kmmlu/direct/kmmlu_direct_political_science_and_sociology.yaml b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_political_science_and_sociology.yaml new file mode 100644 index 0000000000..2209abbf05 --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_political_science_and_sociology.yaml @@ -0,0 +1,3 @@ +dataset_name: Political-Science-and-Sociology +include: _direct_kmmlu_yaml +task: kmmlu_direct_political_science_and_sociology diff --git a/lm_eval/tasks/kmmlu/direct/kmmlu_direct_psychology.yaml b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_psychology.yaml new file mode 100644 index 0000000000..140302d01f --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_psychology.yaml @@ -0,0 +1,3 @@ +dataset_name: Psychology +include: _direct_kmmlu_yaml +task: kmmlu_direct_psychology diff --git a/lm_eval/tasks/kmmlu/direct/kmmlu_direct_public_safety.yaml b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_public_safety.yaml new file mode 100644 index 0000000000..5bb16a90d1 --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_public_safety.yaml @@ -0,0 +1,3 @@ +dataset_name: Public-Safety +include: _direct_kmmlu_yaml +task: kmmlu_direct_public_safety diff --git a/lm_eval/tasks/kmmlu/direct/kmmlu_direct_railway_and_automotive_engineering.yaml b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_railway_and_automotive_engineering.yaml new file mode 100644 index 0000000000..2a13204a23 --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_railway_and_automotive_engineering.yaml @@ -0,0 +1,3 @@ +dataset_name: Railway-and-Automotive-Engineering +include: _direct_kmmlu_yaml +task: kmmlu_direct_railway_and_automotive_engineering diff --git a/lm_eval/tasks/kmmlu/direct/kmmlu_direct_real_estate.yaml b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_real_estate.yaml new file mode 100644 index 0000000000..5a5202b65d --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_real_estate.yaml @@ -0,0 +1,3 @@ +dataset_name: Real-Estate +include: _direct_kmmlu_yaml +task: kmmlu_direct_real_estate diff --git a/lm_eval/tasks/kmmlu/direct/kmmlu_direct_refrigerating_machinery.yaml b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_refrigerating_machinery.yaml new file mode 100644 index 0000000000..44f9e428bb --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_refrigerating_machinery.yaml @@ -0,0 +1,3 @@ +dataset_name: Refrigerating-Machinery +include: _direct_kmmlu_yaml +task: kmmlu_direct_refrigerating_machinery diff --git a/lm_eval/tasks/kmmlu/direct/kmmlu_direct_social_welfare.yaml b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_social_welfare.yaml new file mode 100644 index 0000000000..fa13bdff6a --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_social_welfare.yaml @@ -0,0 +1,3 @@ +dataset_name: Social-Welfare +include: _direct_kmmlu_yaml +task: kmmlu_direct_social_welfare diff --git a/lm_eval/tasks/kmmlu/direct/kmmlu_direct_taxation.yaml b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_taxation.yaml new file mode 100644 index 0000000000..69e71d6dfa --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_taxation.yaml @@ -0,0 +1,3 @@ +dataset_name: Taxation +include: _direct_kmmlu_yaml +task: kmmlu_direct_taxation diff --git a/lm_eval/tasks/kmmlu/direct/kmmlu_direct_telecommunications_and_wireless_technology.yaml b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_telecommunications_and_wireless_technology.yaml new file mode 100644 index 0000000000..f4d1fd05c8 --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct/kmmlu_direct_telecommunications_and_wireless_technology.yaml @@ -0,0 +1,3 @@ +dataset_name: Telecommunications-and-Wireless-Technology +include: _direct_kmmlu_yaml +task: kmmlu_direct_telecommunications_and_wireless_technology diff --git a/lm_eval/tasks/kmmlu/direct_hard/_direct_hard_kmmlu_yaml b/lm_eval/tasks/kmmlu/direct_hard/_direct_hard_kmmlu_yaml new file mode 100644 index 0000000000..259b5c86bd --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct_hard/_direct_hard_kmmlu_yaml @@ -0,0 +1,27 @@ +group: + - kmmlu + - kmmlu_hard_direct +dataset_path: HAERAE-HUB/KMMLU-HARD +output_type: generate_until +test_split: test +fewshot_split: dev +doc_to_text: "{{question.strip()}}\nA. {{A}}\nB. {{B}}\nC. {{C}}\nD. {{D}}\n정답:" +doc_to_target: "{{['A', 'B', 'C', 'D'][answer-1]}}" +metric_list: + - metric: exact_match + aggregation: mean + higher_is_better: true + ignore_case: true + ignore_punctuation: true + regexes_to_ignore: + - " " +generation_kwargs: + until: + - "Q:" + - "\n\n" + - "" + - "." + do_sample: false + temperature: 0.0 +metadata: + version: 2.0 diff --git a/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_accounting.yaml b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_accounting.yaml new file mode 100644 index 0000000000..ca805e955e --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_accounting.yaml @@ -0,0 +1,3 @@ +dataset_name: accounting +include: _direct_hard_kmmlu_yaml +task: kmmlu_hard_direct_accounting diff --git a/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_agricultural_sciences.yaml b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_agricultural_sciences.yaml new file mode 100644 index 0000000000..7348344468 --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_agricultural_sciences.yaml @@ -0,0 +1,3 @@ +dataset_name: agricultural_sciences +include: _direct_hard_kmmlu_yaml +task: kmmlu_hard_direct_agricultural_sciences diff --git a/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_aviation_engineering_and_maintenance.yaml b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_aviation_engineering_and_maintenance.yaml new file mode 100644 index 0000000000..25c91cb6e5 --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_aviation_engineering_and_maintenance.yaml @@ -0,0 +1,3 @@ +dataset_name: aviation_engineering_and_maintenance +include: _direct_hard_kmmlu_yaml +task: kmmlu_hard_direct_aviation_engineering_and_maintenance diff --git a/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_biology.yaml b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_biology.yaml new file mode 100644 index 0000000000..a7bc8417b0 --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_biology.yaml @@ -0,0 +1,3 @@ +dataset_name: biology +include: _direct_hard_kmmlu_yaml +task: kmmlu_hard_direct_biology diff --git a/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_chemical_engineering.yaml b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_chemical_engineering.yaml new file mode 100644 index 0000000000..063974afd2 --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_chemical_engineering.yaml @@ -0,0 +1,3 @@ +dataset_name: chemical_engineering +include: _direct_hard_kmmlu_yaml +task: kmmlu_hard_direct_chemical_engineering diff --git a/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_chemistry.yaml b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_chemistry.yaml new file mode 100644 index 0000000000..371db7bfbf --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_chemistry.yaml @@ -0,0 +1,3 @@ +dataset_name: chemistry +include: _direct_hard_kmmlu_yaml +task: kmmlu_hard_direct_chemistry diff --git a/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_civil_engineering.yaml b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_civil_engineering.yaml new file mode 100644 index 0000000000..ba2c23b2d1 --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_civil_engineering.yaml @@ -0,0 +1,3 @@ +dataset_name: civil_engineering +include: _direct_hard_kmmlu_yaml +task: kmmlu_hard_direct_civil_engineering diff --git a/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_computer_science.yaml b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_computer_science.yaml new file mode 100644 index 0000000000..2a388ff474 --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_computer_science.yaml @@ -0,0 +1,3 @@ +dataset_name: computer_science +include: _direct_hard_kmmlu_yaml +task: kmmlu_hard_direct_computer_science diff --git a/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_construction.yaml b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_construction.yaml new file mode 100644 index 0000000000..faab391b90 --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_construction.yaml @@ -0,0 +1,3 @@ +dataset_name: construction +include: _direct_hard_kmmlu_yaml +task: kmmlu_hard_direct_construction diff --git a/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_criminal_law.yaml b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_criminal_law.yaml new file mode 100644 index 0000000000..d2679f1ecd --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_criminal_law.yaml @@ -0,0 +1,3 @@ +dataset_name: criminal_law +include: _direct_hard_kmmlu_yaml +task: kmmlu_hard_direct_criminal_law diff --git a/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_ecology.yaml b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_ecology.yaml new file mode 100644 index 0000000000..adedf9d6e7 --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_ecology.yaml @@ -0,0 +1,3 @@ +dataset_name: ecology +include: _direct_hard_kmmlu_yaml +task: kmmlu_hard_direct_ecology diff --git a/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_economics.yaml b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_economics.yaml new file mode 100644 index 0000000000..f42e5b8dad --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_economics.yaml @@ -0,0 +1,3 @@ +dataset_name: economics +include: _direct_hard_kmmlu_yaml +task: kmmlu_hard_direct_economics diff --git a/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_education.yaml b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_education.yaml new file mode 100644 index 0000000000..9c90432fe2 --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_education.yaml @@ -0,0 +1,3 @@ +dataset_name: education +include: _direct_hard_kmmlu_yaml +task: kmmlu_hard_direct_education diff --git a/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_electrical_engineering.yaml b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_electrical_engineering.yaml new file mode 100644 index 0000000000..780dad2268 --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_electrical_engineering.yaml @@ -0,0 +1,3 @@ +dataset_name: electrical_engineering +include: _direct_hard_kmmlu_yaml +task: kmmlu_hard_direct_electrical_engineering diff --git a/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_electronics_engineering.yaml b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_electronics_engineering.yaml new file mode 100644 index 0000000000..e01781549f --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_electronics_engineering.yaml @@ -0,0 +1,3 @@ +dataset_name: electronics_engineering +include: _direct_hard_kmmlu_yaml +task: kmmlu_hard_direct_electronics_engineering diff --git a/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_energy_management.yaml b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_energy_management.yaml new file mode 100644 index 0000000000..d4c2ca7d64 --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_energy_management.yaml @@ -0,0 +1,3 @@ +dataset_name: energy_management +include: _direct_hard_kmmlu_yaml +task: kmmlu_hard_direct_energy_management diff --git a/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_environmental_science.yaml b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_environmental_science.yaml new file mode 100644 index 0000000000..de511a09f0 --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_environmental_science.yaml @@ -0,0 +1,3 @@ +dataset_name: environmental_science +include: _direct_hard_kmmlu_yaml +task: kmmlu_hard_direct_environmental_science diff --git a/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_fashion.yaml b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_fashion.yaml new file mode 100644 index 0000000000..26f0617dfb --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_fashion.yaml @@ -0,0 +1,3 @@ +dataset_name: fashion +include: _direct_hard_kmmlu_yaml +task: kmmlu_hard_direct_fashion diff --git a/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_food_processing.yaml b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_food_processing.yaml new file mode 100644 index 0000000000..e48143d2c3 --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_food_processing.yaml @@ -0,0 +1,3 @@ +dataset_name: food_processing +include: _direct_hard_kmmlu_yaml +task: kmmlu_hard_direct_food_processing diff --git a/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_gas_technology_and_engineering.yaml b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_gas_technology_and_engineering.yaml new file mode 100644 index 0000000000..eb5211ad85 --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_gas_technology_and_engineering.yaml @@ -0,0 +1,3 @@ +dataset_name: gas_technology_and_engineering +include: _direct_hard_kmmlu_yaml +task: kmmlu_hard_direct_gas_technology_and_engineering diff --git a/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_geomatics.yaml b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_geomatics.yaml new file mode 100644 index 0000000000..a25f3c1a7e --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_geomatics.yaml @@ -0,0 +1,3 @@ +dataset_name: geomatics +include: _direct_hard_kmmlu_yaml +task: kmmlu_hard_direct_geomatics diff --git a/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_health.yaml b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_health.yaml new file mode 100644 index 0000000000..0fef809eeb --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_health.yaml @@ -0,0 +1,3 @@ +dataset_name: health +include: _direct_hard_kmmlu_yaml +task: kmmlu_hard_direct_health diff --git a/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_industrial_engineer.yaml b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_industrial_engineer.yaml new file mode 100644 index 0000000000..d7ca26e58a --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_industrial_engineer.yaml @@ -0,0 +1,3 @@ +dataset_name: industrial_engineer +include: _direct_hard_kmmlu_yaml +task: kmmlu_hard_direct_industrial_engineer diff --git a/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_information_technology.yaml b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_information_technology.yaml new file mode 100644 index 0000000000..0f8d01ec92 --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_information_technology.yaml @@ -0,0 +1,3 @@ +dataset_name: information_technology +include: _direct_hard_kmmlu_yaml +task: kmmlu_hard_direct_information_technology diff --git a/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_interior_architecture_and_design.yaml b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_interior_architecture_and_design.yaml new file mode 100644 index 0000000000..3b1303810a --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_interior_architecture_and_design.yaml @@ -0,0 +1,3 @@ +dataset_name: interior_architecture_and_design +include: _direct_hard_kmmlu_yaml +task: kmmlu_hard_direct_interior_architecture_and_design diff --git a/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_korean_history.yaml b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_korean_history.yaml new file mode 100644 index 0000000000..c4d595d196 --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_korean_history.yaml @@ -0,0 +1,3 @@ +dataset_name: korean_history +include: _direct_hard_kmmlu_yaml +task: kmmlu_hard_direct_korean_history diff --git a/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_law.yaml b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_law.yaml new file mode 100644 index 0000000000..168f034059 --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_law.yaml @@ -0,0 +1,3 @@ +dataset_name: law +include: _direct_hard_kmmlu_yaml +task: kmmlu_hard_direct_law diff --git a/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_machine_design_and_manufacturing.yaml b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_machine_design_and_manufacturing.yaml new file mode 100644 index 0000000000..73665b1bc0 --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_machine_design_and_manufacturing.yaml @@ -0,0 +1,3 @@ +dataset_name: machine_design_and_manufacturing +include: _direct_hard_kmmlu_yaml +task: kmmlu_hard_direct_machine_design_and_manufacturing diff --git a/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_management.yaml b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_management.yaml new file mode 100644 index 0000000000..6eb945d27e --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_management.yaml @@ -0,0 +1,3 @@ +dataset_name: management +include: _direct_hard_kmmlu_yaml +task: kmmlu_hard_direct_management diff --git a/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_maritime_engineering.yaml b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_maritime_engineering.yaml new file mode 100644 index 0000000000..4078cf973b --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_maritime_engineering.yaml @@ -0,0 +1,3 @@ +dataset_name: maritime_engineering +include: _direct_hard_kmmlu_yaml +task: kmmlu_hard_direct_maritime_engineering diff --git a/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_marketing.yaml b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_marketing.yaml new file mode 100644 index 0000000000..37d62bb1ba --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_marketing.yaml @@ -0,0 +1,3 @@ +dataset_name: marketing +include: _direct_hard_kmmlu_yaml +task: kmmlu_hard_direct_marketing diff --git a/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_materials_engineering.yaml b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_materials_engineering.yaml new file mode 100644 index 0000000000..c1e2645c2b --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_materials_engineering.yaml @@ -0,0 +1,3 @@ +dataset_name: materials_engineering +include: _direct_hard_kmmlu_yaml +task: kmmlu_hard_direct_materials_engineering diff --git a/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_math.yaml b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_math.yaml new file mode 100644 index 0000000000..f5f3373a8a --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_math.yaml @@ -0,0 +1,3 @@ +dataset_name: math +include: _direct_hard_kmmlu_yaml +task: kmmlu_hard_direct_math diff --git a/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_mechanical_engineering.yaml b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_mechanical_engineering.yaml new file mode 100644 index 0000000000..dae55511a9 --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_mechanical_engineering.yaml @@ -0,0 +1,3 @@ +dataset_name: mechanical_engineering +include: _direct_hard_kmmlu_yaml +task: kmmlu_hard_direct_mechanical_engineering diff --git a/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_nondestructive_testing.yaml b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_nondestructive_testing.yaml new file mode 100644 index 0000000000..3ff9583743 --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_nondestructive_testing.yaml @@ -0,0 +1,3 @@ +dataset_name: nondestructive_testing +include: _direct_hard_kmmlu_yaml +task: kmmlu_hard_direct_nondestructive_testing diff --git a/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_patent.yaml b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_patent.yaml new file mode 100644 index 0000000000..d913752b0b --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_patent.yaml @@ -0,0 +1,3 @@ +dataset_name: patent +include: _direct_hard_kmmlu_yaml +task: kmmlu_hard_direct_patent diff --git a/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_political_science_and_sociology.yaml b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_political_science_and_sociology.yaml new file mode 100644 index 0000000000..8a5d96b600 --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_political_science_and_sociology.yaml @@ -0,0 +1,3 @@ +dataset_name: political_science_and_sociology +include: _direct_hard_kmmlu_yaml +task: kmmlu_hard_direct_political_science_and_sociology diff --git a/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_psychology.yaml b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_psychology.yaml new file mode 100644 index 0000000000..9fbf0d3191 --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_psychology.yaml @@ -0,0 +1,3 @@ +dataset_name: psychology +include: _direct_hard_kmmlu_yaml +task: kmmlu_hard_direct_psychology diff --git a/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_public_safety.yaml b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_public_safety.yaml new file mode 100644 index 0000000000..b376c4ebae --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_public_safety.yaml @@ -0,0 +1,3 @@ +dataset_name: public_safety +include: _direct_hard_kmmlu_yaml +task: kmmlu_hard_direct_public_safety diff --git a/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_railway_and_automotive_engineering.yaml b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_railway_and_automotive_engineering.yaml new file mode 100644 index 0000000000..0eb534e579 --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_railway_and_automotive_engineering.yaml @@ -0,0 +1,3 @@ +dataset_name: railway_and_automotive_engineering +include: _direct_hard_kmmlu_yaml +task: kmmlu_hard_direct_railway_and_automotive_engineering diff --git a/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_real_estate.yaml b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_real_estate.yaml new file mode 100644 index 0000000000..9c3df599ee --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_real_estate.yaml @@ -0,0 +1,3 @@ +dataset_name: real_estate +include: _direct_hard_kmmlu_yaml +task: kmmlu_hard_direct_real_estate diff --git a/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_refrigerating_machinery.yaml b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_refrigerating_machinery.yaml new file mode 100644 index 0000000000..f62e8e9559 --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_refrigerating_machinery.yaml @@ -0,0 +1,3 @@ +dataset_name: refrigerating_machinery +include: _direct_hard_kmmlu_yaml +task: kmmlu_hard_direct_refrigerating_machinery diff --git a/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_social_welfare.yaml b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_social_welfare.yaml new file mode 100644 index 0000000000..ad4dc2cf37 --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_social_welfare.yaml @@ -0,0 +1,3 @@ +dataset_name: social_welfare +include: _direct_hard_kmmlu_yaml +task: kmmlu_hard_direct_social_welfare diff --git a/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_taxation.yaml b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_taxation.yaml new file mode 100644 index 0000000000..445ab693d6 --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_taxation.yaml @@ -0,0 +1,3 @@ +dataset_name: taxation +include: _direct_hard_kmmlu_yaml +task: kmmlu_hard_direct_taxation diff --git a/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_telecommunications_and_wireless_technology.yaml b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_telecommunications_and_wireless_technology.yaml new file mode 100644 index 0000000000..498b2fb2d6 --- /dev/null +++ b/lm_eval/tasks/kmmlu/direct_hard/kmmlu_direct_hard_telecommunications_and_wireless_technology.yaml @@ -0,0 +1,3 @@ +dataset_name: telecommunications_and_wireless_technology +include: _direct_hard_kmmlu_yaml +task: kmmlu_hard_direct_telecommunications_and_wireless_technology diff --git a/lm_eval/tasks/kmmlu/_default_kmmlu_yaml b/lm_eval/tasks/kmmlu/hard/_hard_kmmlu_yaml similarity index 64% rename from lm_eval/tasks/kmmlu/_default_kmmlu_yaml rename to lm_eval/tasks/kmmlu/hard/_hard_kmmlu_yaml index 2d36f159bf..f5e97c160b 100644 --- a/lm_eval/tasks/kmmlu/_default_kmmlu_yaml +++ b/lm_eval/tasks/kmmlu/hard/_hard_kmmlu_yaml @@ -1,14 +1,13 @@ -group: kmmlu -dataset_path: HAERAE-HUB/K-MMLU-Preview +group: + - kmmlu + - kmmlu_hard +dataset_path: HAERAE-HUB/KMMLU-HARD output_type: multiple_choice -training_split: train -validation_split: dev test_split: test fewshot_split: dev -output_type: multiple_choice doc_to_text: "{{question.strip()}}\nA. {{A}}\nB. {{B}}\nC. {{C}}\nD. {{D}}\n정답:" doc_to_choice: ["A", "B", "C", "D"] -doc_to_target: "{{['A', 'B', 'C', 'D'][answer-1]}}" +doc_to_target: "{{answer-1}}" metric_list: - metric: acc aggregation: mean @@ -17,4 +16,4 @@ metric_list: aggregation: mean higher_is_better: true metadata: - version: 1.1 + version: 2.0 diff --git a/lm_eval/tasks/kmmlu/hard/kmmlu_hard_accounting.yaml b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_accounting.yaml new file mode 100644 index 0000000000..8112903b53 --- /dev/null +++ b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_accounting.yaml @@ -0,0 +1,3 @@ +dataset_name: accounting +include: _hard_kmmlu_yaml +task: kmmlu_hard_accounting diff --git a/lm_eval/tasks/kmmlu/hard/kmmlu_hard_agricultural_sciences.yaml b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_agricultural_sciences.yaml new file mode 100644 index 0000000000..3a20948b62 --- /dev/null +++ b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_agricultural_sciences.yaml @@ -0,0 +1,3 @@ +dataset_name: agricultural_sciences +include: _hard_kmmlu_yaml +task: kmmlu_hard_agricultural_sciences diff --git a/lm_eval/tasks/kmmlu/hard/kmmlu_hard_aviation_engineering_and_maintenance.yaml b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_aviation_engineering_and_maintenance.yaml new file mode 100644 index 0000000000..87b3845f28 --- /dev/null +++ b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_aviation_engineering_and_maintenance.yaml @@ -0,0 +1,3 @@ +dataset_name: aviation_engineering_and_maintenance +include: _hard_kmmlu_yaml +task: kmmlu_hard_aviation_engineering_and_maintenance diff --git a/lm_eval/tasks/kmmlu/hard/kmmlu_hard_biology.yaml b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_biology.yaml new file mode 100644 index 0000000000..0a28b7c7ca --- /dev/null +++ b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_biology.yaml @@ -0,0 +1,3 @@ +dataset_name: biology +include: _hard_kmmlu_yaml +task: kmmlu_hard_biology diff --git a/lm_eval/tasks/kmmlu/hard/kmmlu_hard_chemical_engineering.yaml b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_chemical_engineering.yaml new file mode 100644 index 0000000000..8fc448a81a --- /dev/null +++ b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_chemical_engineering.yaml @@ -0,0 +1,3 @@ +dataset_name: chemical_engineering +include: _hard_kmmlu_yaml +task: kmmlu_hard_chemical_engineering diff --git a/lm_eval/tasks/kmmlu/hard/kmmlu_hard_chemistry.yaml b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_chemistry.yaml new file mode 100644 index 0000000000..366c95026d --- /dev/null +++ b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_chemistry.yaml @@ -0,0 +1,3 @@ +dataset_name: chemistry +include: _hard_kmmlu_yaml +task: kmmlu_hard_chemistry diff --git a/lm_eval/tasks/kmmlu/hard/kmmlu_hard_civil_engineering.yaml b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_civil_engineering.yaml new file mode 100644 index 0000000000..ba1a15ad8c --- /dev/null +++ b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_civil_engineering.yaml @@ -0,0 +1,3 @@ +dataset_name: civil_engineering +include: _hard_kmmlu_yaml +task: kmmlu_hard_civil_engineering diff --git a/lm_eval/tasks/kmmlu/hard/kmmlu_hard_computer_science.yaml b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_computer_science.yaml new file mode 100644 index 0000000000..4e1f121352 --- /dev/null +++ b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_computer_science.yaml @@ -0,0 +1,3 @@ +dataset_name: computer_science +include: _hard_kmmlu_yaml +task: kmmlu_hard_computer_science diff --git a/lm_eval/tasks/kmmlu/hard/kmmlu_hard_construction.yaml b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_construction.yaml new file mode 100644 index 0000000000..8331379cf2 --- /dev/null +++ b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_construction.yaml @@ -0,0 +1,3 @@ +dataset_name: construction +include: _hard_kmmlu_yaml +task: kmmlu_hard_construction diff --git a/lm_eval/tasks/kmmlu/hard/kmmlu_hard_criminal_law.yaml b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_criminal_law.yaml new file mode 100644 index 0000000000..b7acd49a06 --- /dev/null +++ b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_criminal_law.yaml @@ -0,0 +1,3 @@ +dataset_name: criminal_law +include: _hard_kmmlu_yaml +task: kmmlu_hard_criminal_law diff --git a/lm_eval/tasks/kmmlu/hard/kmmlu_hard_ecology.yaml b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_ecology.yaml new file mode 100644 index 0000000000..6542c1eef9 --- /dev/null +++ b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_ecology.yaml @@ -0,0 +1,3 @@ +dataset_name: ecology +include: _hard_kmmlu_yaml +task: kmmlu_hard_ecology diff --git a/lm_eval/tasks/kmmlu/hard/kmmlu_hard_economics.yaml b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_economics.yaml new file mode 100644 index 0000000000..4f1bfba065 --- /dev/null +++ b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_economics.yaml @@ -0,0 +1,3 @@ +dataset_name: economics +include: _hard_kmmlu_yaml +task: kmmlu_hard_economics diff --git a/lm_eval/tasks/kmmlu/hard/kmmlu_hard_education.yaml b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_education.yaml new file mode 100644 index 0000000000..0f6a6a8078 --- /dev/null +++ b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_education.yaml @@ -0,0 +1,3 @@ +dataset_name: education +include: _hard_kmmlu_yaml +task: kmmlu_hard_education diff --git a/lm_eval/tasks/kmmlu/hard/kmmlu_hard_electrical_engineering.yaml b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_electrical_engineering.yaml new file mode 100644 index 0000000000..51625c1ec3 --- /dev/null +++ b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_electrical_engineering.yaml @@ -0,0 +1,3 @@ +dataset_name: electrical_engineering +include: _hard_kmmlu_yaml +task: kmmlu_hard_electrical_engineering diff --git a/lm_eval/tasks/kmmlu/hard/kmmlu_hard_electronics_engineering.yaml b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_electronics_engineering.yaml new file mode 100644 index 0000000000..252ecc19d5 --- /dev/null +++ b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_electronics_engineering.yaml @@ -0,0 +1,3 @@ +dataset_name: electronics_engineering +include: _hard_kmmlu_yaml +task: kmmlu_hard_electronics_engineering diff --git a/lm_eval/tasks/kmmlu/hard/kmmlu_hard_energy_management.yaml b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_energy_management.yaml new file mode 100644 index 0000000000..062204f1de --- /dev/null +++ b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_energy_management.yaml @@ -0,0 +1,3 @@ +dataset_name: energy_management +include: _hard_kmmlu_yaml +task: kmmlu_hard_energy_management diff --git a/lm_eval/tasks/kmmlu/hard/kmmlu_hard_environmental_science.yaml b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_environmental_science.yaml new file mode 100644 index 0000000000..d7f32dc5b5 --- /dev/null +++ b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_environmental_science.yaml @@ -0,0 +1,3 @@ +dataset_name: environmental_science +include: _hard_kmmlu_yaml +task: kmmlu_hard_environmental_science diff --git a/lm_eval/tasks/kmmlu/hard/kmmlu_hard_fashion.yaml b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_fashion.yaml new file mode 100644 index 0000000000..9448efcf8c --- /dev/null +++ b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_fashion.yaml @@ -0,0 +1,3 @@ +dataset_name: fashion +include: _hard_kmmlu_yaml +task: kmmlu_hard_fashion diff --git a/lm_eval/tasks/kmmlu/hard/kmmlu_hard_food_processing.yaml b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_food_processing.yaml new file mode 100644 index 0000000000..138920efbc --- /dev/null +++ b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_food_processing.yaml @@ -0,0 +1,3 @@ +dataset_name: food_processing +include: _hard_kmmlu_yaml +task: kmmlu_hard_food_processing diff --git a/lm_eval/tasks/kmmlu/hard/kmmlu_hard_gas_technology_and_engineering.yaml b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_gas_technology_and_engineering.yaml new file mode 100644 index 0000000000..14e213b583 --- /dev/null +++ b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_gas_technology_and_engineering.yaml @@ -0,0 +1,3 @@ +dataset_name: gas_technology_and_engineering +include: _hard_kmmlu_yaml +task: kmmlu_hard_gas_technology_and_engineering diff --git a/lm_eval/tasks/kmmlu/hard/kmmlu_hard_geomatics.yaml b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_geomatics.yaml new file mode 100644 index 0000000000..0370a7a755 --- /dev/null +++ b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_geomatics.yaml @@ -0,0 +1,3 @@ +dataset_name: geomatics +include: _hard_kmmlu_yaml +task: kmmlu_hard_geomatics diff --git a/lm_eval/tasks/kmmlu/hard/kmmlu_hard_health.yaml b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_health.yaml new file mode 100644 index 0000000000..c5e2ba98ad --- /dev/null +++ b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_health.yaml @@ -0,0 +1,3 @@ +dataset_name: health +include: _hard_kmmlu_yaml +task: kmmlu_hard_health diff --git a/lm_eval/tasks/kmmlu/hard/kmmlu_hard_industrial_engineer.yaml b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_industrial_engineer.yaml new file mode 100644 index 0000000000..d3cbef78bf --- /dev/null +++ b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_industrial_engineer.yaml @@ -0,0 +1,3 @@ +dataset_name: industrial_engineer +include: _hard_kmmlu_yaml +task: kmmlu_hard_industrial_engineer diff --git a/lm_eval/tasks/kmmlu/hard/kmmlu_hard_information_technology.yaml b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_information_technology.yaml new file mode 100644 index 0000000000..4af23d3030 --- /dev/null +++ b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_information_technology.yaml @@ -0,0 +1,3 @@ +dataset_name: information_technology +include: _hard_kmmlu_yaml +task: kmmlu_hard_information_technology diff --git a/lm_eval/tasks/kmmlu/hard/kmmlu_hard_interior_architecture_and_design.yaml b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_interior_architecture_and_design.yaml new file mode 100644 index 0000000000..76bfe50c34 --- /dev/null +++ b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_interior_architecture_and_design.yaml @@ -0,0 +1,3 @@ +dataset_name: interior_architecture_and_design +include: _hard_kmmlu_yaml +task: kmmlu_hard_interior_architecture_and_design diff --git a/lm_eval/tasks/kmmlu/hard/kmmlu_hard_korean_history.yaml b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_korean_history.yaml new file mode 100644 index 0000000000..60ff94e7ff --- /dev/null +++ b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_korean_history.yaml @@ -0,0 +1,3 @@ +dataset_name: korean_history +include: _hard_kmmlu_yaml +task: kmmlu_hard_korean_history diff --git a/lm_eval/tasks/kmmlu/hard/kmmlu_hard_law.yaml b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_law.yaml new file mode 100644 index 0000000000..aeec24dcd3 --- /dev/null +++ b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_law.yaml @@ -0,0 +1,3 @@ +dataset_name: law +include: _hard_kmmlu_yaml +task: kmmlu_hard_law diff --git a/lm_eval/tasks/kmmlu/hard/kmmlu_hard_machine_design_and_manufacturing.yaml b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_machine_design_and_manufacturing.yaml new file mode 100644 index 0000000000..222f89bacd --- /dev/null +++ b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_machine_design_and_manufacturing.yaml @@ -0,0 +1,3 @@ +dataset_name: machine_design_and_manufacturing +include: _hard_kmmlu_yaml +task: kmmlu_hard_machine_design_and_manufacturing diff --git a/lm_eval/tasks/kmmlu/hard/kmmlu_hard_management.yaml b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_management.yaml new file mode 100644 index 0000000000..8e9e866499 --- /dev/null +++ b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_management.yaml @@ -0,0 +1,3 @@ +dataset_name: management +include: _hard_kmmlu_yaml +task: kmmlu_hard_management diff --git a/lm_eval/tasks/kmmlu/hard/kmmlu_hard_maritime_engineering.yaml b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_maritime_engineering.yaml new file mode 100644 index 0000000000..e68041d509 --- /dev/null +++ b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_maritime_engineering.yaml @@ -0,0 +1,3 @@ +dataset_name: maritime_engineering +include: _hard_kmmlu_yaml +task: kmmlu_hard_maritime_engineering diff --git a/lm_eval/tasks/kmmlu/hard/kmmlu_hard_marketing.yaml b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_marketing.yaml new file mode 100644 index 0000000000..54a62d6272 --- /dev/null +++ b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_marketing.yaml @@ -0,0 +1,3 @@ +dataset_name: marketing +include: _hard_kmmlu_yaml +task: kmmlu_hard_marketing diff --git a/lm_eval/tasks/kmmlu/hard/kmmlu_hard_materials_engineering.yaml b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_materials_engineering.yaml new file mode 100644 index 0000000000..4582b0f3b4 --- /dev/null +++ b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_materials_engineering.yaml @@ -0,0 +1,3 @@ +dataset_name: materials_engineering +include: _hard_kmmlu_yaml +task: kmmlu_hard_materials_engineering diff --git a/lm_eval/tasks/kmmlu/hard/kmmlu_hard_math.yaml b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_math.yaml new file mode 100644 index 0000000000..e563717686 --- /dev/null +++ b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_math.yaml @@ -0,0 +1,3 @@ +dataset_name: math +include: _hard_kmmlu_yaml +task: kmmlu_hard_math diff --git a/lm_eval/tasks/kmmlu/hard/kmmlu_hard_mechanical_engineering.yaml b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_mechanical_engineering.yaml new file mode 100644 index 0000000000..9b3adca0b6 --- /dev/null +++ b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_mechanical_engineering.yaml @@ -0,0 +1,3 @@ +dataset_name: mechanical_engineering +include: _hard_kmmlu_yaml +task: kmmlu_hard_mechanical_engineering diff --git a/lm_eval/tasks/kmmlu/hard/kmmlu_hard_nondestructive_testing.yaml b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_nondestructive_testing.yaml new file mode 100644 index 0000000000..21c25fc87b --- /dev/null +++ b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_nondestructive_testing.yaml @@ -0,0 +1,3 @@ +dataset_name: nondestructive_testing +include: _hard_kmmlu_yaml +task: kmmlu_hard_nondestructive_testing diff --git a/lm_eval/tasks/kmmlu/hard/kmmlu_hard_patent.yaml b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_patent.yaml new file mode 100644 index 0000000000..3fcdcd96b1 --- /dev/null +++ b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_patent.yaml @@ -0,0 +1,3 @@ +dataset_name: patent +include: _hard_kmmlu_yaml +task: kmmlu_hard_patent diff --git a/lm_eval/tasks/kmmlu/hard/kmmlu_hard_political_science_and_sociology.yaml b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_political_science_and_sociology.yaml new file mode 100644 index 0000000000..6bb907cb10 --- /dev/null +++ b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_political_science_and_sociology.yaml @@ -0,0 +1,3 @@ +dataset_name: political_science_and_sociology +include: _hard_kmmlu_yaml +task: kmmlu_hard_political_science_and_sociology diff --git a/lm_eval/tasks/kmmlu/hard/kmmlu_hard_psychology.yaml b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_psychology.yaml new file mode 100644 index 0000000000..c79cef1f1c --- /dev/null +++ b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_psychology.yaml @@ -0,0 +1,3 @@ +dataset_name: psychology +include: _hard_kmmlu_yaml +task: kmmlu_hard_psychology diff --git a/lm_eval/tasks/kmmlu/hard/kmmlu_hard_public_safety.yaml b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_public_safety.yaml new file mode 100644 index 0000000000..110bd147e7 --- /dev/null +++ b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_public_safety.yaml @@ -0,0 +1,3 @@ +dataset_name: public_safety +include: _hard_kmmlu_yaml +task: kmmlu_hard_public_safety diff --git a/lm_eval/tasks/kmmlu/hard/kmmlu_hard_railway_and_automotive_engineering.yaml b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_railway_and_automotive_engineering.yaml new file mode 100644 index 0000000000..31b610f75e --- /dev/null +++ b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_railway_and_automotive_engineering.yaml @@ -0,0 +1,3 @@ +dataset_name: railway_and_automotive_engineering +include: _hard_kmmlu_yaml +task: kmmlu_hard_railway_and_automotive_engineering diff --git a/lm_eval/tasks/kmmlu/hard/kmmlu_hard_real_estate.yaml b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_real_estate.yaml new file mode 100644 index 0000000000..bd1b32c858 --- /dev/null +++ b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_real_estate.yaml @@ -0,0 +1,3 @@ +dataset_name: real_estate +include: _hard_kmmlu_yaml +task: kmmlu_hard_real_estate diff --git a/lm_eval/tasks/kmmlu/hard/kmmlu_hard_refrigerating_machinery.yaml b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_refrigerating_machinery.yaml new file mode 100644 index 0000000000..8c7dd13999 --- /dev/null +++ b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_refrigerating_machinery.yaml @@ -0,0 +1,3 @@ +dataset_name: refrigerating_machinery +include: _hard_kmmlu_yaml +task: kmmlu_hard_refrigerating_machinery diff --git a/lm_eval/tasks/kmmlu/hard/kmmlu_hard_social_welfare.yaml b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_social_welfare.yaml new file mode 100644 index 0000000000..12502a573e --- /dev/null +++ b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_social_welfare.yaml @@ -0,0 +1,3 @@ +dataset_name: social_welfare +include: _hard_kmmlu_yaml +task: kmmlu_hard_social_welfare diff --git a/lm_eval/tasks/kmmlu/hard/kmmlu_hard_taxation.yaml b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_taxation.yaml new file mode 100644 index 0000000000..f0f815abe4 --- /dev/null +++ b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_taxation.yaml @@ -0,0 +1,3 @@ +dataset_name: taxation +include: _hard_kmmlu_yaml +task: kmmlu_hard_taxation diff --git a/lm_eval/tasks/kmmlu/hard/kmmlu_hard_telecommunications_and_wireless_technology.yaml b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_telecommunications_and_wireless_technology.yaml new file mode 100644 index 0000000000..0cb519d11e --- /dev/null +++ b/lm_eval/tasks/kmmlu/hard/kmmlu_hard_telecommunications_and_wireless_technology.yaml @@ -0,0 +1,3 @@ +dataset_name: telecommunications_and_wireless_technology +include: _hard_kmmlu_yaml +task: kmmlu_hard_telecommunications_and_wireless_technology diff --git a/lm_eval/tasks/kmmlu/kmmlu_accounting.yaml b/lm_eval/tasks/kmmlu/kmmlu_accounting.yaml deleted file mode 100644 index 4dd694d1e3..0000000000 --- a/lm_eval/tasks/kmmlu/kmmlu_accounting.yaml +++ /dev/null @@ -1,3 +0,0 @@ -"dataset_name": "Accounting" -"include": "_default_kmmlu_yaml" -"task": "kmmlu_accounting" diff --git a/lm_eval/tasks/kmmlu/kmmlu_agricultural_sciences.yaml b/lm_eval/tasks/kmmlu/kmmlu_agricultural_sciences.yaml deleted file mode 100644 index efd4b02808..0000000000 --- a/lm_eval/tasks/kmmlu/kmmlu_agricultural_sciences.yaml +++ /dev/null @@ -1,3 +0,0 @@ -"dataset_name": "Agricultural-Sciences" -"include": "_default_kmmlu_yaml" -"task": "kmmlu_agricultural_sciences" diff --git a/lm_eval/tasks/kmmlu/kmmlu_aviation_engineering_and_maintenance.yaml b/lm_eval/tasks/kmmlu/kmmlu_aviation_engineering_and_maintenance.yaml deleted file mode 100644 index 7fb61e9425..0000000000 --- a/lm_eval/tasks/kmmlu/kmmlu_aviation_engineering_and_maintenance.yaml +++ /dev/null @@ -1,3 +0,0 @@ -"dataset_name": "Aviation-Engineering-and-Maintenance" -"include": "_default_kmmlu_yaml" -"task": "kmmlu_aviation_engineering_and_maintenance" diff --git a/lm_eval/tasks/kmmlu/kmmlu_biology.yaml b/lm_eval/tasks/kmmlu/kmmlu_biology.yaml deleted file mode 100644 index 7d905ad097..0000000000 --- a/lm_eval/tasks/kmmlu/kmmlu_biology.yaml +++ /dev/null @@ -1,3 +0,0 @@ -"dataset_name": "Biology" -"include": "_default_kmmlu_yaml" -"task": "kmmlu_biology" diff --git a/lm_eval/tasks/kmmlu/kmmlu_chemical_engineering.yaml b/lm_eval/tasks/kmmlu/kmmlu_chemical_engineering.yaml deleted file mode 100644 index d878c85c82..0000000000 --- a/lm_eval/tasks/kmmlu/kmmlu_chemical_engineering.yaml +++ /dev/null @@ -1,3 +0,0 @@ -"dataset_name": "Chemical-Engineering" -"include": "_default_kmmlu_yaml" -"task": "kmmlu_chemical_engineering" diff --git a/lm_eval/tasks/kmmlu/kmmlu_chemistry.yaml b/lm_eval/tasks/kmmlu/kmmlu_chemistry.yaml deleted file mode 100644 index 60b101e1f2..0000000000 --- a/lm_eval/tasks/kmmlu/kmmlu_chemistry.yaml +++ /dev/null @@ -1,3 +0,0 @@ -"dataset_name": "Chemistry" -"include": "_default_kmmlu_yaml" -"task": "kmmlu_chemistry" diff --git a/lm_eval/tasks/kmmlu/kmmlu_civil_engineering.yaml b/lm_eval/tasks/kmmlu/kmmlu_civil_engineering.yaml deleted file mode 100644 index 91b589756d..0000000000 --- a/lm_eval/tasks/kmmlu/kmmlu_civil_engineering.yaml +++ /dev/null @@ -1,3 +0,0 @@ -"dataset_name": "Civil-Engineering" -"include": "_default_kmmlu_yaml" -"task": "kmmlu_civil_engineering" diff --git a/lm_eval/tasks/kmmlu/kmmlu_computer_science.yaml b/lm_eval/tasks/kmmlu/kmmlu_computer_science.yaml deleted file mode 100644 index 2c8c3519f6..0000000000 --- a/lm_eval/tasks/kmmlu/kmmlu_computer_science.yaml +++ /dev/null @@ -1,3 +0,0 @@ -"dataset_name": "Computer-Science" -"include": "_default_kmmlu_yaml" -"task": "kmmlu_computer_science" diff --git a/lm_eval/tasks/kmmlu/kmmlu_construction.yaml b/lm_eval/tasks/kmmlu/kmmlu_construction.yaml deleted file mode 100644 index 7f03ad282c..0000000000 --- a/lm_eval/tasks/kmmlu/kmmlu_construction.yaml +++ /dev/null @@ -1,3 +0,0 @@ -"dataset_name": "Construction" -"include": "_default_kmmlu_yaml" -"task": "kmmlu_construction" diff --git a/lm_eval/tasks/kmmlu/kmmlu_criminal_law.yaml b/lm_eval/tasks/kmmlu/kmmlu_criminal_law.yaml deleted file mode 100644 index 66744bcddb..0000000000 --- a/lm_eval/tasks/kmmlu/kmmlu_criminal_law.yaml +++ /dev/null @@ -1,3 +0,0 @@ -"dataset_name": "Criminal-Law" -"include": "_default_kmmlu_yaml" -"task": "kmmlu_criminal_law" diff --git a/lm_eval/tasks/kmmlu/kmmlu_ecology.yaml b/lm_eval/tasks/kmmlu/kmmlu_ecology.yaml deleted file mode 100644 index ae43d55a69..0000000000 --- a/lm_eval/tasks/kmmlu/kmmlu_ecology.yaml +++ /dev/null @@ -1,3 +0,0 @@ -"dataset_name": "Ecology" -"include": "_default_kmmlu_yaml" -"task": "kmmlu_ecology" diff --git a/lm_eval/tasks/kmmlu/kmmlu_economics.yaml b/lm_eval/tasks/kmmlu/kmmlu_economics.yaml deleted file mode 100644 index 5002892dae..0000000000 --- a/lm_eval/tasks/kmmlu/kmmlu_economics.yaml +++ /dev/null @@ -1,3 +0,0 @@ -"dataset_name": "Economics" -"include": "_default_kmmlu_yaml" -"task": "kmmlu_economics" diff --git a/lm_eval/tasks/kmmlu/kmmlu_education.yaml b/lm_eval/tasks/kmmlu/kmmlu_education.yaml deleted file mode 100644 index d94a41eb66..0000000000 --- a/lm_eval/tasks/kmmlu/kmmlu_education.yaml +++ /dev/null @@ -1,3 +0,0 @@ -"dataset_name": "Education" -"include": "_default_kmmlu_yaml" -"task": "kmmlu_education" diff --git a/lm_eval/tasks/kmmlu/kmmlu_electrical_engineering.yaml b/lm_eval/tasks/kmmlu/kmmlu_electrical_engineering.yaml deleted file mode 100644 index 7ca2383c65..0000000000 --- a/lm_eval/tasks/kmmlu/kmmlu_electrical_engineering.yaml +++ /dev/null @@ -1,3 +0,0 @@ -"dataset_name": "Electrical-Engineering" -"include": "_default_kmmlu_yaml" -"task": "kmmlu_electrical_engineering" diff --git a/lm_eval/tasks/kmmlu/kmmlu_electronics_engineering.yaml b/lm_eval/tasks/kmmlu/kmmlu_electronics_engineering.yaml deleted file mode 100644 index f7f89e14ee..0000000000 --- a/lm_eval/tasks/kmmlu/kmmlu_electronics_engineering.yaml +++ /dev/null @@ -1,3 +0,0 @@ -"dataset_name": "Electronics-Engineering" -"include": "_default_kmmlu_yaml" -"task": "kmmlu_electronics_engineering" diff --git a/lm_eval/tasks/kmmlu/kmmlu_energy_management.yaml b/lm_eval/tasks/kmmlu/kmmlu_energy_management.yaml deleted file mode 100644 index b8ab602575..0000000000 --- a/lm_eval/tasks/kmmlu/kmmlu_energy_management.yaml +++ /dev/null @@ -1,3 +0,0 @@ -"dataset_name": "Energy-Management" -"include": "_default_kmmlu_yaml" -"task": "kmmlu_energy_management" diff --git a/lm_eval/tasks/kmmlu/kmmlu_environmental_science.yaml b/lm_eval/tasks/kmmlu/kmmlu_environmental_science.yaml deleted file mode 100644 index 537b7150c6..0000000000 --- a/lm_eval/tasks/kmmlu/kmmlu_environmental_science.yaml +++ /dev/null @@ -1,3 +0,0 @@ -"dataset_name": "Environmental-Science" -"include": "_default_kmmlu_yaml" -"task": "kmmlu_environmental_science" diff --git a/lm_eval/tasks/kmmlu/kmmlu_fashion.yaml b/lm_eval/tasks/kmmlu/kmmlu_fashion.yaml deleted file mode 100644 index e98bd78aff..0000000000 --- a/lm_eval/tasks/kmmlu/kmmlu_fashion.yaml +++ /dev/null @@ -1,3 +0,0 @@ -"dataset_name": "Fashion" -"include": "_default_kmmlu_yaml" -"task": "kmmlu_fashion" diff --git a/lm_eval/tasks/kmmlu/kmmlu_food_processing.yaml b/lm_eval/tasks/kmmlu/kmmlu_food_processing.yaml deleted file mode 100644 index 4e4081a467..0000000000 --- a/lm_eval/tasks/kmmlu/kmmlu_food_processing.yaml +++ /dev/null @@ -1,3 +0,0 @@ -"dataset_name": "Food-Processing" -"include": "_default_kmmlu_yaml" -"task": "kmmlu_food_processing" diff --git a/lm_eval/tasks/kmmlu/kmmlu_gas_technology_and_engineering.yaml b/lm_eval/tasks/kmmlu/kmmlu_gas_technology_and_engineering.yaml deleted file mode 100644 index 0774e55e87..0000000000 --- a/lm_eval/tasks/kmmlu/kmmlu_gas_technology_and_engineering.yaml +++ /dev/null @@ -1,3 +0,0 @@ -"dataset_name": "Gas-Technology-and-Engineering" -"include": "_default_kmmlu_yaml" -"task": "kmmlu_gas_technology_and_engineering" diff --git a/lm_eval/tasks/kmmlu/kmmlu_geomatics.yaml b/lm_eval/tasks/kmmlu/kmmlu_geomatics.yaml deleted file mode 100644 index 018108de9b..0000000000 --- a/lm_eval/tasks/kmmlu/kmmlu_geomatics.yaml +++ /dev/null @@ -1,3 +0,0 @@ -"dataset_name": "Geomatics" -"include": "_default_kmmlu_yaml" -"task": "kmmlu_geomatics" diff --git a/lm_eval/tasks/kmmlu/kmmlu_health.yaml b/lm_eval/tasks/kmmlu/kmmlu_health.yaml deleted file mode 100644 index 18926c1799..0000000000 --- a/lm_eval/tasks/kmmlu/kmmlu_health.yaml +++ /dev/null @@ -1,3 +0,0 @@ -"dataset_name": "Health" -"include": "_default_kmmlu_yaml" -"task": "kmmlu_health" diff --git a/lm_eval/tasks/kmmlu/kmmlu_industrial_engineer.yaml b/lm_eval/tasks/kmmlu/kmmlu_industrial_engineer.yaml deleted file mode 100644 index 06331808e0..0000000000 --- a/lm_eval/tasks/kmmlu/kmmlu_industrial_engineer.yaml +++ /dev/null @@ -1,3 +0,0 @@ -"dataset_name": "Industrial-Engineer" -"include": "_default_kmmlu_yaml" -"task": "kmmlu_industrial_engineer" diff --git a/lm_eval/tasks/kmmlu/kmmlu_information_technology.yaml b/lm_eval/tasks/kmmlu/kmmlu_information_technology.yaml deleted file mode 100644 index df0c5acf59..0000000000 --- a/lm_eval/tasks/kmmlu/kmmlu_information_technology.yaml +++ /dev/null @@ -1,3 +0,0 @@ -"dataset_name": "Information-Technology" -"include": "_default_kmmlu_yaml" -"task": "kmmlu_information_technology" diff --git a/lm_eval/tasks/kmmlu/kmmlu_interior_architecture_and_design.yaml b/lm_eval/tasks/kmmlu/kmmlu_interior_architecture_and_design.yaml deleted file mode 100644 index 20af698365..0000000000 --- a/lm_eval/tasks/kmmlu/kmmlu_interior_architecture_and_design.yaml +++ /dev/null @@ -1,3 +0,0 @@ -"dataset_name": "Interior-Architecture-and-Design" -"include": "_default_kmmlu_yaml" -"task": "kmmlu_interior_architecture_and_design" diff --git a/lm_eval/tasks/kmmlu/kmmlu_law.yaml b/lm_eval/tasks/kmmlu/kmmlu_law.yaml deleted file mode 100644 index e2d16071de..0000000000 --- a/lm_eval/tasks/kmmlu/kmmlu_law.yaml +++ /dev/null @@ -1,3 +0,0 @@ -"dataset_name": "Law" -"include": "_default_kmmlu_yaml" -"task": "kmmlu_law" diff --git a/lm_eval/tasks/kmmlu/kmmlu_machine_design_and_manufacturing.yaml b/lm_eval/tasks/kmmlu/kmmlu_machine_design_and_manufacturing.yaml deleted file mode 100644 index b3cb6f6661..0000000000 --- a/lm_eval/tasks/kmmlu/kmmlu_machine_design_and_manufacturing.yaml +++ /dev/null @@ -1,3 +0,0 @@ -"dataset_name": "Machine-Design-and-Manufacturing" -"include": "_default_kmmlu_yaml" -"task": "kmmlu_machine_design_and_manufacturing" diff --git a/lm_eval/tasks/kmmlu/kmmlu_management.yaml b/lm_eval/tasks/kmmlu/kmmlu_management.yaml deleted file mode 100644 index c700ad5aa6..0000000000 --- a/lm_eval/tasks/kmmlu/kmmlu_management.yaml +++ /dev/null @@ -1,3 +0,0 @@ -"dataset_name": "Management" -"include": "_default_kmmlu_yaml" -"task": "kmmlu_management" diff --git a/lm_eval/tasks/kmmlu/kmmlu_maritime_engineering.yaml b/lm_eval/tasks/kmmlu/kmmlu_maritime_engineering.yaml deleted file mode 100644 index 53c59908ca..0000000000 --- a/lm_eval/tasks/kmmlu/kmmlu_maritime_engineering.yaml +++ /dev/null @@ -1,3 +0,0 @@ -"dataset_name": "Maritime-Engineering" -"include": "_default_kmmlu_yaml" -"task": "kmmlu_maritime_engineering" diff --git a/lm_eval/tasks/kmmlu/kmmlu_marketing.yaml b/lm_eval/tasks/kmmlu/kmmlu_marketing.yaml deleted file mode 100644 index 274b148fbb..0000000000 --- a/lm_eval/tasks/kmmlu/kmmlu_marketing.yaml +++ /dev/null @@ -1,3 +0,0 @@ -"dataset_name": "Marketing" -"include": "_default_kmmlu_yaml" -"task": "kmmlu_marketing" diff --git a/lm_eval/tasks/kmmlu/kmmlu_materials_engineering.yaml b/lm_eval/tasks/kmmlu/kmmlu_materials_engineering.yaml deleted file mode 100644 index 72f3588eb0..0000000000 --- a/lm_eval/tasks/kmmlu/kmmlu_materials_engineering.yaml +++ /dev/null @@ -1,3 +0,0 @@ -"dataset_name": "Materials-Engineering" -"include": "_default_kmmlu_yaml" -"task": "kmmlu_materials_engineering" diff --git a/lm_eval/tasks/kmmlu/kmmlu_mechanical_engineering.yaml b/lm_eval/tasks/kmmlu/kmmlu_mechanical_engineering.yaml deleted file mode 100644 index a4ba08abaa..0000000000 --- a/lm_eval/tasks/kmmlu/kmmlu_mechanical_engineering.yaml +++ /dev/null @@ -1,3 +0,0 @@ -"dataset_name": "Mechanical-Engineering" -"include": "_default_kmmlu_yaml" -"task": "kmmlu_mechanical_engineering" diff --git a/lm_eval/tasks/kmmlu/kmmlu_nondestructive_testing.yaml b/lm_eval/tasks/kmmlu/kmmlu_nondestructive_testing.yaml deleted file mode 100644 index 94a5ce3cc7..0000000000 --- a/lm_eval/tasks/kmmlu/kmmlu_nondestructive_testing.yaml +++ /dev/null @@ -1,3 +0,0 @@ -"dataset_name": "Nondestructive-Testing" -"include": "_default_kmmlu_yaml" -"task": "kmmlu_nondestructive_testing" diff --git a/lm_eval/tasks/kmmlu/kmmlu_patent.yaml b/lm_eval/tasks/kmmlu/kmmlu_patent.yaml deleted file mode 100644 index 107a669195..0000000000 --- a/lm_eval/tasks/kmmlu/kmmlu_patent.yaml +++ /dev/null @@ -1,3 +0,0 @@ -"dataset_name": "Patent" -"include": "_default_kmmlu_yaml" -"task": "kmmlu_patent" diff --git a/lm_eval/tasks/kmmlu/kmmlu_political_science_and_sociology.yaml b/lm_eval/tasks/kmmlu/kmmlu_political_science_and_sociology.yaml deleted file mode 100644 index b40b4ad3ba..0000000000 --- a/lm_eval/tasks/kmmlu/kmmlu_political_science_and_sociology.yaml +++ /dev/null @@ -1,3 +0,0 @@ -"dataset_name": "Political-Science-and-Sociology" -"include": "_default_kmmlu_yaml" -"task": "kmmlu_political_science_and_sociology" diff --git a/lm_eval/tasks/kmmlu/kmmlu_psychology.yaml b/lm_eval/tasks/kmmlu/kmmlu_psychology.yaml deleted file mode 100644 index 5045044192..0000000000 --- a/lm_eval/tasks/kmmlu/kmmlu_psychology.yaml +++ /dev/null @@ -1,3 +0,0 @@ -"dataset_name": "Psychology" -"include": "_default_kmmlu_yaml" -"task": "kmmlu_psychology" diff --git a/lm_eval/tasks/kmmlu/kmmlu_public_safety.yaml b/lm_eval/tasks/kmmlu/kmmlu_public_safety.yaml deleted file mode 100644 index 38a4f52403..0000000000 --- a/lm_eval/tasks/kmmlu/kmmlu_public_safety.yaml +++ /dev/null @@ -1,3 +0,0 @@ -"dataset_name": "Public-Safety" -"include": "_default_kmmlu_yaml" -"task": "kmmlu_public_safety" diff --git a/lm_eval/tasks/kmmlu/kmmlu_railway_and_automotive_engineering.yaml b/lm_eval/tasks/kmmlu/kmmlu_railway_and_automotive_engineering.yaml deleted file mode 100644 index fd54db90ff..0000000000 --- a/lm_eval/tasks/kmmlu/kmmlu_railway_and_automotive_engineering.yaml +++ /dev/null @@ -1,3 +0,0 @@ -"dataset_name": "Railway-and-Automotive-Engineering" -"include": "_default_kmmlu_yaml" -"task": "kmmlu_railway_and_automotive_engineering" diff --git a/lm_eval/tasks/kmmlu/kmmlu_real_estate.yaml b/lm_eval/tasks/kmmlu/kmmlu_real_estate.yaml deleted file mode 100644 index 2538cd75cb..0000000000 --- a/lm_eval/tasks/kmmlu/kmmlu_real_estate.yaml +++ /dev/null @@ -1,3 +0,0 @@ -"dataset_name": "Real-Estate" -"include": "_default_kmmlu_yaml" -"task": "kmmlu_real_estate" diff --git a/lm_eval/tasks/kmmlu/kmmlu_refrigerating_machinery.yaml b/lm_eval/tasks/kmmlu/kmmlu_refrigerating_machinery.yaml deleted file mode 100644 index c300d85bef..0000000000 --- a/lm_eval/tasks/kmmlu/kmmlu_refrigerating_machinery.yaml +++ /dev/null @@ -1,3 +0,0 @@ -"dataset_name": "Refrigerating-Machinery" -"include": "_default_kmmlu_yaml" -"task": "kmmlu_refrigerating_machinery" diff --git a/lm_eval/tasks/kmmlu/kmmlu_social_welfare.yaml b/lm_eval/tasks/kmmlu/kmmlu_social_welfare.yaml deleted file mode 100644 index 4b280830b5..0000000000 --- a/lm_eval/tasks/kmmlu/kmmlu_social_welfare.yaml +++ /dev/null @@ -1,3 +0,0 @@ -"dataset_name": "Social-Welfare" -"include": "_default_kmmlu_yaml" -"task": "kmmlu_social_welfare" diff --git a/lm_eval/tasks/kmmlu/kmmlu_taxation.yaml b/lm_eval/tasks/kmmlu/kmmlu_taxation.yaml deleted file mode 100644 index be065e97f6..0000000000 --- a/lm_eval/tasks/kmmlu/kmmlu_taxation.yaml +++ /dev/null @@ -1,3 +0,0 @@ -"dataset_name": "Taxation" -"include": "_default_kmmlu_yaml" -"task": "kmmlu_taxation" diff --git a/lm_eval/tasks/kmmlu/kmmlu_telecommunications_and_wireless_technology.yaml b/lm_eval/tasks/kmmlu/kmmlu_telecommunications_and_wireless_technology.yaml deleted file mode 100644 index 4200b1e924..0000000000 --- a/lm_eval/tasks/kmmlu/kmmlu_telecommunications_and_wireless_technology.yaml +++ /dev/null @@ -1,3 +0,0 @@ -"dataset_name": "Telecommunications-and-Wireless-Technology" -"include": "_default_kmmlu_yaml" -"task": "kmmlu_telecommunications_and_wireless_technology" From ba5cdf0f537e829e0150cee8050e07c2ada6b612 Mon Sep 17 00:00:00 2001 From: Anjor Kanekar Date: Thu, 22 Feb 2024 00:39:42 +0000 Subject: [PATCH 09/20] Add TemplateLM boilerplate LM class (#1279) * loglikelihood refactor using template lm * linter * fix whitespace in target + prompt for CoT gsm8k (#1275) * Make `parallelize=True` vs. `accelerate launch` distinction clearer in docs (#1261) * Make parallelize=True distinction clearer in documentation. * run linter * Allow parameter edits for registered tasks when listed in a benchmark (#1273) * benchmark yamls allow minor edits of already registered tasks * add documentation * removed print * Fix data-parallel evaluation with quantized models (#1270) * add WIP device_map overrides * update handling outside of accelerate launcher * change .to(device) log to debug level * run linter * Rework documentation for explaining local dataset (#1284) * rewor documentation for explaining local dataset * fix typo * Update new_task_guide.md * Re-add citation It looks like Google Scholar has [already noticed](https://scholar.google.com/scholar?hl=en&as_sdt=0%2C9&authuser=2&q=%22A+framework+for+few-shot+language+model+evaluation%2C+12+2023%22&btnG=) the updated citation block so let's add it back in. * Update CITATION.bib (#1285) Bumping CITATION.bib to match re-adding the citation in readme. cc @StellaAthena * Update nq_open.yaml (#1289) * Update README.md with custom integration doc (#1298) * Update README.md * punctuation --------- Co-authored-by: Hailey Schoelkopf <65563625+haileyschoelkopf@users.noreply.github.com> * Update nq_open.yaml (#1305) * Update nq_open.yaml change regex * Bump NQ version --------- Co-authored-by: Hailey Schoelkopf <65563625+haileyschoelkopf@users.noreply.github.com> * Update task_guide.md (#1306) * Update pyproject.toml (#1312) * Fix polemo2_in.yaml config name (#1313) * Update pyproject.toml (#1314) * Fix group register (#1315) * tuple should be considered as well * set option to keep callable as callable * Update task_guide.md (#1316) * Update polemo2_in.yaml (#1318) * don't pass extra kwargs to mamba any more (#1328) * Fix Issue regarding stderr (#1327) * add fix fordeciding if stderr is N/A or not * process N/A * Add `local-completions` support using OpenAI interface (#1277) * Add `local-completions` support using OpenAI interface * Refactor oa_completion * Address tokenizer comments and change request chunks to batch size * Add warning message for tiktoken backend * fix formatting * fix whitespace * Update README.md --------- Co-authored-by: Hailey Schoelkopf <65563625+haileyschoelkopf@users.noreply.github.com> * fallback to classname when LM doesnt have config (#1334) * fix a trailing whitespace that breaks a lint job (#1335) * skip "benchmarks" in changed_tasks (#1336) * Update migrated HF dataset paths (#1332) * Update arc_easy.yaml * Update flan_cot.yaml * update HF dataset path * Update freeform.yaml * Update flan_cot.yaml --------- Co-authored-by: Lintang Sutawika * Don't use `get_task_dict()` in task registration / initialization (#1331) * don't use get_task_dict() as a helper, it will download the dataset! * pre-commit * Update README.md --------- Co-authored-by: lintangsutawika * manage default (greedy) gen_kwargs in vllm (#1341) * manage default (greedy) gen_kwargs in vllm better * mirror HF `do_sample` * just need to set temp=0 for greedy * modified default gen_kwargs to work better with CLI; changed prompt_logprobs=1 (#1345) * update links to task_guide.md (#1348) * `Filter` docs not offset by `doc_id` (#1349) * get `doc` from instance * acceletate bugfix: get ground doc from instance * convert filter to `process_result` * get docs from instances in `FilterEnsemble` * rename * nit * better looping * fix typehint * Add FAQ on `lm_eval.tasks.initialize_tasks()` to README (#1330) * Update README.md * [!Tip] * Refix issue regarding stderr (#1357) * Add causalLM OpenVino models (#1290) * added intel optimum * added intel optimum in readme * modified intel optimum * modified intel optimum * modified intel optimum * modified install optimum * modified path of IR file * added openvino_device * added openvino_device2 * changed optimum-causal to openvino-causal * Update README.md * Update README.md * remove `lm_eval.base` import * update openvino-causal -> openvino ; pass device through super().__init__() * Update README.md * Add optimum to tests dependencies * apply pre-commit * fix so tests pass --------- Co-authored-by: Hailey Schoelkopf <65563625+haileyschoelkopf@users.noreply.github.com> Co-authored-by: haileyschoelkopf * Apply some best practices and guideline recommendations to code (#1363) * raise Exception, not a string Additional info https://peps.python.org/pep-0352/#exception-hierarchy-changes https://docs.python.org/3.8/tutorial/errors.html#raising-exceptions * Apply PEP8 recommendation to prefer isinstance "Object type comparisons should always use isinstance() instead of comparing types directly" https://peps.python.org/pep-0008/ * Remove dangerous default mutable values in arguments https://pylint.readthedocs.io/en/stable/user_guide/messages/warning/dangerous-default-value.html * Format logging messages with fstring (not with format) Additional info https://pylint.readthedocs.io/en/stable/user_guide/messages/warning/logging-format-interpolation.html There are also discussions about the speed of formatting while logging or some unintended code executions https://github.com/pylint-dev/pylint/issues/2395 https://stackoverflow.com/a/54368109 but at least one format (fstring one) will be used throughout the project * Specify utf-8 encoding for `open` explicitly If not specified, it may be supposed differently in different environments, OSes, and Python versions. See https://peps.python.org/pep-0597/ https://docs.python.org/3.11/library/locale.html#locale.getencoding https://docs.python.org/3.10/library/os.html#utf8-mode https://pylint.readthedocs.io/en/stable/user_guide/messages/warning/unspecified-encoding.html Helps also if some code from English language tasks is taken as inspiration for tasks in non-English languages. * Use inline-ignoring comments to pass pre-commit instead of identity process https://flake8.pycqa.org/en/3.0.1/user/ignoring-errors.html#in-line-ignoring-errors https://www.flake8rules.com/rules/F841.html flake8 comments are supported by ruff: https://docs.astral.sh/ruff/linter/#error-suppression * serialize callable functions in config (#1367) * delay filter init; remove `*args` (#1369) * delay filter init; remove `*args` * bugfix * optimize * type hint * Fix unintuitive `--gen_kwargs` behavior (#1329) * don't override do_sample if no value for it is passed * Update gen_kwargs override condition * Update huggingface.py * Update huggingface.py * run linters * silence an erroneous warning * Publish to pypi (#1194) * publish to pypi * lint * Update publish.yml * minor * Make dependencies compatible with PyPI (#1378) * make deps not point to github urls * formatting * try making PyPI only run on tag pushes * Add support for RWKV models with World tokenizer (#1374) * Add support for RWKV models with World tokenizer The RWKV line of model with the World tokenizer, does not allow the padding token to be configured, and has its value preset as 0 This however fails all the "if set" checks, and would cause the tokenizer to crash. A tokenizer class name check was added, in addition to a model type check, as there exists RWKV models which uses the neox tokenizers * Update huggingface.py Genericized so that this supports any RWKVWorld tokenizer, and added a fall-back for if the HF implementation name changes. * Comply with formatting guidelines * fix format --------- Co-authored-by: Stella Biderman Co-authored-by: Hailey Schoelkopf <65563625+haileyschoelkopf@users.noreply.github.com> * add bypass metric (#1156) * add bypass metric * fixed `bypass` metric. * add task attributes if predict_only * add `predict_only` checks * add docs * added `overide_metric`, `override_config` to `Task` * nits * nit * changed --predict_only to generations; nits * nits * nits * change gen_kwargs warning * add note about `--predict_only` in README.md * added `predict_only` * move table to bottom * nit * change null aggregation to bypass (conflict) * bugfix; default `temp=0.0` * typo * loglikelihood refactor using template lm * lint * code review * neuron optimum * Mention TemplateLM in model_guide.md * Update lm_eval/api/model.py * fix linter * fix format * fix format * fix format --------- Co-authored-by: Hailey Schoelkopf <65563625+haileyschoelkopf@users.noreply.github.com> Co-authored-by: Lintang Sutawika Co-authored-by: Stella Biderman Co-authored-by: Mark Saroufim Co-authored-by: Hannibal046 <38466901+Hannibal046@users.noreply.github.com> Co-authored-by: Danielle Pintz <38207072+daniellepintz@users.noreply.github.com> Co-authored-by: Quentin Lhoest <42851186+lhoestq@users.noreply.github.com> Co-authored-by: kwrobel.eth Co-authored-by: Michael Goin Co-authored-by: Brian Vaughan Co-authored-by: Baber Abbasi <92168766+baberabb@users.noreply.github.com> Co-authored-by: thnkinbtfly <70014488+thnkinbtfly@users.noreply.github.com> Co-authored-by: NoushNabi <33136068+NoushNabi@users.noreply.github.com> Co-authored-by: haileyschoelkopf Co-authored-by: LSinev Co-authored-by: Eugene Cheah --- docs/model_guide.md | 2 +- lm_eval/api/model.py | 58 ++++++++++++++++++++++++++++ lm_eval/models/huggingface.py | 37 +----------------- lm_eval/models/neuron_optimum.py | 35 +---------------- lm_eval/models/openai_completions.py | 35 ++--------------- lm_eval/models/vllm_causallms.py | 35 +---------------- 6 files changed, 68 insertions(+), 134 deletions(-) diff --git a/docs/model_guide.md b/docs/model_guide.md index 72a478e0f3..e068d0b950 100644 --- a/docs/model_guide.md +++ b/docs/model_guide.md @@ -66,7 +66,7 @@ All three request types take as input `requests` of type `list[Instance]` that h - It should return `(ll,) : Tuple[float]` , a.k.a. solely the *loglikelihood* of producing each piece of text given no starting input. -To allow a model to be evaluated on all types of tasks, you will need to implement these three types of measurements (note that `loglikelihood_rolling` is a special case of `loglikelihood`). For a reference implementation, check out `lm_eval/models/huggingface.py` ! +To allow a model to be evaluated on all types of tasks, you will need to implement these three types of measurements (note that `loglikelihood_rolling` is a special case of `loglikelihood`). For a reference implementation, check out `lm_eval/models/huggingface.py` ! Additionally, check out `lm_eval.api.model.TemplateLM` for a class that abstracts away some commonly used functions across LM subclasses, or see if your model would lend itself well to subclassing the `lm_eval.models.huggingface.HFLM` class and overriding just the initialization or a couple methods! **Tip: be careful of indexing in loglikelihood!** diff --git a/lm_eval/api/model.py b/lm_eval/api/model.py index df829af592..7f93cc4394 100644 --- a/lm_eval/api/model.py +++ b/lm_eval/api/model.py @@ -247,3 +247,61 @@ def fn(requests): def get_cache_hook(self): return CacheHook(self) + + +class TemplateLM(LM): + """ + A class acting as intermediary between the LM base class + and boilerplate often included in other LM subclasses. + """ + + @property + @abc.abstractmethod + def eot_token_id(self): + pass + + @abc.abstractmethod + def tok_encode(self, string: str, **kwargs): + pass + + @abc.abstractmethod + def _loglikelihood_tokens(self, requests, **kwargs): + pass + + def _encode_pair(self, context, continuation): + n_spaces = len(context) - len(context.rstrip()) + if n_spaces > 0: + continuation = context[-n_spaces:] + continuation + context = context[:-n_spaces] + + whole_enc = self.tok_encode(context + continuation, add_special_tokens=False) + context_enc = self.tok_encode(context, add_special_tokens=False) + + context_enc_len = len(context_enc) + continuation_enc = whole_enc[context_enc_len:] + + return context_enc, continuation_enc + + def loglikelihood(self, requests) -> List[Tuple[float, bool]]: + new_reqs = [] + for context, continuation in [req.args for req in requests]: + if context == "": + # end of text as context + context_enc, continuation_enc = ( + [self.eot_token_id], + self.tok_encode(continuation), + ) + else: + context_enc, continuation_enc = self._encode_pair(context, continuation) + + new_reqs.append(((context, continuation), context_enc, continuation_enc)) + + return self._loglikelihood_tokens(new_reqs) + + @abc.abstractmethod + def loglikelihood_rolling(self, requests) -> List[Tuple[float, bool]]: + pass + + @abc.abstractmethod + def generate_until(self, requests) -> List[str]: + pass diff --git a/lm_eval/models/huggingface.py b/lm_eval/models/huggingface.py index 5d9d9947a2..cedbe00fd9 100644 --- a/lm_eval/models/huggingface.py +++ b/lm_eval/models/huggingface.py @@ -24,7 +24,7 @@ from lm_eval import utils from lm_eval.api.instance import Instance -from lm_eval.api.model import LM +from lm_eval.api.model import TemplateLM from lm_eval.api.registry import register_model from lm_eval.models.utils import ( Collator, @@ -64,7 +64,7 @@ def _get_accelerate_args( @register_model("hf-auto", "hf", "huggingface") -class HFLM(LM): +class HFLM(TemplateLM): """ An abstracted Huggingface model class. Enables usage with both models of `transformers.AutoModelForCausalLM` and `transformers.AutoModelForSeq2SeqLM` classes. @@ -780,39 +780,6 @@ def _select_cont_toks( return logits - def _encode_pair( - self, context: str, continuation: str - ) -> Tuple[List[int], List[int]]: - n_spaces = len(context) - len(context.rstrip()) - if n_spaces > 0: - continuation = context[-n_spaces:] + continuation - context = context[:-n_spaces] - - whole_enc = self.tok_encode(context + continuation, add_special_tokens=False) - context_enc = self.tok_encode(context, add_special_tokens=False) - - # whole_enc = self.tok_encode(context + continuation) - # context_enc = self.tok_encode(context, add_special_tokens=False) - context_enc_len = len(context_enc) - continuation_enc = whole_enc[context_enc_len:] - return context_enc, continuation_enc - - def loglikelihood(self, requests: List[Instance]) -> List[Tuple[float, bool]]: - new_reqs = [] - for context, continuation in [req.args for req in requests]: - if context == "": - # end of text as context - context_enc, continuation_enc = ( - [self.eot_token_id], - self.tok_encode(continuation), - ) - else: - context_enc, continuation_enc = self._encode_pair(context, continuation) - - new_reqs.append(((context, continuation), context_enc, continuation_enc)) - - return self._loglikelihood_tokens(requests=new_reqs) - def loglikelihood_rolling(self, requests: List[Instance]) -> List[float]: loglikelihoods = [] diff --git a/lm_eval/models/neuron_optimum.py b/lm_eval/models/neuron_optimum.py index d20c3be1ac..ca1421e8fe 100644 --- a/lm_eval/models/neuron_optimum.py +++ b/lm_eval/models/neuron_optimum.py @@ -15,7 +15,7 @@ import lm_eval.models.utils from lm_eval import utils -from lm_eval.api.model import LM +from lm_eval.api.model import TemplateLM from lm_eval.api.registry import register_model from lm_eval.models.utils import stop_sequences_criteria @@ -172,7 +172,7 @@ def generate( @register_model("neuronx") -class NEURON_HF(LM): +class NEURON_HF(TemplateLM): """ Enables usage with on AWS Neuron using the HuggingFace Transformers + Transformers neuronx library. @@ -447,37 +447,6 @@ def _select_cont_toks(self, logits, contlen=None, inplen=None): return logits - def _encode_pair(self, context, continuation): - n_spaces = len(context) - len(context.rstrip()) - if n_spaces > 0: - continuation = context[-n_spaces:] + continuation - context = context[:-n_spaces] - - whole_enc = self.tok_encode(context + continuation, add_special_tokens=False) - context_enc = self.tok_encode(context, add_special_tokens=False) - - # whole_enc = self.tok_encode(context + continuation) - # context_enc = self.tok_encode(context, add_special_tokens=False) - context_enc_len = len(context_enc) - continuation_enc = whole_enc[context_enc_len:] - return context_enc, continuation_enc - - def loglikelihood(self, requests): - new_reqs = [] - for context, continuation in [req.args for req in requests]: - if context == "": - # end of text as context - context_enc, continuation_enc = ( - [self.eot_token_id], - self.tok_encode(continuation), - ) - else: - context_enc, continuation_enc = self._encode_pair(context, continuation) - - new_reqs.append(((context, continuation), context_enc, continuation_enc)) - - return self._loglikelihood_tokens(new_reqs) - def loglikelihood_rolling(self, requests): loglikelihoods = [] diff --git a/lm_eval/models/openai_completions.py b/lm_eval/models/openai_completions.py index 2497aacb52..1ed09a7a92 100644 --- a/lm_eval/models/openai_completions.py +++ b/lm_eval/models/openai_completions.py @@ -8,7 +8,7 @@ import lm_eval.models.utils from lm_eval import utils -from lm_eval.api.model import LM +from lm_eval.api.model import LM, TemplateLM from lm_eval.api.registry import register_model from lm_eval.models.utils import retry_on_specific_exceptions from lm_eval.utils import eval_logger @@ -75,7 +75,7 @@ def completion(): @register_model("openai-completions", "local-completions") -class OpenaiCompletionsLM(LM): +class OpenaiCompletionsLM(TemplateLM): _DEFAULT_MAX_LENGTH = 2048 def __init__( @@ -171,41 +171,12 @@ def device(self): # Isn't used because we override _loglikelihood_tokens raise NotImplementedError() - def tok_encode(self, string: str) -> List[int]: + def tok_encode(self, string: str, **kwargs) -> List[int]: return self.tokenizer.encode(string) def tok_decode(self, tokens: List[int]) -> str: return self.tokenizer.decode(tokens) - def _encode_pair( - self, context: str, continuation: str - ) -> Tuple[List[int], List[int]]: - n_spaces = len(context) - len(context.rstrip()) - if n_spaces > 0: - continuation = context[-n_spaces:] + continuation - context = context[:-n_spaces] - whole_enc = self.tok_encode(context + continuation) - context_enc = self.tok_encode(context) - context_enc_len = len(context_enc) - continuation_enc = whole_enc[context_enc_len:] - return context_enc, continuation_enc - - def loglikelihood(self, requests) -> List[Tuple[float, bool]]: - new_reqs = [] - for context, continuation in [req.args for req in requests]: - if context == "": - # end of text as context - context_enc, continuation_enc = ( - [self.eot_token_id], - self.tok_encode(continuation), - ) - else: - context_enc, continuation_enc = self._encode_pair(context, continuation) - - new_reqs.append(((context, continuation), context_enc, continuation_enc)) - - return self._loglikelihood_tokens(new_reqs) - def _loglikelihood_tokens( self, requests, disable_tqdm: bool = False ) -> List[Tuple[float, bool]]: diff --git a/lm_eval/models/vllm_causallms.py b/lm_eval/models/vllm_causallms.py index e0894befbd..164d38c0e4 100644 --- a/lm_eval/models/vllm_causallms.py +++ b/lm_eval/models/vllm_causallms.py @@ -5,7 +5,7 @@ from tqdm import tqdm from lm_eval.api.instance import Instance -from lm_eval.api.model import LM +from lm_eval.api.model import TemplateLM from lm_eval.api.registry import register_model from lm_eval.models.utils import Collator, divide from lm_eval.utils import ( @@ -35,7 +35,7 @@ def run_inference_one_model( @register_model("vllm") -class VLLM(LM): +class VLLM(TemplateLM): _DEFAULT_MAX_LENGTH = 2048 def __init__( @@ -194,37 +194,6 @@ def _model_generate( ) return outputs - def _encode_pair( - self, context: str, continuation: str - ) -> Tuple[List[int], List[int]]: - n_spaces = len(context) - len(context.rstrip()) - if n_spaces > 0: - continuation = context[-n_spaces:] + continuation - context = context[:-n_spaces] - - whole_enc = self.tok_encode(context + continuation, add_special_tokens=False) - context_enc = self.tok_encode(context, add_special_tokens=False) - - context_enc_len = len(context_enc) - continuation_enc = whole_enc[context_enc_len:] - return context_enc, continuation_enc - - def loglikelihood(self, requests: List[Instance]) -> List[Tuple[float, bool]]: - new_reqs = [] - for context, continuation in [req.args for req in requests]: - if context == "": - # end of text as context - context_enc, continuation_enc = ( - [self.eot_token_id], - self.tok_encode(continuation), - ) - else: - context_enc, continuation_enc = self._encode_pair(context, continuation) - - new_reqs.append(((context, continuation), context_enc, continuation_enc)) - - return self._loglikelihood_tokens(new_reqs) - def loglikelihood_rolling(self, requests: List[Instance]) -> List[float]: loglikelihoods = [] From 00dc99603f16ec0d572a6dbee5a9ff092b445fa0 Mon Sep 17 00:00:00 2001 From: Hailey Schoelkopf <65563625+haileyschoelkopf@users.noreply.github.com> Date: Thu, 22 Feb 2024 09:32:41 -0500 Subject: [PATCH 10/20] Log which subtasks were called with which groups (#1456) * log group membership * no stray prints * Update evaluator.py --- lm_eval/evaluator.py | 1 + 1 file changed, 1 insertion(+) diff --git a/lm_eval/evaluator.py b/lm_eval/evaluator.py index 695093baae..1405eb070f 100644 --- a/lm_eval/evaluator.py +++ b/lm_eval/evaluator.py @@ -636,6 +636,7 @@ def print_tasks(task_hierarchy, results, tab=0): results_dict = { "results": dict(results_agg.items()), **({"groups": dict(groups_agg.items())} if bool(groups_agg) else {}), + "group_subtasks": {k: v for k, v in reversed(task_hierarchy.items())}, "configs": dict(sorted(configs.items())), "versions": dict(sorted(versions.items())), "n-shot": dict(sorted(num_fewshot.items())), From a72babbfbddd9195748351892dced4f82fccbc0d Mon Sep 17 00:00:00 2001 From: Lei Chen Date: Thu, 22 Feb 2024 09:42:04 -0500 Subject: [PATCH 11/20] PR fixing the issue #1391 (wrong contexts in the mgsm task) (#1440) * fix the issue #1391, wrong contexts in mgsm tasks * fix yaml issue for having two target_delimiter lines. For COT tasks, keep the one with a space (default) * regenerate all task yaml files - change naming so that file name will match with task name - task|file follows a consistent naming way, mgsm_(mode)_(lang) for three modes, i.e., direct, en_cot, and native_cot * English CoTs should have a space as target_delimiter * Update utils.py * Apply suggestions from code review --------- Co-authored-by: Hailey Schoelkopf <65563625+haileyschoelkopf@users.noreply.github.com> --- lm_eval/tasks/mgsm/direct/mgsm_direct_bn.yaml | 6 ++---- lm_eval/tasks/mgsm/direct/mgsm_direct_de.yaml | 6 ++---- lm_eval/tasks/mgsm/direct/mgsm_direct_en.yaml | 6 ++---- lm_eval/tasks/mgsm/direct/mgsm_direct_es.yaml | 6 ++---- lm_eval/tasks/mgsm/direct/mgsm_direct_fr.yaml | 6 ++---- lm_eval/tasks/mgsm/direct/mgsm_direct_ja.yaml | 6 ++---- lm_eval/tasks/mgsm/direct/mgsm_direct_ru.yaml | 6 ++---- lm_eval/tasks/mgsm/direct/mgsm_direct_sw.yaml | 6 ++---- lm_eval/tasks/mgsm/direct/mgsm_direct_te.yaml | 6 ++---- lm_eval/tasks/mgsm/direct/mgsm_direct_th.yaml | 6 ++---- lm_eval/tasks/mgsm/direct/mgsm_direct_zh.yaml | 6 ++---- lm_eval/tasks/mgsm/en_cot/cot_yaml | 1 - .../{mgsm_bn_en-cot.yaml => mgsm_en_cot_bn.yaml} | 4 ++-- .../{mgsm_de_en-cot.yaml => mgsm_en_cot_de.yaml} | 4 ++-- .../{mgsm_en_en-cot.yaml => mgsm_en_cot_en.yaml} | 4 ++-- .../{mgsm_es_en-cot.yaml => mgsm_en_cot_es.yaml} | 4 ++-- .../{mgsm_fr_en-cot.yaml => mgsm_en_cot_fr.yaml} | 4 ++-- .../{mgsm_ja_en-cot.yaml => mgsm_en_cot_ja.yaml} | 4 ++-- .../{mgsm_ru_en-cot.yaml => mgsm_en_cot_ru.yaml} | 4 ++-- .../{mgsm_sw_en-cot.yaml => mgsm_en_cot_sw.yaml} | 4 ++-- .../{mgsm_te_en-cot.yaml => mgsm_en_cot_te.yaml} | 4 ++-- .../{mgsm_th_en-cot.yaml => mgsm_en_cot_th.yaml} | 4 ++-- .../{mgsm_zh_en-cot.yaml => mgsm_en_cot_zh.yaml} | 4 ++-- lm_eval/tasks/mgsm/gen_yaml.sh | 5 +++++ lm_eval/tasks/mgsm/native_cot/cot_yaml | 2 +- .../tasks/mgsm/native_cot/mgsm_cot_native_bn.yaml | 8 -------- .../tasks/mgsm/native_cot/mgsm_cot_native_de.yaml | 8 -------- .../tasks/mgsm/native_cot/mgsm_cot_native_en.yaml | 8 -------- .../tasks/mgsm/native_cot/mgsm_cot_native_es.yaml | 8 -------- .../tasks/mgsm/native_cot/mgsm_cot_native_fr.yaml | 8 -------- .../tasks/mgsm/native_cot/mgsm_cot_native_ja.yaml | 8 -------- .../tasks/mgsm/native_cot/mgsm_cot_native_ru.yaml | 8 -------- .../tasks/mgsm/native_cot/mgsm_cot_native_sw.yaml | 8 -------- .../tasks/mgsm/native_cot/mgsm_cot_native_te.yaml | 8 -------- .../tasks/mgsm/native_cot/mgsm_cot_native_th.yaml | 8 -------- .../tasks/mgsm/native_cot/mgsm_cot_native_zh.yaml | 8 -------- .../tasks/mgsm/native_cot/mgsm_native_cot_bn.yaml | 12 ++++++++++++ .../tasks/mgsm/native_cot/mgsm_native_cot_de.yaml | 12 ++++++++++++ .../tasks/mgsm/native_cot/mgsm_native_cot_en.yaml | 12 ++++++++++++ .../tasks/mgsm/native_cot/mgsm_native_cot_es.yaml | 12 ++++++++++++ .../tasks/mgsm/native_cot/mgsm_native_cot_fr.yaml | 12 ++++++++++++ .../tasks/mgsm/native_cot/mgsm_native_cot_ja.yaml | 13 +++++++++++++ .../tasks/mgsm/native_cot/mgsm_native_cot_ru.yaml | 12 ++++++++++++ .../tasks/mgsm/native_cot/mgsm_native_cot_sw.yaml | 12 ++++++++++++ .../tasks/mgsm/native_cot/mgsm_native_cot_te.yaml | 12 ++++++++++++ .../tasks/mgsm/native_cot/mgsm_native_cot_th.yaml | 12 ++++++++++++ .../tasks/mgsm/native_cot/mgsm_native_cot_zh.yaml | 13 +++++++++++++ lm_eval/tasks/mgsm/utils.py | 15 +++++++++------ 48 files changed, 193 insertions(+), 162 deletions(-) rename lm_eval/tasks/mgsm/en_cot/{mgsm_bn_en-cot.yaml => mgsm_en_cot_bn.yaml} (63%) rename lm_eval/tasks/mgsm/en_cot/{mgsm_de_en-cot.yaml => mgsm_en_cot_de.yaml} (61%) rename lm_eval/tasks/mgsm/en_cot/{mgsm_en_en-cot.yaml => mgsm_en_cot_en.yaml} (62%) rename lm_eval/tasks/mgsm/en_cot/{mgsm_es_en-cot.yaml => mgsm_en_cot_es.yaml} (62%) rename lm_eval/tasks/mgsm/en_cot/{mgsm_fr_en-cot.yaml => mgsm_en_cot_fr.yaml} (62%) rename lm_eval/tasks/mgsm/en_cot/{mgsm_ja_en-cot.yaml => mgsm_en_cot_ja.yaml} (62%) rename lm_eval/tasks/mgsm/en_cot/{mgsm_ru_en-cot.yaml => mgsm_en_cot_ru.yaml} (62%) rename lm_eval/tasks/mgsm/en_cot/{mgsm_sw_en-cot.yaml => mgsm_en_cot_sw.yaml} (61%) rename lm_eval/tasks/mgsm/en_cot/{mgsm_te_en-cot.yaml => mgsm_en_cot_te.yaml} (63%) rename lm_eval/tasks/mgsm/en_cot/{mgsm_th_en-cot.yaml => mgsm_en_cot_th.yaml} (63%) rename lm_eval/tasks/mgsm/en_cot/{mgsm_zh_en-cot.yaml => mgsm_en_cot_zh.yaml} (62%) create mode 100755 lm_eval/tasks/mgsm/gen_yaml.sh delete mode 100644 lm_eval/tasks/mgsm/native_cot/mgsm_cot_native_bn.yaml delete mode 100644 lm_eval/tasks/mgsm/native_cot/mgsm_cot_native_de.yaml delete mode 100644 lm_eval/tasks/mgsm/native_cot/mgsm_cot_native_en.yaml delete mode 100644 lm_eval/tasks/mgsm/native_cot/mgsm_cot_native_es.yaml delete mode 100644 lm_eval/tasks/mgsm/native_cot/mgsm_cot_native_fr.yaml delete mode 100644 lm_eval/tasks/mgsm/native_cot/mgsm_cot_native_ja.yaml delete mode 100644 lm_eval/tasks/mgsm/native_cot/mgsm_cot_native_ru.yaml delete mode 100644 lm_eval/tasks/mgsm/native_cot/mgsm_cot_native_sw.yaml delete mode 100644 lm_eval/tasks/mgsm/native_cot/mgsm_cot_native_te.yaml delete mode 100644 lm_eval/tasks/mgsm/native_cot/mgsm_cot_native_th.yaml delete mode 100644 lm_eval/tasks/mgsm/native_cot/mgsm_cot_native_zh.yaml create mode 100644 lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_bn.yaml create mode 100644 lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_de.yaml create mode 100644 lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_en.yaml create mode 100644 lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_es.yaml create mode 100644 lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_fr.yaml create mode 100644 lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_ja.yaml create mode 100644 lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_ru.yaml create mode 100644 lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_sw.yaml create mode 100644 lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_te.yaml create mode 100644 lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_th.yaml create mode 100644 lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_zh.yaml diff --git a/lm_eval/tasks/mgsm/direct/mgsm_direct_bn.yaml b/lm_eval/tasks/mgsm/direct/mgsm_direct_bn.yaml index 7c43724ed4..d836bfb22a 100644 --- a/lm_eval/tasks/mgsm/direct/mgsm_direct_bn.yaml +++ b/lm_eval/tasks/mgsm/direct/mgsm_direct_bn.yaml @@ -1,8 +1,6 @@ # Generated by utils.py dataset_name: bn -doc_to_target: '{% if answer is not none %}{{answer[6+1]}}{% else %}{{answer_number|string}}{% - endif %}' -doc_to_text: '{% if answer is not none %}{{question+"\nAnswer"}}{% else %}{{"প্রশ্ন: - "+question+"\nAnswer"}}{% endif %}' +doc_to_target: '{% if answer is not none %}{{answer[17:]}}{% else %}{{answer_number|string}}{% endif %}' +doc_to_text: '{% if answer is not none %}{{question+"\nAnswer:"}}{% else %}{{"প্রশ্ন: "+question+"\nAnswer:"}}{% endif %}' include: direct_yaml task: mgsm_direct_bn diff --git a/lm_eval/tasks/mgsm/direct/mgsm_direct_de.yaml b/lm_eval/tasks/mgsm/direct/mgsm_direct_de.yaml index a523c0ef88..dd78df2d33 100644 --- a/lm_eval/tasks/mgsm/direct/mgsm_direct_de.yaml +++ b/lm_eval/tasks/mgsm/direct/mgsm_direct_de.yaml @@ -1,8 +1,6 @@ # Generated by utils.py dataset_name: de -doc_to_target: '{% if answer is not none %}{{answer[7+1]}}{% else %}{{answer_number|string}}{% - endif %}' -doc_to_text: '{% if answer is not none %}{{question+"\nAntwort"}}{% else %}{{"Frage: - "+question+"\nAntwort"}}{% endif %}' +doc_to_target: '{% if answer is not none %}{{answer[29:]}}{% else %}{{answer_number|string}}{% endif %}' +doc_to_text: '{% if answer is not none %}{{question+"\nAntwort:"}}{% else %}{{"Frage: "+question+"\nAntwort:"}}{% endif %}' include: direct_yaml task: mgsm_direct_de diff --git a/lm_eval/tasks/mgsm/direct/mgsm_direct_en.yaml b/lm_eval/tasks/mgsm/direct/mgsm_direct_en.yaml index 0570267f14..6d1522bb97 100644 --- a/lm_eval/tasks/mgsm/direct/mgsm_direct_en.yaml +++ b/lm_eval/tasks/mgsm/direct/mgsm_direct_en.yaml @@ -1,8 +1,6 @@ # Generated by utils.py dataset_name: en -doc_to_target: '{% if answer is not none %}{{answer[6+1]}}{% else %}{{answer_number|string}}{% - endif %}' -doc_to_text: '{% if answer is not none %}{{question+"\nAnswer"}}{% else %}{{"Question: - "+question+"\nAnswer"}}{% endif %}' +doc_to_target: '{% if answer is not none %}{{answer[21:]}}{% else %}{{answer_number|string}}{% endif %}' +doc_to_text: '{% if answer is not none %}{{question+"\nAnswer:"}}{% else %}{{"Question: "+question+"\nAnswer:"}}{% endif %}' include: direct_yaml task: mgsm_direct_en diff --git a/lm_eval/tasks/mgsm/direct/mgsm_direct_es.yaml b/lm_eval/tasks/mgsm/direct/mgsm_direct_es.yaml index 9d2f1fa38d..0d550ffa5f 100644 --- a/lm_eval/tasks/mgsm/direct/mgsm_direct_es.yaml +++ b/lm_eval/tasks/mgsm/direct/mgsm_direct_es.yaml @@ -1,8 +1,6 @@ # Generated by utils.py dataset_name: es -doc_to_target: '{% if answer is not none %}{{answer[6+1]}}{% else %}{{answer_number|string}}{% - endif %}' -doc_to_text: '{% if answer is not none %}{{question+"\nAnswer"}}{% else %}{{"Pregunta: - "+question+"\nAnswer"}}{% endif %}' +doc_to_target: '{% if answer is not none %}{{answer[23:]}}{% else %}{{answer_number|string}}{% endif %}' +doc_to_text: '{% if answer is not none %}{{question+"\nRespuesta:"}}{% else %}{{"Pregunta: "+question+"\nRespuesta:"}}{% endif %}' include: direct_yaml task: mgsm_direct_es diff --git a/lm_eval/tasks/mgsm/direct/mgsm_direct_fr.yaml b/lm_eval/tasks/mgsm/direct/mgsm_direct_fr.yaml index b39d97cec5..fd036698ca 100644 --- a/lm_eval/tasks/mgsm/direct/mgsm_direct_fr.yaml +++ b/lm_eval/tasks/mgsm/direct/mgsm_direct_fr.yaml @@ -1,8 +1,6 @@ # Generated by utils.py dataset_name: fr -doc_to_target: '{% if answer is not none %}{{answer[6+1]}}{% else %}{{answer_number|string}}{% - endif %}' -doc_to_text: '{% if answer is not none %}{{question+"\nAnswer"}}{% else %}{{"Question - : "+question+"\nAnswer"}}{% endif %}' +doc_to_target: '{% if answer is not none %}{{answer[26:]}}{% else %}{{answer_number|string}}{% endif %}' +doc_to_text: '{% if answer is not none %}{{question+"\nRéponse :"}}{% else %}{{"Question : "+question+"\nRéponse :"}}{% endif %}' include: direct_yaml task: mgsm_direct_fr diff --git a/lm_eval/tasks/mgsm/direct/mgsm_direct_ja.yaml b/lm_eval/tasks/mgsm/direct/mgsm_direct_ja.yaml index 8f81ff4314..c34ba9d0ce 100644 --- a/lm_eval/tasks/mgsm/direct/mgsm_direct_ja.yaml +++ b/lm_eval/tasks/mgsm/direct/mgsm_direct_ja.yaml @@ -1,8 +1,6 @@ # Generated by utils.py dataset_name: ja -doc_to_target: '{% if answer is not none %}{{answer[6+1]}}{% else %}{{answer_number|string}}{% - endif %}' -doc_to_text: '{% if answer is not none %}{{question+"\nAnswer"}}{% else %}{{"問題: "+question+"\nAnswer"}}{% - endif %}' +doc_to_target: '{% if answer is not none %}{{answer[11:]}}{% else %}{{answer_number|string}}{% endif %}' +doc_to_text: '{% if answer is not none %}{{question+"\nAnswer:"}}{% else %}{{"問題: "+question+"\nAnswer:"}}{% endif %}' include: direct_yaml task: mgsm_direct_ja diff --git a/lm_eval/tasks/mgsm/direct/mgsm_direct_ru.yaml b/lm_eval/tasks/mgsm/direct/mgsm_direct_ru.yaml index 01e7987f79..847774e8fe 100644 --- a/lm_eval/tasks/mgsm/direct/mgsm_direct_ru.yaml +++ b/lm_eval/tasks/mgsm/direct/mgsm_direct_ru.yaml @@ -1,8 +1,6 @@ # Generated by utils.py dataset_name: ru -doc_to_target: '{% if answer is not none %}{{answer[6+1]}}{% else %}{{answer_number|string}}{% - endif %}' -doc_to_text: '{% if answer is not none %}{{question+"\nAnswer"}}{% else %}{{"Задача: - "+question+"\nAnswer"}}{% endif %}' +doc_to_target: '{% if answer is not none %}{{answer[18:]}}{% else %}{{answer_number|string}}{% endif %}' +doc_to_text: '{% if answer is not none %}{{question+"\nAnswer:"}}{% else %}{{"Задача: "+question+"\nAnswer:"}}{% endif %}' include: direct_yaml task: mgsm_direct_ru diff --git a/lm_eval/tasks/mgsm/direct/mgsm_direct_sw.yaml b/lm_eval/tasks/mgsm/direct/mgsm_direct_sw.yaml index 7f04a7c439..03cc8637de 100644 --- a/lm_eval/tasks/mgsm/direct/mgsm_direct_sw.yaml +++ b/lm_eval/tasks/mgsm/direct/mgsm_direct_sw.yaml @@ -1,8 +1,6 @@ # Generated by utils.py dataset_name: sw -doc_to_target: '{% if answer is not none %}{{answer[6+1]}}{% else %}{{answer_number|string}}{% - endif %}' -doc_to_text: '{% if answer is not none %}{{question+"\nAnswer"}}{% else %}{{"Swali: - "+question+"\nAnswer"}}{% endif %}' +doc_to_target: '{% if answer is not none %}{{answer[25:]}}{% else %}{{answer_number|string}}{% endif %}' +doc_to_text: '{% if answer is not none %}{{question+"\nAnswer:"}}{% else %}{{"Swali: "+question+"\nAnswer:"}}{% endif %}' include: direct_yaml task: mgsm_direct_sw diff --git a/lm_eval/tasks/mgsm/direct/mgsm_direct_te.yaml b/lm_eval/tasks/mgsm/direct/mgsm_direct_te.yaml index ce0a146115..5aa1533442 100644 --- a/lm_eval/tasks/mgsm/direct/mgsm_direct_te.yaml +++ b/lm_eval/tasks/mgsm/direct/mgsm_direct_te.yaml @@ -1,8 +1,6 @@ # Generated by utils.py dataset_name: te -doc_to_target: '{% if answer is not none %}{{answer[6+1]}}{% else %}{{answer_number|string}}{% - endif %}' -doc_to_text: '{% if answer is not none %}{{question+"\nAnswer"}}{% else %}{{"ప్రశ్న: - "+question+"\nAnswer"}}{% endif %}' +doc_to_target: '{% if answer is not none %}{{answer[19:]}}{% else %}{{answer_number|string}}{% endif %}' +doc_to_text: '{% if answer is not none %}{{question+"\nAnswer:"}}{% else %}{{"ప్రశ్న: "+question+"\nAnswer:"}}{% endif %}' include: direct_yaml task: mgsm_direct_te diff --git a/lm_eval/tasks/mgsm/direct/mgsm_direct_th.yaml b/lm_eval/tasks/mgsm/direct/mgsm_direct_th.yaml index 1db7cd33c9..f7e3ce0be3 100644 --- a/lm_eval/tasks/mgsm/direct/mgsm_direct_th.yaml +++ b/lm_eval/tasks/mgsm/direct/mgsm_direct_th.yaml @@ -1,8 +1,6 @@ # Generated by utils.py dataset_name: th -doc_to_target: '{% if answer is not none %}{{answer[6+1]}}{% else %}{{answer_number|string}}{% - endif %}' -doc_to_text: '{% if answer is not none %}{{question+"\nAnswer"}}{% else %}{{"โจทย์: - "+question+"\nAnswer"}}{% endif %}' +doc_to_target: '{% if answer is not none %}{{answer[18:]}}{% else %}{{answer_number|string}}{% endif %}' +doc_to_text: '{% if answer is not none %}{{question+"\nAnswer:"}}{% else %}{{"โจทย์: "+question+"\nAnswer:"}}{% endif %}' include: direct_yaml task: mgsm_direct_th diff --git a/lm_eval/tasks/mgsm/direct/mgsm_direct_zh.yaml b/lm_eval/tasks/mgsm/direct/mgsm_direct_zh.yaml index 1b873be46a..f5daa1ab42 100644 --- a/lm_eval/tasks/mgsm/direct/mgsm_direct_zh.yaml +++ b/lm_eval/tasks/mgsm/direct/mgsm_direct_zh.yaml @@ -1,8 +1,6 @@ # Generated by utils.py dataset_name: zh -doc_to_target: '{% if answer is not none %}{{answer[6+1]}}{% else %}{{answer_number|string}}{% - endif %}' -doc_to_text: '{% if answer is not none %}{{question+"\nAnswer"}}{% else %}{{"问题: "+question+"\nAnswer"}}{% - endif %}' +doc_to_target: '{% if answer is not none %}{{answer[6:]}}{% else %}{{answer_number|string}}{% endif %}' +doc_to_text: '{% if answer is not none %}{{question+"\nAnswer:"}}{% else %}{{"问题: "+question+"\nAnswer:"}}{% endif %}' include: direct_yaml task: mgsm_direct_zh diff --git a/lm_eval/tasks/mgsm/en_cot/cot_yaml b/lm_eval/tasks/mgsm/en_cot/cot_yaml index e6f96160aa..b2217ad3b7 100644 --- a/lm_eval/tasks/mgsm/en_cot/cot_yaml +++ b/lm_eval/tasks/mgsm/en_cot/cot_yaml @@ -7,7 +7,6 @@ dataset_name: null # Overridden by language-specific config. output_type: generate_until training_split: train test_split: test -target_delimiter: "" generation_kwargs: until: - "\n\n" diff --git a/lm_eval/tasks/mgsm/en_cot/mgsm_bn_en-cot.yaml b/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_bn.yaml similarity index 63% rename from lm_eval/tasks/mgsm/en_cot/mgsm_bn_en-cot.yaml rename to lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_bn.yaml index 8cdcf4a47f..27b0e51883 100644 --- a/lm_eval/tasks/mgsm/en_cot/mgsm_bn_en-cot.yaml +++ b/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_bn.yaml @@ -1,6 +1,6 @@ # Generated by utils.py dataset_name: bn -doc_to_target: '{% if answer is not none %}{{answer[20+1]}}{% else %}{{answer_number|string}}{% endif %}' +doc_to_target: '{% if answer is not none %}{{answer[17:]}}{% else %}{{answer_number|string}}{% endif %}' doc_to_text: '{% if answer is not none %}{{question+"\nStep-by-Step Answer:"}}{% else %}{{"প্রশ্ন: "+question+"\nStep-by-Step Answer:"}}{% endif %}' include: cot_yaml -task: mgsm_bn_direct +task: mgsm_en_cot_bn diff --git a/lm_eval/tasks/mgsm/en_cot/mgsm_de_en-cot.yaml b/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_de.yaml similarity index 61% rename from lm_eval/tasks/mgsm/en_cot/mgsm_de_en-cot.yaml rename to lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_de.yaml index 01bc74fc80..75c2aaad37 100644 --- a/lm_eval/tasks/mgsm/en_cot/mgsm_de_en-cot.yaml +++ b/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_de.yaml @@ -1,6 +1,6 @@ # Generated by utils.py dataset_name: de -doc_to_target: '{% if answer is not none %}{{answer[20+1]}}{% else %}{{answer_number|string}}{% endif %}' +doc_to_target: '{% if answer is not none %}{{answer[29:]}}{% else %}{{answer_number|string}}{% endif %}' doc_to_text: '{% if answer is not none %}{{question+"\nStep-by-Step Answer:"}}{% else %}{{"Frage: "+question+"\nStep-by-Step Answer:"}}{% endif %}' include: cot_yaml -task: mgsm_de_direct +task: mgsm_en_cot_de diff --git a/lm_eval/tasks/mgsm/en_cot/mgsm_en_en-cot.yaml b/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_en.yaml similarity index 62% rename from lm_eval/tasks/mgsm/en_cot/mgsm_en_en-cot.yaml rename to lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_en.yaml index 110336f1d0..c704619453 100644 --- a/lm_eval/tasks/mgsm/en_cot/mgsm_en_en-cot.yaml +++ b/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_en.yaml @@ -1,6 +1,6 @@ # Generated by utils.py dataset_name: en -doc_to_target: '{% if answer is not none %}{{answer[20+1]}}{% else %}{{answer_number|string}}{% endif %}' +doc_to_target: '{% if answer is not none %}{{answer[21:]}}{% else %}{{answer_number|string}}{% endif %}' doc_to_text: '{% if answer is not none %}{{question+"\nStep-by-Step Answer:"}}{% else %}{{"Question: "+question+"\nStep-by-Step Answer:"}}{% endif %}' include: cot_yaml -task: mgsm_en_direct +task: mgsm_en_cot_en diff --git a/lm_eval/tasks/mgsm/en_cot/mgsm_es_en-cot.yaml b/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_es.yaml similarity index 62% rename from lm_eval/tasks/mgsm/en_cot/mgsm_es_en-cot.yaml rename to lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_es.yaml index ed63485119..9f5291bb19 100644 --- a/lm_eval/tasks/mgsm/en_cot/mgsm_es_en-cot.yaml +++ b/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_es.yaml @@ -1,6 +1,6 @@ # Generated by utils.py dataset_name: es -doc_to_target: '{% if answer is not none %}{{answer[20+1]}}{% else %}{{answer_number|string}}{% endif %}' +doc_to_target: '{% if answer is not none %}{{answer[23:]}}{% else %}{{answer_number|string}}{% endif %}' doc_to_text: '{% if answer is not none %}{{question+"\nStep-by-Step Answer:"}}{% else %}{{"Pregunta: "+question+"\nStep-by-Step Answer:"}}{% endif %}' include: cot_yaml -task: mgsm_es_direct +task: mgsm_en_cot_es diff --git a/lm_eval/tasks/mgsm/en_cot/mgsm_fr_en-cot.yaml b/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_fr.yaml similarity index 62% rename from lm_eval/tasks/mgsm/en_cot/mgsm_fr_en-cot.yaml rename to lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_fr.yaml index c9241eef28..c8744a617f 100644 --- a/lm_eval/tasks/mgsm/en_cot/mgsm_fr_en-cot.yaml +++ b/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_fr.yaml @@ -1,6 +1,6 @@ # Generated by utils.py dataset_name: fr -doc_to_target: '{% if answer is not none %}{{answer[20+1]}}{% else %}{{answer_number|string}}{% endif %}' +doc_to_target: '{% if answer is not none %}{{answer[26:]}}{% else %}{{answer_number|string}}{% endif %}' doc_to_text: '{% if answer is not none %}{{question+"\nStep-by-Step Answer:"}}{% else %}{{"Question : "+question+"\nStep-by-Step Answer:"}}{% endif %}' include: cot_yaml -task: mgsm_fr_direct +task: mgsm_en_cot_fr diff --git a/lm_eval/tasks/mgsm/en_cot/mgsm_ja_en-cot.yaml b/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_ja.yaml similarity index 62% rename from lm_eval/tasks/mgsm/en_cot/mgsm_ja_en-cot.yaml rename to lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_ja.yaml index 184ecfc5d9..fcf6d293b6 100644 --- a/lm_eval/tasks/mgsm/en_cot/mgsm_ja_en-cot.yaml +++ b/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_ja.yaml @@ -1,6 +1,6 @@ # Generated by utils.py dataset_name: ja -doc_to_target: '{% if answer is not none %}{{answer[20+1]}}{% else %}{{answer_number|string}}{% endif %}' +doc_to_target: '{% if answer is not none %}{{answer[11:]}}{% else %}{{answer_number|string}}{% endif %}' doc_to_text: '{% if answer is not none %}{{question+"\nStep-by-Step Answer:"}}{% else %}{{"問題: "+question+"\nStep-by-Step Answer:"}}{% endif %}' include: cot_yaml -task: mgsm_ja_direct +task: mgsm_en_cot_ja diff --git a/lm_eval/tasks/mgsm/en_cot/mgsm_ru_en-cot.yaml b/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_ru.yaml similarity index 62% rename from lm_eval/tasks/mgsm/en_cot/mgsm_ru_en-cot.yaml rename to lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_ru.yaml index 244d1e1ecc..be4667f742 100644 --- a/lm_eval/tasks/mgsm/en_cot/mgsm_ru_en-cot.yaml +++ b/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_ru.yaml @@ -1,6 +1,6 @@ # Generated by utils.py dataset_name: ru -doc_to_target: '{% if answer is not none %}{{answer[20+1]}}{% else %}{{answer_number|string}}{% endif %}' +doc_to_target: '{% if answer is not none %}{{answer[18:]}}{% else %}{{answer_number|string}}{% endif %}' doc_to_text: '{% if answer is not none %}{{question+"\nStep-by-Step Answer:"}}{% else %}{{"Задача: "+question+"\nStep-by-Step Answer:"}}{% endif %}' include: cot_yaml -task: mgsm_ru_direct +task: mgsm_en_cot_ru diff --git a/lm_eval/tasks/mgsm/en_cot/mgsm_sw_en-cot.yaml b/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_sw.yaml similarity index 61% rename from lm_eval/tasks/mgsm/en_cot/mgsm_sw_en-cot.yaml rename to lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_sw.yaml index 4ec09e7f7b..91643455e0 100644 --- a/lm_eval/tasks/mgsm/en_cot/mgsm_sw_en-cot.yaml +++ b/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_sw.yaml @@ -1,6 +1,6 @@ # Generated by utils.py dataset_name: sw -doc_to_target: '{% if answer is not none %}{{answer[20+1]}}{% else %}{{answer_number|string}}{% endif %}' +doc_to_target: '{% if answer is not none %}{{answer[25:]}}{% else %}{{answer_number|string}}{% endif %}' doc_to_text: '{% if answer is not none %}{{question+"\nStep-by-Step Answer:"}}{% else %}{{"Swali: "+question+"\nStep-by-Step Answer:"}}{% endif %}' include: cot_yaml -task: mgsm_sw_direct +task: mgsm_en_cot_sw diff --git a/lm_eval/tasks/mgsm/en_cot/mgsm_te_en-cot.yaml b/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_te.yaml similarity index 63% rename from lm_eval/tasks/mgsm/en_cot/mgsm_te_en-cot.yaml rename to lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_te.yaml index 97d2d47779..b87d736154 100644 --- a/lm_eval/tasks/mgsm/en_cot/mgsm_te_en-cot.yaml +++ b/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_te.yaml @@ -1,6 +1,6 @@ # Generated by utils.py dataset_name: te -doc_to_target: '{% if answer is not none %}{{answer[20+1]}}{% else %}{{answer_number|string}}{% endif %}' +doc_to_target: '{% if answer is not none %}{{answer[19:]}}{% else %}{{answer_number|string}}{% endif %}' doc_to_text: '{% if answer is not none %}{{question+"\nStep-by-Step Answer:"}}{% else %}{{"ప్రశ్న: "+question+"\nStep-by-Step Answer:"}}{% endif %}' include: cot_yaml -task: mgsm_te_direct +task: mgsm_en_cot_te diff --git a/lm_eval/tasks/mgsm/en_cot/mgsm_th_en-cot.yaml b/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_th.yaml similarity index 63% rename from lm_eval/tasks/mgsm/en_cot/mgsm_th_en-cot.yaml rename to lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_th.yaml index 2990ff8e7b..33b8be0a0f 100644 --- a/lm_eval/tasks/mgsm/en_cot/mgsm_th_en-cot.yaml +++ b/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_th.yaml @@ -1,6 +1,6 @@ # Generated by utils.py dataset_name: th -doc_to_target: '{% if answer is not none %}{{answer[20+1]}}{% else %}{{answer_number|string}}{% endif %}' +doc_to_target: '{% if answer is not none %}{{answer[18:]}}{% else %}{{answer_number|string}}{% endif %}' doc_to_text: '{% if answer is not none %}{{question+"\nStep-by-Step Answer:"}}{% else %}{{"โจทย์: "+question+"\nStep-by-Step Answer:"}}{% endif %}' include: cot_yaml -task: mgsm_th_direct +task: mgsm_en_cot_th diff --git a/lm_eval/tasks/mgsm/en_cot/mgsm_zh_en-cot.yaml b/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_zh.yaml similarity index 62% rename from lm_eval/tasks/mgsm/en_cot/mgsm_zh_en-cot.yaml rename to lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_zh.yaml index 8a3b241d7f..516d009abc 100644 --- a/lm_eval/tasks/mgsm/en_cot/mgsm_zh_en-cot.yaml +++ b/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_zh.yaml @@ -1,6 +1,6 @@ # Generated by utils.py dataset_name: zh -doc_to_target: '{% if answer is not none %}{{answer[20+1]}}{% else %}{{answer_number|string}}{% endif %}' +doc_to_target: '{% if answer is not none %}{{answer[6:]}}{% else %}{{answer_number|string}}{% endif %}' doc_to_text: '{% if answer is not none %}{{question+"\nStep-by-Step Answer:"}}{% else %}{{"问题: "+question+"\nStep-by-Step Answer:"}}{% endif %}' include: cot_yaml -task: mgsm_zh_direct +task: mgsm_en_cot_zh diff --git a/lm_eval/tasks/mgsm/gen_yaml.sh b/lm_eval/tasks/mgsm/gen_yaml.sh new file mode 100755 index 0000000000..27cbbcfdc7 --- /dev/null +++ b/lm_eval/tasks/mgsm/gen_yaml.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +python utils.py --overwrite --output-dir direct --mode direct +python utils.py --overwrite --output-dir en_cot --mode en-cot +python utils.py --overwrite --output-dir native_cot --mode native-cot diff --git a/lm_eval/tasks/mgsm/native_cot/cot_yaml b/lm_eval/tasks/mgsm/native_cot/cot_yaml index b95e36af0d..4d79f8301b 100644 --- a/lm_eval/tasks/mgsm/native_cot/cot_yaml +++ b/lm_eval/tasks/mgsm/native_cot/cot_yaml @@ -7,7 +7,7 @@ dataset_name: null # Overridden by language-specific config. output_type: generate_until training_split: train test_split: test -target_delimiter: "" +# target_delimiter: "" generation_kwargs: until: - "\n\n" diff --git a/lm_eval/tasks/mgsm/native_cot/mgsm_cot_native_bn.yaml b/lm_eval/tasks/mgsm/native_cot/mgsm_cot_native_bn.yaml deleted file mode 100644 index 76e52a7ca3..0000000000 --- a/lm_eval/tasks/mgsm/native_cot/mgsm_cot_native_bn.yaml +++ /dev/null @@ -1,8 +0,0 @@ -# Generated by utils.py -dataset_name: bn -doc_to_target: '{% if answer is not none %}{{answer[16+1]}}{% else %}{{answer_number|string}}{% - endif %}' -doc_to_text: '{% if answer is not none %}{{question+"\nধাপে ধাপে উত্তর:"}}{% else - %}{{"প্রশ্ন: "+question+"\nধাপে ধাপে উত্তর:"}}{% endif %}' -include: cot_yaml -task: mgsm_bn_native_cot diff --git a/lm_eval/tasks/mgsm/native_cot/mgsm_cot_native_de.yaml b/lm_eval/tasks/mgsm/native_cot/mgsm_cot_native_de.yaml deleted file mode 100644 index ada27858a7..0000000000 --- a/lm_eval/tasks/mgsm/native_cot/mgsm_cot_native_de.yaml +++ /dev/null @@ -1,8 +0,0 @@ -# Generated by utils.py -dataset_name: de -doc_to_target: '{% if answer is not none %}{{answer[28+1]}}{% else %}{{answer_number|string}}{% - endif %}' -doc_to_text: '{% if answer is not none %}{{question+"\nSchritt-für-Schritt-Antwort:"}}{% - else %}{{"Frage: "+question+"\nSchritt-für-Schritt-Antwort:"}}{% endif %}' -include: cot_yaml -task: mgsm_de_native_cot diff --git a/lm_eval/tasks/mgsm/native_cot/mgsm_cot_native_en.yaml b/lm_eval/tasks/mgsm/native_cot/mgsm_cot_native_en.yaml deleted file mode 100644 index c1fa07f5f0..0000000000 --- a/lm_eval/tasks/mgsm/native_cot/mgsm_cot_native_en.yaml +++ /dev/null @@ -1,8 +0,0 @@ -# Generated by utils.py -dataset_name: en -doc_to_target: '{% if answer is not none %}{{answer[20+1]}}{% else %}{{answer_number|string}}{% - endif %}' -doc_to_text: '{% if answer is not none %}{{question+"\nStep-by-Step Answer:"}}{% else - %}{{"Question: "+question+"\nStep-by-Step Answer:"}}{% endif %}' -include: cot_yaml -task: mgsm_en_native_cot diff --git a/lm_eval/tasks/mgsm/native_cot/mgsm_cot_native_es.yaml b/lm_eval/tasks/mgsm/native_cot/mgsm_cot_native_es.yaml deleted file mode 100644 index 5a0ba219c3..0000000000 --- a/lm_eval/tasks/mgsm/native_cot/mgsm_cot_native_es.yaml +++ /dev/null @@ -1,8 +0,0 @@ -# Generated by utils.py -dataset_name: es -doc_to_target: '{% if answer is not none %}{{answer[22+1]}}{% else %}{{answer_number|string}}{% - endif %}' -doc_to_text: '{% if answer is not none %}{{question+"\nRespuesta paso a paso:"}}{% - else %}{{"Pregunta: "+question+"\nRespuesta paso a paso:"}}{% endif %}' -include: cot_yaml -task: mgsm_es_native_cot diff --git a/lm_eval/tasks/mgsm/native_cot/mgsm_cot_native_fr.yaml b/lm_eval/tasks/mgsm/native_cot/mgsm_cot_native_fr.yaml deleted file mode 100644 index c1ce3ad139..0000000000 --- a/lm_eval/tasks/mgsm/native_cot/mgsm_cot_native_fr.yaml +++ /dev/null @@ -1,8 +0,0 @@ -# Generated by utils.py -dataset_name: fr -doc_to_target: '{% if answer is not none %}{{answer[25+1]}}{% else %}{{answer_number|string}}{% - endif %}' -doc_to_text: '{% if answer is not none %}{{question+"\nRéponse étape par étape :"}}{% - else %}{{"Question : "+question+"\nRéponse étape par étape :"}}{% endif %}' -include: cot_yaml -task: mgsm_fr_native_cot diff --git a/lm_eval/tasks/mgsm/native_cot/mgsm_cot_native_ja.yaml b/lm_eval/tasks/mgsm/native_cot/mgsm_cot_native_ja.yaml deleted file mode 100644 index f2866f5469..0000000000 --- a/lm_eval/tasks/mgsm/native_cot/mgsm_cot_native_ja.yaml +++ /dev/null @@ -1,8 +0,0 @@ -# Generated by utils.py -dataset_name: ja -doc_to_target: '{% if answer is not none %}{{answer[10+1]}}{% else %}{{answer_number|string}}{% - endif %}' -doc_to_text: '{% if answer is not none %}{{question+"\nステップごとの答え:"}}{% else %}{{"問題: - "+question+"\nステップごとの答え:"}}{% endif %}' -include: cot_yaml -task: mgsm_ja_native_cot diff --git a/lm_eval/tasks/mgsm/native_cot/mgsm_cot_native_ru.yaml b/lm_eval/tasks/mgsm/native_cot/mgsm_cot_native_ru.yaml deleted file mode 100644 index 00b00b0973..0000000000 --- a/lm_eval/tasks/mgsm/native_cot/mgsm_cot_native_ru.yaml +++ /dev/null @@ -1,8 +0,0 @@ -# Generated by utils.py -dataset_name: ru -doc_to_target: '{% if answer is not none %}{{answer[17+1]}}{% else %}{{answer_number|string}}{% - endif %}' -doc_to_text: '{% if answer is not none %}{{question+"\nПошаговоерешение:"}}{% else - %}{{"Задача: "+question+"\nПошаговоерешение:"}}{% endif %}' -include: cot_yaml -task: mgsm_ru_native_cot diff --git a/lm_eval/tasks/mgsm/native_cot/mgsm_cot_native_sw.yaml b/lm_eval/tasks/mgsm/native_cot/mgsm_cot_native_sw.yaml deleted file mode 100644 index 693eea2415..0000000000 --- a/lm_eval/tasks/mgsm/native_cot/mgsm_cot_native_sw.yaml +++ /dev/null @@ -1,8 +0,0 @@ -# Generated by utils.py -dataset_name: sw -doc_to_target: '{% if answer is not none %}{{answer[24+1]}}{% else %}{{answer_number|string}}{% - endif %}' -doc_to_text: '{% if answer is not none %}{{question+"\nJibu la Hatua kwa Hatua:"}}{% - else %}{{"Swali: "+question+"\nJibu la Hatua kwa Hatua:"}}{% endif %}' -include: cot_yaml -task: mgsm_sw_native_cot diff --git a/lm_eval/tasks/mgsm/native_cot/mgsm_cot_native_te.yaml b/lm_eval/tasks/mgsm/native_cot/mgsm_cot_native_te.yaml deleted file mode 100644 index 30cab55042..0000000000 --- a/lm_eval/tasks/mgsm/native_cot/mgsm_cot_native_te.yaml +++ /dev/null @@ -1,8 +0,0 @@ -# Generated by utils.py -dataset_name: te -doc_to_target: '{% if answer is not none %}{{answer[18+1]}}{% else %}{{answer_number|string}}{% - endif %}' -doc_to_text: '{% if answer is not none %}{{question+"\nదశలవారీగా సమాధానం:"}}{% else - %}{{"ప్రశ్న: "+question+"\nదశలవారీగా సమాధానం:"}}{% endif %}' -include: cot_yaml -task: mgsm_te_native_cot diff --git a/lm_eval/tasks/mgsm/native_cot/mgsm_cot_native_th.yaml b/lm_eval/tasks/mgsm/native_cot/mgsm_cot_native_th.yaml deleted file mode 100644 index 1e57000099..0000000000 --- a/lm_eval/tasks/mgsm/native_cot/mgsm_cot_native_th.yaml +++ /dev/null @@ -1,8 +0,0 @@ -# Generated by utils.py -dataset_name: th -doc_to_target: '{% if answer is not none %}{{answer[17+1]}}{% else %}{{answer_number|string}}{% - endif %}' -doc_to_text: '{% if answer is not none %}{{question+"\nคำตอบทีละขั้นตอน:"}}{% else - %}{{"โจทย์: "+question+"\nคำตอบทีละขั้นตอน:"}}{% endif %}' -include: cot_yaml -task: mgsm_th_native_cot diff --git a/lm_eval/tasks/mgsm/native_cot/mgsm_cot_native_zh.yaml b/lm_eval/tasks/mgsm/native_cot/mgsm_cot_native_zh.yaml deleted file mode 100644 index 3e1be0b3c3..0000000000 --- a/lm_eval/tasks/mgsm/native_cot/mgsm_cot_native_zh.yaml +++ /dev/null @@ -1,8 +0,0 @@ -# Generated by utils.py -dataset_name: zh -doc_to_target: '{% if answer is not none %}{{answer[5+1]}}{% else %}{{answer_number|string}}{% - endif %}' -doc_to_text: '{% if answer is not none %}{{question+"\n逐步解答:"}}{% else %}{{"问题: "+question+"\n逐步解答:"}}{% - endif %}' -include: cot_yaml -task: mgsm_zh_native_cot diff --git a/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_bn.yaml b/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_bn.yaml new file mode 100644 index 0000000000..470370287b --- /dev/null +++ b/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_bn.yaml @@ -0,0 +1,12 @@ +# Generated by utils.py +dataset_name: bn +doc_to_target: '{% if answer is not none %}{{answer[17:]}}{% else %}{{answer_number|string}}{% endif %}' +doc_to_text: '{% if answer is not none %}{{question+"\nধাপে ধাপে উত্তর:"}}{% else %}{{"প্রশ্ন: "+question+"\nধাপে ধাপে উত্তর:"}}{% endif %}' +filter_list: +- filter: + - function: regex + regex_pattern: The answer is (\-?[0-9\.\,]+) + - function: take_first + name: get-answer +include: cot_yaml +task: mgsm_native_cot_bn diff --git a/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_de.yaml b/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_de.yaml new file mode 100644 index 0000000000..84d774767b --- /dev/null +++ b/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_de.yaml @@ -0,0 +1,12 @@ +# Generated by utils.py +dataset_name: de +doc_to_target: '{% if answer is not none %}{{answer[29:]}}{% else %}{{answer_number|string}}{% endif %}' +doc_to_text: '{% if answer is not none %}{{question+"\nSchritt-für-Schritt-Antwort:"}}{% else %}{{"Frage: "+question+"\nSchritt-für-Schritt-Antwort:"}}{% endif %}' +filter_list: +- filter: + - function: regex + regex_pattern: Die Antwort lautet (\-?[0-9\.\,]+) + - function: take_first + name: get-answer +include: cot_yaml +task: mgsm_native_cot_de diff --git a/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_en.yaml b/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_en.yaml new file mode 100644 index 0000000000..4b91e3ebea --- /dev/null +++ b/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_en.yaml @@ -0,0 +1,12 @@ +# Generated by utils.py +dataset_name: en +doc_to_target: '{% if answer is not none %}{{answer[21:]}}{% else %}{{answer_number|string}}{% endif %}' +doc_to_text: '{% if answer is not none %}{{question+"\nStep-by-Step Answer:"}}{% else %}{{"Question: "+question+"\nStep-by-Step Answer:"}}{% endif %}' +filter_list: +- filter: + - function: regex + regex_pattern: The answer is (\-?[0-9\.\,]+) + - function: take_first + name: get-answer +include: cot_yaml +task: mgsm_native_cot_en diff --git a/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_es.yaml b/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_es.yaml new file mode 100644 index 0000000000..cec340dfd4 --- /dev/null +++ b/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_es.yaml @@ -0,0 +1,12 @@ +# Generated by utils.py +dataset_name: es +doc_to_target: '{% if answer is not none %}{{answer[23:]}}{% else %}{{answer_number|string}}{% endif %}' +doc_to_text: '{% if answer is not none %}{{question+"\nRespuesta paso a paso:"}}{% else %}{{"Pregunta: "+question+"\nRespuesta paso a paso:"}}{% endif %}' +filter_list: +- filter: + - function: regex + regex_pattern: La respuesta es (\-?[0-9\.\,]+) + - function: take_first + name: get-answer +include: cot_yaml +task: mgsm_native_cot_es diff --git a/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_fr.yaml b/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_fr.yaml new file mode 100644 index 0000000000..dfefc22c42 --- /dev/null +++ b/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_fr.yaml @@ -0,0 +1,12 @@ +# Generated by utils.py +dataset_name: fr +doc_to_target: '{% if answer is not none %}{{answer[26:]}}{% else %}{{answer_number|string}}{% endif %}' +doc_to_text: '{% if answer is not none %}{{question+"\nRéponse étape par étape :"}}{% else %}{{"Question : "+question+"\nRéponse étape par étape :"}}{% endif %}' +filter_list: +- filter: + - function: regex + regex_pattern: La réponse est (\-?[0-9\.\,]+) + - function: take_first + name: get-answer +include: cot_yaml +task: mgsm_native_cot_fr diff --git a/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_ja.yaml b/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_ja.yaml new file mode 100644 index 0000000000..190cb50047 --- /dev/null +++ b/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_ja.yaml @@ -0,0 +1,13 @@ +# Generated by utils.py +dataset_name: ja +doc_to_target: '{% if answer is not none %}{{answer[11:]}}{% else %}{{answer_number|string}}{% endif %}' +doc_to_text: '{% if answer is not none %}{{question+"\nステップごとの答え:"}}{% else %}{{"問題: "+question+"\nステップごとの答え:"}}{% endif %}' +filter_list: +- filter: + - function: regex + regex_pattern: 答えは(\-?[0-9\.\,]+)です。 + - function: take_first + name: get-answer +include: cot_yaml +target_delimiter: "" +task: mgsm_native_cot_ja diff --git a/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_ru.yaml b/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_ru.yaml new file mode 100644 index 0000000000..bade2b3da0 --- /dev/null +++ b/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_ru.yaml @@ -0,0 +1,12 @@ +# Generated by utils.py +dataset_name: ru +doc_to_target: '{% if answer is not none %}{{answer[18:]}}{% else %}{{answer_number|string}}{% endif %}' +doc_to_text: '{% if answer is not none %}{{question+"\nПошаговоерешение:"}}{% else %}{{"Задача: "+question+"\nПошаговоерешение:"}}{% endif %}' +filter_list: +- filter: + - function: regex + regex_pattern: Ответ — (\-?[0-9\.\,]+) + - function: take_first + name: get-answer +include: cot_yaml +task: mgsm_native_cot_ru diff --git a/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_sw.yaml b/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_sw.yaml new file mode 100644 index 0000000000..2299ee610e --- /dev/null +++ b/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_sw.yaml @@ -0,0 +1,12 @@ +# Generated by utils.py +dataset_name: sw +doc_to_target: '{% if answer is not none %}{{answer[25:]}}{% else %}{{answer_number|string}}{% endif %}' +doc_to_text: '{% if answer is not none %}{{question+"\nJibu la Hatua kwa Hatua:"}}{% else %}{{"Swali: "+question+"\nJibu la Hatua kwa Hatua:"}}{% endif %}' +filter_list: +- filter: + - function: regex + regex_pattern: Jibu ni (\-?[0-9\.\,]+) + - function: take_first + name: get-answer +include: cot_yaml +task: mgsm_native_cot_sw diff --git a/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_te.yaml b/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_te.yaml new file mode 100644 index 0000000000..53d7dd4893 --- /dev/null +++ b/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_te.yaml @@ -0,0 +1,12 @@ +# Generated by utils.py +dataset_name: te +doc_to_target: '{% if answer is not none %}{{answer[19:]}}{% else %}{{answer_number|string}}{% endif %}' +doc_to_text: '{% if answer is not none %}{{question+"\nదశలవారీగా సమాధానం:"}}{% else %}{{"ప్రశ్న: "+question+"\nదశలవారీగా సమాధానం:"}}{% endif %}' +filter_list: +- filter: + - function: regex + regex_pattern: సమాధానం (\-?[0-9\.\,]+) + - function: take_first + name: get-answer +include: cot_yaml +task: mgsm_native_cot_te diff --git a/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_th.yaml b/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_th.yaml new file mode 100644 index 0000000000..75060b5f36 --- /dev/null +++ b/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_th.yaml @@ -0,0 +1,12 @@ +# Generated by utils.py +dataset_name: th +doc_to_target: '{% if answer is not none %}{{answer[18:]}}{% else %}{{answer_number|string}}{% endif %}' +doc_to_text: '{% if answer is not none %}{{question+"\nคำตอบทีละขั้นตอน:"}}{% else %}{{"โจทย์: "+question+"\nคำตอบทีละขั้นตอน:"}}{% endif %}' +filter_list: +- filter: + - function: regex + regex_pattern: คำตอบคือ (\-?[0-9\.\,]+) + - function: take_first + name: get-answer +include: cot_yaml +task: mgsm_native_cot_th diff --git a/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_zh.yaml b/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_zh.yaml new file mode 100644 index 0000000000..0ba2d7f71c --- /dev/null +++ b/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_zh.yaml @@ -0,0 +1,13 @@ +# Generated by utils.py +dataset_name: zh +doc_to_target: '{% if answer is not none %}{{answer[6:]}}{% else %}{{answer_number|string}}{% endif %}' +doc_to_text: '{% if answer is not none %}{{question+"\n逐步解答:"}}{% else %}{{"问题: "+question+"\n逐步解答:"}}{% endif %}' +filter_list: +- filter: + - function: regex + regex_pattern: 答案是 (\-?[0-9\.\,]+)。 + - function: take_first + name: get-answer +include: cot_yaml +target_delimiter: "" +task: mgsm_native_cot_zh diff --git a/lm_eval/tasks/mgsm/utils.py b/lm_eval/tasks/mgsm/utils.py index 3edc78ab28..46af2b5591 100644 --- a/lm_eval/tasks/mgsm/utils.py +++ b/lm_eval/tasks/mgsm/utils.py @@ -128,23 +128,25 @@ def gen_lang_yamls(output_dir: str, overwrite: bool, mode: str) -> None: yaml_template = "cot_yaml" filter_list = {} + DELIMITER = None if mode == "direct": ANSWER = LANGUAGES[lang]["DIRECT"] REGEX = None - task_name = f"mgsm_{lang}_direct" + task_name = f"mgsm_direct_{lang}" yaml_template = "direct_yaml" elif mode == "native-cot": ANSWER = LANGUAGES[lang]["ANSWER"] REGEX = LANGUAGES[lang]["REGEX"] - task_name = f"mgsm_{lang}_native-cot" + task_name = f"mgsm_native_cot_{lang}" filter_list = add_regex_pattern(REGEX) + DELIMITER = "" if lang in ["zh", "ja"] elif mode == "en-cot": ANSWER = LANGUAGES["en"]["ANSWER"] REGEX = LANGUAGES["en"]["REGEX"] - task_name = f"mgsm_{lang}_en-cot" + task_name = f"mgsm_en_cot_{lang}" file_name = f"{task_name}.yaml" - + ANSWER_TO_SKIP = len(LANGUAGES[lang]["ANSWER"])+1 with open( f"{output_dir}/{file_name}", "w" if overwrite else "x", encoding="utf8" ) as f: @@ -153,18 +155,19 @@ def gen_lang_yamls(output_dir: str, overwrite: bool, mode: str) -> None: { "include": yaml_template, "dataset_name": lang, - "task": f"mgsm_{lang}_direct", + "task": f"{task_name}", "doc_to_text": f"""{{% if answer is not none %}}""" f"""{{{{question+"\\n{ANSWER}"}}}}""" f"""{{% else %}}""" f"""{{{{"{QUESTION} "+question+"\\n{ANSWER}"}}}}""" f"""{{% endif %}}""", "doc_to_target": f"""{{% if answer is not none %}}""" - f"""{{{{answer[{len(ANSWER)}+1]}}}}""" + f"""{{{{answer[{ANSWER_TO_SKIP}:]}}}}""" f"""{{% else %}}""" f"""{{{{answer_number|string}}}}""" f"""{{% endif %}}""", **filter_list, + **({"target_delimiter": DELIMITER} if DELIMITER else {}), }, f, allow_unicode=True, From 2683fbbbad6e3e4999dd4e1816f67ea175666aa6 Mon Sep 17 00:00:00 2001 From: Ayush Thakur Date: Fri, 23 Feb 2024 01:51:20 +0530 Subject: [PATCH 12/20] feat: Add Weights and Biases support (#1339) * add wandb as extra dependency * wandb metrics logging * refactor * log samples as tables * fix linter * refactor: put in a class * change dir * add panels * log eval as table * improve tables logging * improve reports logging * precommit run * ruff check * handle importing reports api gracefully * ruff * compare results * minor pre-commit fixes * build comparison report * ruff check * log results as artifacts * remove comparison script * update dependency * type annotate and docstring * add example * update readme * fix typo * teardown * handle outside wandb run * gracefully fail reports creation * precommit checks * add report url to summary * use wandb printer for better url stdout * fix ruff * handle N/A and groups * fix eval table * remove unused var * update wandb version req + disable reports stdout * remove reports feature to TODO * add label to multi-choice question data * log model predictions * lints * loglikelihood_rolling * log eval result for groups * log tables by group for better handling * precommit * choices column for multi-choice * graciously fail wandb * remove reports feature * track system metrics + total eval time + stdout --------- Co-authored-by: Lintang Sutawika --- .gitignore | 2 + README.md | 39 ++++ examples/visualize-wandb.ipynb | 130 +++++++++++ lm_eval/__main__.py | 23 ++ lm_eval/logging_utils.py | 386 +++++++++++++++++++++++++++++++++ pyproject.toml | 2 + 6 files changed, 582 insertions(+) create mode 100644 examples/visualize-wandb.ipynb create mode 100644 lm_eval/logging_utils.py diff --git a/.gitignore b/.gitignore index 0e5028fb11..aff34b70f6 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,5 @@ temp # IPython profile_default/ ipython_config.py +wandb +examples/wandb diff --git a/README.md b/README.md index 5ae743d91b..79455bfe60 100644 --- a/README.md +++ b/README.md @@ -245,6 +245,10 @@ For a full list of supported arguments, check out the [interface](https://github ## Visualizing Results +You can seamlessly visualize and analyze the results of your evaluation harness runs using both Weights & Biases (W&B) and Zeno. + +### Zeno + You can use [Zeno](https://zenoml.com) to visualize the results of your eval harness runs. First, head to [hub.zenoml.com](https://hub.zenoml.com) to create an account and get an API key [on your account page](https://hub.zenoml.com/account). @@ -284,6 +288,41 @@ If you run the eval harness on multiple tasks, the `project_name` will be used a You can find an example of this workflow in [examples/visualize-zeno.ipynb](examples/visualize-zeno.ipynb). +### Weights and Biases + +With the [Weights and Biases](https://wandb.ai/site) integration, you can now spend more time extracting deeper insights into your evaluation results. The integration is designed to streamline the process of logging and visualizing experiment results using the Weights & Biases (W&B) platform. + +The integration provide functionalities + +- to automatically log the evaluation results, +- log the samples as W&B Tables for easy visualization, +- log the `results.json` file as an artifact for version control, +- log the `_eval_samples.json` file if the samples are logged, +- generate a comprehensive report for analysis and visualization with all the important metric, +- log task and cli specific configs, +- and more out of the box like the command used to run the evaluation, GPU/CPU counts, timestamp, etc. + +First you'll need to install the lm_eval[wandb] package extra. Do `pip install lm_eval[wandb]`. + +Authenticate your machine with an your unique W&B token. Visit https://wandb.ai/authorize to get one. Do `wandb login` in your command line terminal. + +Run eval harness as usual with a `wandb_args` flag. Use this flag to provide arguments for initializing a wandb run ([wandb.init](https://docs.wandb.ai/ref/python/init)) as comma separated string arguments. + +```bash +lm_eval \ + --model hf \ + --model_args pretrained=microsoft/phi-2,trust_remote_code=True \ + --tasks hellaswag,mmlu_abstract_algebra \ + --device cuda:0 \ + --batch_size 8 \ + --output_path output/phi-2 \ + --limit 10 \ + --wandb_args project=lm-eval-harness-integration \ + --log_samples +``` + +In the stdout, you will find the link to the W&B run page as well as link to the generated report. You can find an example of this workflow in [examples/visualize-wandb.ipynb](examples/visualize-wandb.ipynb). + ## How to Contribute or Learn More? For more information on the library and how everything fits together, check out all of our [documentation pages](https://github.com/EleutherAI/lm-evaluation-harness/tree/main/docs)! We plan to post a larger roadmap of desired + planned library improvements soon, with more information on how contributors can help. diff --git a/examples/visualize-wandb.ipynb b/examples/visualize-wandb.ipynb new file mode 100644 index 0000000000..ed8df37741 --- /dev/null +++ b/examples/visualize-wandb.ipynb @@ -0,0 +1,130 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "fc477b96-adee-4829-a9d7-a5eb990df358", + "metadata": {}, + "source": [ + "# Visualizing Results in Weights and Biases\n", + "\n", + "With the Weights and Biases integration, you can now spend more time extracting deeper insights into your evaluation results. The integration is designed to streamline the process of logging and visualizing experiment results using the Weights & Biases (W&B) platform.\n", + "\n", + "The integration provide functionalities\n", + "\n", + "- to automatically log the evaluation results,\n", + "- log the samples as W&B Tables for easy visualization,\n", + "- log the `results.json` file as an artifact for version control,\n", + "- log the `_eval_samples.json` file if the samples are logged,\n", + "- generate a comprehensive report for analysis and visualization with all the important metric,\n", + "- log task and cli configs,\n", + "- and more out of the box like the command used to run the evaluation, GPU/CPU counts, timestamp, etc.\n", + "\n", + "The integration is super easy to use with the eval harness. Let's see how!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3851439a-bff4-41f2-bf21-1b3d8704913b", + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "# Install this project if you did not already have it.\n", + "# This is all that is needed to be installed to start using Weights and Biases\n", + "\n", + "!pip -qq install -e ..[wandb]" + ] + }, + { + "cell_type": "markdown", + "id": "8507fd7e-3b99-4a92-89fa-9eaada74ba91", + "metadata": {}, + "source": [ + "# Run the Eval Harness\n", + "\n", + "Run the eval harness as usual with a `wandb_args` flag. This flag is used to provide arguments for initializing a wandb run ([wandb.init](https://docs.wandb.ai/ref/python/init)) as comma separated string arguments.\n", + "\n", + "If `wandb_args` flag is used, the metrics and all other goodness will be automatically logged to Weights and Biases. In the stdout, you will find the link to the W&B run page as well as link to the generated report." + ] + }, + { + "cell_type": "markdown", + "id": "eec5866e-f01e-42f8-8803-9d77472ef991", + "metadata": {}, + "source": [ + "## Set your API Key\n", + "\n", + "Before you can use W&B, you need to authenticate your machine with an authentication key. Visit https://wandb.ai/authorize to get one." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d824d163-71a9-4313-935d-f1d56397841c", + "metadata": {}, + "outputs": [], + "source": [ + "import wandb\n", + "wandb.login()" + ] + }, + { + "cell_type": "markdown", + "id": "124e4a34-1547-4bed-bc09-db012bacbda6", + "metadata": {}, + "source": [ + "> Note that if you are using command line you can simply authenticate your machine by doing `wandb login` in your terminal. For more info check out the [documentation](https://docs.wandb.ai/quickstart#2-log-in-to-wb)." + ] + }, + { + "cell_type": "markdown", + "id": "abc6f6b6-179a-4aff-ada9-f380fb74df6e", + "metadata": {}, + "source": [ + "## Run and log to W&B" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bd0a8130-a97b-451a-acd2-3f9885b88643", + "metadata": {}, + "outputs": [], + "source": [ + "!lm_eval \\\n", + " --model hf \\\n", + " --model_args pretrained=microsoft/phi-2,trust_remote_code=True \\\n", + " --tasks hellaswag,mmlu_abstract_algebra \\\n", + " --device cuda:0 \\\n", + " --batch_size 8 \\\n", + " --output_path output/phi-2 \\\n", + " --limit 10 \\\n", + " --wandb_args project=lm-eval-harness-integration \\\n", + " --log_samples" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/lm_eval/__main__.py b/lm_eval/__main__.py index fc3c5857a4..8b02446d3b 100644 --- a/lm_eval/__main__.py +++ b/lm_eval/__main__.py @@ -11,6 +11,7 @@ import numpy as np from lm_eval import evaluator, utils +from lm_eval.logging_utils import WandbLogger from lm_eval.tasks import TaskManager, include_path, initialize_tasks from lm_eval.utils import make_table @@ -167,6 +168,11 @@ def parse_eval_args() -> argparse.Namespace: metavar="CRITICAL|ERROR|WARNING|INFO|DEBUG", help="Controls the reported logging error level. Set to DEBUG when testing + adding new task configurations for comprehensive log output.", ) + parser.add_argument( + "--wandb_args", + default="", + help="Comma separated string arguments passed to wandb.init, e.g. `project=lm-eval,job_type=eval", + ) parser.add_argument( "--predict_only", "-x", @@ -195,6 +201,9 @@ def cli_evaluate(args: Union[argparse.Namespace, None] = None) -> None: # we allow for args to be passed externally, else we parse them ourselves args = parse_eval_args() + if args.wandb_args: + wandb_logger = WandbLogger(args) + eval_logger = utils.eval_logger eval_logger.setLevel(getattr(logging, f"{args.verbosity}")) eval_logger.info(f"Verbosity set to {args.verbosity}") @@ -309,6 +318,16 @@ def cli_evaluate(args: Union[argparse.Namespace, None] = None) -> None: batch_sizes = ",".join(map(str, results["config"]["batch_sizes"])) + # Add W&B logging + if args.wandb_args: + try: + wandb_logger.post_init(results) + wandb_logger.log_eval_result() + if args.log_samples: + wandb_logger.log_eval_samples(samples) + except Exception as e: + eval_logger.info(f"Logging to Weights and Biases failed due to {e}") + if args.output_path: output_path_file.open("w", encoding="utf-8").write(dumped) @@ -334,6 +353,10 @@ def cli_evaluate(args: Union[argparse.Namespace, None] = None) -> None: if "groups" in results: print(make_table(results, "groups")) + if args.wandb_args: + # Tear down wandb run once all the logging is done. + wandb_logger.run.finish() + if __name__ == "__main__": cli_evaluate() diff --git a/lm_eval/logging_utils.py b/lm_eval/logging_utils.py new file mode 100644 index 0000000000..464ba9f732 --- /dev/null +++ b/lm_eval/logging_utils.py @@ -0,0 +1,386 @@ +import copy +import json +import logging +import re +from typing import Any, Dict, List, Literal, Tuple, Union + +import numpy as np +import pandas as pd +from packaging.version import Version + +from lm_eval import utils + + +logger = logging.getLogger(__name__) + +try: + import wandb + + assert Version(wandb.__version__) >= Version("0.13.6") + if Version(wandb.__version__) < Version("0.13.6"): + wandb.require("report-editing:v0") +except Exception as e: + logger.warning( + "To use the wandb reporting functionality please install wandb>=0.13.6.\n" + "To install the latest version of wandb run `pip install wandb --upgrade`\n" + f"{e}" + ) + + +def remove_none_pattern(input_string: str) -> Tuple[str, bool]: + """Remove the ',none' substring from the input_string if it exists at the end. + + Args: + input_string (str): The input string from which to remove the ',none' substring. + + Returns: + Tuple[str, bool]: A tuple containing the modified input_string with the ',none' substring removed + and a boolean indicating whether the modification was made (True) or not (False). + """ + # Define the pattern to match ',none' at the end of the string + pattern = re.compile(r",none$") + + # Use sub() to replace ',none' with an empty string + result = re.sub(pattern, "", input_string) + + # check if the input_string changed + removed = result != input_string + + return result, removed + + +def _handle_non_serializable(o: Any) -> Union[int, str, list]: + """Handle non-serializable objects by converting them to serializable types. + + Args: + o (Any): The object to be handled. + + Returns: + Union[int, str, list]: The converted object. If the object is of type np.int64 or np.int32, + it will be converted to int. If the object is of type set, it will be converted + to a list. Otherwise, it will be converted to str. + """ + if isinstance(o, np.int64) or isinstance(o, np.int32): + return int(o) + elif isinstance(o, set): + return list(o) + else: + return str(o) + + +def get_wandb_printer() -> Literal["Printer"]: + """Returns a wandb printer instance for pretty stdout.""" + from wandb.sdk.lib.printer import get_printer + from wandb.sdk.wandb_settings import Settings + + printer = get_printer(Settings()._jupyter) + return printer + + +class WandbLogger: + def __init__(self, args: Any) -> None: + """Initialize the WandbLogger. + + Args: + results (Dict[str, Any]): The results dictionary. + args (Any): Arguments for configuration. + """ + self.wandb_args: Dict[str, Any] = utils.simple_parse_args_string( + args.wandb_args + ) + + # initialize a W&B run + if wandb.run is None: + self.run = wandb.init(**self.wandb_args) + else: + self.run = wandb.run + + self.printer = get_wandb_printer() + + def post_init(self, results: Dict[str, Any]) -> None: + self.results: Dict[str, Any] = copy.deepcopy(results) + self.task_names: List[str] = list(results.get("results", {}).keys()) + self.group_names: List[str] = list(results.get("groups", {}).keys()) + + def _get_config(self) -> Dict[str, Any]: + """Get configuration parameters.""" + self.task_configs = self.results.get("configs", {}) + cli_configs = self.results.get("config", {}) + configs = { + "task_configs": self.task_configs, + "cli_configs": cli_configs, + } + + return configs + + def _sanitize_results_dict(self) -> Tuple[Dict[str, str], Dict[str, Any]]: + """Sanitize the results dictionary.""" + _results = copy.deepcopy(self.results.get("results", dict())) + + # Remove None from the metric string name + tmp_results = copy.deepcopy(_results) + for task_name in self.task_names: + task_result = tmp_results.get(task_name, dict()) + for metric_name, metric_value in task_result.items(): + _metric_name, removed = remove_none_pattern(metric_name) + if removed: + _results[task_name][_metric_name] = metric_value + _results[task_name].pop(metric_name) + + # remove string valued keys from the results dict + wandb_summary = {} + for task in self.task_names: + task_result = _results.get(task, dict()) + for metric_name, metric_value in task_result.items(): + if isinstance(metric_value, str): + wandb_summary[f"{task}/{metric_name}"] = metric_value + + for summary_metric, summary_value in wandb_summary.items(): + _task, _summary_metric = summary_metric.split("/") + _results[_task].pop(_summary_metric) + + tmp_results = copy.deepcopy(_results) + for task_name, task_results in tmp_results.items(): + for metric_name, metric_value in task_results.items(): + _results[f"{task_name}/{metric_name}"] = metric_value + _results[task_name].pop(metric_name) + for task in self.task_names: + _results.pop(task) + + return wandb_summary, _results + + def _log_results_as_table(self) -> None: + """Generate and log evaluation results as a table to W&B.""" + columns = [ + "Version", + "Filter", + "num_fewshot", + "Metric", + "Value", + "Stderr", + ] + + def make_table(columns: List[str], key: str = "results"): + table = wandb.Table(columns=columns) + results = copy.deepcopy(self.results) + + for k, dic in results.get(key).items(): + if k in self.group_names and not key == "groups": + continue + version = results.get("versions").get(k) + if version == "N/A": + version = None + n = results.get("n-shot").get(k) + + for (mf), v in dic.items(): + m, _, f = mf.partition(",") + if m.endswith("_stderr"): + continue + if m == "alias": + continue + + if m + "_stderr" + "," + f in dic: + se = dic[m + "_stderr" + "," + f] + if se != "N/A": + se = "%.4f" % se + table.add_data(*[k, version, f, n, m, str(v), str(se)]) + else: + table.add_data(*[k, version, f, n, m, str(v), ""]) + + return table + + # log the complete eval result to W&B Table + table = make_table(["Tasks"] + columns, "results") + self.run.log({"evaluation/eval_results": table}) + + if "groups" in self.results.keys(): + table = make_table(["Groups"] + columns, "groups") + self.run.log({"evaluation/group_eval_results": table}) + + def _log_results_as_artifact(self) -> None: + """Log results as JSON artifact to W&B.""" + dumped = json.dumps( + self.results, indent=2, default=_handle_non_serializable, ensure_ascii=False + ) + artifact = wandb.Artifact("results", type="eval_results") + with artifact.new_file("results.json", mode="w", encoding="utf-8") as f: + f.write(dumped) + self.run.log_artifact(artifact) + + def log_eval_result(self) -> None: + """Log evaluation results to W&B.""" + # Log configs to wandb + configs = self._get_config() + self.run.config.update(configs) + + wandb_summary, self.wandb_results = self._sanitize_results_dict() + # update wandb.run.summary with items that were removed + self.run.summary.update(wandb_summary) + # Log the evaluation metrics to wandb + self.run.log(self.wandb_results) + # Log the evaluation metrics as W&B Table + self._log_results_as_table() + # Log the results dict as json to W&B Artifacts + self._log_results_as_artifact() + + def _generate_dataset( + self, data: List[Dict[str, Any]], config: Dict[str, Any] + ) -> pd.DataFrame: + """Generate a dataset from evaluation data. + + Args: + data (List[Dict[str, Any]]): The data to generate a dataset for. + config (Dict[str, Any]): The configuration of the task. + + Returns: + pd.DataFrame: A dataframe that is ready to be uploaded to W&B. + """ + ids = [x["doc_id"] for x in data] + labels = [x["target"] for x in data] + instance = [""] * len(ids) + resps = [""] * len(ids) + filtered_resps = [""] * len(ids) + model_outputs = {} + + metrics_list = config["metric_list"] + metrics = {} + for metric in metrics_list: + metric = metric.get("metric") + if metric in ["word_perplexity", "byte_perplexity", "bits_per_byte"]: + metrics[f"{metric}_loglikelihood"] = [x[metric][0] for x in data] + if metric in ["byte_perplexity", "bits_per_byte"]: + metrics[f"{metric}_bytes"] = [x[metric][1] for x in data] + else: + metrics[f"{metric}_words"] = [x[metric][1] for x in data] + else: + metrics[metric] = [x[metric] for x in data] + + if config["output_type"] == "loglikelihood": + instance = [x["arguments"][0][0] for x in data] + labels = [x["arguments"][0][1] for x in data] + resps = [ + f'log probability of continuation is {x["resps"][0][0][0]} ' + + "\n\n" + + "continuation will {} generated with greedy sampling".format( + "not be" if not x["resps"][0][0][1] else "be" + ) + for x in data + ] + filtered_resps = [ + f'log probability of continuation is {x["filtered_resps"][0][0]} ' + + "\n\n" + + "continuation will {} generated with greedy sampling".format( + "not be" if not x["filtered_resps"][0][1] else "be" + ) + for x in data + ] + elif config["output_type"] == "multiple_choice": + instance = [x["arguments"][0][0] for x in data] + choices = [ + "\n".join([f"{idx}. {y[1]}" for idx, y in enumerate(x["arguments"])]) + for x in data + ] + resps = [np.argmax([n[0][0] for n in x["resps"]]) for x in data] + filtered_resps = [ + np.argmax([n[0] for n in x["filtered_resps"]]) for x in data + ] + elif config["output_type"] == "loglikelihood_rolling": + instance = [x["arguments"][0][0] for x in data] + resps = [x["resps"][0][0] for x in data] + filtered_resps = [x["filtered_resps"][0] for x in data] + elif config["output_type"] == "generate_until": + instance = [x["arguments"][0][0] for x in data] + resps = [x["resps"][0][0] for x in data] + filtered_resps = [x["filtered_resps"][0] for x in data] + + model_outputs["raw_predictions"] = resps + model_outputs["filtered_predictions"] = filtered_resps + + df_data = { + "id": ids, + "data": instance, + } + if config["output_type"] == "multiple_choice": + df_data["choices"] = choices + + tmp_data = { + "input_len": [len(x) for x in instance], + "labels": labels, + "output_type": config["output_type"], + } + df_data.update(tmp_data) + df_data.update(model_outputs) + df_data.update(metrics) + + return pd.DataFrame(df_data) + + def _log_samples_as_artifact( + self, data: List[Dict[str, Any]], task_name: str + ) -> None: + # log the samples as an artifact + dumped = json.dumps( + data, + indent=2, + default=_handle_non_serializable, + ensure_ascii=False, + ) + artifact = wandb.Artifact(f"{task_name}", type="samples_by_task") + with artifact.new_file( + f"{task_name}_eval_samples.json", mode="w", encoding="utf-8" + ) as f: + f.write(dumped) + self.run.log_artifact(artifact) + # artifact.wait() + + def log_eval_samples(self, samples: Dict[str, List[Dict[str, Any]]]) -> None: + """Log evaluation samples to W&B. + + Args: + samples (Dict[str, List[Dict[str, Any]]]): Evaluation samples for each task. + """ + task_names: List[str] = [ + x for x in self.task_names if x not in self.group_names + ] + + ungrouped_tasks = [] + tasks_by_groups = {} + + for task_name in task_names: + group_names = self.task_configs[task_name].get("group", None) + if group_names: + if isinstance(group_names, str): + group_names = [group_names] + + for group_name in group_names: + if not tasks_by_groups.get(group_name): + tasks_by_groups[group_name] = [task_name] + else: + tasks_by_groups[group_name].append(task_name) + else: + ungrouped_tasks.append(task_name) + + for task_name in ungrouped_tasks: + eval_preds = samples[task_name] + + # log the samples as a W&B Table + df = self._generate_dataset(eval_preds, self.task_configs.get(task_name)) + self.run.log({f"{task_name}_eval_results": df}) + + # log the samples as a json file as W&B Artifact + self._log_samples_as_artifact(eval_preds, task_name) + + for group, grouped_tasks in tasks_by_groups.items(): + grouped_df = pd.DataFrame() + for task_name in grouped_tasks: + eval_preds = samples[task_name] + df = self._generate_dataset( + eval_preds, self.task_configs.get(task_name) + ) + df["group"] = group + df["task"] = task_name + grouped_df = pd.concat([grouped_df, df], ignore_index=True) + + # log the samples as a json file as W&B Artifact + self._log_samples_as_artifact(eval_preds, task_name) + + self.run.log({f"{group}_eval_results": grouped_df}) diff --git a/pyproject.toml b/pyproject.toml index ca66f8547c..63fd49be67 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -71,6 +71,7 @@ sentencepiece = ["sentencepiece>=0.1.98", "protobuf>=4.22.1"] testing = ["pytest", "pytest-cov", "pytest-xdist"] vllm = ["vllm<=0.2.5"] zeno = ["pandas", "zeno-client"] +wandb = ["wandb>=0.16.3", "pandas", "numpy"] all = [ "lm_eval[anthropic]", "lm_eval[dev]", @@ -86,6 +87,7 @@ all = [ "lm_eval[testing]", "lm_eval[vllm]", "lm_eval[zeno]", + "lm_eval[wandb]", ] [tool.ruff] From 75ac1f475639ddfa22047f38b61052f795f3bc10 Mon Sep 17 00:00:00 2001 From: Amine Elhattami <35821254+Am1n3e@users.noreply.github.com> Date: Fri, 23 Feb 2024 00:53:58 +0100 Subject: [PATCH 13/20] Fixed generation args issue affection OpenAI completion model (#1458) * Fixed generation args issue affection openai completion model * Fixed hf unit test; removed pop attributes in OpenAi completion. * fix format * fix format --------- Co-authored-by: Hailey Schoelkopf <65563625+haileyschoelkopf@users.noreply.github.com> --- lm_eval/api/task.py | 3 ++- lm_eval/models/openai_completions.py | 11 +++++++---- tests/models/test_huggingface.py | 2 +- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/lm_eval/api/task.py b/lm_eval/api/task.py index 7204a3d56a..a54b550da1 100644 --- a/lm_eval/api/task.py +++ b/lm_eval/api/task.py @@ -4,6 +4,7 @@ import random import re from collections.abc import Callable +from copy import deepcopy from dataclasses import asdict, dataclass from inspect import getsource from typing import Any, List, Literal, Tuple, Union @@ -1064,7 +1065,7 @@ def construct_requests( return request_list elif self.OUTPUT_TYPE == "generate_until": - arguments = (ctx, self.config.generation_kwargs) + arguments = (ctx, deepcopy(self.config.generation_kwargs)) return Instance( request_type=self.OUTPUT_TYPE, doc=doc, arguments=arguments, idx=0, **kwargs diff --git a/lm_eval/models/openai_completions.py b/lm_eval/models/openai_completions.py index 1ed09a7a92..7d20b584d0 100644 --- a/lm_eval/models/openai_completions.py +++ b/lm_eval/models/openai_completions.py @@ -261,14 +261,13 @@ def sameuntil_chunks(xs, size): list(sameuntil_chunks(re_ord.get_reordered(), self.batch_size)) ): inps = [] - self._max_gen_toks = request_args.pop("max_gen_toks", self.max_gen_toks) + self._max_gen_toks = request_args.get("max_gen_toks", self.max_gen_toks) for context, _ in chunk: context_enc = self.tok_encode(context) inp = context_enc[-(self.max_length - self.max_gen_toks) :] inps.append(inp) - until = request_args.pop("until", ["<|endoftext|>"]) - request_args.pop("do_sample", None) + until = request_args.get("until", ["<|endoftext|>"]) request_args["temperature"] = request_args.get("temperature", 0) response = oa_completion( @@ -278,7 +277,11 @@ def sameuntil_chunks(xs, size): max_tokens=self.max_gen_toks, stop=until, seed=self.seed, - **request_args, + **{ + k: v + for k, v in request_args.items() + if k not in ["do_sample", "max_gen_toks"] + }, ) for resp, (context, args_) in zip(response.choices, chunk): s = getattr(resp, "text") diff --git a/tests/models/test_huggingface.py b/tests/models/test_huggingface.py index 542be3a1ab..efef5a9b7f 100644 --- a/tests/models/test_huggingface.py +++ b/tests/models/test_huggingface.py @@ -22,8 +22,8 @@ class Test_HFLM: multiple_choice_task.build_all_requests(limit=10, rank=0, world_size=1) MULTIPLE_CH: list[Instance] = multiple_choice_task.instances generate_until_task = task_list["gsm8k"] # type: ignore - generate_until_task.build_all_requests(limit=10, rank=0, world_size=1) generate_until_task._config.generation_kwargs["max_gen_toks"] = 10 + generate_until_task.build_all_requests(limit=10, rank=0, world_size=1) generate_until: list[Instance] = generate_until_task.instances rolling_task = task_list["wikitext"] # type: ignore rolling_task.build_all_requests(limit=10, rank=0, world_size=1) From 8371662c46a2a199611d89d40e7cb8009161b1b1 Mon Sep 17 00:00:00 2001 From: thnkinbtfly <70014488+thnkinbtfly@users.noreply.github.com> Date: Sat, 24 Feb 2024 01:34:08 +0900 Subject: [PATCH 14/20] update parsing logic of mgsm following gsm8k (#1462) --- lm_eval/tasks/mgsm/direct/direct_yaml | 8 ++++++- lm_eval/tasks/mgsm/direct/mgsm_direct_bn.yaml | 6 +++++ lm_eval/tasks/mgsm/direct/mgsm_direct_de.yaml | 6 +++++ lm_eval/tasks/mgsm/direct/mgsm_direct_en.yaml | 6 +++++ lm_eval/tasks/mgsm/direct/mgsm_direct_es.yaml | 6 +++++ lm_eval/tasks/mgsm/direct/mgsm_direct_fr.yaml | 6 +++++ lm_eval/tasks/mgsm/direct/mgsm_direct_ja.yaml | 6 +++++ lm_eval/tasks/mgsm/direct/mgsm_direct_ru.yaml | 6 +++++ lm_eval/tasks/mgsm/direct/mgsm_direct_sw.yaml | 6 +++++ lm_eval/tasks/mgsm/direct/mgsm_direct_te.yaml | 6 +++++ lm_eval/tasks/mgsm/direct/mgsm_direct_th.yaml | 6 +++++ lm_eval/tasks/mgsm/direct/mgsm_direct_zh.yaml | 6 +++++ lm_eval/tasks/mgsm/en_cot/cot_yaml | 10 ++++++-- lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_bn.yaml | 6 +++++ lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_de.yaml | 6 +++++ lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_en.yaml | 6 +++++ lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_es.yaml | 6 +++++ lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_fr.yaml | 6 +++++ lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_ja.yaml | 6 +++++ lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_ru.yaml | 6 +++++ lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_sw.yaml | 6 +++++ lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_te.yaml | 6 +++++ lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_th.yaml | 6 +++++ lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_zh.yaml | 6 +++++ lm_eval/tasks/mgsm/native_cot/cot_yaml | 2 +- .../mgsm/native_cot/mgsm_native_cot_bn.yaml | 14 ++++++++++- .../mgsm/native_cot/mgsm_native_cot_de.yaml | 14 ++++++++++- .../mgsm/native_cot/mgsm_native_cot_en.yaml | 14 ++++++++++- .../mgsm/native_cot/mgsm_native_cot_es.yaml | 14 ++++++++++- .../mgsm/native_cot/mgsm_native_cot_fr.yaml | 14 ++++++++++- .../mgsm/native_cot/mgsm_native_cot_ja.yaml | 15 ++++++++++-- .../mgsm/native_cot/mgsm_native_cot_ru.yaml | 14 ++++++++++- .../mgsm/native_cot/mgsm_native_cot_sw.yaml | 14 ++++++++++- .../mgsm/native_cot/mgsm_native_cot_te.yaml | 14 ++++++++++- .../mgsm/native_cot/mgsm_native_cot_th.yaml | 14 ++++++++++- .../mgsm/native_cot/mgsm_native_cot_zh.yaml | 15 ++++++++++-- lm_eval/tasks/mgsm/utils.py | 24 +++++++++++++++---- 37 files changed, 311 insertions(+), 21 deletions(-) diff --git a/lm_eval/tasks/mgsm/direct/direct_yaml b/lm_eval/tasks/mgsm/direct/direct_yaml index 9356de1ec7..3a265cb025 100644 --- a/lm_eval/tasks/mgsm/direct/direct_yaml +++ b/lm_eval/tasks/mgsm/direct/direct_yaml @@ -19,6 +19,12 @@ filter_list: filter: - function: remove_whitespace - function: take_first + - filter: + - function: regex + group_select: -1 + regex_pattern: (-?[$0-9.,]{2,})|(-?[0-9]+) + - function: take_first + name: flexible-extract metric_list: - metric: exact_match aggregation: mean @@ -26,4 +32,4 @@ metric_list: ignore_case: true ignore_punctuation: true metadata: - version: 1.0 + version: 2.0 diff --git a/lm_eval/tasks/mgsm/direct/mgsm_direct_bn.yaml b/lm_eval/tasks/mgsm/direct/mgsm_direct_bn.yaml index d836bfb22a..08e7125127 100644 --- a/lm_eval/tasks/mgsm/direct/mgsm_direct_bn.yaml +++ b/lm_eval/tasks/mgsm/direct/mgsm_direct_bn.yaml @@ -2,5 +2,11 @@ dataset_name: bn doc_to_target: '{% if answer is not none %}{{answer[17:]}}{% else %}{{answer_number|string}}{% endif %}' doc_to_text: '{% if answer is not none %}{{question+"\nAnswer:"}}{% else %}{{"প্রশ্ন: "+question+"\nAnswer:"}}{% endif %}' +generation_kwargs: + do_sample: false + until: + - 'প্রশ্ন:' + - + - <|im_end|> include: direct_yaml task: mgsm_direct_bn diff --git a/lm_eval/tasks/mgsm/direct/mgsm_direct_de.yaml b/lm_eval/tasks/mgsm/direct/mgsm_direct_de.yaml index dd78df2d33..24bc43eda3 100644 --- a/lm_eval/tasks/mgsm/direct/mgsm_direct_de.yaml +++ b/lm_eval/tasks/mgsm/direct/mgsm_direct_de.yaml @@ -2,5 +2,11 @@ dataset_name: de doc_to_target: '{% if answer is not none %}{{answer[29:]}}{% else %}{{answer_number|string}}{% endif %}' doc_to_text: '{% if answer is not none %}{{question+"\nAntwort:"}}{% else %}{{"Frage: "+question+"\nAntwort:"}}{% endif %}' +generation_kwargs: + do_sample: false + until: + - 'Frage:' + - + - <|im_end|> include: direct_yaml task: mgsm_direct_de diff --git a/lm_eval/tasks/mgsm/direct/mgsm_direct_en.yaml b/lm_eval/tasks/mgsm/direct/mgsm_direct_en.yaml index 6d1522bb97..f7ef407d39 100644 --- a/lm_eval/tasks/mgsm/direct/mgsm_direct_en.yaml +++ b/lm_eval/tasks/mgsm/direct/mgsm_direct_en.yaml @@ -2,5 +2,11 @@ dataset_name: en doc_to_target: '{% if answer is not none %}{{answer[21:]}}{% else %}{{answer_number|string}}{% endif %}' doc_to_text: '{% if answer is not none %}{{question+"\nAnswer:"}}{% else %}{{"Question: "+question+"\nAnswer:"}}{% endif %}' +generation_kwargs: + do_sample: false + until: + - 'Question:' + - + - <|im_end|> include: direct_yaml task: mgsm_direct_en diff --git a/lm_eval/tasks/mgsm/direct/mgsm_direct_es.yaml b/lm_eval/tasks/mgsm/direct/mgsm_direct_es.yaml index 0d550ffa5f..a6c3c1fd7e 100644 --- a/lm_eval/tasks/mgsm/direct/mgsm_direct_es.yaml +++ b/lm_eval/tasks/mgsm/direct/mgsm_direct_es.yaml @@ -2,5 +2,11 @@ dataset_name: es doc_to_target: '{% if answer is not none %}{{answer[23:]}}{% else %}{{answer_number|string}}{% endif %}' doc_to_text: '{% if answer is not none %}{{question+"\nRespuesta:"}}{% else %}{{"Pregunta: "+question+"\nRespuesta:"}}{% endif %}' +generation_kwargs: + do_sample: false + until: + - 'Pregunta:' + - + - <|im_end|> include: direct_yaml task: mgsm_direct_es diff --git a/lm_eval/tasks/mgsm/direct/mgsm_direct_fr.yaml b/lm_eval/tasks/mgsm/direct/mgsm_direct_fr.yaml index fd036698ca..993c181a97 100644 --- a/lm_eval/tasks/mgsm/direct/mgsm_direct_fr.yaml +++ b/lm_eval/tasks/mgsm/direct/mgsm_direct_fr.yaml @@ -2,5 +2,11 @@ dataset_name: fr doc_to_target: '{% if answer is not none %}{{answer[26:]}}{% else %}{{answer_number|string}}{% endif %}' doc_to_text: '{% if answer is not none %}{{question+"\nRéponse :"}}{% else %}{{"Question : "+question+"\nRéponse :"}}{% endif %}' +generation_kwargs: + do_sample: false + until: + - 'Question :' + - + - <|im_end|> include: direct_yaml task: mgsm_direct_fr diff --git a/lm_eval/tasks/mgsm/direct/mgsm_direct_ja.yaml b/lm_eval/tasks/mgsm/direct/mgsm_direct_ja.yaml index c34ba9d0ce..7de11a486d 100644 --- a/lm_eval/tasks/mgsm/direct/mgsm_direct_ja.yaml +++ b/lm_eval/tasks/mgsm/direct/mgsm_direct_ja.yaml @@ -2,5 +2,11 @@ dataset_name: ja doc_to_target: '{% if answer is not none %}{{answer[11:]}}{% else %}{{answer_number|string}}{% endif %}' doc_to_text: '{% if answer is not none %}{{question+"\nAnswer:"}}{% else %}{{"問題: "+question+"\nAnswer:"}}{% endif %}' +generation_kwargs: + do_sample: false + until: + - '問題:' + - + - <|im_end|> include: direct_yaml task: mgsm_direct_ja diff --git a/lm_eval/tasks/mgsm/direct/mgsm_direct_ru.yaml b/lm_eval/tasks/mgsm/direct/mgsm_direct_ru.yaml index 847774e8fe..30d1618faa 100644 --- a/lm_eval/tasks/mgsm/direct/mgsm_direct_ru.yaml +++ b/lm_eval/tasks/mgsm/direct/mgsm_direct_ru.yaml @@ -2,5 +2,11 @@ dataset_name: ru doc_to_target: '{% if answer is not none %}{{answer[18:]}}{% else %}{{answer_number|string}}{% endif %}' doc_to_text: '{% if answer is not none %}{{question+"\nAnswer:"}}{% else %}{{"Задача: "+question+"\nAnswer:"}}{% endif %}' +generation_kwargs: + do_sample: false + until: + - 'Задача:' + - + - <|im_end|> include: direct_yaml task: mgsm_direct_ru diff --git a/lm_eval/tasks/mgsm/direct/mgsm_direct_sw.yaml b/lm_eval/tasks/mgsm/direct/mgsm_direct_sw.yaml index 03cc8637de..0357902d4e 100644 --- a/lm_eval/tasks/mgsm/direct/mgsm_direct_sw.yaml +++ b/lm_eval/tasks/mgsm/direct/mgsm_direct_sw.yaml @@ -2,5 +2,11 @@ dataset_name: sw doc_to_target: '{% if answer is not none %}{{answer[25:]}}{% else %}{{answer_number|string}}{% endif %}' doc_to_text: '{% if answer is not none %}{{question+"\nAnswer:"}}{% else %}{{"Swali: "+question+"\nAnswer:"}}{% endif %}' +generation_kwargs: + do_sample: false + until: + - 'Swali:' + - + - <|im_end|> include: direct_yaml task: mgsm_direct_sw diff --git a/lm_eval/tasks/mgsm/direct/mgsm_direct_te.yaml b/lm_eval/tasks/mgsm/direct/mgsm_direct_te.yaml index 5aa1533442..4abdc7e78e 100644 --- a/lm_eval/tasks/mgsm/direct/mgsm_direct_te.yaml +++ b/lm_eval/tasks/mgsm/direct/mgsm_direct_te.yaml @@ -2,5 +2,11 @@ dataset_name: te doc_to_target: '{% if answer is not none %}{{answer[19:]}}{% else %}{{answer_number|string}}{% endif %}' doc_to_text: '{% if answer is not none %}{{question+"\nAnswer:"}}{% else %}{{"ప్రశ్న: "+question+"\nAnswer:"}}{% endif %}' +generation_kwargs: + do_sample: false + until: + - 'ప్రశ్న:' + - + - <|im_end|> include: direct_yaml task: mgsm_direct_te diff --git a/lm_eval/tasks/mgsm/direct/mgsm_direct_th.yaml b/lm_eval/tasks/mgsm/direct/mgsm_direct_th.yaml index f7e3ce0be3..fcf35a6721 100644 --- a/lm_eval/tasks/mgsm/direct/mgsm_direct_th.yaml +++ b/lm_eval/tasks/mgsm/direct/mgsm_direct_th.yaml @@ -2,5 +2,11 @@ dataset_name: th doc_to_target: '{% if answer is not none %}{{answer[18:]}}{% else %}{{answer_number|string}}{% endif %}' doc_to_text: '{% if answer is not none %}{{question+"\nAnswer:"}}{% else %}{{"โจทย์: "+question+"\nAnswer:"}}{% endif %}' +generation_kwargs: + do_sample: false + until: + - 'โจทย์:' + - + - <|im_end|> include: direct_yaml task: mgsm_direct_th diff --git a/lm_eval/tasks/mgsm/direct/mgsm_direct_zh.yaml b/lm_eval/tasks/mgsm/direct/mgsm_direct_zh.yaml index f5daa1ab42..283e63f8bc 100644 --- a/lm_eval/tasks/mgsm/direct/mgsm_direct_zh.yaml +++ b/lm_eval/tasks/mgsm/direct/mgsm_direct_zh.yaml @@ -2,5 +2,11 @@ dataset_name: zh doc_to_target: '{% if answer is not none %}{{answer[6:]}}{% else %}{{answer_number|string}}{% endif %}' doc_to_text: '{% if answer is not none %}{{question+"\nAnswer:"}}{% else %}{{"问题: "+question+"\nAnswer:"}}{% endif %}' +generation_kwargs: + do_sample: false + until: + - '问题:' + - + - <|im_end|> include: direct_yaml task: mgsm_direct_zh diff --git a/lm_eval/tasks/mgsm/en_cot/cot_yaml b/lm_eval/tasks/mgsm/en_cot/cot_yaml index b2217ad3b7..f4d502ee52 100644 --- a/lm_eval/tasks/mgsm/en_cot/cot_yaml +++ b/lm_eval/tasks/mgsm/en_cot/cot_yaml @@ -21,10 +21,16 @@ metric_list: ignore_case: true ignore_punctuation: true filter_list: - - name: "get-answer" + - name: "strict-match" filter: - function: "regex" regex_pattern: "The answer is (\\-?[0-9\\.\\,]+)" - function: "take_first" + - filter: + - function: regex + group_select: -1 + regex_pattern: (-?[$0-9.,]{2,})|(-?[0-9]+) + - function: take_first + name: flexible-extract metadata: - version: 1.0 + version: 2.0 diff --git a/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_bn.yaml b/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_bn.yaml index 27b0e51883..b1c3c2fcd7 100644 --- a/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_bn.yaml +++ b/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_bn.yaml @@ -2,5 +2,11 @@ dataset_name: bn doc_to_target: '{% if answer is not none %}{{answer[17:]}}{% else %}{{answer_number|string}}{% endif %}' doc_to_text: '{% if answer is not none %}{{question+"\nStep-by-Step Answer:"}}{% else %}{{"প্রশ্ন: "+question+"\nStep-by-Step Answer:"}}{% endif %}' +generation_kwargs: + do_sample: false + until: + - 'প্রশ্ন:' + - + - <|im_end|> include: cot_yaml task: mgsm_en_cot_bn diff --git a/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_de.yaml b/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_de.yaml index 75c2aaad37..c2362fb7ac 100644 --- a/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_de.yaml +++ b/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_de.yaml @@ -2,5 +2,11 @@ dataset_name: de doc_to_target: '{% if answer is not none %}{{answer[29:]}}{% else %}{{answer_number|string}}{% endif %}' doc_to_text: '{% if answer is not none %}{{question+"\nStep-by-Step Answer:"}}{% else %}{{"Frage: "+question+"\nStep-by-Step Answer:"}}{% endif %}' +generation_kwargs: + do_sample: false + until: + - 'Frage:' + - + - <|im_end|> include: cot_yaml task: mgsm_en_cot_de diff --git a/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_en.yaml b/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_en.yaml index c704619453..f27a616487 100644 --- a/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_en.yaml +++ b/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_en.yaml @@ -2,5 +2,11 @@ dataset_name: en doc_to_target: '{% if answer is not none %}{{answer[21:]}}{% else %}{{answer_number|string}}{% endif %}' doc_to_text: '{% if answer is not none %}{{question+"\nStep-by-Step Answer:"}}{% else %}{{"Question: "+question+"\nStep-by-Step Answer:"}}{% endif %}' +generation_kwargs: + do_sample: false + until: + - 'Question:' + - + - <|im_end|> include: cot_yaml task: mgsm_en_cot_en diff --git a/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_es.yaml b/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_es.yaml index 9f5291bb19..cc748306a4 100644 --- a/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_es.yaml +++ b/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_es.yaml @@ -2,5 +2,11 @@ dataset_name: es doc_to_target: '{% if answer is not none %}{{answer[23:]}}{% else %}{{answer_number|string}}{% endif %}' doc_to_text: '{% if answer is not none %}{{question+"\nStep-by-Step Answer:"}}{% else %}{{"Pregunta: "+question+"\nStep-by-Step Answer:"}}{% endif %}' +generation_kwargs: + do_sample: false + until: + - 'Pregunta:' + - + - <|im_end|> include: cot_yaml task: mgsm_en_cot_es diff --git a/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_fr.yaml b/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_fr.yaml index c8744a617f..d36dd813a3 100644 --- a/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_fr.yaml +++ b/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_fr.yaml @@ -2,5 +2,11 @@ dataset_name: fr doc_to_target: '{% if answer is not none %}{{answer[26:]}}{% else %}{{answer_number|string}}{% endif %}' doc_to_text: '{% if answer is not none %}{{question+"\nStep-by-Step Answer:"}}{% else %}{{"Question : "+question+"\nStep-by-Step Answer:"}}{% endif %}' +generation_kwargs: + do_sample: false + until: + - 'Question :' + - + - <|im_end|> include: cot_yaml task: mgsm_en_cot_fr diff --git a/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_ja.yaml b/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_ja.yaml index fcf6d293b6..c98060357e 100644 --- a/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_ja.yaml +++ b/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_ja.yaml @@ -2,5 +2,11 @@ dataset_name: ja doc_to_target: '{% if answer is not none %}{{answer[11:]}}{% else %}{{answer_number|string}}{% endif %}' doc_to_text: '{% if answer is not none %}{{question+"\nStep-by-Step Answer:"}}{% else %}{{"問題: "+question+"\nStep-by-Step Answer:"}}{% endif %}' +generation_kwargs: + do_sample: false + until: + - '問題:' + - + - <|im_end|> include: cot_yaml task: mgsm_en_cot_ja diff --git a/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_ru.yaml b/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_ru.yaml index be4667f742..2bfeb1dafe 100644 --- a/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_ru.yaml +++ b/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_ru.yaml @@ -2,5 +2,11 @@ dataset_name: ru doc_to_target: '{% if answer is not none %}{{answer[18:]}}{% else %}{{answer_number|string}}{% endif %}' doc_to_text: '{% if answer is not none %}{{question+"\nStep-by-Step Answer:"}}{% else %}{{"Задача: "+question+"\nStep-by-Step Answer:"}}{% endif %}' +generation_kwargs: + do_sample: false + until: + - 'Задача:' + - + - <|im_end|> include: cot_yaml task: mgsm_en_cot_ru diff --git a/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_sw.yaml b/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_sw.yaml index 91643455e0..6f37cd3b87 100644 --- a/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_sw.yaml +++ b/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_sw.yaml @@ -2,5 +2,11 @@ dataset_name: sw doc_to_target: '{% if answer is not none %}{{answer[25:]}}{% else %}{{answer_number|string}}{% endif %}' doc_to_text: '{% if answer is not none %}{{question+"\nStep-by-Step Answer:"}}{% else %}{{"Swali: "+question+"\nStep-by-Step Answer:"}}{% endif %}' +generation_kwargs: + do_sample: false + until: + - 'Swali:' + - + - <|im_end|> include: cot_yaml task: mgsm_en_cot_sw diff --git a/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_te.yaml b/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_te.yaml index b87d736154..75da745da1 100644 --- a/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_te.yaml +++ b/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_te.yaml @@ -2,5 +2,11 @@ dataset_name: te doc_to_target: '{% if answer is not none %}{{answer[19:]}}{% else %}{{answer_number|string}}{% endif %}' doc_to_text: '{% if answer is not none %}{{question+"\nStep-by-Step Answer:"}}{% else %}{{"ప్రశ్న: "+question+"\nStep-by-Step Answer:"}}{% endif %}' +generation_kwargs: + do_sample: false + until: + - 'ప్రశ్న:' + - + - <|im_end|> include: cot_yaml task: mgsm_en_cot_te diff --git a/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_th.yaml b/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_th.yaml index 33b8be0a0f..0ff2177b78 100644 --- a/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_th.yaml +++ b/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_th.yaml @@ -2,5 +2,11 @@ dataset_name: th doc_to_target: '{% if answer is not none %}{{answer[18:]}}{% else %}{{answer_number|string}}{% endif %}' doc_to_text: '{% if answer is not none %}{{question+"\nStep-by-Step Answer:"}}{% else %}{{"โจทย์: "+question+"\nStep-by-Step Answer:"}}{% endif %}' +generation_kwargs: + do_sample: false + until: + - 'โจทย์:' + - + - <|im_end|> include: cot_yaml task: mgsm_en_cot_th diff --git a/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_zh.yaml b/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_zh.yaml index 516d009abc..f45004aacf 100644 --- a/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_zh.yaml +++ b/lm_eval/tasks/mgsm/en_cot/mgsm_en_cot_zh.yaml @@ -2,5 +2,11 @@ dataset_name: zh doc_to_target: '{% if answer is not none %}{{answer[6:]}}{% else %}{{answer_number|string}}{% endif %}' doc_to_text: '{% if answer is not none %}{{question+"\nStep-by-Step Answer:"}}{% else %}{{"问题: "+question+"\nStep-by-Step Answer:"}}{% endif %}' +generation_kwargs: + do_sample: false + until: + - '问题:' + - + - <|im_end|> include: cot_yaml task: mgsm_en_cot_zh diff --git a/lm_eval/tasks/mgsm/native_cot/cot_yaml b/lm_eval/tasks/mgsm/native_cot/cot_yaml index 4d79f8301b..dbba882225 100644 --- a/lm_eval/tasks/mgsm/native_cot/cot_yaml +++ b/lm_eval/tasks/mgsm/native_cot/cot_yaml @@ -28,4 +28,4 @@ filter_list: regex_pattern: "The answer is (\\-?[0-9\\.\\,]+)" - function: "take_first" metadata: - version: 2.0 + version: 3.0 diff --git a/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_bn.yaml b/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_bn.yaml index 470370287b..eb58c87537 100644 --- a/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_bn.yaml +++ b/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_bn.yaml @@ -7,6 +7,18 @@ filter_list: - function: regex regex_pattern: The answer is (\-?[0-9\.\,]+) - function: take_first - name: get-answer + name: strict-match +- filter: + - function: regex + group_select: -1 + regex_pattern: (-?[$0-9.,]{2,})|(-?[0-9]+) + - function: take_first + name: flexible-extract +generation_kwargs: + do_sample: false + until: + - 'প্রশ্ন:' + - + - <|im_end|> include: cot_yaml task: mgsm_native_cot_bn diff --git a/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_de.yaml b/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_de.yaml index 84d774767b..4f47017969 100644 --- a/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_de.yaml +++ b/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_de.yaml @@ -7,6 +7,18 @@ filter_list: - function: regex regex_pattern: Die Antwort lautet (\-?[0-9\.\,]+) - function: take_first - name: get-answer + name: strict-match +- filter: + - function: regex + group_select: -1 + regex_pattern: (-?[$0-9.,]{2,})|(-?[0-9]+) + - function: take_first + name: flexible-extract +generation_kwargs: + do_sample: false + until: + - 'Frage:' + - + - <|im_end|> include: cot_yaml task: mgsm_native_cot_de diff --git a/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_en.yaml b/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_en.yaml index 4b91e3ebea..c2033b335f 100644 --- a/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_en.yaml +++ b/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_en.yaml @@ -7,6 +7,18 @@ filter_list: - function: regex regex_pattern: The answer is (\-?[0-9\.\,]+) - function: take_first - name: get-answer + name: strict-match +- filter: + - function: regex + group_select: -1 + regex_pattern: (-?[$0-9.,]{2,})|(-?[0-9]+) + - function: take_first + name: flexible-extract +generation_kwargs: + do_sample: false + until: + - 'Question:' + - + - <|im_end|> include: cot_yaml task: mgsm_native_cot_en diff --git a/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_es.yaml b/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_es.yaml index cec340dfd4..6c39fb9c47 100644 --- a/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_es.yaml +++ b/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_es.yaml @@ -7,6 +7,18 @@ filter_list: - function: regex regex_pattern: La respuesta es (\-?[0-9\.\,]+) - function: take_first - name: get-answer + name: strict-match +- filter: + - function: regex + group_select: -1 + regex_pattern: (-?[$0-9.,]{2,})|(-?[0-9]+) + - function: take_first + name: flexible-extract +generation_kwargs: + do_sample: false + until: + - 'Pregunta:' + - + - <|im_end|> include: cot_yaml task: mgsm_native_cot_es diff --git a/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_fr.yaml b/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_fr.yaml index dfefc22c42..b52b881f7a 100644 --- a/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_fr.yaml +++ b/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_fr.yaml @@ -7,6 +7,18 @@ filter_list: - function: regex regex_pattern: La réponse est (\-?[0-9\.\,]+) - function: take_first - name: get-answer + name: strict-match +- filter: + - function: regex + group_select: -1 + regex_pattern: (-?[$0-9.,]{2,})|(-?[0-9]+) + - function: take_first + name: flexible-extract +generation_kwargs: + do_sample: false + until: + - 'Question :' + - + - <|im_end|> include: cot_yaml task: mgsm_native_cot_fr diff --git a/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_ja.yaml b/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_ja.yaml index 190cb50047..8e56bd0b15 100644 --- a/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_ja.yaml +++ b/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_ja.yaml @@ -7,7 +7,18 @@ filter_list: - function: regex regex_pattern: 答えは(\-?[0-9\.\,]+)です。 - function: take_first - name: get-answer + name: strict-match +- filter: + - function: regex + group_select: -1 + regex_pattern: (-?[$0-9.,]{2,})|(-?[0-9]+) + - function: take_first + name: flexible-extract +generation_kwargs: + do_sample: false + until: + - '問題:' + - + - <|im_end|> include: cot_yaml -target_delimiter: "" task: mgsm_native_cot_ja diff --git a/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_ru.yaml b/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_ru.yaml index bade2b3da0..3cff6267a0 100644 --- a/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_ru.yaml +++ b/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_ru.yaml @@ -7,6 +7,18 @@ filter_list: - function: regex regex_pattern: Ответ — (\-?[0-9\.\,]+) - function: take_first - name: get-answer + name: strict-match +- filter: + - function: regex + group_select: -1 + regex_pattern: (-?[$0-9.,]{2,})|(-?[0-9]+) + - function: take_first + name: flexible-extract +generation_kwargs: + do_sample: false + until: + - 'Задача:' + - + - <|im_end|> include: cot_yaml task: mgsm_native_cot_ru diff --git a/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_sw.yaml b/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_sw.yaml index 2299ee610e..4da793dbc7 100644 --- a/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_sw.yaml +++ b/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_sw.yaml @@ -7,6 +7,18 @@ filter_list: - function: regex regex_pattern: Jibu ni (\-?[0-9\.\,]+) - function: take_first - name: get-answer + name: strict-match +- filter: + - function: regex + group_select: -1 + regex_pattern: (-?[$0-9.,]{2,})|(-?[0-9]+) + - function: take_first + name: flexible-extract +generation_kwargs: + do_sample: false + until: + - 'Swali:' + - + - <|im_end|> include: cot_yaml task: mgsm_native_cot_sw diff --git a/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_te.yaml b/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_te.yaml index 53d7dd4893..1cdbaca889 100644 --- a/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_te.yaml +++ b/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_te.yaml @@ -7,6 +7,18 @@ filter_list: - function: regex regex_pattern: సమాధానం (\-?[0-9\.\,]+) - function: take_first - name: get-answer + name: strict-match +- filter: + - function: regex + group_select: -1 + regex_pattern: (-?[$0-9.,]{2,})|(-?[0-9]+) + - function: take_first + name: flexible-extract +generation_kwargs: + do_sample: false + until: + - 'ప్రశ్న:' + - + - <|im_end|> include: cot_yaml task: mgsm_native_cot_te diff --git a/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_th.yaml b/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_th.yaml index 75060b5f36..6931d3a2ff 100644 --- a/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_th.yaml +++ b/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_th.yaml @@ -7,6 +7,18 @@ filter_list: - function: regex regex_pattern: คำตอบคือ (\-?[0-9\.\,]+) - function: take_first - name: get-answer + name: strict-match +- filter: + - function: regex + group_select: -1 + regex_pattern: (-?[$0-9.,]{2,})|(-?[0-9]+) + - function: take_first + name: flexible-extract +generation_kwargs: + do_sample: false + until: + - 'โจทย์:' + - + - <|im_end|> include: cot_yaml task: mgsm_native_cot_th diff --git a/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_zh.yaml b/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_zh.yaml index 0ba2d7f71c..3f0d7e2dce 100644 --- a/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_zh.yaml +++ b/lm_eval/tasks/mgsm/native_cot/mgsm_native_cot_zh.yaml @@ -7,7 +7,18 @@ filter_list: - function: regex regex_pattern: 答案是 (\-?[0-9\.\,]+)。 - function: take_first - name: get-answer + name: strict-match +- filter: + - function: regex + group_select: -1 + regex_pattern: (-?[$0-9.,]{2,})|(-?[0-9]+) + - function: take_first + name: flexible-extract +generation_kwargs: + do_sample: false + until: + - '问题:' + - + - <|im_end|> include: cot_yaml -target_delimiter: "" task: mgsm_native_cot_zh diff --git a/lm_eval/tasks/mgsm/utils.py b/lm_eval/tasks/mgsm/utils.py index 46af2b5591..3a6547b2e2 100644 --- a/lm_eval/tasks/mgsm/utils.py +++ b/lm_eval/tasks/mgsm/utils.py @@ -99,11 +99,24 @@ def add_regex_pattern(regex_pattern): return { "filter_list": [ { - "name": "get-answer", + "name": "strict-match", "filter": [ { "function": "regex", - "regex_pattern": regex_pattern, + "regex_pattern": f"""{regex_pattern}""", + }, + { + "function": "take_first", + }, + ], + }, + { + "name": "flexible-extract", + "filter": [ + { + "function": "regex", + "regex_pattern": """(-?[$0-9.,]{2,})|(-?[0-9]+)""", + "group_select": -1, }, { "function": "take_first", @@ -113,7 +126,6 @@ def add_regex_pattern(regex_pattern): ], } - def gen_lang_yamls(output_dir: str, overwrite: bool, mode: str) -> None: """ Generate a yaml file for each language. @@ -139,7 +151,7 @@ def gen_lang_yamls(output_dir: str, overwrite: bool, mode: str) -> None: REGEX = LANGUAGES[lang]["REGEX"] task_name = f"mgsm_native_cot_{lang}" filter_list = add_regex_pattern(REGEX) - DELIMITER = "" if lang in ["zh", "ja"] + DELIMITER = "" if lang in ["zh", "ja"] else None elif mode == "en-cot": ANSWER = LANGUAGES["en"]["ANSWER"] REGEX = LANGUAGES["en"]["REGEX"] @@ -167,6 +179,10 @@ def gen_lang_yamls(output_dir: str, overwrite: bool, mode: str) -> None: f"""{{{{answer_number|string}}}}""" f"""{{% endif %}}""", **filter_list, + "generation_kwargs": { + "until": [QUESTION, "", "<|im_end|>"], + "do_sample": False + }, **({"target_delimiter": DELIMITER} if DELIMITER else {}), }, f, From eacb74e387545f0eaccf1862355e7b7a50cf4add Mon Sep 17 00:00:00 2001 From: Vicki Boykis Date: Fri, 23 Feb 2024 15:36:16 -0500 Subject: [PATCH 15/20] Adding documentation for Weights and Biases CLI interface (#1466) * interface docs * fix link --- docs/interface.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/interface.md b/docs/interface.md index cf3aab24c3..76158c91f3 100644 --- a/docs/interface.md +++ b/docs/interface.md @@ -48,6 +48,8 @@ This mode supports a number of command-line arguments, the details of which can * `--seed`: Set seed for python's random, numpy and torch. Accepts a comma-separated list of 3 values for python's random, numpy, and torch seeds, respectively, or a single integer to set the same seed for all three. The values are either an integer or 'None' to not set the seed. Default is `0,1234,1234` (for backward compatibility). E.g. `--seed 0,None,8` sets `random.seed(0)` and `torch.manual_seed(8)`. Here numpy's seed is not set since the second value is `None`. E.g, `--seed 42` sets all three seeds to 42. +* `--wandb_args`: Tracks logging to Weights and Biases for evaluation runs and includes args passed to `wandb.init`, such as `project` and `job_type`. Full list (here.)[https://docs.wandb.ai/ref/python/init] + ## External Library Usage We also support using the library's external API for use within model training loops or other scripts. From f78e2da45f034a23b1b13cde3235105b0f55d830 Mon Sep 17 00:00:00 2001 From: LSinev Date: Sat, 24 Feb 2024 20:00:59 +0300 Subject: [PATCH 16/20] Add environment and transformers version logging in results dump (#1464) * Save git_hash to results even if git is not available to call as subprocess * Store more info about environment and transformers version in results to help researchers track inconsistencies * moved added logging to logging_utils * moved get_git_commit_hash to logging_utils.py * moved add_env_info inside evaluator --- lm_eval/evaluator.py | 3 +- lm_eval/logging_utils.py | 65 ++++++++++++++++++++++++++++++++++++---- lm_eval/utils.py | 27 +++-------------- 3 files changed, 66 insertions(+), 29 deletions(-) diff --git a/lm_eval/evaluator.py b/lm_eval/evaluator.py index 1405eb070f..2ed9c23613 100644 --- a/lm_eval/evaluator.py +++ b/lm_eval/evaluator.py @@ -10,10 +10,10 @@ import lm_eval.api.metrics import lm_eval.api.registry import lm_eval.models +from lm_eval.logging_utils import add_env_info, get_git_commit_hash from lm_eval.tasks import TaskManager, get_task_dict from lm_eval.utils import ( eval_logger, - get_git_commit_hash, positional_deprecated, run_task_tests, simple_parse_args_string, @@ -221,6 +221,7 @@ def simple_evaluate( "gen_kwargs": gen_kwargs, } results["git_hash"] = get_git_commit_hash() + add_env_info(results) # additional environment info to results return results else: return None diff --git a/lm_eval/logging_utils.py b/lm_eval/logging_utils.py index 464ba9f732..5618d648d6 100644 --- a/lm_eval/logging_utils.py +++ b/lm_eval/logging_utils.py @@ -1,14 +1,19 @@ import copy import json import logging +import os import re -from typing import Any, Dict, List, Literal, Tuple, Union +import subprocess +from pathlib import Path +from typing import Any, Dict, List, Literal, Optional, Tuple, Union import numpy as np import pandas as pd from packaging.version import Version +from torch.utils.collect_env import get_pretty_env_info +from transformers import __version__ as trans_version -from lm_eval import utils +from lm_eval.utils import simple_parse_args_string logger = logging.getLogger(__name__) @@ -85,9 +90,7 @@ def __init__(self, args: Any) -> None: results (Dict[str, Any]): The results dictionary. args (Any): Arguments for configuration. """ - self.wandb_args: Dict[str, Any] = utils.simple_parse_args_string( - args.wandb_args - ) + self.wandb_args: Dict[str, Any] = simple_parse_args_string(args.wandb_args) # initialize a W&B run if wandb.run is None: @@ -384,3 +387,55 @@ def log_eval_samples(self, samples: Dict[str, List[Dict[str, Any]]]) -> None: self._log_samples_as_artifact(eval_preds, task_name) self.run.log({f"{group}_eval_results": grouped_df}) + + +def get_commit_from_path(repo_path: Path) -> Optional[str]: + git_folder = Path(repo_path, ".git") + if git_folder.is_file(): + git_folder = Path( + git_folder.parent, + git_folder.read_text(encoding="utf-8").split("\n")[0].split(" ")[-1], + ) + if Path(git_folder, "HEAD").exists(): + head_name = ( + Path(git_folder, "HEAD") + .read_text(encoding="utf-8") + .split("\n")[0] + .split(" ")[-1] + ) + head_ref = Path(git_folder, head_name) + git_hash = head_ref.read_text(encoding="utf-8").replace("\n", "") + else: + git_hash = None + return git_hash + + +def get_git_commit_hash(): + """ + Gets the git commit hash of your current repo (if it exists). + Source: https://github.com/EleutherAI/gpt-neox/blob/b608043be541602170bfcfb8ec9bf85e8a0799e0/megatron/neox_arguments/neox_args.py#L42 + """ + try: + git_hash = subprocess.check_output(["git", "describe", "--always"]).strip() + git_hash = git_hash.decode() + except (subprocess.CalledProcessError, FileNotFoundError): + # FileNotFoundError occurs when git not installed on system + git_hash = get_commit_from_path(os.getcwd()) # git hash of repo if exists + return git_hash + + +def add_env_info(storage: Dict[str, Any]): + try: + pretty_env_info = get_pretty_env_info() + except Exception as err: + pretty_env_info = str(err) + transformers_version = trans_version + upper_dir_commit = get_commit_from_path( + Path(os.getcwd(), "..") + ) # git hash of upper repo if exists + added_info = { + "pretty_env_info": pretty_env_info, + "transformers_version": transformers_version, + "upper_git_hash": upper_dir_commit, # in case this repo is submodule + } + storage.update(added_info) diff --git a/lm_eval/utils.py b/lm_eval/utils.py index a7d6e7df9c..803d2c132b 100644 --- a/lm_eval/utils.py +++ b/lm_eval/utils.py @@ -5,16 +5,11 @@ import inspect import logging import os -import pathlib import re -import subprocess import sys from itertools import islice -from typing import ( - Any, - Callable, - List, -) +from pathlib import Path +from typing import Any, Callable, List import yaml from jinja2 import BaseLoader, Environment, StrictUndefined @@ -291,7 +286,7 @@ def _wrapper(*args, **kwargs): @positional_deprecated -def find_test_root(start_path: pathlib.Path) -> pathlib.Path: +def find_test_root(start_path: Path) -> Path: """ Search upward in the directory tree to a maximum of three layers to find and return the package root (containing the 'tests' folder) @@ -315,7 +310,7 @@ def run_task_tests(task_list: List[str]): """ import pytest - package_root = find_test_root(start_path=pathlib.Path(__file__)) + package_root = find_test_root(start_path=Path(__file__)) task_string = " or ".join(task_list) args = [ f"{package_root}/tests/test_version_stable.py", @@ -331,20 +326,6 @@ def run_task_tests(task_list: List[str]): ) -def get_git_commit_hash(): - """ - Gets the git commit hash of your current repo (if it exists). - Source: https://github.com/EleutherAI/gpt-neox/blob/b608043be541602170bfcfb8ec9bf85e8a0799e0/megatron/neox_arguments/neox_args.py#L42 - """ - try: - git_hash = subprocess.check_output(["git", "describe", "--always"]).strip() - git_hash = git_hash.decode() - except subprocess.CalledProcessError or FileNotFoundError: - # FileNotFoundError occurs when git not installed on system - git_hash = None - return git_hash - - def ignore_constructor(loader, node): return node From d27c0c08c45d10b546d264f860677d376f24866b Mon Sep 17 00:00:00 2001 From: LSinev Date: Mon, 26 Feb 2024 16:00:53 +0300 Subject: [PATCH 17/20] Apply code autoformatting with Ruff to tasks/*.py an *__init__.py (#1469) --- lm_eval/filters/__init__.py | 7 +- lm_eval/models/__init__.py | 24 ++-- lm_eval/prompts/__init__.py | 5 +- lm_eval/tasks/__init__.py | 132 ++++++++++-------- lm_eval/tasks/bbh/_generate_configs.py | 6 +- lm_eval/tasks/bbh/cot_zeroshot/utils.py | 83 +++++++---- lm_eval/tasks/bbh/zeroshot/utils.py | 83 +++++++---- lm_eval/tasks/belebele/_generate_configs.py | 10 +- lm_eval/tasks/bigbench/generate_tasks.py | 2 + .../tasks/bigbench/push_bigbench_dataset.py | 5 +- lm_eval/tasks/blimp/generate_configs.py | 1 + lm_eval/tasks/ceval/_generate_configs.py | 5 +- lm_eval/tasks/cmmlu/_generate_configs.py | 5 +- lm_eval/tasks/code_x_glue/code-text/bleu.py | 6 +- lm_eval/tasks/csatqa/_generate_configs.py | 5 +- lm_eval/tasks/drop/utils.py | 1 + .../tasks/gpqa/n_shot/_generate_configs.py | 2 +- lm_eval/tasks/gpqa/n_shot/utils.py | 10 +- .../tasks/gpqa/zeroshot/_generate_configs.py | 2 +- lm_eval/tasks/gpqa/zeroshot/utils.py | 8 +- lm_eval/tasks/hellaswag/utils.py | 3 +- lm_eval/tasks/ifeval/instructions.py | 2 + lm_eval/tasks/ifeval/instructions_registry.py | 1 + lm_eval/tasks/kobest/utils.py | 15 +- lm_eval/tasks/medmcqa/utils_medmcqa.py | 7 +- lm_eval/tasks/medqa/preprocess_medqa.py | 7 +- lm_eval/tasks/mgsm/utils.py | 8 +- lm_eval/tasks/minerva_math/utils.py | 9 +- lm_eval/tasks/mmlu/_generate_configs.py | 6 +- lm_eval/tasks/mmlu/flan_cot_zeroshot/utils.py | 37 +++-- .../mmlu/flan_n_shot/generative/utils.py | 37 +++-- .../advanced_ai_risk/_generate_configs.py | 3 +- .../persona/_generate_configs.py | 3 +- lm_eval/tasks/okapi/arc_multilingual/utils.py | 11 +- .../okapi/hellaswag_multilingual/utils.py | 3 +- .../mmlu_multilingual/_generate_configs.py | 12 +- .../okapi/truthfulqa_multilingual/utils.py | 5 +- lm_eval/tasks/qasper/metrics.py | 1 - lm_eval/tasks/qasper/utils.py | 3 +- lm_eval/tasks/realtoxicityprompts/metric.py | 5 +- lm_eval/tasks/scrolls/task.py | 15 +- lm_eval/tasks/squadv2/task.py | 12 +- lm_eval/tasks/super_glue/cb/aggregate.py | 2 +- lm_eval/tasks/super_glue/record/t5_utils.py | 4 +- lm_eval/tasks/super_glue/wsc/t5_utils.py | 11 +- lm_eval/tasks/truthfulqa/utils.py | 3 +- lm_eval/tasks/xwinograd/utils.py | 4 +- pyproject.toml | 6 +- 48 files changed, 404 insertions(+), 233 deletions(-) diff --git a/lm_eval/filters/__init__.py b/lm_eval/filters/__init__.py index 271f8c1ee8..42d8e9b040 100644 --- a/lm_eval/filters/__init__.py +++ b/lm_eval/filters/__init__.py @@ -1,10 +1,9 @@ -from typing import List, Union from functools import partial +from typing import List, Union from lm_eval.api.filter import FilterEnsemble -from . import selection -from . import extraction -from . import transformation + +from . import extraction, selection, transformation FILTER_REGISTRY = { diff --git a/lm_eval/models/__init__.py b/lm_eval/models/__init__.py index 23dace2f44..a2f9715d9d 100644 --- a/lm_eval/models/__init__.py +++ b/lm_eval/models/__init__.py @@ -1,13 +1,17 @@ -from . import huggingface -from . import openai_completions -from . import textsynth -from . import dummy -from . import anthropic_llms -from . import gguf -from . import vllm_causallms -from . import mamba_lm -from . import optimum_lm -from . import neuron_optimum +from . import ( + anthropic_llms, + dummy, + gguf, + huggingface, + mamba_lm, + neuron_optimum, + openai_completions, + optimum_lm, + textsynth, + vllm_causallms, +) + + # TODO: implement __all__ diff --git a/lm_eval/prompts/__init__.py b/lm_eval/prompts/__init__.py index c505113a3d..1f814214de 100644 --- a/lm_eval/prompts/__init__.py +++ b/lm_eval/prompts/__init__.py @@ -1,10 +1,11 @@ -import os import ast - +import os from typing import Dict + from lm_eval import utils from lm_eval.utils import eval_logger + # Prompt library. # Stores prompts in a dictionary indexed by 2 levels: # prompt category name, and prompt name. diff --git a/lm_eval/tasks/__init__.py b/lm_eval/tasks/__init__.py index 20d87c082e..a336b7f91c 100644 --- a/lm_eval/tasks/__init__.py +++ b/lm_eval/tasks/__init__.py @@ -1,14 +1,12 @@ -import os import abc import collections - +import logging +import os from functools import partial -from typing import List, Union, Dict +from typing import Dict, List, Union from lm_eval import utils -from lm_eval.api.task import Task, ConfigurableTask - -import logging +from lm_eval.api.task import ConfigurableTask, Task class TaskManager: @@ -16,20 +14,14 @@ class TaskManager: and an optional directory if provided. """ - def __init__( - self, - verbosity="INFO", - include_path=None - ) -> None: + def __init__(self, verbosity="INFO", include_path=None) -> None: self.verbosity = verbosity self.include_path = include_path self.logger = utils.eval_logger self.logger.setLevel(getattr(logging, f"{verbosity}")) - self._task_index = self.initialize_tasks( - include_path=include_path - ) + self._task_index = self.initialize_tasks(include_path=include_path) self._all_tasks = sorted(list(self._task_index.keys())) self.task_group_map = collections.defaultdict(list) @@ -65,27 +57,29 @@ def task_index(self): return self._task_index def match_tasks(self, task_list): - return utils.pattern_match( - task_list, self.all_tasks - ) + return utils.pattern_match(task_list, self.all_tasks) def _name_is_registered(self, name): if name in self.all_tasks: return True return False - def _name_is_task(self, name): + def _name_is_task(self, name) -> bool: if self._name_is_registered(name) and ("task" in self.task_index[name]["type"]): return True return False def _name_is_group(self, name): - if self._name_is_registered(name) and (self.task_index[name]["type"] == "group"): + if self._name_is_registered(name) and ( + self.task_index[name]["type"] == "group" + ): return True return False def _name_is_python_task(self, name): - if self._name_is_registered(name) and (self.task_index[name]["type"] == "python_task"): + if self._name_is_registered(name) and ( + self.task_index[name]["type"] == "python_task" + ): return True return False @@ -117,7 +111,7 @@ def _get_config(self, name): return utils.load_yaml_config(yaml_path, mode="full") def _get_tasklist(self, name): - assert self._name_is_task(name) == False + assert self._name_is_task(name) is False return self.task_index[name]["task"] def _process_alias(self, config, group=None): @@ -130,12 +124,12 @@ def _process_alias(self, config, group=None): return config def _load_individual_task_or_group( - self, - name_or_config: Union[str, dict] = None, - parent_name: str = None, - update_config: dict = None, - yaml_path: str = None, - ) -> ConfigurableTask: + self, + name_or_config: Union[str, dict] = None, + parent_name: str = None, + update_config: dict = None, + yaml_path: str = None, + ) -> ConfigurableTask: def load_task(config, task, group=None, yaml_path=None): if "include" in config: assert yaml_path is not None @@ -174,7 +168,9 @@ def load_task(config, task, group=None, yaml_path=None): group_config = self._get_config(name_or_config) if set(group_config.keys()) > set(["task", "group"]): update_config = { - k:v for k,v in group_config.items() if k not in ["task", "group"] + k: v + for k, v in group_config.items() + if k not in ["task", "group"] } yaml_path = self._get_yaml_path(group_name) @@ -183,9 +179,8 @@ def load_task(config, task, group=None, yaml_path=None): update_config.pop("group_alias") if isinstance(name_or_config, dict): - if update_config is not None: - name_or_config={ + name_or_config = { **name_or_config, **update_config, } @@ -196,7 +191,9 @@ def load_task(config, task, group=None, yaml_path=None): # if self._name_is_task(name) is False: if self._name_is_group(name): group_name = name - update_config = {k:v for k,v in name_or_config.items() if k != "task"} + update_config = { + k: v for k, v in name_or_config.items() if k != "task" + } subtask_list = self._get_tasklist(name) if subtask_list == -1: subtask_list = self._get_config(name)["task"] @@ -207,36 +204,53 @@ def load_task(config, task, group=None, yaml_path=None): # Check if this is a duplicate. if parent_name is not None: name_or_config["group"] = parent_name - num_duplicate = len(list(filter(lambda x: x.startswith(name), self.task_group_map[parent_name]))) + num_duplicate = len( + list( + filter( + lambda x: x.startswith(name), + self.task_group_map[parent_name], + ) + ) + ) if num_duplicate > 0: name = f"{name}-{num_duplicate}" self.task_group_map[parent_name].append(name) - task_config={ - **base_task_config, - **name_or_config, - } + task_config = { + **base_task_config, + **name_or_config, + } else: task_config = name_or_config - return load_task(task_config, task=name, group=parent_name, yaml_path=yaml_path) + return load_task( + task_config, task=name, group=parent_name, yaml_path=yaml_path + ) else: group_name = name_or_config["group"] subtask_list = name_or_config["task"] - # update_config = {k:v for k,v in name_or_config.items() if k != "task"} if set(name_or_config.keys()) > set(["task", "group"]): update_config = { - k:v for k,v in name_or_config.items() if k not in ["task", "group"] + k: v + for k, v in name_or_config.items() + if k not in ["task", "group"] } all_subtasks = {} - if (parent_name is not None): + if parent_name is not None: all_subtasks = {group_name: (parent_name, None)} - fn = partial(self._load_individual_task_or_group, parent_name=group_name, update_config=update_config, yaml_path=yaml_path) - all_subtasks = {**all_subtasks, **dict(collections.ChainMap(*map(fn, subtask_list)))} + fn = partial( + self._load_individual_task_or_group, + parent_name=group_name, + update_config=update_config, + yaml_path=yaml_path, + ) + all_subtasks = { + **all_subtasks, + **dict(collections.ChainMap(*map(fn, subtask_list))), + } return all_subtasks - def load_task_or_group(self, task_list: Union[str, list] = None) -> dict: """Loads a dictionary of task objects from a list @@ -250,12 +264,7 @@ def load_task_or_group(self, task_list: Union[str, list] = None) -> dict: task_list = [task_list] all_loaded_tasks = dict( - collections.ChainMap( - *map( - self._load_individual_task_or_group, - task_list - ) - ) + collections.ChainMap(*map(self._load_individual_task_or_group, task_list)) ) return all_loaded_tasks @@ -299,11 +308,11 @@ def _get_task_and_group(self, task_dir: str): # This is a group config tasks_and_groups[config["group"]] = { "type": "group", - "task": -1, # This signals that - # we don't need to know - # the task list for indexing - # as it can be loaded - # when called. + "task": -1, # This signals that + # we don't need to know + # the task list for indexing + # as it can be loaded + # when called. "yaml_path": yaml_path, } @@ -322,7 +331,7 @@ def _get_task_and_group(self, task_dir: str): tasks_and_groups[task] = { "type": "task", "yaml_path": yaml_path, - } + } if "group" in config: groups = config["group"] @@ -343,6 +352,7 @@ def _get_task_and_group(self, task_dir: str): return tasks_and_groups + def include_path(task_dir): logger = utils.eval_logger logger.setLevel(getattr(logging, "INFO")) @@ -352,6 +362,7 @@ def include_path(task_dir): ) return 0 + def initialize_tasks(verbosity="INFO"): logger = utils.eval_logger logger.setLevel(getattr(logging, f"{verbosity}")) @@ -362,6 +373,7 @@ def initialize_tasks(verbosity="INFO"): ) return 0 + def get_task_name_from_config(task_config: Dict[str, str]) -> str: if "task" in task_config: return task_config["task"] @@ -370,6 +382,7 @@ def get_task_name_from_config(task_config: Dict[str, str]) -> str: else: return "{dataset_path}".format(**task_config) + def get_task_name_from_object(task_object): if hasattr(task_object, "config"): return task_object._config["task"] @@ -382,7 +395,10 @@ def get_task_name_from_object(task_object): else type(task_object).__name__ ) -def get_task_dict(task_name_list: List[Union[str, Dict, Task]], task_manager: TaskManager = None): + +def get_task_dict( + task_name_list: List[Union[str, Dict, Task]], task_manager: TaskManager = None +): """Creates a dictionary of task objects from either a name of task, config, or prepared Task object. :param task_name_list: List[Union[str, Dict, Task]] @@ -409,7 +425,9 @@ def get_task_dict(task_name_list: List[Union[str, Dict, Task]], task_manager: Ta if task_manager is None: task_manager = TaskManager() - task_name_from_string_dict = task_manager.load_task_or_group(string_task_name_list) + task_name_from_string_dict = task_manager.load_task_or_group( + string_task_name_list + ) for task_element in others_task_name_list: if isinstance(task_element, dict): diff --git a/lm_eval/tasks/bbh/_generate_configs.py b/lm_eval/tasks/bbh/_generate_configs.py index 0d085a1d0a..febee5fcd4 100644 --- a/lm_eval/tasks/bbh/_generate_configs.py +++ b/lm_eval/tasks/bbh/_generate_configs.py @@ -1,13 +1,13 @@ """ Take in a YAML, and output all other splits with this YAML """ +import argparse import os import re -import yaml -import requests -import argparse import datasets +import requests +import yaml from tqdm import tqdm from lm_eval import utils diff --git a/lm_eval/tasks/bbh/cot_zeroshot/utils.py b/lm_eval/tasks/bbh/cot_zeroshot/utils.py index ca411033fe..a3c63df468 100644 --- a/lm_eval/tasks/bbh/cot_zeroshot/utils.py +++ b/lm_eval/tasks/bbh/cot_zeroshot/utils.py @@ -1,19 +1,24 @@ import collections import re import sys - import unicodedata -from lm_eval.filters.extraction import RegexFilter, Filter +from lm_eval.filters.extraction import Filter, RegexFilter class ExtendedRegexFilter(RegexFilter): - punct_tbl = dict.fromkeys(i for i in range(sys.maxunicode) - if unicodedata.category(chr(i)).startswith('P')) + punct_tbl = dict.fromkeys( + i for i in range(sys.maxunicode) if unicodedata.category(chr(i)).startswith("P") + ) def __init__( - self, regex_pattern: str = r"#### (\-?[0-9\.\,]+)", group_select=0, fallback: str = "[invalid]", - ignore_case=False, ignore_punctuation=False, regexes_to_ignore=None, + self, + regex_pattern: str = r"#### (\-?[0-9\.\,]+)", + group_select=0, + fallback: str = "[invalid]", + ignore_case=False, + ignore_punctuation=False, + regexes_to_ignore=None, ) -> None: super().__init__(regex_pattern, group_select, fallback) self.ignore_case = ignore_case @@ -47,8 +52,13 @@ def find_match(self, regex, resp, convert_dict={}): class MapRegexFilter(ExtendedRegexFilter): def __init__( - self, regex_pattern_to_value: dict = {}, group_select=0, fallback: str = "[invalid]", - ignore_case=False, ignore_punctuation=False, regexes_to_ignore=None, + self, + regex_pattern_to_value: dict = {}, + group_select=0, + fallback: str = "[invalid]", + ignore_case=False, + ignore_punctuation=False, + regexes_to_ignore=None, ) -> None: """ regex_pattern_to_value: Match the regex pattern and change the result into the value @@ -57,8 +67,17 @@ def __init__( ignore_punctuation: Remove the punctuation before matching with the given regex regexes_to_ignore: Remove these regexes before matching with the given regex """ - super().__init__('|'.join(list(regex_pattern_to_value.keys())), group_select, fallback, ignore_case, ignore_punctuation, regexes_to_ignore) - self.regex_to_value = {re.compile(r): v for r, v in regex_pattern_to_value.items()} + super().__init__( + "|".join(list(regex_pattern_to_value.keys())), + group_select, + fallback, + ignore_case, + ignore_punctuation, + regexes_to_ignore, + ) + self.regex_to_value = { + re.compile(r): v for r, v in regex_pattern_to_value.items() + } def apply(self, resps, docs): filtered_resps = [] @@ -66,10 +85,15 @@ def apply(self, resps, docs): for r in resps: filtered = [] for resp in r: - whole_match_considering_group_select = self.find_match(self.regex, self.filter_ignores(resp)) + whole_match_considering_group_select = self.find_match( + self.regex, self.filter_ignores(resp) + ) if whole_match_considering_group_select: for regex, mapped_value in self.regex_to_value.items(): - match = self.find_match(regex, self.filter_ignores(whole_match_considering_group_select)) + match = self.find_match( + regex, + self.filter_ignores(whole_match_considering_group_select), + ) if match: match = mapped_value break @@ -91,9 +115,11 @@ def apply(self, resps, docs): filtered_resps = [] import regex from word2number import w2n + # https://www.reddit.com/r/regex/comments/11a38uk/parsing_numbers_written_out_as_english_words english_number_regex = regex.compile( - "((?:(?:zero|one|two|three|four|five|(?:twen|thir|for|fif|six|seven|nine)(?|teen|ty)|eight(?:|een|y)|ten|eleven|twelve|fourteen|hundred|thousand|(?:m|b|tr)illion)(?:zero|one|two|three|four|five|(?:twen|thir|for|fif|six|seven|nine)(?:|teen|ty)|eight(?|een|y)|ten|eleven|twelve|fourteen|hundred|thousand|(?:m|b|tr)illion|[^\S\r\n]|,|and|&)+)?(?:zero|one|two|three|four|five|(?:twen|thir|for|fif|six|seven|nine)(?|teen|ty)|eight(?|een|y)|ten|eleven|twelve|fourteen|hundred|thousand|(?:m|b|tr)illion))") + "((?:(?:zero|one|two|three|four|five|(?:twen|thir|for|fif|six|seven|nine)(?|teen|ty)|eight(?:|een|y)|ten|eleven|twelve|fourteen|hundred|thousand|(?:m|b|tr)illion)(?:zero|one|two|three|four|five|(?:twen|thir|for|fif|six|seven|nine)(?:|teen|ty)|eight(?|een|y)|ten|eleven|twelve|fourteen|hundred|thousand|(?:m|b|tr)illion|[^\S\r\n]|,|and|&)+)?(?:zero|one|two|three|four|five|(?:twen|thir|for|fif|six|seven|nine)(?|teen|ty)|eight(?|een|y)|ten|eleven|twelve|fourteen|hundred|thousand|(?:m|b|tr)illion))" + ) for r in resps: filtered = [] @@ -118,21 +144,22 @@ def apply(self, resps, docs): filtered_resps = [] for r, doc in zip(resps, docs): - words = doc['input'].split("List:")[1].strip().split() - regex = re.compile('|'.join([f"\\b{w}\\b" for w in words])) + words = doc["input"].split("List:")[1].strip().split() + regex = re.compile("|".join([f"\\b{w}\\b" for w in words])) filtered = [] for resp in r: match = regex.findall(resp) match.reverse() - ordered_words = reversed(collections.OrderedDict(zip(match, [None] * len(match)))) - filtered.append(' '.join(ordered_words)) + ordered_words = reversed( + collections.OrderedDict(zip(match, [None] * len(match))) + ) + filtered.append(" ".join(ordered_words)) filtered_resps.append(filtered) return filtered_resps class MultiChoiceRegexFilter(ExtendedRegexFilter): - def __init__(self, *args, **kwargs): """ regex_pattern: The basic regex pattern to use. If fails to match, we will use the customized match procedure @@ -156,13 +183,13 @@ def apply(self, resps, docs): for r, doc in zip(resps, docs): fallback_regexes = [] choice_to_alpha = {} - next_alpha = 'A' + next_alpha = "A" without_paren_fallback_regexes = [] without_paren_to_target = {} multiple_choices_regex = re.compile(r"\([A-Z]\)([^\n^(]*)") - match = multiple_choices_regex.findall(doc['input']) + match = multiple_choices_regex.findall(doc["input"]) for m in match: m = self.filter_ignores(m.strip()) fallback_regexes.append(f"{re.escape(m)}") @@ -172,17 +199,23 @@ def apply(self, resps, docs): without_paren_to_target[next_alpha] = f"({next_alpha})" next_alpha = chr(ord(next_alpha) + 1) - fallback_regex = re.compile('|'.join(fallback_regexes)) - without_paren_fallback_regex = '|'.join(without_paren_fallback_regexes) - without_paren_fallback_regex = re.compile(f":[\s]*({without_paren_fallback_regex})") + fallback_regex = re.compile("|".join(fallback_regexes)) + without_paren_fallback_regex = "|".join(without_paren_fallback_regexes) + without_paren_fallback_regex = re.compile( + f":[\s]*({without_paren_fallback_regex})" + ) filtered = [] for resp in r: match = self.find_match(self.regex, resp) if not match: - match = self.find_match(fallback_regex, self.filter_ignores(resp), choice_to_alpha) + match = self.find_match( + fallback_regex, self.filter_ignores(resp), choice_to_alpha + ) if not match: - match = self.find_match(without_paren_fallback_regex, resp, without_paren_to_target) + match = self.find_match( + without_paren_fallback_regex, resp, without_paren_to_target + ) if not match: match = self.fallback filtered.append(match) diff --git a/lm_eval/tasks/bbh/zeroshot/utils.py b/lm_eval/tasks/bbh/zeroshot/utils.py index ca411033fe..a3c63df468 100644 --- a/lm_eval/tasks/bbh/zeroshot/utils.py +++ b/lm_eval/tasks/bbh/zeroshot/utils.py @@ -1,19 +1,24 @@ import collections import re import sys - import unicodedata -from lm_eval.filters.extraction import RegexFilter, Filter +from lm_eval.filters.extraction import Filter, RegexFilter class ExtendedRegexFilter(RegexFilter): - punct_tbl = dict.fromkeys(i for i in range(sys.maxunicode) - if unicodedata.category(chr(i)).startswith('P')) + punct_tbl = dict.fromkeys( + i for i in range(sys.maxunicode) if unicodedata.category(chr(i)).startswith("P") + ) def __init__( - self, regex_pattern: str = r"#### (\-?[0-9\.\,]+)", group_select=0, fallback: str = "[invalid]", - ignore_case=False, ignore_punctuation=False, regexes_to_ignore=None, + self, + regex_pattern: str = r"#### (\-?[0-9\.\,]+)", + group_select=0, + fallback: str = "[invalid]", + ignore_case=False, + ignore_punctuation=False, + regexes_to_ignore=None, ) -> None: super().__init__(regex_pattern, group_select, fallback) self.ignore_case = ignore_case @@ -47,8 +52,13 @@ def find_match(self, regex, resp, convert_dict={}): class MapRegexFilter(ExtendedRegexFilter): def __init__( - self, regex_pattern_to_value: dict = {}, group_select=0, fallback: str = "[invalid]", - ignore_case=False, ignore_punctuation=False, regexes_to_ignore=None, + self, + regex_pattern_to_value: dict = {}, + group_select=0, + fallback: str = "[invalid]", + ignore_case=False, + ignore_punctuation=False, + regexes_to_ignore=None, ) -> None: """ regex_pattern_to_value: Match the regex pattern and change the result into the value @@ -57,8 +67,17 @@ def __init__( ignore_punctuation: Remove the punctuation before matching with the given regex regexes_to_ignore: Remove these regexes before matching with the given regex """ - super().__init__('|'.join(list(regex_pattern_to_value.keys())), group_select, fallback, ignore_case, ignore_punctuation, regexes_to_ignore) - self.regex_to_value = {re.compile(r): v for r, v in regex_pattern_to_value.items()} + super().__init__( + "|".join(list(regex_pattern_to_value.keys())), + group_select, + fallback, + ignore_case, + ignore_punctuation, + regexes_to_ignore, + ) + self.regex_to_value = { + re.compile(r): v for r, v in regex_pattern_to_value.items() + } def apply(self, resps, docs): filtered_resps = [] @@ -66,10 +85,15 @@ def apply(self, resps, docs): for r in resps: filtered = [] for resp in r: - whole_match_considering_group_select = self.find_match(self.regex, self.filter_ignores(resp)) + whole_match_considering_group_select = self.find_match( + self.regex, self.filter_ignores(resp) + ) if whole_match_considering_group_select: for regex, mapped_value in self.regex_to_value.items(): - match = self.find_match(regex, self.filter_ignores(whole_match_considering_group_select)) + match = self.find_match( + regex, + self.filter_ignores(whole_match_considering_group_select), + ) if match: match = mapped_value break @@ -91,9 +115,11 @@ def apply(self, resps, docs): filtered_resps = [] import regex from word2number import w2n + # https://www.reddit.com/r/regex/comments/11a38uk/parsing_numbers_written_out_as_english_words english_number_regex = regex.compile( - "((?:(?:zero|one|two|three|four|five|(?:twen|thir|for|fif|six|seven|nine)(?|teen|ty)|eight(?:|een|y)|ten|eleven|twelve|fourteen|hundred|thousand|(?:m|b|tr)illion)(?:zero|one|two|three|four|five|(?:twen|thir|for|fif|six|seven|nine)(?:|teen|ty)|eight(?|een|y)|ten|eleven|twelve|fourteen|hundred|thousand|(?:m|b|tr)illion|[^\S\r\n]|,|and|&)+)?(?:zero|one|two|three|four|five|(?:twen|thir|for|fif|six|seven|nine)(?|teen|ty)|eight(?|een|y)|ten|eleven|twelve|fourteen|hundred|thousand|(?:m|b|tr)illion))") + "((?:(?:zero|one|two|three|four|five|(?:twen|thir|for|fif|six|seven|nine)(?|teen|ty)|eight(?:|een|y)|ten|eleven|twelve|fourteen|hundred|thousand|(?:m|b|tr)illion)(?:zero|one|two|three|four|five|(?:twen|thir|for|fif|six|seven|nine)(?:|teen|ty)|eight(?|een|y)|ten|eleven|twelve|fourteen|hundred|thousand|(?:m|b|tr)illion|[^\S\r\n]|,|and|&)+)?(?:zero|one|two|three|four|five|(?:twen|thir|for|fif|six|seven|nine)(?|teen|ty)|eight(?|een|y)|ten|eleven|twelve|fourteen|hundred|thousand|(?:m|b|tr)illion))" + ) for r in resps: filtered = [] @@ -118,21 +144,22 @@ def apply(self, resps, docs): filtered_resps = [] for r, doc in zip(resps, docs): - words = doc['input'].split("List:")[1].strip().split() - regex = re.compile('|'.join([f"\\b{w}\\b" for w in words])) + words = doc["input"].split("List:")[1].strip().split() + regex = re.compile("|".join([f"\\b{w}\\b" for w in words])) filtered = [] for resp in r: match = regex.findall(resp) match.reverse() - ordered_words = reversed(collections.OrderedDict(zip(match, [None] * len(match)))) - filtered.append(' '.join(ordered_words)) + ordered_words = reversed( + collections.OrderedDict(zip(match, [None] * len(match))) + ) + filtered.append(" ".join(ordered_words)) filtered_resps.append(filtered) return filtered_resps class MultiChoiceRegexFilter(ExtendedRegexFilter): - def __init__(self, *args, **kwargs): """ regex_pattern: The basic regex pattern to use. If fails to match, we will use the customized match procedure @@ -156,13 +183,13 @@ def apply(self, resps, docs): for r, doc in zip(resps, docs): fallback_regexes = [] choice_to_alpha = {} - next_alpha = 'A' + next_alpha = "A" without_paren_fallback_regexes = [] without_paren_to_target = {} multiple_choices_regex = re.compile(r"\([A-Z]\)([^\n^(]*)") - match = multiple_choices_regex.findall(doc['input']) + match = multiple_choices_regex.findall(doc["input"]) for m in match: m = self.filter_ignores(m.strip()) fallback_regexes.append(f"{re.escape(m)}") @@ -172,17 +199,23 @@ def apply(self, resps, docs): without_paren_to_target[next_alpha] = f"({next_alpha})" next_alpha = chr(ord(next_alpha) + 1) - fallback_regex = re.compile('|'.join(fallback_regexes)) - without_paren_fallback_regex = '|'.join(without_paren_fallback_regexes) - without_paren_fallback_regex = re.compile(f":[\s]*({without_paren_fallback_regex})") + fallback_regex = re.compile("|".join(fallback_regexes)) + without_paren_fallback_regex = "|".join(without_paren_fallback_regexes) + without_paren_fallback_regex = re.compile( + f":[\s]*({without_paren_fallback_regex})" + ) filtered = [] for resp in r: match = self.find_match(self.regex, resp) if not match: - match = self.find_match(fallback_regex, self.filter_ignores(resp), choice_to_alpha) + match = self.find_match( + fallback_regex, self.filter_ignores(resp), choice_to_alpha + ) if not match: - match = self.find_match(without_paren_fallback_regex, resp, without_paren_to_target) + match = self.find_match( + without_paren_fallback_regex, resp, without_paren_to_target + ) if not match: match = self.fallback filtered.append(match) diff --git a/lm_eval/tasks/belebele/_generate_configs.py b/lm_eval/tasks/belebele/_generate_configs.py index fd96034afb..af6aa824a6 100644 --- a/lm_eval/tasks/belebele/_generate_configs.py +++ b/lm_eval/tasks/belebele/_generate_configs.py @@ -1,15 +1,16 @@ """ Take in a YAML, and output all other splits with this YAML """ -import os -import yaml import argparse -import requests +import os +import requests +import yaml from tqdm import tqdm from lm_eval.utils import logging + API_URL = "https://datasets-server.huggingface.co/splits?dataset=facebook/belebele" @@ -39,6 +40,7 @@ def parse_args(): def query(): response = requests.get(API_URL) return response.json()["splits"] + print(query()) languages = [split["split"] for split in query()] @@ -49,7 +51,7 @@ def query(): if args.task_prefix != "" else f"belebele_{lang}", "test_split": lang, - "fewshot_split":lang, + "fewshot_split": lang, } file_save_path = args.save_prefix_path + f"_{lang}.yaml" diff --git a/lm_eval/tasks/bigbench/generate_tasks.py b/lm_eval/tasks/bigbench/generate_tasks.py index 08fd0c0a59..169c664655 100644 --- a/lm_eval/tasks/bigbench/generate_tasks.py +++ b/lm_eval/tasks/bigbench/generate_tasks.py @@ -1,6 +1,8 @@ import os + import yaml + all_subtasks = [ "abstract_narrative_understanding", "anachronisms", diff --git a/lm_eval/tasks/bigbench/push_bigbench_dataset.py b/lm_eval/tasks/bigbench/push_bigbench_dataset.py index 7566a66441..44577fa5d4 100644 --- a/lm_eval/tasks/bigbench/push_bigbench_dataset.py +++ b/lm_eval/tasks/bigbench/push_bigbench_dataset.py @@ -8,10 +8,9 @@ `pip install "bigbench @ https://storage.googleapis.com/public_research_data/bigbench/bigbench-0.0.1.tar.gz"` and is included so that the bigbench dependency can be avoided. """ -from tqdm import tqdm -import datasets - import bigbench.api.util as bb_utils +import datasets +from tqdm import tqdm all_task_names = bb_utils.get_all_json_task_names() diff --git a/lm_eval/tasks/blimp/generate_configs.py b/lm_eval/tasks/blimp/generate_configs.py index a768196172..a32c366834 100644 --- a/lm_eval/tasks/blimp/generate_configs.py +++ b/lm_eval/tasks/blimp/generate_configs.py @@ -1,5 +1,6 @@ import yaml + all_subtasks = [ "adjunct_island", "anaphor_gender_agreement", diff --git a/lm_eval/tasks/ceval/_generate_configs.py b/lm_eval/tasks/ceval/_generate_configs.py index 2df8ca31e4..1c6e4fc78a 100644 --- a/lm_eval/tasks/ceval/_generate_configs.py +++ b/lm_eval/tasks/ceval/_generate_configs.py @@ -1,14 +1,15 @@ """ Take in a YAML, and output all other splits with this YAML """ -import os -import yaml import argparse +import os +import yaml from tqdm import tqdm from lm_eval.logger import eval_logger + SUBJECTS = { "computer_network": "计算机网络", "operating_system": "操作系统", diff --git a/lm_eval/tasks/cmmlu/_generate_configs.py b/lm_eval/tasks/cmmlu/_generate_configs.py index 3afb15bf84..81dc4d7d7b 100644 --- a/lm_eval/tasks/cmmlu/_generate_configs.py +++ b/lm_eval/tasks/cmmlu/_generate_configs.py @@ -1,14 +1,15 @@ """ Take in a YAML, and output all other splits with this YAML """ -import os -import yaml import argparse +import os +import yaml from tqdm import tqdm from lm_eval.logger import eval_logger + SUBJECTS = { "agronomy": "农学", "anatomy": "解剖学", diff --git a/lm_eval/tasks/code_x_glue/code-text/bleu.py b/lm_eval/tasks/code_x_glue/code-text/bleu.py index 7f89404649..654a0ae06a 100644 --- a/lm_eval/tasks/code_x_glue/code-text/bleu.py +++ b/lm_eval/tasks/code_x_glue/code-text/bleu.py @@ -1,10 +1,10 @@ #!/usr/bin/python +import math import re import sys -import math import xml.sax.saxutils +from typing import Any, Dict, List, Optional, Pattern, Tuple, Union -from typing import List, Pattern, Tuple, Union, Dict, Any, Optional """ This script was adapted from the original version by hieuhoang1972 which is part of MOSES. @@ -60,7 +60,7 @@ def normalize(s): # Added to bypass NIST-style pre-processing of hyp and ref files -- wade if nonorm: return s.split() - if type(s) is not str: + if not isinstance(s, str): s = " ".join(s) # language-independent part: for pattern, replace in normalize1: diff --git a/lm_eval/tasks/csatqa/_generate_configs.py b/lm_eval/tasks/csatqa/_generate_configs.py index bd849c0ae6..a74b890490 100644 --- a/lm_eval/tasks/csatqa/_generate_configs.py +++ b/lm_eval/tasks/csatqa/_generate_configs.py @@ -1,14 +1,15 @@ """ Take in a YAML, and output all other splits with this YAML """ -import os -import yaml import argparse +import os +import yaml from tqdm import tqdm from lm_eval.logger import eval_logger + SUBSETS = ["WR", "GR", "RCS", "RCSS", "RCH", "LI"] diff --git a/lm_eval/tasks/drop/utils.py b/lm_eval/tasks/drop/utils.py index 03f7218c90..54093bb4d2 100644 --- a/lm_eval/tasks/drop/utils.py +++ b/lm_eval/tasks/drop/utils.py @@ -4,6 +4,7 @@ import numpy as np from scipy.optimize import linear_sum_assignment + _ARTICLES = re.compile(r"\b(a|an|the)\b", re.UNICODE) diff --git a/lm_eval/tasks/gpqa/n_shot/_generate_configs.py b/lm_eval/tasks/gpqa/n_shot/_generate_configs.py index 977759f159..401fa9413d 100644 --- a/lm_eval/tasks/gpqa/n_shot/_generate_configs.py +++ b/lm_eval/tasks/gpqa/n_shot/_generate_configs.py @@ -1,5 +1,4 @@ import yaml - from tqdm import tqdm @@ -22,5 +21,6 @@ def main() -> None: except FileExistsError: pass + if __name__ == "__main__": main() diff --git a/lm_eval/tasks/gpqa/n_shot/utils.py b/lm_eval/tasks/gpqa/n_shot/utils.py index c1d9d1a5aa..e0b886d287 100644 --- a/lm_eval/tasks/gpqa/n_shot/utils.py +++ b/lm_eval/tasks/gpqa/n_shot/utils.py @@ -1,6 +1,8 @@ -import datasets -import re import random +import re + +import datasets + def preprocess(text): if text is None: @@ -11,8 +13,10 @@ def preprocess(text): text = text.replace(" ", " ") return text + rng = random.Random(42) + def process_docs(dataset: datasets.Dataset) -> datasets.Dataset: def _process_doc(doc): choices = [ @@ -30,7 +34,7 @@ def _process_doc(doc): "choice2": choices[1], "choice3": choices[2], "choice4": choices[3], - "answer": f"({chr(65 + correct_answer_index)})" + "answer": f"({chr(65 + correct_answer_index)})", } return out_doc diff --git a/lm_eval/tasks/gpqa/zeroshot/_generate_configs.py b/lm_eval/tasks/gpqa/zeroshot/_generate_configs.py index f91c9f454f..64929f1b78 100644 --- a/lm_eval/tasks/gpqa/zeroshot/_generate_configs.py +++ b/lm_eval/tasks/gpqa/zeroshot/_generate_configs.py @@ -1,5 +1,4 @@ import yaml - from tqdm import tqdm @@ -22,5 +21,6 @@ def main() -> None: except FileExistsError: pass + if __name__ == "__main__": main() diff --git a/lm_eval/tasks/gpqa/zeroshot/utils.py b/lm_eval/tasks/gpqa/zeroshot/utils.py index f941abf06f..c2317e02ef 100644 --- a/lm_eval/tasks/gpqa/zeroshot/utils.py +++ b/lm_eval/tasks/gpqa/zeroshot/utils.py @@ -1,6 +1,8 @@ -import datasets -import re import random +import re + +import datasets + def preprocess(text): if text is None: @@ -29,7 +31,7 @@ def _process_doc(doc): "choice2": choices[1], "choice3": choices[2], "choice4": choices[3], - "answer": f"({chr(65 + correct_answer_index)})" + "answer": f"({chr(65 + correct_answer_index)})", } return out_doc diff --git a/lm_eval/tasks/hellaswag/utils.py b/lm_eval/tasks/hellaswag/utils.py index 62c0c23bcd..b526a9e930 100644 --- a/lm_eval/tasks/hellaswag/utils.py +++ b/lm_eval/tasks/hellaswag/utils.py @@ -1,6 +1,7 @@ -import datasets import re +import datasets + def preprocess(text): text = text.strip() diff --git a/lm_eval/tasks/ifeval/instructions.py b/lm_eval/tasks/ifeval/instructions.py index a0da474006..31436834b7 100644 --- a/lm_eval/tasks/ifeval/instructions.py +++ b/lm_eval/tasks/ifeval/instructions.py @@ -22,8 +22,10 @@ from typing import Dict, Optional, Sequence, Union import langdetect + from lm_eval.tasks.ifeval import instructions_util + logger = logging.getLogger(__name__) _InstructionArgsDtype = Optional[Dict[str, Union[int, str, Sequence[str]]]] diff --git a/lm_eval/tasks/ifeval/instructions_registry.py b/lm_eval/tasks/ifeval/instructions_registry.py index ecb20e9b23..30a092c379 100644 --- a/lm_eval/tasks/ifeval/instructions_registry.py +++ b/lm_eval/tasks/ifeval/instructions_registry.py @@ -15,6 +15,7 @@ """Registry of all instructions.""" from lm_eval.tasks.ifeval import instructions + _KEYWORD = "keywords:" _LANGUAGE = "language:" diff --git a/lm_eval/tasks/kobest/utils.py b/lm_eval/tasks/kobest/utils.py index 0a1789c33e..9799ef038c 100644 --- a/lm_eval/tasks/kobest/utils.py +++ b/lm_eval/tasks/kobest/utils.py @@ -6,32 +6,43 @@ def copa_doc_to_text(doc: dict) -> str: connector = {"원인": " 왜냐하면", "결과": " 그래서"}[doc["question"].strip()] return f"""{doc["premise"]} {connector}""" + def copa_doc_to_target(doc: dict) -> str: correct_choice = doc["alternative_1"] if doc["label"] == 0 else doc["alternative_2"] return f"""{correct_choice}""" + def copa_doc_to_choice(doc: dict) -> list: return [f"""{doc["alternative_1"]}""", f"""{doc["alternative_2"]}"""] + def sentineg_doc_to_text(doc: dict): return f"""문장: {doc["sentence"]} 긍부정:""" + def wic_doc_to_text(doc: dict) -> str: return f"""문장1: {doc["context_1"]} 문장2: {doc["context_2"]} 두 문장에서 {doc["word"]}가 같은 뜻으로 쓰였나?""" + def hellaswag_process_doc(doc: Dataset) -> Dataset: def preprocessor(dataset): return { "query": f"""문장: {dataset["context"]}""", - "choices": [dataset["ending_1"], dataset["ending_2"], dataset["ending_3"], dataset["ending_4"]], + "choices": [ + dataset["ending_1"], + dataset["ending_2"], + dataset["ending_3"], + dataset["ending_4"], + ], "gold": int(dataset["label"]), } return doc.map(preprocessor) + def macro_f1_score(items): unzipped_list = list(zip(*items)) golds = unzipped_list[0] preds = unzipped_list[1] - fscore = f1_score(golds, preds, average='macro') + fscore = f1_score(golds, preds, average="macro") return fscore diff --git a/lm_eval/tasks/medmcqa/utils_medmcqa.py b/lm_eval/tasks/medmcqa/utils_medmcqa.py index 7e7792d26b..8ce7e6beec 100644 --- a/lm_eval/tasks/medmcqa/utils_medmcqa.py +++ b/lm_eval/tasks/medmcqa/utils_medmcqa.py @@ -10,7 +10,12 @@ def doc_to_text(doc) -> str: Answer: """ choices = [doc["opa"], doc["opb"], doc["opc"], doc["opd"]] - option_choices = {'A': choices[0], 'B': choices[1], 'C': choices[2], 'D': choices[3]} + option_choices = { + "A": choices[0], + "B": choices[1], + "C": choices[2], + "D": choices[3], + } prompt = "Question: " + doc["question"] + "\nChoices:\n" for choice, option in option_choices.items(): diff --git a/lm_eval/tasks/medqa/preprocess_medqa.py b/lm_eval/tasks/medqa/preprocess_medqa.py index 8745f9481d..6ec3585145 100644 --- a/lm_eval/tasks/medqa/preprocess_medqa.py +++ b/lm_eval/tasks/medqa/preprocess_medqa.py @@ -1,5 +1,10 @@ def doc_to_text(doc) -> str: - option_choices = {'A': doc["ending0"], 'B': doc["ending1"], 'C': doc["ending2"], 'D': doc["ending3"]} + option_choices = { + "A": doc["ending0"], + "B": doc["ending1"], + "C": doc["ending2"], + "D": doc["ending3"], + } answers = "".join((f"{k}. {v}\n") for k, v in option_choices.items()) return f"Question: {doc['sent1']}\n{answers}Answer:" diff --git a/lm_eval/tasks/mgsm/utils.py b/lm_eval/tasks/mgsm/utils.py index 3a6547b2e2..116214f9f4 100644 --- a/lm_eval/tasks/mgsm/utils.py +++ b/lm_eval/tasks/mgsm/utils.py @@ -1,6 +1,7 @@ -import yaml import argparse +import yaml + LANGUAGES = { "bn": { # Bengali @@ -126,6 +127,7 @@ def add_regex_pattern(regex_pattern): ], } + def gen_lang_yamls(output_dir: str, overwrite: bool, mode: str) -> None: """ Generate a yaml file for each language. @@ -158,7 +160,7 @@ def gen_lang_yamls(output_dir: str, overwrite: bool, mode: str) -> None: task_name = f"mgsm_en_cot_{lang}" file_name = f"{task_name}.yaml" - ANSWER_TO_SKIP = len(LANGUAGES[lang]["ANSWER"])+1 + ANSWER_TO_SKIP = len(LANGUAGES[lang]["ANSWER"]) + 1 with open( f"{output_dir}/{file_name}", "w" if overwrite else "x", encoding="utf8" ) as f: @@ -181,7 +183,7 @@ def gen_lang_yamls(output_dir: str, overwrite: bool, mode: str) -> None: **filter_list, "generation_kwargs": { "until": [QUESTION, "", "<|im_end|>"], - "do_sample": False + "do_sample": False, }, **({"target_delimiter": DELIMITER} if DELIMITER else {}), }, diff --git a/lm_eval/tasks/minerva_math/utils.py b/lm_eval/tasks/minerva_math/utils.py index bde5801c56..0de9bcafa1 100644 --- a/lm_eval/tasks/minerva_math/utils.py +++ b/lm_eval/tasks/minerva_math/utils.py @@ -1,14 +1,17 @@ -import datasets import re import signal +from typing import Dict, List, Optional + +import datasets + from lm_eval.utils import eval_logger -from typing import Optional, List, Dict + try: import sympy from sympy.parsing.latex import parse_latex except ModuleNotFoundError: - raise Exception( + raise ModuleNotFoundError( "`sympy` is required for generating translation task prompt templates. \ please install sympy via pip install lm-eval[math] or pip install -e .[math]", ) diff --git a/lm_eval/tasks/mmlu/_generate_configs.py b/lm_eval/tasks/mmlu/_generate_configs.py index 1424814e7d..05c67e00e4 100644 --- a/lm_eval/tasks/mmlu/_generate_configs.py +++ b/lm_eval/tasks/mmlu/_generate_configs.py @@ -1,14 +1,15 @@ """ Take in a YAML, and output all "other" splits with this YAML """ -import os -import yaml import argparse +import os +import yaml from tqdm import tqdm from lm_eval.logger import eval_logger + SUBJECTS = { "abstract_algebra": "stem", "anatomy": "stem", @@ -124,7 +125,6 @@ def parse_args(): yaml.dump( yaml_dict, yaml_file, - # width=float("inf"), allow_unicode=True, default_style='"', ) diff --git a/lm_eval/tasks/mmlu/flan_cot_zeroshot/utils.py b/lm_eval/tasks/mmlu/flan_cot_zeroshot/utils.py index 0ef6b1e8f0..72246935de 100644 --- a/lm_eval/tasks/mmlu/flan_cot_zeroshot/utils.py +++ b/lm_eval/tasks/mmlu/flan_cot_zeroshot/utils.py @@ -1,6 +1,5 @@ import re import sys - import unicodedata from lm_eval.filters.extraction import RegexFilter @@ -10,8 +9,13 @@ class MultiChoiceRegexFilter(RegexFilter): """ """ def __init__( - self, regex_pattern: str = r"#### (\-?[0-9\.\,]+)", group_select=0, fallback: str = "[invalid]", - ignore_case=False, ignore_punctuation=False, regexes_to_ignore=None, + self, + regex_pattern: str = r"#### (\-?[0-9\.\,]+)", + group_select=0, + fallback: str = "[invalid]", + ignore_case=False, + ignore_punctuation=False, + regexes_to_ignore=None, ) -> None: """ regex_pattern: The basic regex pattern to use. If fails to match, we will use the customized match procedure @@ -44,8 +48,11 @@ def find_match(regex, resp, convert_dict={}): match = convert_dict[match] return match - punct_tbl = dict.fromkeys(i for i in range(sys.maxunicode) - if unicodedata.category(chr(i)).startswith('P')) + punct_tbl = dict.fromkeys( + i + for i in range(sys.maxunicode) + if unicodedata.category(chr(i)).startswith("P") + ) def filter_ignores(st): if self.regexes_to_ignore is not None: @@ -65,12 +72,12 @@ def filter_ignores(st): for r, doc in zip(resps, docs): fallback_regexes = [] choice_to_alpha = {} - next_alpha = 'A' + next_alpha = "A" without_paren_fallback_regexes = [] without_paren_to_target = {} - choices = doc['choices'] + choices = doc["choices"] for c in choices: m = filter_ignores(c.strip()) fallback_regexes.append(f"{re.escape(m)}") @@ -80,17 +87,23 @@ def filter_ignores(st): without_paren_to_target[next_alpha] = f"({next_alpha})" next_alpha = chr(ord(next_alpha) + 1) - fallback_regex = re.compile('|'.join(fallback_regexes)) - without_paren_fallback_regex = '|'.join(without_paren_fallback_regexes) - without_paren_fallback_regex = re.compile(f":[\s]*({without_paren_fallback_regex})") + fallback_regex = re.compile("|".join(fallback_regexes)) + without_paren_fallback_regex = "|".join(without_paren_fallback_regexes) + without_paren_fallback_regex = re.compile( + f":[\s]*({without_paren_fallback_regex})" + ) filtered = [] for resp in r: match = find_match(self.regex, resp) if not match: - match = find_match(fallback_regex, filter_ignores(resp), choice_to_alpha) + match = find_match( + fallback_regex, filter_ignores(resp), choice_to_alpha + ) if not match: - match = find_match(without_paren_fallback_regex, resp, without_paren_to_target) + match = find_match( + without_paren_fallback_regex, resp, without_paren_to_target + ) if not match: match = self.fallback filtered.append(match) diff --git a/lm_eval/tasks/mmlu/flan_n_shot/generative/utils.py b/lm_eval/tasks/mmlu/flan_n_shot/generative/utils.py index 0ef6b1e8f0..72246935de 100644 --- a/lm_eval/tasks/mmlu/flan_n_shot/generative/utils.py +++ b/lm_eval/tasks/mmlu/flan_n_shot/generative/utils.py @@ -1,6 +1,5 @@ import re import sys - import unicodedata from lm_eval.filters.extraction import RegexFilter @@ -10,8 +9,13 @@ class MultiChoiceRegexFilter(RegexFilter): """ """ def __init__( - self, regex_pattern: str = r"#### (\-?[0-9\.\,]+)", group_select=0, fallback: str = "[invalid]", - ignore_case=False, ignore_punctuation=False, regexes_to_ignore=None, + self, + regex_pattern: str = r"#### (\-?[0-9\.\,]+)", + group_select=0, + fallback: str = "[invalid]", + ignore_case=False, + ignore_punctuation=False, + regexes_to_ignore=None, ) -> None: """ regex_pattern: The basic regex pattern to use. If fails to match, we will use the customized match procedure @@ -44,8 +48,11 @@ def find_match(regex, resp, convert_dict={}): match = convert_dict[match] return match - punct_tbl = dict.fromkeys(i for i in range(sys.maxunicode) - if unicodedata.category(chr(i)).startswith('P')) + punct_tbl = dict.fromkeys( + i + for i in range(sys.maxunicode) + if unicodedata.category(chr(i)).startswith("P") + ) def filter_ignores(st): if self.regexes_to_ignore is not None: @@ -65,12 +72,12 @@ def filter_ignores(st): for r, doc in zip(resps, docs): fallback_regexes = [] choice_to_alpha = {} - next_alpha = 'A' + next_alpha = "A" without_paren_fallback_regexes = [] without_paren_to_target = {} - choices = doc['choices'] + choices = doc["choices"] for c in choices: m = filter_ignores(c.strip()) fallback_regexes.append(f"{re.escape(m)}") @@ -80,17 +87,23 @@ def filter_ignores(st): without_paren_to_target[next_alpha] = f"({next_alpha})" next_alpha = chr(ord(next_alpha) + 1) - fallback_regex = re.compile('|'.join(fallback_regexes)) - without_paren_fallback_regex = '|'.join(without_paren_fallback_regexes) - without_paren_fallback_regex = re.compile(f":[\s]*({without_paren_fallback_regex})") + fallback_regex = re.compile("|".join(fallback_regexes)) + without_paren_fallback_regex = "|".join(without_paren_fallback_regexes) + without_paren_fallback_regex = re.compile( + f":[\s]*({without_paren_fallback_regex})" + ) filtered = [] for resp in r: match = find_match(self.regex, resp) if not match: - match = find_match(fallback_regex, filter_ignores(resp), choice_to_alpha) + match = find_match( + fallback_regex, filter_ignores(resp), choice_to_alpha + ) if not match: - match = find_match(without_paren_fallback_regex, resp, without_paren_to_target) + match = find_match( + without_paren_fallback_regex, resp, without_paren_to_target + ) if not match: match = self.fallback filtered.append(match) diff --git a/lm_eval/tasks/model_written_evals/advanced_ai_risk/_generate_configs.py b/lm_eval/tasks/model_written_evals/advanced_ai_risk/_generate_configs.py index 3a2bac5923..fa4e30ba16 100644 --- a/lm_eval/tasks/model_written_evals/advanced_ai_risk/_generate_configs.py +++ b/lm_eval/tasks/model_written_evals/advanced_ai_risk/_generate_configs.py @@ -1,6 +1,5 @@ -import yaml import datasets - +import yaml from tqdm import tqdm diff --git a/lm_eval/tasks/model_written_evals/persona/_generate_configs.py b/lm_eval/tasks/model_written_evals/persona/_generate_configs.py index 811e0b1b62..1378dee265 100644 --- a/lm_eval/tasks/model_written_evals/persona/_generate_configs.py +++ b/lm_eval/tasks/model_written_evals/persona/_generate_configs.py @@ -1,6 +1,5 @@ -import yaml import datasets - +import yaml from tqdm import tqdm diff --git a/lm_eval/tasks/okapi/arc_multilingual/utils.py b/lm_eval/tasks/okapi/arc_multilingual/utils.py index 43cccc5672..b47621a760 100644 --- a/lm_eval/tasks/okapi/arc_multilingual/utils.py +++ b/lm_eval/tasks/okapi/arc_multilingual/utils.py @@ -1,6 +1,7 @@ -import datasets import re +import datasets + def preprocess(text): if text is None: @@ -18,7 +19,13 @@ def _process_doc(doc): out_doc = { "id": doc["id"], "query": "Question: " + preprocess(doc["instruction"]) + "\nAnswer:", - "choices": [preprocess(doc['option_a']), preprocess(doc['option_b']), preprocess(doc['option_c']), preprocess(doc['option_d']), preprocess(doc['option_e'])], + "choices": [ + preprocess(doc["option_a"]), + preprocess(doc["option_b"]), + preprocess(doc["option_c"]), + preprocess(doc["option_d"]), + preprocess(doc["option_e"]), + ], "gold": ["A", "B", "C", "D", "E"].index(doc["answer"]), } return out_doc diff --git a/lm_eval/tasks/okapi/hellaswag_multilingual/utils.py b/lm_eval/tasks/okapi/hellaswag_multilingual/utils.py index 62c0c23bcd..b526a9e930 100644 --- a/lm_eval/tasks/okapi/hellaswag_multilingual/utils.py +++ b/lm_eval/tasks/okapi/hellaswag_multilingual/utils.py @@ -1,6 +1,7 @@ -import datasets import re +import datasets + def preprocess(text): text = text.strip() diff --git a/lm_eval/tasks/okapi/mmlu_multilingual/_generate_configs.py b/lm_eval/tasks/okapi/mmlu_multilingual/_generate_configs.py index 241779148c..1114255fa7 100644 --- a/lm_eval/tasks/okapi/mmlu_multilingual/_generate_configs.py +++ b/lm_eval/tasks/okapi/mmlu_multilingual/_generate_configs.py @@ -1,6 +1,5 @@ -import yaml import datasets - +import yaml from tqdm import tqdm @@ -10,8 +9,12 @@ def main() -> None: # Removed hy and sk subdataset because the original dataset is broken # I created this PR https://huggingface.co/datasets/alexandrainst/m_mmlu/discussions/3 # on the dataset for the authors, in case it will be accepeted the filter can be removed - keys_without_hy_sk = list(filter(lambda k: ('hy' not in k and 'sk' not in k), - datasets.get_dataset_infos(dataset_path).keys())) + keys_without_hy_sk = list( # noqa: F841 + filter( + lambda k: ("hy" not in k and "sk" not in k), + datasets.get_dataset_infos(dataset_path).keys(), + ) + ) for task in tqdm(): file_name = f"m_mmlu_{task}.yaml" @@ -29,5 +32,6 @@ def main() -> None: except FileExistsError: pass + if __name__ == "__main__": main() diff --git a/lm_eval/tasks/okapi/truthfulqa_multilingual/utils.py b/lm_eval/tasks/okapi/truthfulqa_multilingual/utils.py index 4e24db9f51..2dd5433f09 100644 --- a/lm_eval/tasks/okapi/truthfulqa_multilingual/utils.py +++ b/lm_eval/tasks/okapi/truthfulqa_multilingual/utils.py @@ -1,7 +1,9 @@ -import datasets import re + +import datasets import numpy as np + QA_PROMPT = ( "Q: What is human life expectancy in the United States?\n" "A: Human life expectancy in the United States is 78 years.\n\n" @@ -17,6 +19,7 @@ "A: The 1992 Olympics were held in Barcelona, Spain." ) + def preprocess(text): if text is None: return " " diff --git a/lm_eval/tasks/qasper/metrics.py b/lm_eval/tasks/qasper/metrics.py index f4de05e0a4..cc83291225 100644 --- a/lm_eval/tasks/qasper/metrics.py +++ b/lm_eval/tasks/qasper/metrics.py @@ -1,6 +1,5 @@ import re import string - from collections import Counter diff --git a/lm_eval/tasks/qasper/utils.py b/lm_eval/tasks/qasper/utils.py index 21f5be2435..fb3d4c55cf 100644 --- a/lm_eval/tasks/qasper/utils.py +++ b/lm_eval/tasks/qasper/utils.py @@ -1,6 +1,7 @@ -from datasets import Dataset from functools import partial +from datasets import Dataset + def process_docs(dataset, set_answer_type="bool"): FEATURES = ["title", "abstract", "question", "answer", "answer_type"] diff --git a/lm_eval/tasks/realtoxicityprompts/metric.py b/lm_eval/tasks/realtoxicityprompts/metric.py index 072f561d74..b92f837608 100644 --- a/lm_eval/tasks/realtoxicityprompts/metric.py +++ b/lm_eval/tasks/realtoxicityprompts/metric.py @@ -1,7 +1,8 @@ -import os import json -import requests +import os + import numpy as np +import requests from lm_eval.utils import eval_logger diff --git a/lm_eval/tasks/scrolls/task.py b/lm_eval/tasks/scrolls/task.py index e403fd5e2d..5b604e15d9 100644 --- a/lm_eval/tasks/scrolls/task.py +++ b/lm_eval/tasks/scrolls/task.py @@ -1,16 +1,16 @@ import re +from abc import abstractmethod +from functools import reduce + import numpy as np import transformers.data.metrics.squad_metrics as squad_metrics - -from abc import abstractmethod from datasets import load_metric from transformers import AutoTokenizer -from functools import reduce -from lm_eval.api.task import Task -from lm_eval.api.metrics import mean from lm_eval.api.instance import Instance -from lm_eval.api.registry import register_task +from lm_eval.api.metrics import mean +from lm_eval.api.task import Task + _CITATION = """ @inproceedings{shaham-etal-2022-scrolls, @@ -44,6 +44,7 @@ def _download_metric(): import os import shutil + from huggingface_hub import hf_hub_download scrolls_metric_path = hf_hub_download( @@ -148,7 +149,7 @@ def download(self, *args, **kwargs): del self.dataset["test"] for split in self.dataset: self.dataset[split] = _drop_duplicates_in_input(self.dataset[split]) - if self.PRUNE_TOKENIZERS is not None and self.PRUNE_TOKENIZERS is not None: + if self.PRUNE_TOKENIZERS is not None: self.prune() def _get_prune_text(self, sample): diff --git a/lm_eval/tasks/squadv2/task.py b/lm_eval/tasks/squadv2/task.py index 8af87e7537..ef6be3e1fe 100644 --- a/lm_eval/tasks/squadv2/task.py +++ b/lm_eval/tasks/squadv2/task.py @@ -13,14 +13,15 @@ Homepage: https://rajpurkar.github.io/SQuAD-explorer/ """ -import datasets - -from math import exp from functools import partial +from math import exp + +import datasets from packaging import version -from lm_eval.api.task import ConfigurableTask from lm_eval.api.instance import Instance +from lm_eval.api.task import ConfigurableTask + _CITATION = """ @misc{rajpurkar2018know, @@ -35,7 +36,6 @@ def _squad_metric(predictions, references): - # squad_metric = load("squad_v2") squad_metric = datasets.load_metric("squad_v2") return squad_metric.compute(predictions=predictions, references=references) @@ -52,7 +52,7 @@ class SQuAD2(ConfigurableTask): DATASET_NAME = None def __init__(self): - super().__init__(config={'metadata': {'version': self.VERSION}}) + super().__init__(config={"metadata": {"version": self.VERSION}}) # HF changed squad on us so we have to make sure we aren't running the old one assert version.parse(datasets.__version__) >= version.parse( diff --git a/lm_eval/tasks/super_glue/cb/aggregate.py b/lm_eval/tasks/super_glue/cb/aggregate.py index ef095dfc68..4b99849f9b 100644 --- a/lm_eval/tasks/super_glue/cb/aggregate.py +++ b/lm_eval/tasks/super_glue/cb/aggregate.py @@ -1,5 +1,5 @@ -import sklearn import numpy as np +import sklearn def cb_multi_fi(items): diff --git a/lm_eval/tasks/super_glue/record/t5_utils.py b/lm_eval/tasks/super_glue/record/t5_utils.py index 68301b18b3..e1a29a9498 100644 --- a/lm_eval/tasks/super_glue/record/t5_utils.py +++ b/lm_eval/tasks/super_glue/record/t5_utils.py @@ -1,8 +1,8 @@ +import collections import re import string -import collections -import numpy as np +import numpy as np from datasets import Dataset from lm_eval.api.metrics import metric_max_over_ground_truths diff --git a/lm_eval/tasks/super_glue/wsc/t5_utils.py b/lm_eval/tasks/super_glue/wsc/t5_utils.py index 6570abc732..2860a2a903 100644 --- a/lm_eval/tasks/super_glue/wsc/t5_utils.py +++ b/lm_eval/tasks/super_glue/wsc/t5_utils.py @@ -1,6 +1,7 @@ import re from typing import List + def doc_to_text(x): text = re.sub(r" X ", " *" + x["span2_text"] + "* ", _wsc_inputs(x)) return "wsc: " + text @@ -23,14 +24,14 @@ def create_input(): [ " ".join(words[:pronoun_index]), "X", - " ".join(words[pronoun_index + 1:]), + " ".join(words[pronoun_index + 1 :]), ] ) # Handle some special cases. if ( - x["text"] - == 'The boy continued to whip the pony , and eventually the pony threw him over. John laughed out quite loud. "Good for him," he said. ' + x["text"] + == 'The boy continued to whip the pony , and eventually the pony threw him over. John laughed out quite loud. "Good for him," he said. ' ): return ( "The boy continued to whip the pony , and eventually the pony threw " @@ -39,8 +40,8 @@ def create_input(): # Using the span2_index, we get 'use' instead of 'it'. if ( - x["text"] - == "When they had eventually calmed down a bit , and had gotten home, Mr. Farley put the magic pebble in an iron safe . Some day they might want to use it , but really for now, what more could they wish for?" + x["text"] + == "When they had eventually calmed down a bit , and had gotten home, Mr. Farley put the magic pebble in an iron safe . Some day they might want to use it , but really for now, what more could they wish for?" ): return ( "When they had eventually calmed down a bit , and had gotten home, " diff --git a/lm_eval/tasks/truthfulqa/utils.py b/lm_eval/tasks/truthfulqa/utils.py index 8e2ab43fe8..399969ca5c 100644 --- a/lm_eval/tasks/truthfulqa/utils.py +++ b/lm_eval/tasks/truthfulqa/utils.py @@ -1,7 +1,6 @@ import datasets -import sacrebleu import numpy as np - +import sacrebleu from rouge_score import rouge_scorer, scoring diff --git a/lm_eval/tasks/xwinograd/utils.py b/lm_eval/tasks/xwinograd/utils.py index 97c93c7072..5e350d6e9f 100644 --- a/lm_eval/tasks/xwinograd/utils.py +++ b/lm_eval/tasks/xwinograd/utils.py @@ -51,7 +51,9 @@ def gen_lang_yamls(output_dir: str, overwrite: bool) -> None: for lang in LANGUAGES: file_name = f"xwinograd_{lang}.yaml" try: - with open(f"{output_dir}/{file_name}", "w" if overwrite else "x", encoding="utf-8") as f: + with open( + f"{output_dir}/{file_name}", "w" if overwrite else "x", encoding="utf-8" + ) as f: f.write("# Generated by utils.py\n") yaml.dump( { diff --git a/pyproject.toml b/pyproject.toml index 63fd49be67..0a6db2161a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -90,9 +90,6 @@ all = [ "lm_eval[wandb]", ] -[tool.ruff] -extend-exclude = ["lm_eval/tasks/*.py"] - [tool.ruff.lint] extend-select = ["I"] @@ -101,5 +98,4 @@ lines-after-imports = 2 known-first-party = ["lm_eval"] [tool.ruff.extend-per-file-ignores] -"__init__.py" = ["F401","F402","F403","I"] -"lm_eval/tasks/*"= ["E721"] +"__init__.py" = ["F401","F402","F403"] From c1145dfdd8f9ddfceec0410d328ac1c590738a5d Mon Sep 17 00:00:00 2001 From: Vicki Boykis Date: Mon, 26 Feb 2024 08:05:05 -0500 Subject: [PATCH 18/20] setting trust_remote_code (#1467) --- lm_eval/models/huggingface.py | 2 +- lm_eval/tasks/asdiv/default.yaml | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/lm_eval/models/huggingface.py b/lm_eval/models/huggingface.py index cedbe00fd9..85493bfc12 100644 --- a/lm_eval/models/huggingface.py +++ b/lm_eval/models/huggingface.py @@ -96,7 +96,7 @@ def __init__( dtype: Optional[Union[str, torch.dtype]] = "auto", batch_size: Optional[Union[int, str]] = 1, max_batch_size: Optional[int] = 64, - trust_remote_code: Optional[bool] = False, + trust_remote_code: Optional[bool] = True, use_fast_tokenizer: Optional[bool] = True, # arguments used for splitting a model across GPUs naively. # only used if `parallelize=True`. diff --git a/lm_eval/tasks/asdiv/default.yaml b/lm_eval/tasks/asdiv/default.yaml index 350198be39..bd3917c3c2 100644 --- a/lm_eval/tasks/asdiv/default.yaml +++ b/lm_eval/tasks/asdiv/default.yaml @@ -12,3 +12,5 @@ metric_list: higher_is_better: true metadata: version: 1.0 +dataset_kwargs: + trust_remote_code: true From 7de7b27eb36387ebb7250dd3cad1ed46acc67710 Mon Sep 17 00:00:00 2001 From: khalil <90086758+khalil-Hennara@users.noreply.github.com> Date: Mon, 26 Feb 2024 16:14:17 +0300 Subject: [PATCH 19/20] add arabic mmlu (#1402) * add arabic mmlu * update the description * add readme file --- lm_eval/tasks/ammlu/README.md | 42 ++++++ lm_eval/tasks/ammlu/_default_template_yaml | 19 +++ lm_eval/tasks/ammlu/_generate_configs.py | 120 ++++++++++++++++++ .../tasks/ammlu/ammlu_abstract_algebra.yaml | 4 + lm_eval/tasks/ammlu/ammlu_anatomy.yaml | 4 + lm_eval/tasks/ammlu/ammlu_astronomy.yaml | 4 + .../tasks/ammlu/ammlu_business_ethics.yaml | 4 + .../tasks/ammlu/ammlu_clinical_knowledge.yaml | 4 + .../tasks/ammlu/ammlu_college_biology.yaml | 4 + .../tasks/ammlu/ammlu_college_chemistry.yaml | 4 + .../ammlu/ammlu_college_computer_science.yaml | 4 + .../ammlu/ammlu_college_mathematics.yaml | 4 + .../tasks/ammlu/ammlu_college_medicine.yaml | 4 + .../tasks/ammlu/ammlu_college_physics.yaml | 4 + .../tasks/ammlu/ammlu_computer_security.yaml | 4 + .../tasks/ammlu/ammlu_conceptual_physics.yaml | 4 + lm_eval/tasks/ammlu/ammlu_econometrics.yaml | 4 + .../ammlu/ammlu_electrical_engineering.yaml | 4 + .../ammlu/ammlu_elementary_mathematics.yaml | 4 + lm_eval/tasks/ammlu/ammlu_formal_logic.yaml | 4 + lm_eval/tasks/ammlu/ammlu_global_facts.yaml | 4 + .../ammlu/ammlu_high_school_biology.yaml | 4 + .../ammlu/ammlu_high_school_chemistry.yaml | 4 + .../ammlu_high_school_computer_science.yaml | 4 + .../ammlu_high_school_european_history.yaml | 4 + .../ammlu/ammlu_high_school_geography.yaml | 4 + ...u_high_school_government_and_politics.yaml | 4 + .../ammlu_high_school_macroeconomics.yaml | 4 + .../ammlu/ammlu_high_school_mathematics.yaml | 4 + .../ammlu_high_school_microeconomics.yaml | 4 + .../ammlu/ammlu_high_school_physics.yaml | 4 + .../ammlu/ammlu_high_school_psychology.yaml | 4 + .../ammlu/ammlu_high_school_statistics.yaml | 4 + .../ammlu/ammlu_high_school_us_history.yaml | 4 + .../ammlu_high_school_world_history.yaml | 4 + lm_eval/tasks/ammlu/ammlu_human_aging.yaml | 4 + .../tasks/ammlu/ammlu_human_sexuality.yaml | 4 + .../tasks/ammlu/ammlu_international_law.yaml | 4 + lm_eval/tasks/ammlu/ammlu_jurisprudence.yaml | 4 + .../tasks/ammlu/ammlu_logical_fallacies.yaml | 4 + .../tasks/ammlu/ammlu_machine_learning.yaml | 4 + lm_eval/tasks/ammlu/ammlu_management.yaml | 4 + lm_eval/tasks/ammlu/ammlu_marketing.yaml | 4 + .../tasks/ammlu/ammlu_medical_genetics.yaml | 4 + lm_eval/tasks/ammlu/ammlu_miscellaneous.yaml | 4 + lm_eval/tasks/ammlu/ammlu_moral_disputes.yaml | 4 + .../tasks/ammlu/ammlu_moral_scenarios.yaml | 4 + lm_eval/tasks/ammlu/ammlu_nutrition.yaml | 4 + lm_eval/tasks/ammlu/ammlu_philosophy.yaml | 4 + lm_eval/tasks/ammlu/ammlu_prehistory.yaml | 4 + .../ammlu/ammlu_professional_accounting.yaml | 4 + .../tasks/ammlu/ammlu_professional_law.yaml | 4 + .../ammlu/ammlu_professional_medicine.yaml | 4 + .../ammlu/ammlu_professional_psychology.yaml | 4 + .../tasks/ammlu/ammlu_public_relations.yaml | 4 + .../tasks/ammlu/ammlu_security_studies.yaml | 4 + lm_eval/tasks/ammlu/ammlu_sociology.yaml | 4 + .../tasks/ammlu/ammlu_us_foreign_policy.yaml | 4 + lm_eval/tasks/ammlu/ammlu_virology.yaml | 4 + .../tasks/ammlu/ammlu_world_religions.yaml | 4 + 60 files changed, 409 insertions(+) create mode 100644 lm_eval/tasks/ammlu/README.md create mode 100644 lm_eval/tasks/ammlu/_default_template_yaml create mode 100644 lm_eval/tasks/ammlu/_generate_configs.py create mode 100644 lm_eval/tasks/ammlu/ammlu_abstract_algebra.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_anatomy.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_astronomy.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_business_ethics.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_clinical_knowledge.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_college_biology.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_college_chemistry.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_college_computer_science.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_college_mathematics.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_college_medicine.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_college_physics.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_computer_security.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_conceptual_physics.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_econometrics.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_electrical_engineering.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_elementary_mathematics.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_formal_logic.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_global_facts.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_high_school_biology.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_high_school_chemistry.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_high_school_computer_science.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_high_school_european_history.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_high_school_geography.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_high_school_government_and_politics.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_high_school_macroeconomics.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_high_school_mathematics.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_high_school_microeconomics.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_high_school_physics.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_high_school_psychology.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_high_school_statistics.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_high_school_us_history.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_high_school_world_history.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_human_aging.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_human_sexuality.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_international_law.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_jurisprudence.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_logical_fallacies.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_machine_learning.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_management.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_marketing.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_medical_genetics.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_miscellaneous.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_moral_disputes.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_moral_scenarios.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_nutrition.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_philosophy.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_prehistory.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_professional_accounting.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_professional_law.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_professional_medicine.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_professional_psychology.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_public_relations.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_security_studies.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_sociology.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_us_foreign_policy.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_virology.yaml create mode 100644 lm_eval/tasks/ammlu/ammlu_world_religions.yaml diff --git a/lm_eval/tasks/ammlu/README.md b/lm_eval/tasks/ammlu/README.md new file mode 100644 index 0000000000..b83e2af67d --- /dev/null +++ b/lm_eval/tasks/ammlu/README.md @@ -0,0 +1,42 @@ +# ArabicMMLU + +### Paper + +ArabicMMLU: Measuring massive multitask language understanding in Arabic +This dataset has been translated from the original MMLU with the help of GPT-4. + +The original data [MMLU](https://arxiv.org/pdf/2009.03300v3.pdf) + +The translation has been done with AceGPT researchers [AceGPT](https://arxiv.org/abs/2309.12053) + +ArabicMMLU is a comprehensive evaluation benchmark specifically designed to evaluate the knowledge and reasoning abilities of LLMs within the context of Arabic language and culture. +ArabicMMLU covers a wide range of subjects, comprising 57 topics that span from elementary to advanced professional levels. + +Homepage: [AceGPT Homepage](https://github.com/FreedomIntelligence/AceGPT/tree/main/eval/benchmark_eval/benchmarks/MMLUArabic) + +### Citation + + +### Groups and Tasks + +#### Groups + +- `ammlu`: All 57 subjects of the ArabicMMLU dataset, evaluated following the methodology in MMLU's original implementation. + +#### Tasks + + +The following tasks evaluate subjects in the ArabicMMLU dataset using loglikelihood-based multiple-choice scoring: +- `ammlu_{subject_english}` + +### Checklist + +* [x] Is the task an existing benchmark in the literature? + * [x] Have you referenced the original paper that introduced the task? + * [x] If yes, does the original paper provide a reference implementation? + * [x] Yes, original implementation contributed by author of the benchmark + +If other tasks on this dataset are already supported: +* [x] Is the "Main" variant of this task clearly denoted? +* [x] Have you provided a short sentence in a README on what each new variant adds / evaluates? +* [x] Have you noted which, if any, published evaluation setups are matched by this variant? diff --git a/lm_eval/tasks/ammlu/_default_template_yaml b/lm_eval/tasks/ammlu/_default_template_yaml new file mode 100644 index 0000000000..bbcefffb78 --- /dev/null +++ b/lm_eval/tasks/ammlu/_default_template_yaml @@ -0,0 +1,19 @@ +group: ammlu +dataset_path: Hennara/ammlu +test_split: test +fewshot_split: dev +fewshot_config: + sampler: first_n +output_type: multiple_choice +doc_to_text: "{{Question.strip()}}\nA. {{A}}\nB. {{B}}\nC. {{C}}\nD. {{D}}\nالجواب:" +doc_to_choice: ["A", "B", "C", "D"] +doc_to_target: "{{['A', 'B', 'C', 'D'].index(Answer)}}" +metric_list: + - metric: acc + aggregation: mean + higher_is_better: true + - metric: acc_norm + aggregation: mean + higher_is_better: true +metadata: + version: 0.0 diff --git a/lm_eval/tasks/ammlu/_generate_configs.py b/lm_eval/tasks/ammlu/_generate_configs.py new file mode 100644 index 0000000000..b3776df802 --- /dev/null +++ b/lm_eval/tasks/ammlu/_generate_configs.py @@ -0,0 +1,120 @@ +""" +Take in a YAML, and output all other splits with this YAML +""" +import os +import yaml +import argparse + +from tqdm import tqdm + + +SUBJECTS = { + "abstract_algebra": "ألعلوم وتقنية المعلومات و الرياضيات", + "anatomy": "ألعلوم وتقنية المعلومات و الرياضيات", + "astronomy": "ألعلوم وتقنية المعلومات و الرياضيات", + "business_ethics": "علوم أخرى", + "clinical_knowledge": "علوم أخرى", + "college_biology": "ألعلوم وتقنية المعلومات و الرياضيات", + "college_chemistry": "ألعلوم وتقنية المعلومات و الرياضيات", + "college_computer_science": "ألعلوم وتقنية المعلومات و الرياضيات", + "college_mathematics": "ألعلوم وتقنية المعلومات و الرياضيات", + "college_medicine": "علوم أخرى", + "college_physics": "ألعلوم وتقنية المعلومات و الرياضيات", + "computer_security": "ألعلوم وتقنية المعلومات و الرياضيات", + "conceptual_physics": "ألعلوم وتقنية المعلومات و الرياضيات", + "econometrics": "العلوم الإجتماعية", + "electrical_engineering": "ألعلوم وتقنية المعلومات و الرياضيات", + "elementary_mathematics": "ألعلوم وتقنية المعلومات و الرياضيات", + "formal_logic": "العلوم الانسانية", + "global_facts": "علوم أخرى", + "high_school_biology": "ألعلوم وتقنية المعلومات و الرياضيات", + "high_school_chemistry": "ألعلوم وتقنية المعلومات و الرياضيات", + "high_school_computer_science": "ألعلوم وتقنية المعلومات و الرياضيات", + "high_school_european_history": "العلوم الانسانية", + "high_school_geography": "العلوم الإجتماعية", + "high_school_government_and_politics": "العلوم الإجتماعية", + "high_school_macroeconomics": "العلوم الإجتماعية", + "high_school_mathematics": "ألعلوم وتقنية المعلومات و الرياضيات", + "high_school_microeconomics": "العلوم الإجتماعية", + "high_school_physics": "ألعلوم وتقنية المعلومات و الرياضيات", + "high_school_psychology": "العلوم الإجتماعية", + "high_school_statistics": "ألعلوم وتقنية المعلومات و الرياضيات", + "high_school_us_history": "العلوم الانسانية", + "high_school_world_history": "العلوم الانسانية", + "human_aging": "علوم أخرى", + "human_sexuality": "العلوم الإجتماعية", + "international_law": "العلوم الانسانية", + "jurisprudence": "العلوم الانسانية", + "logical_fallacies": "العلوم الانسانية", + "machine_learning": "ألعلوم وتقنية المعلومات و الرياضيات", + "management": "علوم أخرى", + "marketing": "علوم أخرى", + "medical_genetics": "علوم أخرى", + "miscellaneous": "علوم أخرى", + "moral_disputes": "العلوم الانسانية", + "moral_scenarios": "العلوم الانسانية", + "nutrition": "علوم أخرى", + "philosophy": "العلوم الانسانية", + "prehistory": "العلوم الانسانية", + "professional_accounting": "علوم أخرى", + "professional_law": "العلوم الانسانية", + "professional_medicine": "علوم أخرى", + "professional_psychology": "العلوم الإجتماعية", + "public_relations": "العلوم الإجتماعية", + "security_studies": "العلوم الإجتماعية", + "sociology": "العلوم الإجتماعية", + "us_foreign_policy": "العلوم الإجتماعية", + "virology": "علوم أخرى", + "world_religions": "العلوم الانسانية", +} + +def parse_args(): + parser = argparse.ArgumentParser() + parser.add_argument("--base_yaml_path", required=True) + parser.add_argument("--save_prefix_path", default="ammlu") + parser.add_argument("--cot_prompt_path", default=None) + parser.add_argument("--task_prefix", default="") + 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) + + if args.cot_prompt_path is not None: + import json + + with open(args.cot_prompt_path, encoding="utf-8") as f: + cot_file = json.load(f) + + for subject_eng, category in tqdm(SUBJECTS.items()): + if args.cot_prompt_path is not None: + description = cot_file[subject_eng] + else: + description = ( + f"فم بعملية التقييم في مجال {category} \n\n" + ) + + yaml_dict = { + "include": base_yaml_name, + "task": f"ammlu_{args.task_prefix}_{subject_eng}" + if args.task_prefix != "" + else f"ammlu_{subject_eng}", + "dataset_name": subject_eng, + "description": description, + } + + file_save_path = args.save_prefix_path + f"_{subject_eng}.yaml" + print(f"Saving yaml for subset {subject_eng} to {file_save_path}") + with open(file_save_path, "w", encoding="utf-8") as yaml_file: + yaml.dump( + yaml_dict, + yaml_file, + width=float("inf"), + allow_unicode=True, + default_style='"', + ) diff --git a/lm_eval/tasks/ammlu/ammlu_abstract_algebra.yaml b/lm_eval/tasks/ammlu/ammlu_abstract_algebra.yaml new file mode 100644 index 0000000000..6448b2eefe --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_abstract_algebra.yaml @@ -0,0 +1,4 @@ +"dataset_name": "abstract_algebra" +"description": "فم بعملية التقييم في مجال ألعلوم وتقنية المعلومات و الرياضيات \n\n" +"include": "_default_template_yaml" +"task": "ammlu_abstract_algebra" diff --git a/lm_eval/tasks/ammlu/ammlu_anatomy.yaml b/lm_eval/tasks/ammlu/ammlu_anatomy.yaml new file mode 100644 index 0000000000..0ea332903d --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_anatomy.yaml @@ -0,0 +1,4 @@ +"dataset_name": "anatomy" +"description": "فم بعملية التقييم في مجال ألعلوم وتقنية المعلومات و الرياضيات \n\n" +"include": "_default_template_yaml" +"task": "ammlu_anatomy" diff --git a/lm_eval/tasks/ammlu/ammlu_astronomy.yaml b/lm_eval/tasks/ammlu/ammlu_astronomy.yaml new file mode 100644 index 0000000000..33e4d3e76f --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_astronomy.yaml @@ -0,0 +1,4 @@ +"dataset_name": "astronomy" +"description": "فم بعملية التقييم في مجال ألعلوم وتقنية المعلومات و الرياضيات \n\n" +"include": "_default_template_yaml" +"task": "ammlu_astronomy" diff --git a/lm_eval/tasks/ammlu/ammlu_business_ethics.yaml b/lm_eval/tasks/ammlu/ammlu_business_ethics.yaml new file mode 100644 index 0000000000..f86b317a22 --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_business_ethics.yaml @@ -0,0 +1,4 @@ +"dataset_name": "business_ethics" +"description": "فم بعملية التقييم في مجال علوم أخرى \n\n" +"include": "_default_template_yaml" +"task": "ammlu_business_ethics" diff --git a/lm_eval/tasks/ammlu/ammlu_clinical_knowledge.yaml b/lm_eval/tasks/ammlu/ammlu_clinical_knowledge.yaml new file mode 100644 index 0000000000..af040fbbeb --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_clinical_knowledge.yaml @@ -0,0 +1,4 @@ +"dataset_name": "clinical_knowledge" +"description": "فم بعملية التقييم في مجال علوم أخرى \n\n" +"include": "_default_template_yaml" +"task": "ammlu_clinical_knowledge" diff --git a/lm_eval/tasks/ammlu/ammlu_college_biology.yaml b/lm_eval/tasks/ammlu/ammlu_college_biology.yaml new file mode 100644 index 0000000000..0040902b6b --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_college_biology.yaml @@ -0,0 +1,4 @@ +"dataset_name": "college_biology" +"description": "فم بعملية التقييم في مجال ألعلوم وتقنية المعلومات و الرياضيات \n\n" +"include": "_default_template_yaml" +"task": "ammlu_college_biology" diff --git a/lm_eval/tasks/ammlu/ammlu_college_chemistry.yaml b/lm_eval/tasks/ammlu/ammlu_college_chemistry.yaml new file mode 100644 index 0000000000..d89e5d36d6 --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_college_chemistry.yaml @@ -0,0 +1,4 @@ +"dataset_name": "college_chemistry" +"description": "فم بعملية التقييم في مجال ألعلوم وتقنية المعلومات و الرياضيات \n\n" +"include": "_default_template_yaml" +"task": "ammlu_college_chemistry" diff --git a/lm_eval/tasks/ammlu/ammlu_college_computer_science.yaml b/lm_eval/tasks/ammlu/ammlu_college_computer_science.yaml new file mode 100644 index 0000000000..bd24ec7820 --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_college_computer_science.yaml @@ -0,0 +1,4 @@ +"dataset_name": "college_computer_science" +"description": "فم بعملية التقييم في مجال ألعلوم وتقنية المعلومات و الرياضيات \n\n" +"include": "_default_template_yaml" +"task": "ammlu_college_computer_science" diff --git a/lm_eval/tasks/ammlu/ammlu_college_mathematics.yaml b/lm_eval/tasks/ammlu/ammlu_college_mathematics.yaml new file mode 100644 index 0000000000..f86305ff9f --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_college_mathematics.yaml @@ -0,0 +1,4 @@ +"dataset_name": "college_mathematics" +"description": "فم بعملية التقييم في مجال ألعلوم وتقنية المعلومات و الرياضيات \n\n" +"include": "_default_template_yaml" +"task": "ammlu_college_mathematics" diff --git a/lm_eval/tasks/ammlu/ammlu_college_medicine.yaml b/lm_eval/tasks/ammlu/ammlu_college_medicine.yaml new file mode 100644 index 0000000000..20ed05afe2 --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_college_medicine.yaml @@ -0,0 +1,4 @@ +"dataset_name": "college_medicine" +"description": "فم بعملية التقييم في مجال علوم أخرى \n\n" +"include": "_default_template_yaml" +"task": "ammlu_college_medicine" diff --git a/lm_eval/tasks/ammlu/ammlu_college_physics.yaml b/lm_eval/tasks/ammlu/ammlu_college_physics.yaml new file mode 100644 index 0000000000..a66b42a3ff --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_college_physics.yaml @@ -0,0 +1,4 @@ +"dataset_name": "college_physics" +"description": "فم بعملية التقييم في مجال ألعلوم وتقنية المعلومات و الرياضيات \n\n" +"include": "_default_template_yaml" +"task": "ammlu_college_physics" diff --git a/lm_eval/tasks/ammlu/ammlu_computer_security.yaml b/lm_eval/tasks/ammlu/ammlu_computer_security.yaml new file mode 100644 index 0000000000..f6d0edec21 --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_computer_security.yaml @@ -0,0 +1,4 @@ +"dataset_name": "computer_security" +"description": "فم بعملية التقييم في مجال ألعلوم وتقنية المعلومات و الرياضيات \n\n" +"include": "_default_template_yaml" +"task": "ammlu_computer_security" diff --git a/lm_eval/tasks/ammlu/ammlu_conceptual_physics.yaml b/lm_eval/tasks/ammlu/ammlu_conceptual_physics.yaml new file mode 100644 index 0000000000..1d8b329adf --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_conceptual_physics.yaml @@ -0,0 +1,4 @@ +"dataset_name": "conceptual_physics" +"description": "فم بعملية التقييم في مجال ألعلوم وتقنية المعلومات و الرياضيات \n\n" +"include": "_default_template_yaml" +"task": "ammlu_conceptual_physics" diff --git a/lm_eval/tasks/ammlu/ammlu_econometrics.yaml b/lm_eval/tasks/ammlu/ammlu_econometrics.yaml new file mode 100644 index 0000000000..2ce1c23a55 --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_econometrics.yaml @@ -0,0 +1,4 @@ +"dataset_name": "econometrics" +"description": "فم بعملية التقييم في مجال العلوم الإجتماعية \n\n" +"include": "_default_template_yaml" +"task": "ammlu_econometrics" diff --git a/lm_eval/tasks/ammlu/ammlu_electrical_engineering.yaml b/lm_eval/tasks/ammlu/ammlu_electrical_engineering.yaml new file mode 100644 index 0000000000..209d660fbf --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_electrical_engineering.yaml @@ -0,0 +1,4 @@ +"dataset_name": "electrical_engineering" +"description": "فم بعملية التقييم في مجال ألعلوم وتقنية المعلومات و الرياضيات \n\n" +"include": "_default_template_yaml" +"task": "ammlu_electrical_engineering" diff --git a/lm_eval/tasks/ammlu/ammlu_elementary_mathematics.yaml b/lm_eval/tasks/ammlu/ammlu_elementary_mathematics.yaml new file mode 100644 index 0000000000..afb9144da9 --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_elementary_mathematics.yaml @@ -0,0 +1,4 @@ +"dataset_name": "elementary_mathematics" +"description": "فم بعملية التقييم في مجال ألعلوم وتقنية المعلومات و الرياضيات \n\n" +"include": "_default_template_yaml" +"task": "ammlu_elementary_mathematics" diff --git a/lm_eval/tasks/ammlu/ammlu_formal_logic.yaml b/lm_eval/tasks/ammlu/ammlu_formal_logic.yaml new file mode 100644 index 0000000000..8b20a85896 --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_formal_logic.yaml @@ -0,0 +1,4 @@ +"dataset_name": "formal_logic" +"description": "فم بعملية التقييم في مجال العلوم الانسانية \n\n" +"include": "_default_template_yaml" +"task": "ammlu_formal_logic" diff --git a/lm_eval/tasks/ammlu/ammlu_global_facts.yaml b/lm_eval/tasks/ammlu/ammlu_global_facts.yaml new file mode 100644 index 0000000000..8236238279 --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_global_facts.yaml @@ -0,0 +1,4 @@ +"dataset_name": "global_facts" +"description": "فم بعملية التقييم في مجال علوم أخرى \n\n" +"include": "_default_template_yaml" +"task": "ammlu_global_facts" diff --git a/lm_eval/tasks/ammlu/ammlu_high_school_biology.yaml b/lm_eval/tasks/ammlu/ammlu_high_school_biology.yaml new file mode 100644 index 0000000000..16bc3ab6b0 --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_high_school_biology.yaml @@ -0,0 +1,4 @@ +"dataset_name": "high_school_biology" +"description": "فم بعملية التقييم في مجال ألعلوم وتقنية المعلومات و الرياضيات \n\n" +"include": "_default_template_yaml" +"task": "ammlu_high_school_biology" diff --git a/lm_eval/tasks/ammlu/ammlu_high_school_chemistry.yaml b/lm_eval/tasks/ammlu/ammlu_high_school_chemistry.yaml new file mode 100644 index 0000000000..3f2e675e4c --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_high_school_chemistry.yaml @@ -0,0 +1,4 @@ +"dataset_name": "high_school_chemistry" +"description": "فم بعملية التقييم في مجال ألعلوم وتقنية المعلومات و الرياضيات \n\n" +"include": "_default_template_yaml" +"task": "ammlu_high_school_chemistry" diff --git a/lm_eval/tasks/ammlu/ammlu_high_school_computer_science.yaml b/lm_eval/tasks/ammlu/ammlu_high_school_computer_science.yaml new file mode 100644 index 0000000000..d6ab8409eb --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_high_school_computer_science.yaml @@ -0,0 +1,4 @@ +"dataset_name": "high_school_computer_science" +"description": "فم بعملية التقييم في مجال ألعلوم وتقنية المعلومات و الرياضيات \n\n" +"include": "_default_template_yaml" +"task": "ammlu_high_school_computer_science" diff --git a/lm_eval/tasks/ammlu/ammlu_high_school_european_history.yaml b/lm_eval/tasks/ammlu/ammlu_high_school_european_history.yaml new file mode 100644 index 0000000000..f22a599175 --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_high_school_european_history.yaml @@ -0,0 +1,4 @@ +"dataset_name": "high_school_european_history" +"description": "فم بعملية التقييم في مجال العلوم الانسانية \n\n" +"include": "_default_template_yaml" +"task": "ammlu_high_school_european_history" diff --git a/lm_eval/tasks/ammlu/ammlu_high_school_geography.yaml b/lm_eval/tasks/ammlu/ammlu_high_school_geography.yaml new file mode 100644 index 0000000000..f180cee343 --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_high_school_geography.yaml @@ -0,0 +1,4 @@ +"dataset_name": "high_school_geography" +"description": "فم بعملية التقييم في مجال العلوم الإجتماعية \n\n" +"include": "_default_template_yaml" +"task": "ammlu_high_school_geography" diff --git a/lm_eval/tasks/ammlu/ammlu_high_school_government_and_politics.yaml b/lm_eval/tasks/ammlu/ammlu_high_school_government_and_politics.yaml new file mode 100644 index 0000000000..88fe999fa3 --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_high_school_government_and_politics.yaml @@ -0,0 +1,4 @@ +"dataset_name": "high_school_government_and_politics" +"description": "فم بعملية التقييم في مجال العلوم الإجتماعية \n\n" +"include": "_default_template_yaml" +"task": "ammlu_high_school_government_and_politics" diff --git a/lm_eval/tasks/ammlu/ammlu_high_school_macroeconomics.yaml b/lm_eval/tasks/ammlu/ammlu_high_school_macroeconomics.yaml new file mode 100644 index 0000000000..68e0742767 --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_high_school_macroeconomics.yaml @@ -0,0 +1,4 @@ +"dataset_name": "high_school_macroeconomics" +"description": "فم بعملية التقييم في مجال العلوم الإجتماعية \n\n" +"include": "_default_template_yaml" +"task": "ammlu_high_school_macroeconomics" diff --git a/lm_eval/tasks/ammlu/ammlu_high_school_mathematics.yaml b/lm_eval/tasks/ammlu/ammlu_high_school_mathematics.yaml new file mode 100644 index 0000000000..17705ea14a --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_high_school_mathematics.yaml @@ -0,0 +1,4 @@ +"dataset_name": "high_school_mathematics" +"description": "فم بعملية التقييم في مجال ألعلوم وتقنية المعلومات و الرياضيات \n\n" +"include": "_default_template_yaml" +"task": "ammlu_high_school_mathematics" diff --git a/lm_eval/tasks/ammlu/ammlu_high_school_microeconomics.yaml b/lm_eval/tasks/ammlu/ammlu_high_school_microeconomics.yaml new file mode 100644 index 0000000000..1e74936e31 --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_high_school_microeconomics.yaml @@ -0,0 +1,4 @@ +"dataset_name": "high_school_microeconomics" +"description": "فم بعملية التقييم في مجال العلوم الإجتماعية \n\n" +"include": "_default_template_yaml" +"task": "ammlu_high_school_microeconomics" diff --git a/lm_eval/tasks/ammlu/ammlu_high_school_physics.yaml b/lm_eval/tasks/ammlu/ammlu_high_school_physics.yaml new file mode 100644 index 0000000000..368a384f7e --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_high_school_physics.yaml @@ -0,0 +1,4 @@ +"dataset_name": "high_school_physics" +"description": "فم بعملية التقييم في مجال ألعلوم وتقنية المعلومات و الرياضيات \n\n" +"include": "_default_template_yaml" +"task": "ammlu_high_school_physics" diff --git a/lm_eval/tasks/ammlu/ammlu_high_school_psychology.yaml b/lm_eval/tasks/ammlu/ammlu_high_school_psychology.yaml new file mode 100644 index 0000000000..224026225b --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_high_school_psychology.yaml @@ -0,0 +1,4 @@ +"dataset_name": "high_school_psychology" +"description": "فم بعملية التقييم في مجال العلوم الإجتماعية \n\n" +"include": "_default_template_yaml" +"task": "ammlu_high_school_psychology" diff --git a/lm_eval/tasks/ammlu/ammlu_high_school_statistics.yaml b/lm_eval/tasks/ammlu/ammlu_high_school_statistics.yaml new file mode 100644 index 0000000000..49c97a7358 --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_high_school_statistics.yaml @@ -0,0 +1,4 @@ +"dataset_name": "high_school_statistics" +"description": "فم بعملية التقييم في مجال ألعلوم وتقنية المعلومات و الرياضيات \n\n" +"include": "_default_template_yaml" +"task": "ammlu_high_school_statistics" diff --git a/lm_eval/tasks/ammlu/ammlu_high_school_us_history.yaml b/lm_eval/tasks/ammlu/ammlu_high_school_us_history.yaml new file mode 100644 index 0000000000..f96371a82a --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_high_school_us_history.yaml @@ -0,0 +1,4 @@ +"dataset_name": "high_school_us_history" +"description": "فم بعملية التقييم في مجال العلوم الانسانية \n\n" +"include": "_default_template_yaml" +"task": "ammlu_high_school_us_history" diff --git a/lm_eval/tasks/ammlu/ammlu_high_school_world_history.yaml b/lm_eval/tasks/ammlu/ammlu_high_school_world_history.yaml new file mode 100644 index 0000000000..8dd7fc469a --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_high_school_world_history.yaml @@ -0,0 +1,4 @@ +"dataset_name": "high_school_world_history" +"description": "فم بعملية التقييم في مجال العلوم الانسانية \n\n" +"include": "_default_template_yaml" +"task": "ammlu_high_school_world_history" diff --git a/lm_eval/tasks/ammlu/ammlu_human_aging.yaml b/lm_eval/tasks/ammlu/ammlu_human_aging.yaml new file mode 100644 index 0000000000..180ef37301 --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_human_aging.yaml @@ -0,0 +1,4 @@ +"dataset_name": "human_aging" +"description": "فم بعملية التقييم في مجال علوم أخرى \n\n" +"include": "_default_template_yaml" +"task": "ammlu_human_aging" diff --git a/lm_eval/tasks/ammlu/ammlu_human_sexuality.yaml b/lm_eval/tasks/ammlu/ammlu_human_sexuality.yaml new file mode 100644 index 0000000000..d97b76f843 --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_human_sexuality.yaml @@ -0,0 +1,4 @@ +"dataset_name": "human_sexuality" +"description": "فم بعملية التقييم في مجال العلوم الإجتماعية \n\n" +"include": "_default_template_yaml" +"task": "ammlu_human_sexuality" diff --git a/lm_eval/tasks/ammlu/ammlu_international_law.yaml b/lm_eval/tasks/ammlu/ammlu_international_law.yaml new file mode 100644 index 0000000000..46660c5089 --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_international_law.yaml @@ -0,0 +1,4 @@ +"dataset_name": "international_law" +"description": "فم بعملية التقييم في مجال العلوم الانسانية \n\n" +"include": "_default_template_yaml" +"task": "ammlu_international_law" diff --git a/lm_eval/tasks/ammlu/ammlu_jurisprudence.yaml b/lm_eval/tasks/ammlu/ammlu_jurisprudence.yaml new file mode 100644 index 0000000000..97f34f0fa4 --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_jurisprudence.yaml @@ -0,0 +1,4 @@ +"dataset_name": "jurisprudence" +"description": "فم بعملية التقييم في مجال العلوم الانسانية \n\n" +"include": "_default_template_yaml" +"task": "ammlu_jurisprudence" diff --git a/lm_eval/tasks/ammlu/ammlu_logical_fallacies.yaml b/lm_eval/tasks/ammlu/ammlu_logical_fallacies.yaml new file mode 100644 index 0000000000..594501a443 --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_logical_fallacies.yaml @@ -0,0 +1,4 @@ +"dataset_name": "logical_fallacies" +"description": "فم بعملية التقييم في مجال العلوم الانسانية \n\n" +"include": "_default_template_yaml" +"task": "ammlu_logical_fallacies" diff --git a/lm_eval/tasks/ammlu/ammlu_machine_learning.yaml b/lm_eval/tasks/ammlu/ammlu_machine_learning.yaml new file mode 100644 index 0000000000..ddf19efc63 --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_machine_learning.yaml @@ -0,0 +1,4 @@ +"dataset_name": "machine_learning" +"description": "فم بعملية التقييم في مجال ألعلوم وتقنية المعلومات و الرياضيات \n\n" +"include": "_default_template_yaml" +"task": "ammlu_machine_learning" diff --git a/lm_eval/tasks/ammlu/ammlu_management.yaml b/lm_eval/tasks/ammlu/ammlu_management.yaml new file mode 100644 index 0000000000..36780c08a5 --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_management.yaml @@ -0,0 +1,4 @@ +"dataset_name": "management" +"description": "فم بعملية التقييم في مجال علوم أخرى \n\n" +"include": "_default_template_yaml" +"task": "ammlu_management" diff --git a/lm_eval/tasks/ammlu/ammlu_marketing.yaml b/lm_eval/tasks/ammlu/ammlu_marketing.yaml new file mode 100644 index 0000000000..1a7cf1f1a8 --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_marketing.yaml @@ -0,0 +1,4 @@ +"dataset_name": "marketing" +"description": "فم بعملية التقييم في مجال علوم أخرى \n\n" +"include": "_default_template_yaml" +"task": "ammlu_marketing" diff --git a/lm_eval/tasks/ammlu/ammlu_medical_genetics.yaml b/lm_eval/tasks/ammlu/ammlu_medical_genetics.yaml new file mode 100644 index 0000000000..88c56754e2 --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_medical_genetics.yaml @@ -0,0 +1,4 @@ +"dataset_name": "medical_genetics" +"description": "فم بعملية التقييم في مجال علوم أخرى \n\n" +"include": "_default_template_yaml" +"task": "ammlu_medical_genetics" diff --git a/lm_eval/tasks/ammlu/ammlu_miscellaneous.yaml b/lm_eval/tasks/ammlu/ammlu_miscellaneous.yaml new file mode 100644 index 0000000000..b81c28b3e7 --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_miscellaneous.yaml @@ -0,0 +1,4 @@ +"dataset_name": "miscellaneous" +"description": "فم بعملية التقييم في مجال علوم أخرى \n\n" +"include": "_default_template_yaml" +"task": "ammlu_miscellaneous" diff --git a/lm_eval/tasks/ammlu/ammlu_moral_disputes.yaml b/lm_eval/tasks/ammlu/ammlu_moral_disputes.yaml new file mode 100644 index 0000000000..a01ffb2c4a --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_moral_disputes.yaml @@ -0,0 +1,4 @@ +"dataset_name": "moral_disputes" +"description": "فم بعملية التقييم في مجال العلوم الانسانية \n\n" +"include": "_default_template_yaml" +"task": "ammlu_moral_disputes" diff --git a/lm_eval/tasks/ammlu/ammlu_moral_scenarios.yaml b/lm_eval/tasks/ammlu/ammlu_moral_scenarios.yaml new file mode 100644 index 0000000000..891f62917f --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_moral_scenarios.yaml @@ -0,0 +1,4 @@ +"dataset_name": "moral_scenarios" +"description": "فم بعملية التقييم في مجال العلوم الانسانية \n\n" +"include": "_default_template_yaml" +"task": "ammlu_moral_scenarios" diff --git a/lm_eval/tasks/ammlu/ammlu_nutrition.yaml b/lm_eval/tasks/ammlu/ammlu_nutrition.yaml new file mode 100644 index 0000000000..6e2c10a410 --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_nutrition.yaml @@ -0,0 +1,4 @@ +"dataset_name": "nutrition" +"description": "فم بعملية التقييم في مجال علوم أخرى \n\n" +"include": "_default_template_yaml" +"task": "ammlu_nutrition" diff --git a/lm_eval/tasks/ammlu/ammlu_philosophy.yaml b/lm_eval/tasks/ammlu/ammlu_philosophy.yaml new file mode 100644 index 0000000000..7211875da6 --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_philosophy.yaml @@ -0,0 +1,4 @@ +"dataset_name": "philosophy" +"description": "فم بعملية التقييم في مجال العلوم الانسانية \n\n" +"include": "_default_template_yaml" +"task": "ammlu_philosophy" diff --git a/lm_eval/tasks/ammlu/ammlu_prehistory.yaml b/lm_eval/tasks/ammlu/ammlu_prehistory.yaml new file mode 100644 index 0000000000..77a29ee976 --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_prehistory.yaml @@ -0,0 +1,4 @@ +"dataset_name": "prehistory" +"description": "فم بعملية التقييم في مجال العلوم الانسانية \n\n" +"include": "_default_template_yaml" +"task": "ammlu_prehistory" diff --git a/lm_eval/tasks/ammlu/ammlu_professional_accounting.yaml b/lm_eval/tasks/ammlu/ammlu_professional_accounting.yaml new file mode 100644 index 0000000000..ea4e68c93d --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_professional_accounting.yaml @@ -0,0 +1,4 @@ +"dataset_name": "professional_accounting" +"description": "فم بعملية التقييم في مجال علوم أخرى \n\n" +"include": "_default_template_yaml" +"task": "ammlu_professional_accounting" diff --git a/lm_eval/tasks/ammlu/ammlu_professional_law.yaml b/lm_eval/tasks/ammlu/ammlu_professional_law.yaml new file mode 100644 index 0000000000..ce37c8f63a --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_professional_law.yaml @@ -0,0 +1,4 @@ +"dataset_name": "professional_law" +"description": "فم بعملية التقييم في مجال العلوم الانسانية \n\n" +"include": "_default_template_yaml" +"task": "ammlu_professional_law" diff --git a/lm_eval/tasks/ammlu/ammlu_professional_medicine.yaml b/lm_eval/tasks/ammlu/ammlu_professional_medicine.yaml new file mode 100644 index 0000000000..a7b1d184d9 --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_professional_medicine.yaml @@ -0,0 +1,4 @@ +"dataset_name": "professional_medicine" +"description": "فم بعملية التقييم في مجال علوم أخرى \n\n" +"include": "_default_template_yaml" +"task": "ammlu_professional_medicine" diff --git a/lm_eval/tasks/ammlu/ammlu_professional_psychology.yaml b/lm_eval/tasks/ammlu/ammlu_professional_psychology.yaml new file mode 100644 index 0000000000..65a721c92a --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_professional_psychology.yaml @@ -0,0 +1,4 @@ +"dataset_name": "professional_psychology" +"description": "فم بعملية التقييم في مجال العلوم الإجتماعية \n\n" +"include": "_default_template_yaml" +"task": "ammlu_professional_psychology" diff --git a/lm_eval/tasks/ammlu/ammlu_public_relations.yaml b/lm_eval/tasks/ammlu/ammlu_public_relations.yaml new file mode 100644 index 0000000000..e2bdc98c67 --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_public_relations.yaml @@ -0,0 +1,4 @@ +"dataset_name": "public_relations" +"description": "فم بعملية التقييم في مجال العلوم الإجتماعية \n\n" +"include": "_default_template_yaml" +"task": "ammlu_public_relations" diff --git a/lm_eval/tasks/ammlu/ammlu_security_studies.yaml b/lm_eval/tasks/ammlu/ammlu_security_studies.yaml new file mode 100644 index 0000000000..6f8b9e50fc --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_security_studies.yaml @@ -0,0 +1,4 @@ +"dataset_name": "security_studies" +"description": "فم بعملية التقييم في مجال العلوم الإجتماعية \n\n" +"include": "_default_template_yaml" +"task": "ammlu_security_studies" diff --git a/lm_eval/tasks/ammlu/ammlu_sociology.yaml b/lm_eval/tasks/ammlu/ammlu_sociology.yaml new file mode 100644 index 0000000000..bf92339270 --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_sociology.yaml @@ -0,0 +1,4 @@ +"dataset_name": "sociology" +"description": "فم بعملية التقييم في مجال العلوم الإجتماعية \n\n" +"include": "_default_template_yaml" +"task": "ammlu_sociology" diff --git a/lm_eval/tasks/ammlu/ammlu_us_foreign_policy.yaml b/lm_eval/tasks/ammlu/ammlu_us_foreign_policy.yaml new file mode 100644 index 0000000000..6f934dab9b --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_us_foreign_policy.yaml @@ -0,0 +1,4 @@ +"dataset_name": "us_foreign_policy" +"description": "فم بعملية التقييم في مجال العلوم الإجتماعية \n\n" +"include": "_default_template_yaml" +"task": "ammlu_us_foreign_policy" diff --git a/lm_eval/tasks/ammlu/ammlu_virology.yaml b/lm_eval/tasks/ammlu/ammlu_virology.yaml new file mode 100644 index 0000000000..f2b0ad6e42 --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_virology.yaml @@ -0,0 +1,4 @@ +"dataset_name": "virology" +"description": "فم بعملية التقييم في مجال علوم أخرى \n\n" +"include": "_default_template_yaml" +"task": "ammlu_virology" diff --git a/lm_eval/tasks/ammlu/ammlu_world_religions.yaml b/lm_eval/tasks/ammlu/ammlu_world_religions.yaml new file mode 100644 index 0000000000..dc433e13d9 --- /dev/null +++ b/lm_eval/tasks/ammlu/ammlu_world_religions.yaml @@ -0,0 +1,4 @@ +"dataset_name": "world_religions" +"description": "فم بعملية التقييم في مجال العلوم الانسانية \n\n" +"include": "_default_template_yaml" +"task": "ammlu_world_religions" From 4c51111c787e886444bebaf1be6a17ebf8a01972 Mon Sep 17 00:00:00 2001 From: Hailey Schoelkopf <65563625+haileyschoelkopf@users.noreply.github.com> Date: Mon, 26 Feb 2024 09:02:21 -0500 Subject: [PATCH 20/20] Add Gemma support (Add flag to control BOS token usage) (#1465) * add add_bos_token to HFLM * add BOS token flag to other local model classes --------- Co-authored-by: Lintang Sutawika --- lm_eval/api/model.py | 4 ++-- lm_eval/models/huggingface.py | 14 ++++++++++++-- lm_eval/models/neuron_optimum.py | 8 ++++---- lm_eval/models/vllm_causallms.py | 6 +++++- 4 files changed, 23 insertions(+), 9 deletions(-) diff --git a/lm_eval/api/model.py b/lm_eval/api/model.py index 7f93cc4394..e84aece59d 100644 --- a/lm_eval/api/model.py +++ b/lm_eval/api/model.py @@ -274,8 +274,8 @@ def _encode_pair(self, context, continuation): continuation = context[-n_spaces:] + continuation context = context[:-n_spaces] - whole_enc = self.tok_encode(context + continuation, add_special_tokens=False) - context_enc = self.tok_encode(context, add_special_tokens=False) + whole_enc = self.tok_encode(context + continuation) + context_enc = self.tok_encode(context) context_enc_len = len(context_enc) continuation_enc = whole_enc[context_enc_len:] diff --git a/lm_eval/models/huggingface.py b/lm_eval/models/huggingface.py index 85493bfc12..603dba73dc 100644 --- a/lm_eval/models/huggingface.py +++ b/lm_eval/models/huggingface.py @@ -98,6 +98,7 @@ def __init__( max_batch_size: Optional[int] = 64, trust_remote_code: Optional[bool] = True, use_fast_tokenizer: Optional[bool] = True, + add_bos_token: Optional[bool] = False, # arguments used for splitting a model across GPUs naively. # only used if `parallelize=True`. parallelize: Optional[bool] = False, @@ -265,6 +266,14 @@ def __init__( else: self.tokenizer.add_special_tokens({"pad_token": "<|pad|>"}) + # TODO: override this for Gemma + self.add_bos_token = add_bos_token + if self.config.model_type == "gemma": + eval_logger.info( + "Model is of type 'gemma', will use a BOS token as Gemma underperforms without it." + ) + self.add_bos_token = True + self._max_length = max_length self.batch_schedule = 1 @@ -657,8 +666,9 @@ def tok_encode( """ """ if add_special_tokens is None: if self.AUTO_MODEL_CLASS == transformers.AutoModelForCausalLM: - add_special_tokens = False + add_special_tokens = False or self.add_bos_token elif self.AUTO_MODEL_CLASS == transformers.AutoModelForSeq2SeqLM: + # TODO: investigate best practices for enc-dec models + special tokens add_special_tokens = True encoding = self.tokenizer.encode(string, add_special_tokens=add_special_tokens) @@ -681,7 +691,7 @@ def tok_batch_encode( self.tokenizer.padding_side = padding_side if self.AUTO_MODEL_CLASS == transformers.AutoModelForCausalLM: - add_special_tokens = False + add_special_tokens = False or self.add_bos_token elif self.AUTO_MODEL_CLASS == transformers.AutoModelForSeq2SeqLM: add_special_tokens = True diff --git a/lm_eval/models/neuron_optimum.py b/lm_eval/models/neuron_optimum.py index ca1421e8fe..dbb87dffe7 100644 --- a/lm_eval/models/neuron_optimum.py +++ b/lm_eval/models/neuron_optimum.py @@ -195,8 +195,7 @@ def __init__( low_cpu_mem_usage: Optional[bool] = True, trust_remote_code: Optional[bool] = False, use_fast_tokenizer: Optional[bool] = True, - # arguments used for splitting a model across GPUs naively. - # only used if `parallelize=True`. + add_bos_token: Optional[bool] = False, ) -> None: if not NEURON_AVAILABLE: raise Exception( @@ -289,6 +288,7 @@ def __init__( self.vocab_size = self.tokenizer.vocab_size self.tokenizer.pad_token_id = self.tokenizer.eos_token_id + self.add_bos_token = self.add_bos_token self._max_length = max_length @@ -343,7 +343,7 @@ def world_size(self): def tok_encode(self, string: str, left_truncate_len=None, add_special_tokens=None): """ """ if add_special_tokens is None: - add_special_tokens = False + add_special_tokens = False or self.add_bos_token encoding = self.tokenizer.encode(string, add_special_tokens=add_special_tokens) @@ -364,7 +364,7 @@ def tok_batch_encode( old_padding_side = self.tokenizer.padding_side self.tokenizer.padding_side = padding_side - add_special_tokens = False + add_special_tokens = False or self.add_bos_token encoding = self.tokenizer( strings, diff --git a/lm_eval/models/vllm_causallms.py b/lm_eval/models/vllm_causallms.py index 164d38c0e4..b53a4299ad 100644 --- a/lm_eval/models/vllm_causallms.py +++ b/lm_eval/models/vllm_causallms.py @@ -47,6 +47,7 @@ def __init__( tokenizer: Optional[str] = None, tokenizer_mode: Literal["auto", "slow"] = "auto", tokenizer_revision: Optional[str] = None, + add_bos_token: Optional[bool] = False, tensor_parallel_size: int = 1, quantization: Optional[str] = None, max_gen_toks: int = 256, @@ -114,6 +115,7 @@ def __init__( trust_remote_code=trust_remote_code, tokenizer_revision=tokenizer_revision, ) + self.add_bos_token = add_bos_token self._max_gen_toks = max_gen_toks @@ -147,10 +149,12 @@ def tok_encode( self, string: str, left_truncate_len=None, - add_special_tokens=False, + add_special_tokens=None, truncation=False, ): """ """ + if not add_special_tokens: + add_special_tokens = False or self.add_bos_token encoding = self.tokenizer.encode( string, add_special_tokens=add_special_tokens, truncation=truncation )