【心理咨询师数字孪生对话数据集】标准化为 ShareGPT OpenAI 格式
该工具用于将 PsyDTCorpus 数据集转换为标准的 ShareGPT OpenAI 数据格式,并删除指定的字段。

1.功能
-
读取 PsyDTCorpus 数据集文件
-
删除以 "id"、"sample_id" 和 "normalizedTag" 开头的字段
-
将数据转换为 ShareGPT OpenAI 格式
-
将处理后的结果保存为新文件
2.数据格式说明
2.1 输入格式
原始数据集应为 JSON 格式,可以是以下两种形式之一:
-
JSON 列表,其中每个元素是一个包含对话数据的对象
-
单个 JSON 对象,包含一组对话数据
假设原始数据中包含 'prompt' 和 'response' 字段,分别表示用户输入和助手回应。
2.2 输出格式 (ShareGPT OpenAI 格式)
转换后的格式为 JSON 列表,其中每个元素是一个包含 'conversations' 键的对象。'conversations' 是一个列表,包含对话轮次,每个轮次有 'role' 和 'content' 两个字段:
-
'role': 可以是 'user' (用户) 或 'assistant' (助手)
-
'content': 对话内容文本
示例输出:
json
[
{
"conversations": [
{
"role": "user",
"content": "你好,请问什么是人工智能?"
},
{
"role": "assistant",
"content": "人工智能是计算机科学的一个分支,旨在创建能够执行通常需要人类智能的任务的系统..."
}
]
},
...
]
3.使用方法
-
确保已安装 Python 3
-
运行转换脚本:
python
import json
# 定义函数:删除指定字段并转换为 ShareGPT OpenAI 格式
def remove_lines(input_file, output_file):
# 定义需要删除的字段前缀列表
keys_to_remove = ['id', 'sample_id', 'normalizedTag']
try:
# 打开输入文件并加载 JSON 数据
with open(input_file, 'r', encoding='utf-8') as f:
data = json.load(f)
# 存储转换后的 ShareGPT 格式数据
sharegpt_data = []
# 检查数据类型是否为列表
if isinstance(data, list):
# 遍历列表中的每个项目
for item in data:
# 首先删除不需要的字段
for key in list(item.keys()):
if any(key.startswith(prefix) for prefix in keys_to_remove):
del item[key]
# 转换为 ShareGPT 格式
# 假设原数据中有 'prompt' 和 'response' 字段
conversation = []
if 'prompt' in item:
conversation.append({
'role': 'user',
'content': item['prompt']
})
if 'response' in item:
conversation.append({
'role': 'assistant',
'content': item['response']
})
# 如果构建了有效的对话,则添加到结果列表
if conversation:
sharegpt_data.append({
'conversations': conversation
})
elif isinstance(data, dict):
# 如果数据是字典类型
# 删除不需要的字段
for key in list(data.keys()):
if any(key.startswith(prefix) for prefix in keys_to_remove):
del data[key]
# 转换单个对话
conversation = []
if 'prompt' in data:
conversation.append({
'role': 'user',
'content': data['prompt']
})
if 'response' in data:
conversation.append({
'role': 'assistant',
'content': data['response']
})
if conversation:
sharegpt_data.append({
'conversations': conversation
})
# 将转换后的数据保存到输出文件
with open(output_file, 'w', encoding='utf-8') as f:
json.dump(sharegpt_data, f, indent=4, ensure_ascii=False)
print(f'处理完成,结果已保存到 {output_file}')
except Exception as e:
print(f'处理文件时出错: {e}')
# 如果直接运行该脚本,则执行以下代码
if __name__ == '__main__':
# 定义输入文件路径
input_file = '/Users/livingbody/workspace/PsyDTCorpus/PsyDTCorpus_train_mulit_turn_packing.json'
# 定义输出文件路径
output_file = '/Users/livingbody/workspace/PsyDTCorpus/train.json'
# 调用函数处理文件
remove_lines(input_file, output_file)
4.文件说明
-
json_converter.py
: 主转换脚本 -
PsyDTCorpus_test_single_turn_split.json
: 输入测试数据集 -
test.json
: 输出的转换后数据集 -
PsyDTCorpus_train_mulit_turn_packing.json
: 输入训练数据集 -
train.json
: 输出的转换后训练数据集 -
dataset_infos.json
: 数据集信息文件
5.注意事项
-
脚本假设输入数据中包含 'prompt' 和 'response' 字段。如果您的数据结构不同,可能需要修改脚本中的字段映射。
-
如有任何问题或错误,请查看控制台输出的错误信息。