From 93a378377051a93077325cec75c8dd40c3b7cf29 Mon Sep 17 00:00:00 2001 From: Vivi Nastase Date: Tue, 1 Aug 2023 14:36:14 +0200 Subject: [PATCH 1/3] BLM tasks --- src/genbench/tasks/blm_tasks/__init__.py | 5 + .../blm_tasks/agr_f/GenBench_eval_card.png | Bin 0 -> 23986 bytes .../tasks/blm_tasks/agr_f/__init__.py | 0 .../tasks/blm_tasks/agr_f/config.jsonnet | 54 ++++++++ src/genbench/tasks/blm_tasks/agr_f/doc.md | 60 +++++++++ src/genbench/tasks/blm_tasks/agr_f/task.py | 121 ++++++++++++++++++ .../blm_tasks/alt_atl/GenBench_eval_card.png | Bin 0 -> 23986 bytes .../tasks/blm_tasks/alt_atl/__init__.py | 0 .../tasks/blm_tasks/alt_atl/config.jsonnet | 51 ++++++++ src/genbench/tasks/blm_tasks/alt_atl/doc.md | 61 +++++++++ src/genbench/tasks/blm_tasks/alt_atl/task.py | 119 +++++++++++++++++ .../blm_tasks/atl_alt/GenBench_eval_card.png | Bin 0 -> 23986 bytes .../tasks/blm_tasks/atl_alt/__init__.py | 0 .../tasks/blm_tasks/atl_alt/config.jsonnet | 51 ++++++++ src/genbench/tasks/blm_tasks/atl_alt/doc.md | 59 +++++++++ src/genbench/tasks/blm_tasks/atl_alt/task.py | 119 +++++++++++++++++ src/genbench/tasks/blm_tasks/config.jsonnet | 26 ++++ src/genbench/tasks/blm_tasks/doc.md | 83 ++++++++++++ 18 files changed, 809 insertions(+) create mode 100644 src/genbench/tasks/blm_tasks/__init__.py create mode 100644 src/genbench/tasks/blm_tasks/agr_f/GenBench_eval_card.png create mode 100644 src/genbench/tasks/blm_tasks/agr_f/__init__.py create mode 100644 src/genbench/tasks/blm_tasks/agr_f/config.jsonnet create mode 100644 src/genbench/tasks/blm_tasks/agr_f/doc.md create mode 100644 src/genbench/tasks/blm_tasks/agr_f/task.py create mode 100644 src/genbench/tasks/blm_tasks/alt_atl/GenBench_eval_card.png create mode 100644 src/genbench/tasks/blm_tasks/alt_atl/__init__.py create mode 100644 src/genbench/tasks/blm_tasks/alt_atl/config.jsonnet create mode 100644 src/genbench/tasks/blm_tasks/alt_atl/doc.md create mode 100644 src/genbench/tasks/blm_tasks/alt_atl/task.py create mode 100644 src/genbench/tasks/blm_tasks/atl_alt/GenBench_eval_card.png create mode 100644 src/genbench/tasks/blm_tasks/atl_alt/__init__.py create mode 100644 src/genbench/tasks/blm_tasks/atl_alt/config.jsonnet create mode 100644 src/genbench/tasks/blm_tasks/atl_alt/doc.md create mode 100644 src/genbench/tasks/blm_tasks/atl_alt/task.py create mode 100644 src/genbench/tasks/blm_tasks/config.jsonnet create mode 100644 src/genbench/tasks/blm_tasks/doc.md diff --git a/src/genbench/tasks/blm_tasks/__init__.py b/src/genbench/tasks/blm_tasks/__init__.py new file mode 100644 index 0000000..42da018 --- /dev/null +++ b/src/genbench/tasks/blm_tasks/__init__.py @@ -0,0 +1,5 @@ +from genbench import TaskDict + + +class BlmTasks(TaskDict): + pass diff --git a/src/genbench/tasks/blm_tasks/agr_f/GenBench_eval_card.png b/src/genbench/tasks/blm_tasks/agr_f/GenBench_eval_card.png new file mode 100644 index 0000000000000000000000000000000000000000..320897e01223369f52a75bc29de2f943161cbf89 GIT binary patch literal 23986 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. The options are provided as a list of sentences, and the index of the correct one is specified as the target: + +{ + "input": "Les soirées dans l'appartement ont gêné les résidents . La soirée dans l'appartement a gêné les invités . Les visites aux artistes approchent . La menace de les attaquer inquiète les médecins . Les visites au village des artisanats approchent . La soirée dans l'appartement des propriétaires a gêné les voisins . Les dangers de les réformes dans les écoles inquiètent les médecins .", + "target": 5, + "target_options": ["L'avion pour le vol au-dessus des canyon s'écrase .", "L'avion pour les vols au-dessus des canyon s'écrasent .", "L'avion pour les vols au-dessus des canyon dans les réserves indiennes s'écrase .", "L'avion pour les vols et des canyon s'écrasent .", "Les instruments pour les vols au-dessus des canyon s'écrase .", "L'avion pour les vols au-dessus des canyon s'écrase ."] +} + +## Data Source +The dataset was automatically generated based on manually selected seeds and predefined sentence templates. + +## Limitations and Bias +The sentences and the sequence of sentences for each dataset have a prescribed structure. + +## GenBench Eval card + +- *Generalisation type* The generalisation type evaluated is 'compositional' and 'structural', because the dataset is generated with overlapping (and compositional) rules, that a system should detect +- *Motivation* The motivation is both 'practical' and 'cognitive' because the dataset should test the capabilities of the system to reason in terms of rules as humans do, and as a side effect lead to more explainable models, which would have an impact on practicality +- *Shift source* the data is automatically generated from manually collected seeds, and by applying prespecified (but naturalistic) templates +- *Shift locus* This test can be used to evaluate a pretrained or finetuned model +- *Shift type* + + +![GenBench Eval Card](GenBench_eval_card.png) diff --git a/src/genbench/tasks/blm_tasks/agr_f/task.py b/src/genbench/tasks/blm_tasks/agr_f/task.py new file mode 100644 index 0000000..bc671ea --- /dev/null +++ b/src/genbench/tasks/blm_tasks/agr_f/task.py @@ -0,0 +1,121 @@ +from collections import OrderedDict +from typing import Any, Dict, List, Mapping + +import evaluate +from datasets import Dataset + +from genbench import Task +from genbench.api import EvaluationResult, TaskType +from genbench.utils.logging import get_logger + + +logger = get_logger(__name__) + + +def make_list(N, ind_1): + l = [0] * N + l[ind_1] = 1 + return l + + +class BlmTasksAgrF(Task): + def evaluate_predictions( + self, + *, + predictions: List[Mapping[str, Any]] = None, + gold: Dataset = None, + ) -> EvaluationResult: + result = OrderedDict() + for metric_config in self.config.evaluation_metrics: + hf_id = metric_config.hf_id + if isinstance(hf_id, str): + hf_id = [hf_id] + + metric = evaluate.load(*hf_id, revision=metric_config.git_commit_sha) + + refs_lst = [g["target"] for g in gold] + preds_lst = [pred["target"] for pred in predictions] + + ref_type = type(refs_lst[0]) + pred_type = type(preds_lst[0]) + if pred_type != ref_type: + if self.config.task_type != TaskType.MULTIPLE_CHOICE: + raise ValueError( + f"Predictions and references have different types: preds: {pred_type} and refs: {ref_type}. " + ) + # Convert predictions to the same type as the references + if pred_type == str and ref_type == int: + logger.warning("Predictions are strings, but references are ints. Converting predictions to ints.") + converted_preds = [] + for pred, ref in zip(preds_lst, gold): + assert "target_options" in ref + converted_preds.append(ref["target_options"].index(pred)) + preds_lst = converted_preds + elif pred_type == int and ref_type == str: + logger.warning("Predictions are ints, but references are strings. Converting references to ints.") + converted_refs = [] + for pred, ref in zip(preds_lst, gold): + assert "target_options" in ref + converted_refs.append(ref["target_options"].index(ref["target"])) + refs_lst = converted_refs + else: + if self.config.task_type == TaskType.MULTIPLE_CHOICE and pred_type != int: + # Convert both predictions and references to int + logger.warning( + "Predictions and references have the same type, but it is not int. Converting both to int." + ) + + N = len(ref["target_options"]) + + converted_preds = [] + converted_refs = [] + for pred, ref in zip(preds_lst, gold): + assert "target_options" in ref + # converted_preds.append(ref["target_options"].index(pred)) + # converted_refs.append(ref["target_options"].index(ref["target"])) + + converted_preds.extend(make_list(N, ref["target_options"].index(pred))) + converted_refs.append(make_list(N, ref["target_options"].index(ref["target"]))) + + preds_lst = converted_preds + refs_lst = converted_refs + + extra_kwargs = metric_config.compute_extra_kwargs or {} + output: dict = metric.compute(predictions=preds_lst, references=refs_lst, **extra_kwargs) + + if output is None: + raise ValueError( + f"Metric {metric_config.hf_id} returned None. " f"Please check the metric implementation." + ) + + # Update output keys to include the metric id + metric_id = "_".join(hf_id) + output = {f"hf_{metric_id}__{k}": v for k, v in output.items()} + + result.update(output) + + return result + + def format_example(self, example: Dict[str, Any]) -> Dict[str, Any]: + """Perform preprocessing/formatting on an example-level. + + By default, this method does nothing more than mapping original data source + fields to the expected fields. + + `example` directly comes from the data source (e.g. downloaded HF dataset), + and it may contain fields such as `question` or `answer`. This method should + prepare the example used in the task. i.e. should create fields `input`, + `target`, `target_scores`, or `target_labels` depending on the task type. + + Args: + example: A dictionary containing key-value pairs for an example from the source dataset. + + + Returns: + A dictionary containing key-value pairs for the preprocessed/formatted example. + The dictionary should contain keys `input`, `target`, `target_scores`, or `target_label` + depending on the task type. + """ + # print("config: {}".format(self.config)) + # print("Example: {}".format(example)) + return {"input": example["input"], "target": example["target"], "target_options": example["target_options"]} diff --git a/src/genbench/tasks/blm_tasks/alt_atl/GenBench_eval_card.png b/src/genbench/tasks/blm_tasks/alt_atl/GenBench_eval_card.png new file mode 100644 index 0000000000000000000000000000000000000000..320897e01223369f52a75bc29de2f943161cbf89 GIT binary patch literal 23986 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. The options are provided as a list of sentences, and the index of the correct one is specified as the target: + +{ + "input": "The editors smudge the paper with grease. Sarcasm was smudged by teachers. The title was plastered on the vinyls by the band. The pad was rubbed on the screen. The box was loaded by the buyer. The site was plastered with logos by the quartet. The earth was seeded with carbon.", + "target": 4, + "target_options": ["Moses strung these lights under the fence.", "The author strews irony the book.", "Salt sprinkle the nuns over the beans.", "Teachers were smudged sarcasm on the canvas.", "He wraps it around his neck.", "Dirt spatters you whoever.", "The inside squirt you with a tiny bit of oil.", "Alex just sticks with the food in a box.", "Flanagan strews the humor of the movie."] +} + +## Data Source +The dataset was automatically generated based on manually selected seeds and predefined sentence templates. The dataset contains a single verb alternation. + +## Limitations and Bias +The sentences and the sequence of sentences for each dataset have a prescribed structure. + +## GenBench Eval card + +- *Generalisation type* The generalisation type evaluated is 'compositional' and 'structural', because the dataset is generated with overlapping (and compositional) rules, that a system should detect +- *Motivation* The motivation is both 'practical' and 'cognitive' because the dataset should test the capabilities of the system to reason in terms of rules as humans do, and as a side effect lead to more explainable models, which would have an impact on practicality +- *Shift source* the data is automatically generated from manually collected seeds, and by applying prespecified (but naturalistic) templates +- *Shift locus* This test can be used to evaluate a pretrained or finetuned model +- *Shift type* + + +![GenBench Eval Card](GenBench_eval_card.png) diff --git a/src/genbench/tasks/blm_tasks/alt_atl/task.py b/src/genbench/tasks/blm_tasks/alt_atl/task.py new file mode 100644 index 0000000..3f8c2c3 --- /dev/null +++ b/src/genbench/tasks/blm_tasks/alt_atl/task.py @@ -0,0 +1,119 @@ +from collections import OrderedDict +from typing import Any, Dict, List, Mapping + +import evaluate +from datasets import Dataset + +from genbench import Task +from genbench.api import EvaluationResult, TaskType +from genbench.utils.logging import get_logger + + +logger = get_logger(__name__) + + +def make_list(N, ind_1): + l = [0] * N + l[ind_1] = 1 + return l + + +class BlmTasksAltAtl(Task): + def evaluate_predictions( + self, + *, + predictions: List[Mapping[str, Any]] = None, + gold: Dataset = None, + ) -> EvaluationResult: + result = OrderedDict() + for metric_config in self.config.evaluation_metrics: + hf_id = metric_config.hf_id + if isinstance(hf_id, str): + hf_id = [hf_id] + + metric = evaluate.load(*hf_id, revision=metric_config.git_commit_sha) + + refs_lst = [g["target"] for g in gold] + preds_lst = [pred["target"] for pred in predictions] + + ref_type = type(refs_lst[0]) + pred_type = type(preds_lst[0]) + if pred_type != ref_type: + if self.config.task_type != TaskType.MULTIPLE_CHOICE: + raise ValueError( + f"Predictions and references have different types: preds: {pred_type} and refs: {ref_type}. " + ) + # Convert predictions to the same type as the references + if pred_type == str and ref_type == int: + logger.warning("Predictions are strings, but references are ints. Converting predictions to ints.") + converted_preds = [] + for pred, ref in zip(preds_lst, gold): + assert "target_options" in ref + converted_preds.append(ref["target_options"].index(pred)) + preds_lst = converted_preds + elif pred_type == int and ref_type == str: + logger.warning("Predictions are ints, but references are strings. Converting references to ints.") + converted_refs = [] + for pred, ref in zip(preds_lst, gold): + assert "target_options" in ref + converted_refs.append(ref["target_options"].index(ref["target"])) + refs_lst = converted_refs + else: + if self.config.task_type == TaskType.MULTIPLE_CHOICE and pred_type != int: + # Convert both predictions and references to int + logger.warning( + "Predictions and references have the same type, but it is not int. Converting both to int." + ) + + N = len(ref["target_options"]) + + converted_preds = [] + converted_refs = [] + for pred, ref in zip(preds_lst, gold): + assert "target_options" in ref + # converted_preds.append(ref["target_options"].index(pred)) + # converted_refs.append(ref["target_options"].index(ref["target"])) + + converted_preds.extend(make_list(N, ref["target_options"].index(pred))) + converted_refs.append(make_list(N, ref["target_options"].index(ref["target"]))) + + preds_lst = converted_preds + refs_lst = converted_refs + + extra_kwargs = metric_config.compute_extra_kwargs or {} + output: dict = metric.compute(predictions=preds_lst, references=refs_lst, **extra_kwargs) + + if output is None: + raise ValueError( + f"Metric {metric_config.hf_id} returned None. " f"Please check the metric implementation." + ) + + # Update output keys to include the metric id + metric_id = "_".join(hf_id) + output = {f"hf_{metric_id}__{k}": v for k, v in output.items()} + + result.update(output) + + return result + + def format_example(self, example: Dict[str, Any]) -> Dict[str, Any]: + """Perform preprocessing/formatting on an example-level. + + By default, this method does nothing more than mapping original data source + fields to the expected fields. + + `example` directly comes from the data source (e.g. downloaded HF dataset), + and it may contain fields such as `question` or `answer`. This method should + prepare the example used in the task. i.e. should create fields `input`, + `target`, `target_scores`, or `target_labels` depending on the task type. + + Args: + example: A dictionary containing key-value pairs for an example from the source dataset. + + + Returns: + A dictionary containing key-value pairs for the preprocessed/formatted example. + The dictionary should contain keys `input`, `target`, `target_scores`, or `target_label` + depending on the task type. + """ + return {"input": example["input"], "target": example["target"], "target_options": example["target_options"]} diff --git a/src/genbench/tasks/blm_tasks/atl_alt/GenBench_eval_card.png b/src/genbench/tasks/blm_tasks/atl_alt/GenBench_eval_card.png new file mode 100644 index 0000000000000000000000000000000000000000..320897e01223369f52a75bc29de2f943161cbf89 GIT binary patch literal 23986 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. The options are provided as a list of sentences, and the index of the correct one is specified as the target: + +{ + "input": "The buyer can load the tools in the box. The crystals were scattered by the wizard. The letters were hung on the ceiling by the artist. Plenty of historical backstory was strewed in the figures. Poles were sewed by them. The sink was swashed with the chemicals by the volunteers. The writing marks were rubbed with the eraser.", + "target": 2, + "target_options": ["The other place was sticked the center with the OEM drive.", "Whoever spatters the windshield the poison.", "I will hang the ceiling with the picture.", "The orb scatters earth under the dragons.", "Drizzle over the cream with brandy.", "Blotches of ink smudge them on the paper.", "The vegetables baste vinegar the farmers.", "The pot squirt the miners with the glue.", "The buyer can load the suitcase for the wedding."]} + +## Data Source +The dataset was automatically generated based on manually selected seeds and predefined sentence templates. The dataset contains a single verb alternation. + +## Limitations and Bias +The sentences and the sequence of sentences for each dataset have a prescribed structure. + +## GenBench Eval card + +- *Generalisation type* The generalisation type evaluated is 'compositional' and 'structural', because the dataset is generated with overlapping (and compositional) rules, that a system should detect +- *Motivation* The motivation is both 'practical' and 'cognitive' because the dataset should test the capabilities of the system to reason in terms of rules as humans do, and as a side effect lead to more explainable models, which would have an impact on practicality +- *Shift source* the data is automatically generated from manually collected seeds, and by applying prespecified (but naturalistic) templates +- *Shift locus* This test can be used to evaluate a pretrained or finetuned model +- *Shift type* + + +![GenBench Eval Card](GenBench_eval_card.png) diff --git a/src/genbench/tasks/blm_tasks/atl_alt/task.py b/src/genbench/tasks/blm_tasks/atl_alt/task.py new file mode 100644 index 0000000..f59a0ac --- /dev/null +++ b/src/genbench/tasks/blm_tasks/atl_alt/task.py @@ -0,0 +1,119 @@ +from collections import OrderedDict +from typing import Any, Dict, List, Mapping + +import evaluate +from datasets import Dataset + +from genbench import Task +from genbench.api import EvaluationResult, TaskType +from genbench.utils.logging import get_logger + + +logger = get_logger(__name__) + + +def make_list(N, ind_1): + l = [0] * N + l[ind_1] = 1 + return l + + +class BlmTasksAtlAlt(Task): + def evaluate_predictions( + self, + *, + predictions: List[Mapping[str, Any]] = None, + gold: Dataset = None, + ) -> EvaluationResult: + result = OrderedDict() + for metric_config in self.config.evaluation_metrics: + hf_id = metric_config.hf_id + if isinstance(hf_id, str): + hf_id = [hf_id] + + metric = evaluate.load(*hf_id, revision=metric_config.git_commit_sha) + + refs_lst = [g["target"] for g in gold] + preds_lst = [pred["target"] for pred in predictions] + + ref_type = type(refs_lst[0]) + pred_type = type(preds_lst[0]) + if pred_type != ref_type: + if self.config.task_type != TaskType.MULTIPLE_CHOICE: + raise ValueError( + f"Predictions and references have different types: preds: {pred_type} and refs: {ref_type}. " + ) + # Convert predictions to the same type as the references + if pred_type == str and ref_type == int: + logger.warning("Predictions are strings, but references are ints. Converting predictions to ints.") + converted_preds = [] + for pred, ref in zip(preds_lst, gold): + assert "target_options" in ref + converted_preds.append(ref["target_options"].index(pred)) + preds_lst = converted_preds + elif pred_type == int and ref_type == str: + logger.warning("Predictions are ints, but references are strings. Converting references to ints.") + converted_refs = [] + for pred, ref in zip(preds_lst, gold): + assert "target_options" in ref + converted_refs.append(ref["target_options"].index(ref["target"])) + refs_lst = converted_refs + else: + if self.config.task_type == TaskType.MULTIPLE_CHOICE and pred_type != int: + # Convert both predictions and references to int + logger.warning( + "Predictions and references have the same type, but it is not int. Converting both to int." + ) + + N = len(ref["target_options"]) + + converted_preds = [] + converted_refs = [] + for pred, ref in zip(preds_lst, gold): + assert "target_options" in ref + # converted_preds.append(ref["target_options"].index(pred)) + # converted_refs.append(ref["target_options"].index(ref["target"])) + + converted_preds.extend(make_list(N, ref["target_options"].index(pred))) + converted_refs.append(make_list(N, ref["target_options"].index(ref["target"]))) + + preds_lst = converted_preds + refs_lst = converted_refs + + extra_kwargs = metric_config.compute_extra_kwargs or {} + output: dict = metric.compute(predictions=preds_lst, references=refs_lst, **extra_kwargs) + + if output is None: + raise ValueError( + f"Metric {metric_config.hf_id} returned None. " f"Please check the metric implementation." + ) + + # Update output keys to include the metric id + metric_id = "_".join(hf_id) + output = {f"hf_{metric_id}__{k}": v for k, v in output.items()} + + result.update(output) + + return result + + def format_example(self, example: Dict[str, Any]) -> Dict[str, Any]: + """Perform preprocessing/formatting on an example-level. + + By default, this method does nothing more than mapping original data source + fields to the expected fields. + + `example` directly comes from the data source (e.g. downloaded HF dataset), + and it may contain fields such as `question` or `answer`. This method should + prepare the example used in the task. i.e. should create fields `input`, + `target`, `target_scores`, or `target_labels` depending on the task type. + + Args: + example: A dictionary containing key-value pairs for an example from the source dataset. + + + Returns: + A dictionary containing key-value pairs for the preprocessed/formatted example. + The dictionary should contain keys `input`, `target`, `target_scores`, or `target_label` + depending on the task type. + """ + return {"input": example["input"], "target": example["target"], "target_options": example["target_options"]} diff --git a/src/genbench/tasks/blm_tasks/config.jsonnet b/src/genbench/tasks/blm_tasks/config.jsonnet new file mode 100644 index 0000000..05b1726 --- /dev/null +++ b/src/genbench/tasks/blm_tasks/config.jsonnet @@ -0,0 +1,26 @@ +{ + name: 'BLM_tasks', + + description: 'BLM_tasks -- Blackbird Language Matrices -- aim to measure rule-like generalization in neural networks, through synthetic datasets that are generated based on combinations of rules relevant to particular targeted grammatical phenomena', + + keywords: [ + 'rule-like generalization', + 'underlying problem structure', + 'grammatical phenomena', + ], + + authors: [ + 'Paola Merlo', + 'Chunyang Jiang', + 'Aixiu An', + 'Maria A. Rodriguez', + 'Giuseppe Samo', + 'Vivi Nastase', + ], + + subtasks_order: [ + 'agr_f', + 'atl_alt', + 'alt_atl', + ], +} diff --git a/src/genbench/tasks/blm_tasks/doc.md b/src/genbench/tasks/blm_tasks/doc.md new file mode 100644 index 0000000..9c5f0fc --- /dev/null +++ b/src/genbench/tasks/blm_tasks/doc.md @@ -0,0 +1,83 @@ +## Motivation +When exposed to tests of analytic intelligence, for example the visual RAVEN IQ test, human problem-solvers identify the relevant objects in the picture and their relevant attributes and reason based on rules applied to these objects and attributes. Based on the induced rules, they are able to provide a solution to the test. + +The tasks we propose translate this IQ task into language. Each subtask pertains to a grammatical or linguistic phenomenon, and the corresponding dataset consists of a sequence of sentences. The sentence structure is constructed to illustrate several underlying generative rules that describe different aspects of the linguistic phenomenon. These rules need to be identified and disentangled to correctly generalize and thus identify the correct answer. The sequence structure was designed in a similar manner to visual IQ tests, and follows a generative process of overlapping rules. The output is multiple choice. The correct sentence should be the correct continuation of the input sequence w.r.t. the dataset's generation rules. + +## Examples +We have three subtasks: + +* `agrF`: subject-verb agreement in French: + +Input: + +|---|-----------|------------------|-----------------|--------| +| 1 | The vase | with the flower | | leaks. | +| 2 | The vases | with the flower | | leak. | +| 3 | The vase | with the flowers | | leaks. | +| 4 | The vases | with the flowers | | leak. | +| 5 | The vase | with the flower | from the garden | leaks. | +| 6 | The vases | with the flower | from the garden | leak. | +| 7 | The vase | with the flowers | from the garden | leaks. | +| 8 | ??? | + +Choices: + +| | | +|-----------------------------------------------------------|---------| +| The vase with the flower and the garden leaks. | Coord | +| extbf{The vases with the flowers from the garden leak.} | Correct | +| The vase with the flower leaks. | WNA | +| The vase with the flower from the garden leak. | AE | +| The vases with the flower from the garden leak. | WN1 | +| The vases with the flowers from the gardens leak. | WN2 | +|-----------------------------------------------------------|---------| + +* `ALT-ATL`: spray/load verb alternation in English (from Agent - Locative - Theme to Agent - Theme - Locative) + +Input: + +| | | +|---|-------------------------------------------------| +| 1 | The girl sprayed the wall with paint. | +| 2 | Paint was sprayed by the girl | +| 3 | Paint was sprayed onto the wall by the girl | +| 4 | Paint was sprayed onto the wall | +| 5 | The wall was sprayed by the girl | +| 6 | The wall was sprayed with the paint by the girl | +| 7 | The wall was sprayed with paint | +| 8 | ??? | + +Choices: + +| | | +|-------------------------------------------|----------| +| The girl sprayed paint onto the wall | Correct | +| The girl was sprayed paint onto the wall | AgentAct | +| The girl sprayed paint the wall | Alt1 | +| The girl sprayed with paint onto the wall | Alt2 | +| The girl sprayed paint for the room | NoEmb | +| The girl sprayed paint under the wall | LexPrep | +| Paint sprayed the girl onto the wall | SSM | +| The wall sprayed the girl with paint | SSM | +| Paint sprayed the wall with the girl | AASSM | + + +* `ATL-ALT`: verb causal alternation in English (from Agent - Theme - Locative to Agent - Locative - Theme) + + +## Data Source +All datasets are automatically generated based on manually selected seeds and predefined (syntactic) templates. + +## Limitations and Bias +The sentences and the sequence of sentences for each dataset have a prescribed structure. Each dataset is focused on one specific phenomenon. + +## Citation + +[BLM-AgrF: A New French Benchmark to Investigate Generalization of Agreement in Neural Networks](https://aclanthology.org/2023.eacl-main.99/) describes the BLM_AgrF dataset -- subject-verb agreement in French. + + +## Further References + +[Blackbird's language matrices (BLMs): a new benchmark to investigate disentangled generalisation in neural networks](https://arxiv.org/abs/2205.10866) describes the project, and the first BLM dataset generated within this paradigm. + +[Blackbird language matrices (BLM), a new task for rule-like generalization in neural networks: Motivations and Formal Specifications](https://arxiv.org/abs/2306.11444) provides details about the motivations and formal specifications of BLM's. \ No newline at end of file From 0ae3ebe82bebdfdb8ada50044bfe6f92fe74cf94 Mon Sep 17 00:00:00 2001 From: Vivi Nastase Date: Tue, 1 Aug 2023 15:06:31 +0200 Subject: [PATCH 2/3] BLM tasks __ changed var name --- src/genbench/tasks/blm_tasks/agr_f/task.py | 6 +++--- src/genbench/tasks/blm_tasks/alt_atl/task.py | 6 +++--- src/genbench/tasks/blm_tasks/atl_alt/task.py | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/genbench/tasks/blm_tasks/agr_f/task.py b/src/genbench/tasks/blm_tasks/agr_f/task.py index bc671ea..417f2fa 100644 --- a/src/genbench/tasks/blm_tasks/agr_f/task.py +++ b/src/genbench/tasks/blm_tasks/agr_f/task.py @@ -13,9 +13,9 @@ def make_list(N, ind_1): - l = [0] * N - l[ind_1] = 1 - return l + binary_list = [0] * N + binary_list[ind_1] = 1 + return binary_list class BlmTasksAgrF(Task): diff --git a/src/genbench/tasks/blm_tasks/alt_atl/task.py b/src/genbench/tasks/blm_tasks/alt_atl/task.py index 3f8c2c3..10f74bb 100644 --- a/src/genbench/tasks/blm_tasks/alt_atl/task.py +++ b/src/genbench/tasks/blm_tasks/alt_atl/task.py @@ -13,9 +13,9 @@ def make_list(N, ind_1): - l = [0] * N - l[ind_1] = 1 - return l + binary_list = [0] * N + binary_list[ind_1] = 1 + return binary_list class BlmTasksAltAtl(Task): diff --git a/src/genbench/tasks/blm_tasks/atl_alt/task.py b/src/genbench/tasks/blm_tasks/atl_alt/task.py index f59a0ac..a5c5428 100644 --- a/src/genbench/tasks/blm_tasks/atl_alt/task.py +++ b/src/genbench/tasks/blm_tasks/atl_alt/task.py @@ -13,9 +13,9 @@ def make_list(N, ind_1): - l = [0] * N - l[ind_1] = 1 - return l + binary_list = [0] * N + binary_list[ind_1] = 1 + return binary_list class BlmTasksAtlAlt(Task): From 5c2204f8adaee3598cb01779960adb394bc1ea86 Mon Sep 17 00:00:00 2001 From: Vivi Nastase Date: Wed, 30 Aug 2023 17:10:51 +0200 Subject: [PATCH 3/3] Additional BLM datasets for train-test shift --- .../blm_tasks/agr_f/GenBench_eval_card.png | Bin 23986 -> 24029 bytes src/genbench/tasks/blm_tasks/agr_f/doc.md | 8 +- .../agr_f_type_I_train/GenBench_eval_card.png | Bin 0 -> 24054 bytes .../blm_tasks/agr_f_type_I_train/__init__.py | 0 .../agr_f_type_I_train/config.jsonnet | 54 ++++++++ .../tasks/blm_tasks/agr_f_type_I_train/doc.md | 60 +++++++++ .../blm_tasks/agr_f_type_I_train/task.py | 121 ++++++++++++++++++ .../blm_tasks/alt_atl/GenBench_eval_card.png | Bin 23986 -> 24029 bytes src/genbench/tasks/blm_tasks/alt_atl/doc.md | 8 +- .../GenBench_eval_card.png | Bin 0 -> 24054 bytes .../alt_atl_type_I_train/__init__.py | 0 .../alt_atl_type_I_train/config.jsonnet | 51 ++++++++ .../blm_tasks/alt_atl_type_I_train/doc.md | 61 +++++++++ .../blm_tasks/alt_atl_type_I_train/task.py | 119 +++++++++++++++++ .../blm_tasks/atl_alt/GenBench_eval_card.png | Bin 23986 -> 24029 bytes src/genbench/tasks/blm_tasks/atl_alt/doc.md | 8 +- .../GenBench_eval_card.png | Bin 0 -> 24054 bytes .../atl_alt_type_I_train/__init__.py | 0 .../atl_alt_type_I_train/config.jsonnet | 51 ++++++++ .../blm_tasks/atl_alt_type_I_train/doc.md | 59 +++++++++ .../blm_tasks/atl_alt_type_I_train/task.py | 119 +++++++++++++++++ src/genbench/tasks/blm_tasks/config.jsonnet | 3 + src/genbench/tasks/blm_tasks/doc.md | 12 +- 23 files changed, 720 insertions(+), 14 deletions(-) create mode 100644 src/genbench/tasks/blm_tasks/agr_f_type_I_train/GenBench_eval_card.png create mode 100644 src/genbench/tasks/blm_tasks/agr_f_type_I_train/__init__.py create mode 100644 src/genbench/tasks/blm_tasks/agr_f_type_I_train/config.jsonnet create mode 100644 src/genbench/tasks/blm_tasks/agr_f_type_I_train/doc.md create mode 100644 src/genbench/tasks/blm_tasks/agr_f_type_I_train/task.py create mode 100644 src/genbench/tasks/blm_tasks/alt_atl_type_I_train/GenBench_eval_card.png create mode 100644 src/genbench/tasks/blm_tasks/alt_atl_type_I_train/__init__.py create mode 100644 src/genbench/tasks/blm_tasks/alt_atl_type_I_train/config.jsonnet create mode 100644 src/genbench/tasks/blm_tasks/alt_atl_type_I_train/doc.md create mode 100644 src/genbench/tasks/blm_tasks/alt_atl_type_I_train/task.py create mode 100644 src/genbench/tasks/blm_tasks/atl_alt_type_I_train/GenBench_eval_card.png create mode 100644 src/genbench/tasks/blm_tasks/atl_alt_type_I_train/__init__.py create mode 100644 src/genbench/tasks/blm_tasks/atl_alt_type_I_train/config.jsonnet create mode 100644 src/genbench/tasks/blm_tasks/atl_alt_type_I_train/doc.md create mode 100644 src/genbench/tasks/blm_tasks/atl_alt_type_I_train/task.py diff --git a/src/genbench/tasks/blm_tasks/agr_f/GenBench_eval_card.png b/src/genbench/tasks/blm_tasks/agr_f/GenBench_eval_card.png index 320897e01223369f52a75bc29de2f943161cbf89..0e72f77255e473bf8f038222f31da605932bd645 100644 GIT binary patch literal 24029 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 z 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 literal 23986 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 literal 0 HcmV?d00001 diff --git a/src/genbench/tasks/blm_tasks/agr_f_type_I_train/__init__.py b/src/genbench/tasks/blm_tasks/agr_f_type_I_train/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/genbench/tasks/blm_tasks/agr_f_type_I_train/config.jsonnet b/src/genbench/tasks/blm_tasks/agr_f_type_I_train/config.jsonnet new file mode 100644 index 0000000..7a23aea --- /dev/null +++ b/src/genbench/tasks/blm_tasks/agr_f_type_I_train/config.jsonnet @@ -0,0 +1,54 @@ +{ + name: 'BLM_tasks (agr_f_type_I_train)', + + + description: 'BLM_tasks (agr_f_type_I_train) aims to measure the detection of rules related to the subject-verb agreement (in French) in neural networks. The dataset was automatically generated based on manually collected seeds and predefined patterns, and using overlapping generation rules that combine different number of attractors and grammatical numbers for NPs and verbs. Compared to the agrF task, the training data for this subtask has minimal lexical variation both among the sentences in the input sequence, and between the input and output sentences.', + + keywords: [ + 'rule-like generalization', + 'underlying problem structure', + 'grammatical phenomena', + 'subject-verb agreement', + 'French', + ], + + authors: [ + 'Paola Merlo', + 'Chunyang Jiang', + 'Aixiu An', + 'Maria A. Rodriguez', + 'Vivi Nastase', + ], + + data_source: { + type: 'manual', + train: 'https://raw.githubusercontent.com/CLCL-Geneva/GenBench/main/BLMs/agrF_typeI_train.jsonl', + test: 'https://raw.githubusercontent.com/CLCL-Geneva/GenBench/main/BLMs/agrF_test.jsonl', + }, + + has_validation_set: false, + has_train_set: true, + + task_type: 'multiple_choice', + + field_mapping: { + input: 'input', + target: 'target', + target_options: 'target_options', + }, + + evaluation_metrics: [ + { + hf_id: 'f1', + git_commit_sha: '3a4c40f7397dcd7d9dccf0659616dc6b14072dcb', + best_score: 1.0, + }, + ], + + preparation_strategies: { + finetuning: { + objective: 'maximum_likelihood', + }, + }, + +} diff --git a/src/genbench/tasks/blm_tasks/agr_f_type_I_train/doc.md b/src/genbench/tasks/blm_tasks/agr_f_type_I_train/doc.md new file mode 100644 index 0000000..bd10701 --- /dev/null +++ b/src/genbench/tasks/blm_tasks/agr_f_type_I_train/doc.md @@ -0,0 +1,60 @@ +# BLM_tasks (agr_f_type_I_train) + +## Abstract + +BLM-AgrF is an instance of Blackbird's Language Matrices (BLM). This novel linguistic dataset is generatively constructed to support investigations in representation learning of grammatical rules. Each instance, consisting of a sequence of sentences and a candidate answer set, was built using a combination of rules, to provide a layered and structured dataset for learning more complex models. The various layers of the dataset allow for a variety of explorations, from disentangled sentence representations to capture structure and regularities within a sentence, to modular architectures that could capture structure and regularities in the sentence sequences. The purposefully built candidate answers supports more in-depth analyses of the behaviour of a system, and provide insights into the source of prediction errors. + +The sentence structure is constructed to illustrate several underlying generative rules that describe different aspects of the linguistic phenomenon. These rules need to be identified and disentangled to correctly generalize and thus identify the correct answer. The sequence structure was designed in a similar manner to visual IQ tests, and follows a generative process of overlapping rules. The output is multiple choice. The correct sentence should be the correct continuation of the input sequence w.r.t. the dataset's generation rules. + +## Examples +BLM-AgrF (agr_f_type_I_train) is a dataset capturing subject-verb agreement in French: + +Input: + +|---|-----------|------------------|-----------------|--------| +| 1 | The vase | with the flower | | leaks. | +| 2 | The vases | with the flower | | leak. | +| 3 | The vase | with the flowers | | leaks. | +| 4 | The vases | with the flowers | | leak. | +| 5 | The vase | with the flower | from the garden | leaks. | +| 6 | The vases | with the flower | from the garden | leak. | +| 7 | The vase | with the flowers | from the garden | leaks. | +| 8 | ??? | + +Choices: + +| | | +|-----------------------------------------------------------|---------| +| The vase with the flower and the garden leaks. | Coord | +| extbf{The vases with the flowers from the garden leak.} | Correct | +| The vase with the flower leaks. | WNA | +| The vase with the flower from the garden leak. | AE | +| The vases with the flower from the garden leak. | WN1 | +| The vases with the flowers from the gardens leak. | WN2 | +|-----------------------------------------------------------|---------| + +## Usage +The task is formatted as multiple choice. The input consists of a sequence of 7 sentences, separated by the end of sentence marker (). The options are provided as a list of sentences, and the index of the correct one is specified as the target: + +{ + "input": "Les soirées dans l'appartement ont gêné les résidents . La soirée dans l'appartement a gêné les invités . Les visites aux artistes approchent . La menace de les attaquer inquiète les médecins . Les visites au village des artisanats approchent . La soirée dans l'appartement des propriétaires a gêné les voisins . Les dangers de les réformes dans les écoles inquiètent les médecins .", + "target": 5, + "target_options": ["L'avion pour le vol au-dessus des canyon s'écrase .", "L'avion pour les vols au-dessus des canyon s'écrasent .", "L'avion pour les vols au-dessus des canyon dans les réserves indiennes s'écrase .", "L'avion pour les vols et des canyon s'écrasent .", "Les instruments pour les vols au-dessus des canyon s'écrase .", "L'avion pour les vols au-dessus des canyon s'écrase ."] +} + +## Data Source +The dataset was automatically generated based on manually selected seeds and predefined sentence templates. Compared to the 'agr_f' task, the training data for this subtask has minimal lexical variation both among the sentences in the input sequence, and between the input and output sentences. + +## Limitations and Bias +The sentences and the sequence of sentences for each dataset have a prescribed structure. + +## GenBench Eval card + +- *Generalisation type* The generalisation type evaluated is 'compositional' because the dataset is generated with overlapping (and compositional) rules, that a system should detect +- *Motivation* The motivation is both 'intrinsic' and 'cognitive': 'cognitive' because the dataset would test the capabilities of the system to detect the kind of information humans perceive in the provided data; 'intrinsic' because if a system can learn to detect specific linguistic information, we could adjust the model to detect different types of information. +- *Shift source* the data is automatically generated from manually collected seeds, and by applying prespecified (but naturalistic) templates. +- *Shift locus* is 'pretrained-trained' because we imagine a system would use representations of the data from a pretrained model to address the task of identifying specific linguistic phenomena. +- *Shift type* There is a difference in the lexical distribution in the training data and the test -- there is minimal variation in the lexical material in the training instances, whereas the test set has maximal lexical variation. + + +![GenBench Eval Card](GenBench_eval_card.png) diff --git a/src/genbench/tasks/blm_tasks/agr_f_type_I_train/task.py b/src/genbench/tasks/blm_tasks/agr_f_type_I_train/task.py new file mode 100644 index 0000000..417f2fa --- /dev/null +++ b/src/genbench/tasks/blm_tasks/agr_f_type_I_train/task.py @@ -0,0 +1,121 @@ +from collections import OrderedDict +from typing import Any, Dict, List, Mapping + +import evaluate +from datasets import Dataset + +from genbench import Task +from genbench.api import EvaluationResult, TaskType +from genbench.utils.logging import get_logger + + +logger = get_logger(__name__) + + +def make_list(N, ind_1): + binary_list = [0] * N + binary_list[ind_1] = 1 + return binary_list + + +class BlmTasksAgrF(Task): + def evaluate_predictions( + self, + *, + predictions: List[Mapping[str, Any]] = None, + gold: Dataset = None, + ) -> EvaluationResult: + result = OrderedDict() + for metric_config in self.config.evaluation_metrics: + hf_id = metric_config.hf_id + if isinstance(hf_id, str): + hf_id = [hf_id] + + metric = evaluate.load(*hf_id, revision=metric_config.git_commit_sha) + + refs_lst = [g["target"] for g in gold] + preds_lst = [pred["target"] for pred in predictions] + + ref_type = type(refs_lst[0]) + pred_type = type(preds_lst[0]) + if pred_type != ref_type: + if self.config.task_type != TaskType.MULTIPLE_CHOICE: + raise ValueError( + f"Predictions and references have different types: preds: {pred_type} and refs: {ref_type}. " + ) + # Convert predictions to the same type as the references + if pred_type == str and ref_type == int: + logger.warning("Predictions are strings, but references are ints. Converting predictions to ints.") + converted_preds = [] + for pred, ref in zip(preds_lst, gold): + assert "target_options" in ref + converted_preds.append(ref["target_options"].index(pred)) + preds_lst = converted_preds + elif pred_type == int and ref_type == str: + logger.warning("Predictions are ints, but references are strings. Converting references to ints.") + converted_refs = [] + for pred, ref in zip(preds_lst, gold): + assert "target_options" in ref + converted_refs.append(ref["target_options"].index(ref["target"])) + refs_lst = converted_refs + else: + if self.config.task_type == TaskType.MULTIPLE_CHOICE and pred_type != int: + # Convert both predictions and references to int + logger.warning( + "Predictions and references have the same type, but it is not int. Converting both to int." + ) + + N = len(ref["target_options"]) + + converted_preds = [] + converted_refs = [] + for pred, ref in zip(preds_lst, gold): + assert "target_options" in ref + # converted_preds.append(ref["target_options"].index(pred)) + # converted_refs.append(ref["target_options"].index(ref["target"])) + + converted_preds.extend(make_list(N, ref["target_options"].index(pred))) + converted_refs.append(make_list(N, ref["target_options"].index(ref["target"]))) + + preds_lst = converted_preds + refs_lst = converted_refs + + extra_kwargs = metric_config.compute_extra_kwargs or {} + output: dict = metric.compute(predictions=preds_lst, references=refs_lst, **extra_kwargs) + + if output is None: + raise ValueError( + f"Metric {metric_config.hf_id} returned None. " f"Please check the metric implementation." + ) + + # Update output keys to include the metric id + metric_id = "_".join(hf_id) + output = {f"hf_{metric_id}__{k}": v for k, v in output.items()} + + result.update(output) + + return result + + def format_example(self, example: Dict[str, Any]) -> Dict[str, Any]: + """Perform preprocessing/formatting on an example-level. + + By default, this method does nothing more than mapping original data source + fields to the expected fields. + + `example` directly comes from the data source (e.g. downloaded HF dataset), + and it may contain fields such as `question` or `answer`. This method should + prepare the example used in the task. i.e. should create fields `input`, + `target`, `target_scores`, or `target_labels` depending on the task type. + + Args: + example: A dictionary containing key-value pairs for an example from the source dataset. + + + Returns: + A dictionary containing key-value pairs for the preprocessed/formatted example. + The dictionary should contain keys `input`, `target`, `target_scores`, or `target_label` + depending on the task type. + """ + # print("config: {}".format(self.config)) + # print("Example: {}".format(example)) + return {"input": example["input"], "target": example["target"], "target_options": example["target_options"]} diff --git a/src/genbench/tasks/blm_tasks/alt_atl/GenBench_eval_card.png b/src/genbench/tasks/blm_tasks/alt_atl/GenBench_eval_card.png index 320897e01223369f52a75bc29de2f943161cbf89..0e72f77255e473bf8f038222f31da605932bd645 100644 GIT binary patch literal 24029 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 z z-KZ@TB&UfYnt5<4pR_bC_)=7#SI$XW^M>?T3WO=WODlAtBON$>niA+0L$@^Pme|as zyTG1=T1jY&hy;B=A5b_&jpW()QF@V;)>kd(x80ctXcAlEZ#J`3ua3M^wPdtCRzdL; zHAWEkV_gsn#fmp%c=4*U^&!s6w=vqW4Lr&vg*q7fM>He7G2c-za-=m|zGZHtyH%dP zS8WWBM(AF7v%p2`Jr6(V8F&FOF+@C1Z853BU-}%xLs32{C5W`bOV9u&e$F|3l`=<< z2@^vh<$|HWRKTmE zLK3;(SLM1yVvWDJQ3K-BS~64|Kh1)x%zsY(-= zgz1uUUG(dz6hyIq77{{<2nIw(V(53%rcD>FUfqJU&jjMPnw?+VPz^2YOkn~gH-nDd zPN5_bTCZ1j) zw7O5-X<{RC8ATW4xHIQ5?agPb4YDf{I+C85G(fnfBCHO1wj(Fy))wpYQC^C2m|tEk zok?Ajyk;6IG+(fTT(v}I!8Xmu-AnlG1x%7*?E5j69?0{0y^7$AH*P$&^PNQe*4-|? z*07Q1du|&ZkW`{<=u*+sY?#^wEBz7J2N6F*cmDzpA5fqn&zY}G_Z(&ys#;o}U_yvY zDWNXP^wx>J$D~4^0O$UC`{*(+&H(fr5~dcMY=uwy&&o%%dkqzm>UTIeQEu8~zVFAo zJ3RK2J%V$W^#-pbKH9UzO`-zE!}w?IVvX~)wi}Q0EF@F>s;xb`>HYzQ1Uaa49+e<{ zO*s{Ysas4;Ozt1pB<$#zJ)hHPY-1RT!8ND0RSQkcw-}Wnp4g!YR_&aa)M%WhD0Ptv zAy!R1o zDt)VOUMiHle3b=t7Oo3p@jjP@6Sr>N>INuYIxssidIrsa>5B2YE^G$s4HwZ^tsCYX z$J*uMYc)e#TU);X?Xe)q{4LQh-Y>56Ev^UrHax==UCOP3D&2*3Rd!5K)R_v{EBhO>>z zj^!3U_gQ_g{hxnSc~S=Bc{nQ(A$XrS`OynlZQ@Ed9g(Li9Ih*yY2RJ}n03q`fd5?5^=#EC?L zuUL%if9EtWTKR=YnYZ!rTQTuMWYl(x_I#P&9IWpV!eg<{FqIZx_VD$+jOL4?`2YeW z83}%d#@T&DrkGf;VNyaXd%|26S&$weBN1E=Y}yO-ZygEXf5Sy8z=`1+hlRz(FUDMl z@pza16sn2cJUeG}xq^r?)rkRo@A*;(bXR?2<2^y3#@vMeJeH&8JaY>H9!RB3B!rIc zqi`aov#>RFKeh{v3dV_hn?m5)Us-HheBnZcM@!`}=Y&LOo zr;{b5ROw@`(LFnxPq*w98RR2(*Q*%)aT^^qMTvtpRS32I?OQU0+z`XQk2N;ZoUVCx zABL4quT~>OfaeNOLd&`y$i5LbFj;*+Rn_NlD&8t8T3Bv)Xbh1y!nlnlNI(M~P5@Ju ziji@2d=Ux|p?RQz^VyE>30lTxB+|d|0>g828IZ&K0-!-gg0unMwiqrOCIQJwH)3z% zk9pVSqg)sWCQu%(4E zkBj0os^f85RKvUmbQ9#CJ)yj7Vz_M6_U**8G$1UIkzNV83KF?(oTqWa2QsJ)>q&&j z3>JXyN;mExCnwis=DI|uX5YJ)P)kW990Y_~P4ES9utG$4s2CW$F{$z~C?Lkq z7$+SsJ6G92e~Tz$P=Sg{XuZi%)Bdz;>=|g&pIbx1_IqGkiXFH}h2cg#TEPorwNP`2 zhvm#;gm)aeFfYeAM$DI2edgD;E6?TCeYvp1ZO03-h zi=J;gb5>@X6);?a%0NsK96G4A{y1$QkUUpA8N1_aQMJoM^m@Z6leIs9t#YdJXp#74dg8V*QIluiEC#gqOsq8{6Ocs zdo@xR(kl#+yEum7rqr$4B|f5v=@EbgNE0BL0y6SEhEL#tRW&wxLWh2vlCm2zFhLeY zMAj4V2b;XEPL9~8NJGBjG9d=~;0`?jAZp3B-2qgZJY=)7Xl)TnY!l2BJb-Z1iIHjW zBf^w|kvXwAlysPfXCIn#A)*cwnBJj*bSR4SD&zp-fmavb-uR5+NOTK0M6mJojf{ve zAo5qBSLC=nKLXB(B-KYCs*6+&@#rq3WfYh%tq_w`i$;|>)Vx(9`dz?_x+(k1%gYHM zh-t{B8vzFFf#lXaZN^-Ms8Jv_$<^r4N2P>!Zy*D`3=Iwa{rmT43^0GSwy?B(&}jUq z^!6^HkGrMUf-|XkrL+#yY6-M6I663dsjM7(cFOWYdt~$4tmA>|)|Qs90|NQl>8@t3 zQ^&*ab=!7;0vHqj`AUuscM!pPC^%)5VW{`6&KuMW zc8v-7V(8LC-#({pHkpZ8V>{#%-4C@z7_?iKiu@+bDpCjL;{d0+a-Sg}Y9GvRzYEUH z=jTVSeZ7_s9zjP4)V5=cXh!!4NdhDc+PNJW(G&tE@O- zpi#>X87~OCh>Zw)s6-^%ouXpf*tv@NeJ0&?vrMTWbt-3tho8Fwl@j zqrvYRh|1JzB?b}2llC#WU_$8eM45Yo>#jh}%;JdJ;CsrvCqJi4Ek7s<+O~Xu1cQ#r zlobN>!2I(b`JW$jyCRD(tUHDK1hfOOQ-cIOkwhXG6L;6{mA17#FIiDM;P>4&l^Q8? zwTq`gbL{E+>$G$*eEcGH&MIc@9DL@F>xw#qW)XZ1U4uIU) zFA5;tgeBaBH+>S^0FT%Bq6wZvDD%hR27t1a(H^=#G0|yO-WatQ;Y@?=SqJ72{4OzC z{fnca_JOT}96^tfS-dHVe9Qf;09+H&@3!yRV+{Xe2R1;dW-BqH)Sq5SS&a3&+oI)@ z)(A%+y4D(04a9erc(A*V*=|@mXBUOuYmiJ#vJfXED~ zq@d-%o&+V0iQu~fJ7P2y@j2JPxAE2R@1s!#fxA#UZt z(d+EuVrFfvhp7+sw-vrLjUmaf0>`lY@CRh&2+phRAR@jDX0vs1^U(|OF{)5#l=}1G zGANPYp23EugHpGph^K7RL4uVjo(hLz^9H+hYuA?J!l9b9WBre6Ry2x@)ELjqnapkL z47Ps75ou8+HCcRqmo&hZ+csdgJLE_pp+bi1lIgwhx3<-w&wWm>+G~ewyQsXy_aj0S8{_e}Y zDz!J|PY%R!iHh%%RWo&EI$Auj)UNm@buNt9P9Tfgei&XqzT^2*P4)Hl-O`qR z>W=Z303noU!3d~Cts?%GZ+$J9D=H_lqz11EdJyQhjU!udC8(z=l@|nk+2CN<;}!(3 zAX3B|+6@|E7J$<$0K_&Z+(b-j39Tl`8_X#xW|nWoFYw4(j7;wWQX(Ti4i$WkZ0?C4 zQiE1(+DBb``ttiDlXL1EuKE$` z75y7`V&_X*ZOu{s2DcuJIDm;=*yroPRHN zdiM!qbx2-)c_IqqpY8N-^d9m-;~cs{$66wkc__pZin@i literal 23986 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 literal 0 HcmV?d00001 diff --git a/src/genbench/tasks/blm_tasks/alt_atl_type_I_train/__init__.py b/src/genbench/tasks/blm_tasks/alt_atl_type_I_train/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/genbench/tasks/blm_tasks/alt_atl_type_I_train/config.jsonnet b/src/genbench/tasks/blm_tasks/alt_atl_type_I_train/config.jsonnet new file mode 100644 index 0000000..b1583a9 --- /dev/null +++ b/src/genbench/tasks/blm_tasks/alt_atl_type_I_train/config.jsonnet @@ -0,0 +1,51 @@ +{ + name: 'BLM_tasks (alt_atl_type_I_train)', + + description: 'BLM_tasks (alt_atl_type_I_train) aims to measure the detection of rules related to spray/load verb alternation in neural networks. The dataset was automatically generated based on manually collected seeds and predefined patterns, and using overlapping generation rules that combine different syntactic-semantic properties relevant to verb alternations. Compared to the alt_atl task, the training data for this subtask has minimal lexical variation both among the sentences in the input sequence, and between the input and output sentences.', + + keywords: [ + 'rule-like generalization', + 'underlying problem structure', + 'grammatical phenomena', + 'spray/load verb alternation', + 'English', + ], + + authors: [ + 'Paola Merlo', + 'Chunyang Jiang', + 'Giuseppe Samo', + 'Vivi Nastase', + ], + + data_source: { + type: 'manual', + train: 'https://raw.githubusercontent.com/CLCL-Geneva/GenBench/main/BLMs/ALT-ATL_typeI_train.jsonl', + test: 'https://raw.githubusercontent.com/CLCL-Geneva/GenBench/main/BLMs/ALT-ATL_test.jsonl', + }, + + has_validation_set: false, + has_train_set: true, + + task_type: 'multiple_choice', + + field_mapping: { + input: 'input', + target: 'target', + target_options: 'target_options', + }, + + evaluation_metrics: [ + { + hf_id: 'f1', + git_commit_sha: '3a4c40f7397dcd7d9dccf0659616dc6b14072dcb', + best_score: 1.0, + }, + ], + + preparation_strategies: { + finetuning: { + objective: 'maximum_likelihood', + }, + }, +} diff --git a/src/genbench/tasks/blm_tasks/alt_atl_type_I_train/doc.md b/src/genbench/tasks/blm_tasks/alt_atl_type_I_train/doc.md new file mode 100644 index 0000000..e1733c5 --- /dev/null +++ b/src/genbench/tasks/blm_tasks/alt_atl_type_I_train/doc.md @@ -0,0 +1,61 @@ +# BLM_tasks (alt_atl_type_I_train) + +## Abstract +This dataset defines a BLM task for predicate-argument structure, with a structured dataset focused on the spray/load verb alternations in English. The input sequence for each problem instance consists of 7 sentences that include one alternant from the spray-load alternation and the target sentence is the other alternant, to be chosen among a minimally contrastive and adversarial set of answers. The dataset aims to facilitate investigations into how verb information is encoded in sentence embeddings and how well models can generalize the complex properties of argument structures. + +The sentence structure is constructed to illustrate several underlying generative rules that describe different aspects of the linguistic phenomenon. These rules need to be identified and disentangled to correctly generalize and thus identify the correct answer. The sequence structure was designed in a similar manner to visual IQ tests, and follows a generative process of overlapping rules. The output is multiple choice. The correct sentence should be the correct continuation of the input sequence w.r.t. the dataset's generation rules. + + +## Examples +Input: + +| | | +|---|-------------------------------------------------| +| 1 | The girl sprayed the wall with paint. | +| 2 | Paint was sprayed by the girl | +| 3 | Paint was sprayed onto the wall by the girl | +| 4 | Paint was sprayed onto the wall | +| 5 | The wall was sprayed by the girl | +| 6 | The wall was sprayed with the paint by the girl | +| 7 | The wall was sprayed with paint | +| 8 | ??? | + +Choices: + +| | | +|-------------------------------------------|----------| +| The girl sprayed paint onto the wall | Correct | +| The girl was sprayed paint onto the wall | AgentAct | +| The girl sprayed paint the wall | Alt1 | +| The girl sprayed with paint onto the wall | Alt2 | +| The girl sprayed paint for the room | NoEmb | +| The girl sprayed paint under the wall | LexPrep | +| Paint sprayed the girl onto the wall | SSM | +| The wall sprayed the girl with paint | SSM | +| Paint sprayed the wall with the girl | AASSM | + +## Usage +The task is formatted as multiple choice. The input consists of a sequence of 7 sentences, separated by the end of sentence marker (). The options are provided as a list of sentences, and the index of the correct one is specified as the target: + +{ + "input": "The editors smudge the paper with grease. Sarcasm was smudged by teachers. The title was plastered on the vinyls by the band. The pad was rubbed on the screen. The box was loaded by the buyer. The site was plastered with logos by the quartet. The earth was seeded with carbon.", + "target": 4, + "target_options": ["Moses strung these lights under the fence.", "The author strews irony the book.", "Salt sprinkle the nuns over the beans.", "Teachers were smudged sarcasm on the canvas.", "He wraps it around his neck.", "Dirt spatters you whoever.", "The inside squirt you with a tiny bit of oil.", "Alex just sticks with the food in a box.", "Flanagan strews the humor of the movie."] +} + +## Data Source +The dataset was automatically generated based on manually selected seeds and predefined sentence templates. The dataset contains a single verb alternation. Compared to the 'alt_atl' task, the training data for this subtask has minimal lexical variation both among the sentences in the input sequence, and between the input and output sentences. + +## Limitations and Bias +The sentences and the sequence of sentences for each dataset have a prescribed structure. + +## GenBench Eval card + +- *Generalisation type* The generalisation type evaluated is 'compositional' because the dataset is generated with overlapping (and compositional) rules, that a system should detect +- *Motivation* The motivation is both 'intrinsic' and 'cognitive': 'cognitive' because the dataset would test the capabilities of the system to detect the kind of information humans perceive in the provided data; 'intrinsic' because if a system can learn to detect specific linguistic information, we could adjust the model to detect different types of information. +- *Shift source* the data is automatically generated from manually collected seeds, and by applying prespecified (but naturalistic) templates. +- *Shift locus* is 'pretrained-trained' because we imagine a system would use representations of the data from a pretrained model to address the task of identifying specific linguistic phenomena. +- *Shift type* There is a difference in the lexical distribution in the training data and the test -- there is minimal variation in the lexical material in the training instances, whereas the test set has maximal lexical variation. + + +![GenBench Eval Card](GenBench_eval_card.png) diff --git a/src/genbench/tasks/blm_tasks/alt_atl_type_I_train/task.py b/src/genbench/tasks/blm_tasks/alt_atl_type_I_train/task.py new file mode 100644 index 0000000..10f74bb --- /dev/null +++ b/src/genbench/tasks/blm_tasks/alt_atl_type_I_train/task.py @@ -0,0 +1,119 @@ +from collections import OrderedDict +from typing import Any, Dict, List, Mapping + +import evaluate +from datasets import Dataset + +from genbench import Task +from genbench.api import EvaluationResult, TaskType +from genbench.utils.logging import get_logger + + +logger = get_logger(__name__) + + +def make_list(N, ind_1): + binary_list = [0] * N + binary_list[ind_1] = 1 + return binary_list + + +class BlmTasksAltAtl(Task): + def evaluate_predictions( + self, + *, + predictions: List[Mapping[str, Any]] = None, + gold: Dataset = None, + ) -> EvaluationResult: + result = OrderedDict() + for metric_config in self.config.evaluation_metrics: + hf_id = metric_config.hf_id + if isinstance(hf_id, str): + hf_id = [hf_id] + + metric = evaluate.load(*hf_id, revision=metric_config.git_commit_sha) + + refs_lst = [g["target"] for g in gold] + preds_lst = [pred["target"] for pred in predictions] + + ref_type = type(refs_lst[0]) + pred_type = type(preds_lst[0]) + if pred_type != ref_type: + if self.config.task_type != TaskType.MULTIPLE_CHOICE: + raise ValueError( + f"Predictions and references have different types: preds: {pred_type} and refs: {ref_type}. " + ) + # Convert predictions to the same type as the references + if pred_type == str and ref_type == int: + logger.warning("Predictions are strings, but references are ints. Converting predictions to ints.") + converted_preds = [] + for pred, ref in zip(preds_lst, gold): + assert "target_options" in ref + converted_preds.append(ref["target_options"].index(pred)) + preds_lst = converted_preds + elif pred_type == int and ref_type == str: + logger.warning("Predictions are ints, but references are strings. Converting references to ints.") + converted_refs = [] + for pred, ref in zip(preds_lst, gold): + assert "target_options" in ref + converted_refs.append(ref["target_options"].index(ref["target"])) + refs_lst = converted_refs + else: + if self.config.task_type == TaskType.MULTIPLE_CHOICE and pred_type != int: + # Convert both predictions and references to int + logger.warning( + "Predictions and references have the same type, but it is not int. Converting both to int." + ) + + N = len(ref["target_options"]) + + converted_preds = [] + converted_refs = [] + for pred, ref in zip(preds_lst, gold): + assert "target_options" in ref + # converted_preds.append(ref["target_options"].index(pred)) + # converted_refs.append(ref["target_options"].index(ref["target"])) + + converted_preds.extend(make_list(N, ref["target_options"].index(pred))) + converted_refs.append(make_list(N, ref["target_options"].index(ref["target"]))) + + preds_lst = converted_preds + refs_lst = converted_refs + + extra_kwargs = metric_config.compute_extra_kwargs or {} + output: dict = metric.compute(predictions=preds_lst, references=refs_lst, **extra_kwargs) + + if output is None: + raise ValueError( + f"Metric {metric_config.hf_id} returned None. " f"Please check the metric implementation." + ) + + # Update output keys to include the metric id + metric_id = "_".join(hf_id) + output = {f"hf_{metric_id}__{k}": v for k, v in output.items()} + + result.update(output) + + return result + + def format_example(self, example: Dict[str, Any]) -> Dict[str, Any]: + """Perform preprocessing/formatting on an example-level. + + By default, this method does nothing more than mapping original data source + fields to the expected fields. + + `example` directly comes from the data source (e.g. downloaded HF dataset), + and it may contain fields such as `question` or `answer`. This method should + prepare the example used in the task. i.e. should create fields `input`, + `target`, `target_scores`, or `target_labels` depending on the task type. + + Args: + example: A dictionary containing key-value pairs for an example from the source dataset. + + + Returns: + A dictionary containing key-value pairs for the preprocessed/formatted example. + The dictionary should contain keys `input`, `target`, `target_scores`, or `target_label` + depending on the task type. + """ + return {"input": example["input"], "target": example["target"], "target_options": example["target_options"]} diff --git a/src/genbench/tasks/blm_tasks/atl_alt/GenBench_eval_card.png b/src/genbench/tasks/blm_tasks/atl_alt/GenBench_eval_card.png index 320897e01223369f52a75bc29de2f943161cbf89..0e72f77255e473bf8f038222f31da605932bd645 100644 GIT binary patch literal 24029 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 z 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 literal 23986 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 literal 0 HcmV?d00001 diff --git a/src/genbench/tasks/blm_tasks/atl_alt_type_I_train/__init__.py b/src/genbench/tasks/blm_tasks/atl_alt_type_I_train/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/genbench/tasks/blm_tasks/atl_alt_type_I_train/config.jsonnet b/src/genbench/tasks/blm_tasks/atl_alt_type_I_train/config.jsonnet new file mode 100644 index 0000000..1233698 --- /dev/null +++ b/src/genbench/tasks/blm_tasks/atl_alt_type_I_train/config.jsonnet @@ -0,0 +1,51 @@ +{ + name: 'BLM_tasks (atl_alt_type_I_train)', + + description: 'BLM_tasks (atl_alt_type_I_train) aims to measure the detection of rules related to spray/load verb alternations in neural networks. The dataset was automatically generated based on manually collected seeds and predefined patterns, and using overlapping generation rules that combine different syntactic-semantic properties relevant to verb alternations. Compared to the atl_alt task, the training data for this subtask has minimal lexical variation both among the sentences in the input sequence, and between the input and output sentences. ', + + keywords: [ + 'rule-like generalization', + 'underlying problem structure', + 'grammatical phenomena', + 'spray/load verb alternation', + 'English', + ], + + authors: [ + 'Paola Merlo', + 'Chunyang Jiang', + 'Giuseppe Samo', + 'Vivi Nastase', + ], + + data_source: { + type: 'manual', + train: 'https://raw.githubusercontent.com/CLCL-Geneva/GenBench/main/BLMs/ATL-ALT_typeI_train.jsonl', + test: 'https://raw.githubusercontent.com/CLCL-Geneva/GenBench/main/BLMs/ATL-ALT_test.jsonl', + }, + + has_validation_set: false, + has_train_set: true, + + task_type: 'multiple_choice', + + field_mapping: { + input: 'input', + target: 'target', + target_options: 'target_options', + }, + + evaluation_metrics: [ + { + hf_id: 'f1', + git_commit_sha: '3a4c40f7397dcd7d9dccf0659616dc6b14072dcb', + best_score: 1.0, + }, + ], + + preparation_strategies: { + finetuning: { + objective: 'maximum_likelihood', + }, + }, +} diff --git a/src/genbench/tasks/blm_tasks/atl_alt_type_I_train/doc.md b/src/genbench/tasks/blm_tasks/atl_alt_type_I_train/doc.md new file mode 100644 index 0000000..c7e5b06 --- /dev/null +++ b/src/genbench/tasks/blm_tasks/atl_alt_type_I_train/doc.md @@ -0,0 +1,59 @@ +# BLM_tasks (atl_alt_type_I_train) + +## Abstract +This dataset defines a BLM task for predicate-argument structure, with a structured dataset focused on the spray/load verb alternations in English. The input sequence for each problem instance consists of 7 sentences that include one alternant from the spray-load alternation and the target sentence is the other alternant, to be chosen among a minimally contrastive and adversarial set of answers. The dataset aims to facilitate investigations into how verb information is encoded in sentence embeddings and how well models can generalize the complex properties of argument structures. + +The sentence structure is constructed to illustrate several underlying generative rules that describe different aspects of the linguistic phenomenon. These rules need to be identified and disentangled to correctly generalize and thus identify the correct answer. The sequence structure was designed in a similar manner to visual IQ tests, and follows a generative process of overlapping rules. The output is multiple choice. The correct sentence should be the correct continuation of the input sequence w.r.t. the dataset's generation rules. + + +## Examples + +Input: + +|:--:|:-----------------------------------------------| +| 1 | The girl sprayed the wall with paint. | +| 2 | Paint was sprayed by the girl | +| 3 | Paint was sprayed onto the wall by the girl | +| 4 | Paint was sprayed onto the wall | +| 5 | The wall was sprayed by the girl | +| 6 | The wall was sprayed with the paint by the girl | +| 7 | The wall was sprayed with paint | +| 8 | ??? | + +Choices: + +|:------------------------------------------|:---------| +| The girl sprayed paint onto the wall | Correct | +| The girl was sprayed paint onto the wall | AgentAct | +| The girl sprayed paint the wall | Alt1 | +| The girl sprayed with paint onto the wall | Alt2 | +| The girl sprayed paint for the room | NoEmb | +| The girl sprayed paint under the wall | LexPrep | +| Paint sprayed the girl onto the wall | SSM | +| The wall sprayed the girl with paint | SSM | +| Paint sprayed the wall with the girl | AASSM | + +## Usage +The task is formatted as multiple choice. The input consists of a sequence of 7 sentences, separated by the end of sentence marker (). The options are provided as a list of sentences, and the index of the correct one is specified as the target: + +{ + "input": "The buyer can load the tools in the box. The crystals were scattered by the wizard. The letters were hung on the ceiling by the artist. Plenty of historical backstory was strewed in the figures. Poles were sewed by them. The sink was swashed with the chemicals by the volunteers. The writing marks were rubbed with the eraser.", + "target": 2, + "target_options": ["The other place was sticked the center with the OEM drive.", "Whoever spatters the windshield the poison.", "I will hang the ceiling with the picture.", "The orb scatters earth under the dragons.", "Drizzle over the cream with brandy.", "Blotches of ink smudge them on the paper.", "The vegetables baste vinegar the farmers.", "The pot squirt the miners with the glue.", "The buyer can load the suitcase for the wedding."]} + +## Data Source +The dataset was automatically generated based on manually selected seeds and predefined sentence templates. The dataset contains a single verb alternation. Compared to the 'atl_alt' task, the training data for this subtask has minimal lexical variation both among the sentences in the input sequence, and between the input and output sentences. + +## Limitations and Bias +The sentences and the sequence of sentences for each dataset have a prescribed structure. + +## GenBench Eval card + +- *Generalisation type* The generalisation type evaluated is 'compositional' because the dataset is generated with overlapping (and compositional) rules, that a system should detect +- *Motivation* The motivation is both 'intrinsic' and 'cognitive': 'cognitive' because the dataset would test the capabilities of the system to detect the kind of information humans perceive in the provided data; 'intrinsic' because if a system can learn to detect specific linguistic information, we could adjust the model to detect different types of information. +- *Shift source* the data is automatically generated from manually collected seeds, and by applying prespecified (but naturalistic) templates. +- *Shift locus* is 'pretrained-trained' because we imagine a system would use representations of the data from a pretrained model to address the task of identifying specific linguistic phenomena. +- *Shift type* There is a difference in the lexical distribution in the training data and the test -- there is minimal variation in the lexical material in the training instances, whereas the test set has maximal lexical variation. + + +![GenBench Eval Card](GenBench_eval_card.png) diff --git a/src/genbench/tasks/blm_tasks/atl_alt_type_I_train/task.py b/src/genbench/tasks/blm_tasks/atl_alt_type_I_train/task.py new file mode 100644 index 0000000..a5c5428 --- /dev/null +++ b/src/genbench/tasks/blm_tasks/atl_alt_type_I_train/task.py @@ -0,0 +1,119 @@ +from collections import OrderedDict +from typing import Any, Dict, List, Mapping + +import evaluate +from datasets import Dataset + +from genbench import Task +from genbench.api import EvaluationResult, TaskType +from genbench.utils.logging import get_logger + + +logger = get_logger(__name__) + + +def make_list(N, ind_1): + binary_list = [0] * N + binary_list[ind_1] = 1 + return binary_list + + +class BlmTasksAtlAlt(Task): + def evaluate_predictions( + self, + *, + predictions: List[Mapping[str, Any]] = None, + gold: Dataset = None, + ) -> EvaluationResult: + result = OrderedDict() + for metric_config in self.config.evaluation_metrics: + hf_id = metric_config.hf_id + if isinstance(hf_id, str): + hf_id = [hf_id] + + metric = evaluate.load(*hf_id, revision=metric_config.git_commit_sha) + + refs_lst = [g["target"] for g in gold] + preds_lst = [pred["target"] for pred in predictions] + + ref_type = type(refs_lst[0]) + pred_type = type(preds_lst[0]) + if pred_type != ref_type: + if self.config.task_type != TaskType.MULTIPLE_CHOICE: + raise ValueError( + f"Predictions and references have different types: preds: {pred_type} and refs: {ref_type}. " + ) + # Convert predictions to the same type as the references + if pred_type == str and ref_type == int: + logger.warning("Predictions are strings, but references are ints. Converting predictions to ints.") + converted_preds = [] + for pred, ref in zip(preds_lst, gold): + assert "target_options" in ref + converted_preds.append(ref["target_options"].index(pred)) + preds_lst = converted_preds + elif pred_type == int and ref_type == str: + logger.warning("Predictions are ints, but references are strings. Converting references to ints.") + converted_refs = [] + for pred, ref in zip(preds_lst, gold): + assert "target_options" in ref + converted_refs.append(ref["target_options"].index(ref["target"])) + refs_lst = converted_refs + else: + if self.config.task_type == TaskType.MULTIPLE_CHOICE and pred_type != int: + # Convert both predictions and references to int + logger.warning( + "Predictions and references have the same type, but it is not int. Converting both to int." + ) + + N = len(ref["target_options"]) + + converted_preds = [] + converted_refs = [] + for pred, ref in zip(preds_lst, gold): + assert "target_options" in ref + # converted_preds.append(ref["target_options"].index(pred)) + # converted_refs.append(ref["target_options"].index(ref["target"])) + + converted_preds.extend(make_list(N, ref["target_options"].index(pred))) + converted_refs.append(make_list(N, ref["target_options"].index(ref["target"]))) + + preds_lst = converted_preds + refs_lst = converted_refs + + extra_kwargs = metric_config.compute_extra_kwargs or {} + output: dict = metric.compute(predictions=preds_lst, references=refs_lst, **extra_kwargs) + + if output is None: + raise ValueError( + f"Metric {metric_config.hf_id} returned None. " f"Please check the metric implementation." + ) + + # Update output keys to include the metric id + metric_id = "_".join(hf_id) + output = {f"hf_{metric_id}__{k}": v for k, v in output.items()} + + result.update(output) + + return result + + def format_example(self, example: Dict[str, Any]) -> Dict[str, Any]: + """Perform preprocessing/formatting on an example-level. + + By default, this method does nothing more than mapping original data source + fields to the expected fields. + + `example` directly comes from the data source (e.g. downloaded HF dataset), + and it may contain fields such as `question` or `answer`. This method should + prepare the example used in the task. i.e. should create fields `input`, + `target`, `target_scores`, or `target_labels` depending on the task type. + + Args: + example: A dictionary containing key-value pairs for an example from the source dataset. + + + Returns: + A dictionary containing key-value pairs for the preprocessed/formatted example. + The dictionary should contain keys `input`, `target`, `target_scores`, or `target_label` + depending on the task type. + """ + return {"input": example["input"], "target": example["target"], "target_options": example["target_options"]} diff --git a/src/genbench/tasks/blm_tasks/config.jsonnet b/src/genbench/tasks/blm_tasks/config.jsonnet index 05b1726..56b2cc5 100644 --- a/src/genbench/tasks/blm_tasks/config.jsonnet +++ b/src/genbench/tasks/blm_tasks/config.jsonnet @@ -19,8 +19,11 @@ ], subtasks_order: [ + 'agr_f_type_I_train', 'agr_f', + 'atl_alt_type_I_train', 'atl_alt', + 'alt_atl_type_I_train', 'alt_atl', ], } diff --git a/src/genbench/tasks/blm_tasks/doc.md b/src/genbench/tasks/blm_tasks/doc.md index 9c5f0fc..61d2150 100644 --- a/src/genbench/tasks/blm_tasks/doc.md +++ b/src/genbench/tasks/blm_tasks/doc.md @@ -4,7 +4,7 @@ When exposed to tests of analytic intelligence, for example the visual RAVEN IQ The tasks we propose translate this IQ task into language. Each subtask pertains to a grammatical or linguistic phenomenon, and the corresponding dataset consists of a sequence of sentences. The sentence structure is constructed to illustrate several underlying generative rules that describe different aspects of the linguistic phenomenon. These rules need to be identified and disentangled to correctly generalize and thus identify the correct answer. The sequence structure was designed in a similar manner to visual IQ tests, and follows a generative process of overlapping rules. The output is multiple choice. The correct sentence should be the correct continuation of the input sequence w.r.t. the dataset's generation rules. ## Examples -We have three subtasks: +We have three subtasks, each with a variation (so more accurately, six subtasks): * `agrF`: subject-verb agreement in French: @@ -32,6 +32,9 @@ Choices: | The vases with the flowers from the gardens leak. | WN2 | |-----------------------------------------------------------|---------| + +There are two variations for this task -- one where the training data has minimal lexical variation in the input and output (agr_f_type_I_train), and one where there is maximal lexical variation among the sentences in the input, and between the input and the candidate answers. + * `ALT-ATL`: spray/load verb alternation in English (from Agent - Locative - Theme to Agent - Theme - Locative) Input: @@ -62,8 +65,13 @@ Choices: | Paint sprayed the wall with the girl | AASSM | +As for the subject-verb agreement dataset, there are two variations for this task -- one where the training data has minimal lexical variation in the input and output (ALT-ATL_type_I_train), and one where there is maximal lexical variation among the sentences in the input, and between the input and the candidate answers. + * `ATL-ALT`: verb causal alternation in English (from Agent - Theme - Locative to Agent - Locative - Theme) +Again, there are two variations for this task -- one where the training data has minimal lexical variation in the input and output (ATL-ALT_type_I_train), and one where there is maximal lexical variation among the sentences in the input, and between the input and the candidate answers. + + ## Data Source All datasets are automatically generated based on manually selected seeds and predefined (syntactic) templates. @@ -80,4 +88,4 @@ The sentences and the sequence of sentences for each dataset have a prescribed s [Blackbird's language matrices (BLMs): a new benchmark to investigate disentangled generalisation in neural networks](https://arxiv.org/abs/2205.10866) describes the project, and the first BLM dataset generated within this paradigm. -[Blackbird language matrices (BLM), a new task for rule-like generalization in neural networks: Motivations and Formal Specifications](https://arxiv.org/abs/2306.11444) provides details about the motivations and formal specifications of BLM's. \ No newline at end of file +[Blackbird language matrices (BLM), a new task for rule-like generalization in neural networks: Motivations and Formal Specifications](https://arxiv.org/abs/2306.11444) provides details about the motivations and formal specifications of BLM's.