T0 benchmark
(或者叫P3
)是一个大规模的人工标注instruction tuning数据集,在ICLR 2021 T0一文中提出,其收集了来自huggingface hub上的多任务数据,并为每一个task都装备了来自prompt source的人工撰写指令。
P3数据集可以在huggingface上找到:链接
然而我们下载之后会发现,所有数据文件都以.tfrecord
,而且打开之后的内容非常怪异:
如上图所示,下载的所有数据文件,都是Git LFS
文件(也就是large file system),可以简单理解成pointer,记载了数据所在的存储地址,而真正的数据其实并未下载成功,它们还存储在pointer指向的远端服务器上。
要完全下载P3,需要遵从如下步骤:
1. 下载Git lfs
首先要下载git-lfs
, git lfs 官网:https://git-lfs.com/
以mac为例:brew install git-lfs
就可以直接安装。
linux的话需要有sudo权限,目前笔者并未找到靠谱的linux上源码安装git-lfs的方法,具体参考:https://askubuntu.com/questions/799341/how-to-install-git-lfs-on-ubuntu-16-04
2. clone仓库
接下来就直接把p3从huggingface hub上克隆下来:
git clone https://huggingface.co/datasets/bigscience/P3
克隆下来之后,会发现整个仓库其实很小,如前面所述,这个时候并未把正真的数据下载,而只是下载了所有LFS文件罢了。
3. 还原LFS文件
接下来先进入P3的根目录,
然后用如下命令,使用git-lfs将所有lfs文件指向的远端文件,都下载下来:
git lfs install # git-lfs initialization, set `--force` if there is any errors
git lfs pull # download all files pointed by lfs
然后就进入了漫长等待。。。整个P3的完整数据应该差不多几百个G大小。。
4.【可选】挑选evaluation subset
由于整个数据集实在太过庞大,所以我们可以选择只下载部分我们需要的数据。
例如,笔者只希望下载T0的 held-out evaluation set(测试集),没有必要把整个庞大的数据集都给下载下来,所以可以先用如下python脚本,将不需要的tasks全部删掉之后再去下载(读者根据自己需要修改代码):
# remain ANLI R1-R3, CB,COPA and RTE tasks
import os
import shutil
def get_directories(path):
directories = []
for entry in os.scandir(path):
if entry.is_dir():
directories.append(entry.name)
return directories
def target_task_dir(directory):
''' only return true when facing with the target task directory. '''
directory = directory.lower()
if "anli" in directory and ("r1" in directory or "r2" in directory or "r3" in directory):
return True
elif "cb" in directory:
# super_glue CB
return True
elif "copa" in directory:
# super_glue COPA
return True
elif "rte" in directory:
# super_glue RTE
return True
else:
return False
path = "./data"
directories = get_directories(path)
for directory in directories:
if not target_task_dir(directory):
# del this directory (including all files in it)
shutil.rmtree(os.path.join(path,directory))
将上述脚本放到P3根目录,python 运行就可以。
删除之后,记得得git保存一下修改:
git add -A
git commit -m "del unused tasks"
之后再去git lfs pull
。
5. 处理tfrecord文件
TODO