设置 | 运行 | 收集的信息 | 生成Bibtex | 添加集合 | 数据格式 | 法律声明与限制 | 联系方式
<p align="center"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/70b743de-df92-474a-8c6b-2d2ed1bf13ce.png" width="40%" height="40%" alt="数据溯源倡议"> </p>数据溯源倡议是一项跨学科的志愿者努力,旨在提高人工智能训练数据集的透明度、文档记录和负责任使用。通过对44个数据集合进行大规模审计,涵盖1800多个用于微调的文本到文本数据集(称为数据溯源集合),该倡议的首次发布详细记录了这些数据集的网络和机器来源、许可证、创建者和其他元数据。
本仓库中的脚本允许开发人员根据自己的需求筛选最适合的微调数据集,从自报的许可限制到其他数据特征。查看数据溯源浏览器以查看数据组成,以及您可以在此仓库中应用的不同筛选器的影响。从此仓库生成数据子集将创建一个"数据溯源卡"——所有组成数据集的象征性归属,可用作结构化文档。完整详情将在我们即将发布的论文中提供。
本仓库不构成法律建议。 请参阅法律声明和限制。
这是该倡议的第一步,我们计划扩展资源和工具,以及学术分析。如果您想贡献,请通过data.provenance.init@gmail.com与我们联系。
pip install -r requirements.txt
此脚本允许您下载所有数据集,并根据收集的信息中的任何标准进行筛选。您可以通过argparse传入参数,或使用类似于src/configs/default.yaml
的自定义yaml配置。所有数据集都将被标准化为相同的格式。默认情况下,我们使用这种格式,因为它可以推广到多轮对话和响应排序,但您也可以将数据集标准化用于监督微调。
某些数据集需要受限访问,因此您需要在仓库中创建一个类似于.env.template
的.env
文件,并添加您的HuggingFace令牌,并在HuggingFace页面上接受数据集的条款和条件。
python src/download_and_filter.py -c src/configs/default.yaml
constants/domain_groups.json
推断出"文本领域"(如生物医学、法律、百科全书、书籍等)。constants/license_classes.json
,我们对每个许可证的使用限制、归属和共享要求进行分类。我们收集了数据溯源集合中每个有相关论文的数据集的bibtex条目。这些可以在data_summaries/
中找到,您还可以通过运行数据准备脚本自动生成任何数据子集的完整bibtex文件。
要在不下载数据的情况下生成bibtex,只需运行数据下载和筛选脚本,但在此代码行之后停止:https://github.com/Data-Provenance-Initiative/Data-Provenance-Collection/blob/main/src/download_and_filter.py#L419。
说明:
对于新集合,在data_summaries/
中添加一个json文件。尝试将所有数据集或数据集的可分离拆分(按语言、任务、许可证、来源等)作为json文件中的单独实体列举,每个实体都有自己的"唯一数据集标识符"。
请参考data_summaries/_template.json
以获取参考和所需字段的信息。
在src/downloaders.py
中为您的集合编写一个下载器函数。
下载器应下载集合,并过滤掉accepted_filter_ids
参数中未表示的任何子 集。
此参数对应于每个唯一数据集的"数据集筛选ID",可用于基于Hugging Face数据集对象可能具有的某些列(例如source
)进行筛选。
此下载器返回一个任意格式的列表,以在下一步中解析。
"数据集筛选ID"也应该是每行的一个字段,以便我们稍后可以将示例映射回其来源。
def download_<your_collection>(accepted_filter_ids):
"""下载您的数据集并过滤到`accepted_filter_ids`中的子集。
accepted_filter_ids: 来自数据集摘要文件的"数据集筛选ID"列表,
其"唯一数据集标识符"在运行时通过许可证/语言/任务等筛选器。
使用这些来将下载的数据集分割成仅相关的数据点。
返回一个代表数据集的行列表(任意格式)。
例如,Flan集合有数百个具有不同许可证的数据集。
`accepted_filter_ids`将是我们许可证筛选后剩余的数据集列表,
它们应该对应于huggingface下载中的示例标签。
"""
# 使用此辅助函数从Hugging Face下载您的数据集,例如:
dset = huggingface_download('nomic-ai/gpt4all-j-prompt-generations', split='train')
# 或使用此辅助函数直接从URL下载您的数据集,例如:
dset = direct_data_request("https://raw.githubusercontent.com/<your-repo>/data.json")
# 您现在可以返回dset,或者可以进一步筛选下载的数据集(见下文)。
return dset
# 接下来,我们过滤出相关的数据子集,由`accepted_filter_ids`表示。
# 如果`dset`中有多个数据集,那么通过过滤的数据集的`dataset_filter_key`将被传入`accepted_filter_ids`。
# 你可以使用`pool_filter`并行过滤数据集(参见文档)。
# 'source'是`pool_filter`中定义的`task_key`的一个例子,在downloader.py中
return pool_filter(dset, "source", accepted_filter_ids)
src/preparers.py
中为你的集合编写数据准备函数。
准备函数将接收你的自定义下载函数的输出,并按以下格式格式化数据(也在这里解释过):以下是你如何编写数据集准备函数的示例:
def prepare_<your_collection>(row):
"""
准备函数可以使用`convert_inputs_taergets_to_messages`函数,该函数接收你的自定义下载函数的输出,并按以下格式格式化数据:
对话中的消息列表:[{"from": <>, "text": <>, "parent": <>, "score": <>}, ...]
'from'可以是'user'或'assistant'
'text'是单条消息的内容
'parent'是对话列表中前一条消息的0索引ID,或列表中第一条消息的唯一数据集标识符(随后是0,然后是1,等等)
'score'(可选)是该回复的分数,如果适用的话
你也可以自定义你自己的准备处理函数,只要它们有相同的输出格式。
"""
return convert_inputs_targets_to_messages(row['prompt'], row['response'],'<dset_name>')
src/collection_mapper.py
中的COLLECTION_FN_MAPPER
,格式如下:"<你的数据集文件名(不带扩展名)>":{
"download_function": downloaders.download_<your_collection>,
"prepare_function": "preparers.prepare_<your_collection>",
}
python src/test_new_collection.py --collection "<你的集合>"
如果你想运行所有内容并集中打印所有错误,在上一个命令后使用--no_halt
:
python src/test_new_collection.py --collection "<你的集合>" --no_halt
我们的数据集结构是一个字典列表,每个字典代表对话中的一条单独消息。每条消息字典包含以下字段:
消息通常以对组织,其中"assistant"回复"user",反之亦然,但可能有多个回复对应一条消息,表示对话中的不同路径。
[
{
"from": "user",
"text": "你好,你怎么样?",
"parent": "dataset1234"
},
{
"from": "assistant",
"text": "我很好!我能为您做些什么?",
"parent": 0,
"score": 1
},
{
"from": "assistant",
"text": "你好!",
"parent": 0,
"score": 0
},
...
]
数据溯源计划是一项旨在增加机器学习透明度的研究努力。 本页面提供的信息以及数据溯源计划的任何输出并不构成,也不意图构成法律建议;相反,所有信息、内容和材料仅供一般信息参考。 本项目的任何读者、用户或浏览者不应基于数据溯源计划的信息采取行动或避免采取行动,而应首先向相关司法管辖区的法律顾问寻求法律建议。
本仓库中的代码采用Apache 2.0许可。
联系data.provenance.init@gmail.com更新或为此资源做出贡献。
@article{longpre2023data,
title={The Data Provenance Initiative: A Large Scale Audit of Dataset Licensing \& Attribution in AI},
author={Longpre, Shayne and Mahari, Robert and Chen, Anthony and Obeng-Marnu, Naana and Sileo, Damien and Brannon, William and Muennighoff, Niklas and Khazam, Nathan and Kabbara, Jad and Perisetla, Kartik and others},
journal={arXiv preprint arXiv:2310.16787},
year={2023}
}