Download create_data.py from DiLi-Lab/ScanDL2: direct link, hf CLI and curl.
- Browser
- Download file 5.27 kB
-
https://huggingface.co/DiLi-Lab/ScanDL2/resolve/main/create_data.py
- Command line
-
hf download hf://DiLi-Lab/ScanDL2/create_data.py
-
curl -L -o create_data.py https://huggingface.co/DiLi-Lab/ScanDL2/resolve/main/create_data.py
5.27 kB
| """ | |
| Create the data for training ScanDL on all data. | |
| """ | |
| import argparse | |
| import os | |
| import json | |
| import numpy as np | |
| import pandas as pd | |
| import sys | |
| from ScanDL2.scandl_module.scripts.sp_load_celer_zuco import ( | |
| load_celer, | |
| load_celer_speakers, | |
| process_celer, | |
| ) | |
| from ScanDL2.scandl_module.scripts.sp_load_celer_zuco import ( | |
| load_zuco, | |
| process_zuco, | |
| get_kfold, | |
| get_kfold_indices_combined, | |
| ) | |
| from ScanDL2.scandl_module.scripts.sp_load_celer_zuco import load_emtec, process_emtec | |
| from ScanDL2.scandl_module.scripts.sp_load_celer_zuco import load_bsc, process_bsc | |
| from ScanDL2.scandl_module.scripts.sp_load_celer_zuco import flatten_data, unflatten_data | |
| from transformers import set_seed, BertTokenizerFast | |
| sys.path.append("./") | |
| sys.path.append("../") | |
| def create_argparser() -> argparse.ArgumentParser: | |
| parser = argparse.ArgumentParser() | |
| parser.add_argument( | |
| "--folder-name", | |
| type=str, | |
| default="processed_data_all", | |
| help="Name of the folder to save the processed data in.", | |
| ) | |
| parser.add_argument( | |
| "--max-fix-dur", | |
| type=int, | |
| help="max fixatino duration value. greater fixation durations are replaced with this value.", | |
| default=999, | |
| ) | |
| parser.add_argument( | |
| "--data", | |
| type=str, | |
| choices=["celer", "emtec", "bsc"], | |
| required=True, | |
| ) | |
| defaults = dict() | |
| defaults.update(load_defaults_config(parser.parse_args())) | |
| add_dict_to_argparser(parser, defaults) | |
| return parser | |
| def load_defaults_config(args): | |
| """ | |
| Load defaults for training args. | |
| """ | |
| if args.data == "emtec": | |
| config_name = "config_emtec.json" | |
| elif args.data == "bsc": | |
| config_name = "config_bsc.json" | |
| else: | |
| config_name = "config.json" | |
| with open(f"diffusion_only/scandl_diff_dur/{config_name}", "r") as f: | |
| return json.load(f) | |
| def add_dict_to_argparser(parser, default_dict): | |
| for k, v in default_dict.items(): | |
| v_type = type(v) | |
| if v is None: | |
| v_type = str | |
| elif isinstance(v, bool): | |
| v_type = str2bool | |
| parser.add_argument(f"--{k}", default=v, type=v_type) | |
| def str2bool(v): | |
| """ | |
| https://stackoverflow.com/questions/15008758/parsing-boolean-values-with-argparse | |
| """ | |
| if isinstance(v, bool): | |
| return v | |
| if v.lower() in ("yes", "true", "t", "y", "1"): | |
| return True | |
| elif v.lower() in ("no", "false", "f", "n", "0"): | |
| return False | |
| else: | |
| raise argparse.ArgumentTypeError("boolean value expected") | |
| def main(): | |
| base_folder_name = "scandl2_pkg" | |
| print("Loading argument parser...") | |
| args = create_argparser().parse_args() | |
| set_seed(args.seed) | |
| if args.data == "celer": | |
| tokenizer = BertTokenizerFast.from_pretrained(args.config_name) | |
| data_path = args.folder_name + "_celer" | |
| if not os.path.exists(os.path.join(base_folder_name, data_path)): | |
| os.makedirs(os.path.join(base_folder_name, data_path)) | |
| # load Celer data | |
| word_info_df, eyemovement_df = load_celer() | |
| reader_list = load_celer_speakers(only_native_speakers=args.celer_only_L1) | |
| sn_list = np.unique( | |
| word_info_df[word_info_df["list"].isin(reader_list)].sentenceid.values | |
| ).tolist() | |
| data, splitting_IDs_dict = process_celer( | |
| sn_list=sn_list, | |
| reader_list=reader_list, | |
| word_info_df=word_info_df, | |
| eyemovement_df=eyemovement_df, | |
| tokenizer=tokenizer, | |
| args=args, | |
| inference="cv", | |
| max_fix_dur=args.max_fix_dur, | |
| ) | |
| flattened_data = flatten_data(data) | |
| flattened_data = np.array(flattened_data, dtype=object).tolist() | |
| train_data = unflatten_data(flattened_data=flattened_data, split="train") | |
| train_data.save_to_disk(os.path.join(base_folder_name, data_path)) | |
| elif args.data == "bsc": | |
| raise NotImplementedError("BSC data not implemented yet.") | |
| elif args.data == "emtec": | |
| tokenizer = BertTokenizerFast.from_pretrained(args.config_name) | |
| data_path = args.folder_name + "_emtec" | |
| if not os.path.exists(os.path.join(base_folder_name, data_path)): | |
| os.makedirs(os.path.join(base_folder_name, data_path)) | |
| # load EMTeC data | |
| print("Loading EMTeC data...") | |
| fixations_df, stimuli_df = load_emtec() | |
| data, splitting_IDs_dict = process_emtec( | |
| fixations_df=fixations_df, | |
| stimuli_df=stimuli_df, | |
| tokenizer=tokenizer, | |
| args=args, | |
| inference="cv", | |
| max_fix_dur=args.max_fix_dur, | |
| ) | |
| flattened_data = flatten_data(data) | |
| flattened_data = np.array(flattened_data, dtype=object).tolist() | |
| train_data = unflatten_data(flattened_data=flattened_data, split="train") | |
| train_data.save_to_disk(os.path.join(base_folder_name, data_path)) | |
| else: | |
| raise NotImplementedError("Data not implemented yet.") | |
| if __name__ == "__main__": | |
| raise SystemExit(main()) | |