def METHOD_NAME(self) -> List[Instance]:
    set_fixed_random_state_for_dataset(self.output_path, self.dataset)
    data_path = Path(self.output_path) / "data" / self.dataset
    data_path.parent.mkdir(parents=True, exist_ok=True)
    ensure_file_downloaded(
        source_url=f"http://pages.cs.wisc.edu/~anhai/data1/deepmatcher_data/"
        f"{self.em_datasets_paths[self.dataset]}/"
        f"{self.dataset.lower()}_exp_data.zip",
        target_path=str(data_path),
        unpack=True,
        unpack_type="unzip",
    )
    # Read in tableA and tableB
    tableA, tableB = self.read_tables(data_path)
    # Columns for row serialization; do not add id column
    column_mapA = {f"{c}_A": c for c in tableA.columns if c != "id"}
    column_mapB = {f"{c}_B": c for c in tableB.columns if c != "id"}
    # Read in tables and matches
    labeled_examples = {
        "train": self.read_blocked_pairs(data_path, TRAIN_SPLIT, tableA, tableB),
        "valid": self.read_blocked_pairs(data_path, VALID_SPLIT, tableA, tableB),
        "test": self.read_blocked_pairs(data_path, TEST_SPLIT, tableA, tableB),
    }
    # Read all the instances
    instances: List[Instance] = []
    for split, example_df in labeled_examples.items():
        hlog(f"Processing {split} with {example_df.shape[0]} rows")
        for _, pair in example_df.iterrows():
            resA: str = self.serialize_row(pair, column_mapA)
            resB: str = self.serialize_row(pair, column_mapB)
            input: str = f"Product A is {resA}. Product B is {resB}. Are A and B the same?"
            label: str = "Yes" if pair["label"] else "No"
            instance = Instance(
                input=Input(text=input),
                references=[Reference(Output(text=label), tags=[CORRECT_TAG])],
                split=split,
            )
            instances.append(instance)
    return instances