CoolFace
Apppublic

chendl/compositional_test

sourceHugging Faceupdated 3y agoView on Hugging Face
1likes
download_glue_data.py158 linesDownload Raw Back to utils
1""" Script for downloading all GLUE data.2Original source: https://gist.github.com/W4ngatang/60c2bdb54d156a41194446737ce03e2e3 4Note: for legal reasons, we are unable to host MRPC.5You can either use the version hosted by the SentEval team, which is already tokenized,6or you can download the original data from (https://download.microsoft.com/download/D/4/6/D46FF87A-F6B9-4252-AA8B-3604ED519838/MSRParaphraseCorpus.msi) and extract the data from it manually.7For Windows users, you can run the .msi file. For Mac and Linux users, consider an external library such as 'cabextract' (see below for an example).8You should then rename and place specific files in a folder (see below for an example).9 10mkdir MRPC11cabextract MSRParaphraseCorpus.msi -d MRPC12cat MRPC/_2DEC3DBE877E4DB192D17C0256E90F1D | tr -d $'\r' > MRPC/msr_paraphrase_train.txt13cat MRPC/_D7B391F9EAFF4B1B8BCE8F21B20B1B61 | tr -d $'\r' > MRPC/msr_paraphrase_test.txt14rm MRPC/_*15rm MSRParaphraseCorpus.msi16 171/30/19: It looks like SentEval is no longer hosting their extracted and tokenized MRPC data, so you'll need to download the data from the original source for now.182/11/19: It looks like SentEval actually *is* hosting the extracted data. Hooray!19"""20 21import argparse22import os23import sys24import urllib.request25import zipfile26 27 28TASKS = ["CoLA", "SST", "MRPC", "QQP", "STS", "MNLI", "SNLI", "QNLI", "RTE", "WNLI", "diagnostic"]29TASK2PATH = {30    "CoLA": "https://firebasestorage.googleapis.com/v0/b/mtl-sentence-representations.appspot.com/o/data%2FCoLA.zip?alt=media&token=46d5e637-3411-4188-bc44-5809b5bfb5f4",31    "SST": "https://firebasestorage.googleapis.com/v0/b/mtl-sentence-representations.appspot.com/o/data%2FSST-2.zip?alt=media&token=aabc5f6b-e466-44a2-b9b4-cf6337f84ac8",32    "MRPC": "https://firebasestorage.googleapis.com/v0/b/mtl-sentence-representations.appspot.com/o/data%2Fmrpc_dev_ids.tsv?alt=media&token=ec5c0836-31d5-48f4-b431-7480817f1adc",33    "QQP": "https://firebasestorage.googleapis.com/v0/b/mtl-sentence-representations.appspot.com/o/data%2FQQP.zip?alt=media&token=700c6acf-160d-4d89-81d1-de4191d02cb5",34    "STS": "https://firebasestorage.googleapis.com/v0/b/mtl-sentence-representations.appspot.com/o/data%2FSTS-B.zip?alt=media&token=bddb94a7-8706-4e0d-a694-1109e12273b5",35    "MNLI": "https://firebasestorage.googleapis.com/v0/b/mtl-sentence-representations.appspot.com/o/data%2FMNLI.zip?alt=media&token=50329ea1-e339-40e2-809c-10c40afff3ce",36    "SNLI": "https://firebasestorage.googleapis.com/v0/b/mtl-sentence-representations.appspot.com/o/data%2FSNLI.zip?alt=media&token=4afcfbb2-ff0c-4b2d-a09a-dbf07926f4df",37    "QNLI": "https://firebasestorage.googleapis.com/v0/b/mtl-sentence-representations.appspot.com/o/data%2FQNLIv2.zip?alt=media&token=6fdcf570-0fc5-4631-8456-9505272d1601",38    "RTE": "https://firebasestorage.googleapis.com/v0/b/mtl-sentence-representations.appspot.com/o/data%2FRTE.zip?alt=media&token=5efa7e85-a0bb-4f19-8ea2-9e1840f077fb",39    "WNLI": "https://firebasestorage.googleapis.com/v0/b/mtl-sentence-representations.appspot.com/o/data%2FWNLI.zip?alt=media&token=068ad0a0-ded7-4bd7-99a5-5e00222e0faf",40    "diagnostic": "https://storage.googleapis.com/mtl-sentence-representations.appspot.com/tsvsWithoutLabels%2FAX.tsv?GoogleAccessId=firebase-adminsdk-0khhl@mtl-sentence-representations.iam.gserviceaccount.com&Expires=2498860800&Signature=DuQ2CSPt2Yfre0C%2BiISrVYrIFaZH1Lc7hBVZDD4ZyR7fZYOMNOUGpi8QxBmTNOrNPjR3z1cggo7WXFfrgECP6FBJSsURv8Ybrue8Ypt%2FTPxbuJ0Xc2FhDi%2BarnecCBFO77RSbfuz%2Bs95hRrYhTnByqu3U%2FYZPaj3tZt5QdfpH2IUROY8LiBXoXS46LE%2FgOQc%2FKN%2BA9SoscRDYsnxHfG0IjXGwHN%2Bf88q6hOmAxeNPx6moDulUF6XMUAaXCSFU%2BnRO2RDL9CapWxj%2BDl7syNyHhB7987hZ80B%2FwFkQ3MEs8auvt5XW1%2Bd4aCU7ytgM69r8JDCwibfhZxpaa4gd50QXQ%3D%3D",41}42 43MRPC_TRAIN = "https://dl.fbaipublicfiles.com/senteval/senteval_data/msr_paraphrase_train.txt"44MRPC_TEST = "https://dl.fbaipublicfiles.com/senteval/senteval_data/msr_paraphrase_test.txt"45 46 47def download_and_extract(task, data_dir):48    print(f"Downloading and extracting {task}...")49    data_file = f"{task}.zip"50    urllib.request.urlretrieve(TASK2PATH[task], data_file)51    with zipfile.ZipFile(data_file) as zip_ref:52        zip_ref.extractall(data_dir)53    os.remove(data_file)54    print("\tCompleted!")55 56 57def format_mrpc(data_dir, path_to_data):58    print("Processing MRPC...")59    mrpc_dir = os.path.join(data_dir, "MRPC")60    if not os.path.isdir(mrpc_dir):61        os.mkdir(mrpc_dir)62    if path_to_data:63        mrpc_train_file = os.path.join(path_to_data, "msr_paraphrase_train.txt")64        mrpc_test_file = os.path.join(path_to_data, "msr_paraphrase_test.txt")65    else:66        print("Local MRPC data not specified, downloading data from %s" % MRPC_TRAIN)67        mrpc_train_file = os.path.join(mrpc_dir, "msr_paraphrase_train.txt")68        mrpc_test_file = os.path.join(mrpc_dir, "msr_paraphrase_test.txt")69        urllib.request.urlretrieve(MRPC_TRAIN, mrpc_train_file)70        urllib.request.urlretrieve(MRPC_TEST, mrpc_test_file)71    if not os.path.isfile(mrpc_train_file):72        raise ValueError(f"Train data not found at {mrpc_train_file}")73    if not os.path.isfile(mrpc_test_file):74        raise ValueError(f"Test data not found at {mrpc_test_file}")75    urllib.request.urlretrieve(TASK2PATH["MRPC"], os.path.join(mrpc_dir, "dev_ids.tsv"))76 77    dev_ids = []78    with open(os.path.join(mrpc_dir, "dev_ids.tsv"), encoding="utf8") as ids_fh:79        for row in ids_fh:80            dev_ids.append(row.strip().split("\t"))81 82    with open(mrpc_train_file, encoding="utf8") as data_fh, open(83        os.path.join(mrpc_dir, "train.tsv"), "w", encoding="utf8"84    ) as train_fh, open(os.path.join(mrpc_dir, "dev.tsv"), "w", encoding="utf8") as dev_fh:85        header = data_fh.readline()86        train_fh.write(header)87        dev_fh.write(header)88        for row in data_fh:89            label, id1, id2, s1, s2 = row.strip().split("\t")90            if [id1, id2] in dev_ids:91                dev_fh.write("%s\t%s\t%s\t%s\t%s\n" % (label, id1, id2, s1, s2))92            else:93                train_fh.write("%s\t%s\t%s\t%s\t%s\n" % (label, id1, id2, s1, s2))94 95    with open(mrpc_test_file, encoding="utf8") as data_fh, open(96        os.path.join(mrpc_dir, "test.tsv"), "w", encoding="utf8"97    ) as test_fh:98        header = data_fh.readline()99        test_fh.write("index\t#1 ID\t#2 ID\t#1 String\t#2 String\n")100        for idx, row in enumerate(data_fh):101            label, id1, id2, s1, s2 = row.strip().split("\t")102            test_fh.write("%d\t%s\t%s\t%s\t%s\n" % (idx, id1, id2, s1, s2))103    print("\tCompleted!")104 105 106def download_diagnostic(data_dir):107    print("Downloading and extracting diagnostic...")108    if not os.path.isdir(os.path.join(data_dir, "diagnostic")):109        os.mkdir(os.path.join(data_dir, "diagnostic"))110    data_file = os.path.join(data_dir, "diagnostic", "diagnostic.tsv")111    urllib.request.urlretrieve(TASK2PATH["diagnostic"], data_file)112    print("\tCompleted!")113    return114 115 116def get_tasks(task_names):117    task_names = task_names.split(",")118    if "all" in task_names:119        tasks = TASKS120    else:121        tasks = []122        for task_name in task_names:123            if task_name not in TASKS:124                raise ValueError(f"Task {task_name} not found!")125            tasks.append(task_name)126    return tasks127 128 129def main(arguments):130    parser = argparse.ArgumentParser()131    parser.add_argument("--data_dir", help="directory to save data to", type=str, default="glue_data")132    parser.add_argument(133        "--tasks", help="tasks to download data for as a comma separated string", type=str, default="all"134    )135    parser.add_argument(136        "--path_to_mrpc",137        help="path to directory containing extracted MRPC data, msr_paraphrase_train.txt and msr_paraphrase_text.txt",138        type=str,139        default="",140    )141    args = parser.parse_args(arguments)142 143    if not os.path.isdir(args.data_dir):144        os.mkdir(args.data_dir)145    tasks = get_tasks(args.tasks)146 147    for task in tasks:148        if task == "MRPC":149            format_mrpc(args.data_dir, args.path_to_mrpc)150        elif task == "diagnostic":151            download_diagnostic(args.data_dir)152        else:153            download_and_extract(task, args.data_dir)154 155 156if __name__ == "__main__":157    sys.exit(main(sys.argv[1:]))158