chendl/compositional_test
1
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 