构造自己的jsonl数据集

本文介绍了如何将魔塔社区的数据集从JSONL文件格式转换为HuggingFace支持的格式,包括使用Python的json_lines库逐行读取和处理数据,以及将处理后的数据写回JSONL文件,以适应后续的数据处理和分析需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有一个需求,就是将魔塔社区的数据集搬到huggingface上来用,并且转换格式。所以需要将jsonl文件进行一下变换。

jsonl按照一个数据行,加载数据文件

使用的是json_lines库

with json_lines.open(file_path) as file:
	for i,data in enumerate(file):
		pass

通过上面的方式就可以单个数据加载数据了。

将单个数据写入文件

在jsonl中,单个数据是被{}用字典包裹起来的,同时行与行之间是没有间隔符号的。

{
    "instruction": "我们如何在日常生活中减少用水?",
    "input": "",
    "output": "1. 使用节水装置,如节水淋浴喷头和水龙头。 \n2. 使用水箱或水桶收集家庭废水,例如洗碗和洗浴。 \n3. 在社区中提高节水意识。 \n4. 检查水管和灌溉系统的漏水情况,并及时修复它们。 \n5. 洗澡时间缩短,使用低流量淋浴头节约用水。 \n6. 收集雨水,用于园艺或其他非饮用目的。 \n7. 刷牙或擦手时关掉水龙头。 \n8. 减少浇水草坪的时间。 \n9. 尽可能多地重复使用灰水(来自洗衣机、浴室水槽和淋浴的水)。 \n10. 只购买能源效率高的洗碗机和洗衣机。"
}

{
    "instruction": "编辑文章,使其更吸引读者。",
    "input": "自主机器人是计算机控制的机器,被编程执行特定任务而不需要任何人类输入。自主机器人在各个行业中被越来越广泛地应用,从制造业到医疗保健再到安全。",
    "output": "自主机器人是计算机控制的机器,被编程执行特定任务而不需要任何人类输入,从而实现了新的效率、精确度和可靠性水平。自主机器人在各个行业中被越来越广泛地应用,从制造业,它们可以使用精度和一致的质量组装复杂的组件,到医疗保健,可以协助进行医疗测试和处理,再到安全,可以监控大面积地区,保障人们和财产的安全。自主机器人还可以减少在危险或有害环境中的错误和增加安全,在工业流程的检查或维修期间等。由于其多样性,自主机器人将彻底改变我们工作方式的方式,使任务变得更加简单、快速,最终更加愉悦。"
}

针对于处理好的数据,需要将数据转换成json对象,然后存入jsonl中。以上面的数据为例子。jsonl的第一行数据在python中使用dict对象存储的。dict对象中有三个键值对,分别是instruction,input,output。这些都是python对象(字典,字符串)。

#首先是构造数据
data_dict = {}
data_dict['instruction'] = "我们如何在日常生活中减少用水?"
data_dict['input'] = ''
data_dict['output'] = "1. 使用节水装置,如节水淋浴喷头和水龙头。 \n2. 使用水箱或水桶收集家庭废水,例如洗碗和洗浴。 \n3. 在社区中提高节水意识。 \n4. 检查水管和灌溉系统的漏水情况,并及时修复它们。 \n5. 洗澡时间缩短,使用低流量淋浴头节约用水。 \n6. 收集雨水,用于园艺或其他非饮用目的。 \n7. 刷牙或擦手时关掉水龙头。 \n8. 减少浇水草坪的时间。 \n9. 尽可能多地重复使用灰水(来自洗衣机、浴室水槽和淋浴的水)。 \n10. 只购买能源效率高的洗碗机和洗衣机。"

#将python对象转换成json对象
data_json = json.dumps(data_dict)

#写入文件,这里不需要用json_lines打开文件
with open(file_path,'a+') as file:
	file.write(data_json + '\n')

通过上面构成的数据,就可以使用load_datase()方法进行加载了。
其中还有一个细节,加载本地数据集的时候,要显示的指明路径:

dataet = load_dataset('json',  data_files=file_path)

如果使用dataet = load_dataset(‘json’,file_path)会报错

### 大型模型安全测试数据集的选择 对于大型模型的安全测试,选择合适的数据集至关重要。考虑到训练数据的质量问题[^2],理想情况下应选用经过严格筛选和标注的数据集来确保其可靠性和准确性。 #### 常见的大规模安全测试数据集 1. **Adversarial Examples Datasets** 这类数据集专门设计用来检测并提高机器学习模型对抗攻击的能力。通过引入精心构造的扰动样本,可以评估模型在面对恶意输入时的表现。例如NLP领域中的TextFooler Jia et al., 2019提供了针对自然语言处理系统的对抗样例集合[^3]。 2. **Commonsense Reasoning Benchmarks** 如ARC (AI2 Reasoning Challenge),Winograd Schema Challenge等,这些基准不仅能够检验模型的一般推理能力,还能发现潜在漏洞所在之处。这类数据集有助于识别那些可能导致错误决策的知识盲区或逻辑缺陷[^4]。 3. **Bias and Fairness Evaluation Sets** 包括CrowdFlower, Winobias在内的多个公开资源可用于衡量算法是否存在偏见以及公平性的程度。这对于防止因历史数据偏差而导致的社会歧视现象尤为重要[^5]。 为了进一步优化模型性能,在有限数量但高价值标签实例的帮助下实施主动学习策略也是一种有效方法[^1]。这允许开发者集中精力于最有信息量的部分,从而更有效地提升安全性评测效果。 ```python import pandas as pd def load_security_dataset(dataset_name): """ 加载指定名称的安全测试数据集 参数: dataset_name (str): 数据集的名字 返回: DataFrame: 载入后的数据框对象 """ if dataset_name == "adversarial_examples": df = pd.read_csv('path_to_adversarial_examples.csv') elif dataset_name == "commonsense_reasoning": df = pd.read_json('path_to_commonsense_benchmark.jsonl', lines=True) elif dataset_name == "bias_fairness": df = pd.read_excel('path_to_bias_evaluation.xlsx') else: raise ValueError("未知的数据集名") return df ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值