【心理咨询师数字孪生对话数据集】标准化为 ShareGPT OpenAI 格式

【心理咨询师数字孪生对话数据集】标准化为 ShareGPT OpenAI 格式

该工具用于将 PsyDTCorpus 数据集转换为标准的 ShareGPT OpenAI 数据格式,并删除指定的字段。

1.功能

  1. 读取 PsyDTCorpus 数据集文件

  2. 删除以 "id"、"sample_id" 和 "normalizedTag" 开头的字段

  3. 将数据转换为 ShareGPT OpenAI 格式

  4. 将处理后的结果保存为新文件

2.数据格式说明

2.1 输入格式

原始数据集应为 JSON 格式,可以是以下两种形式之一:

  1. JSON 列表,其中每个元素是一个包含对话数据的对象

  2. 单个 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.使用方法

  1. 确保已安装 Python 3

  2. 运行转换脚本:

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' 字段。如果您的数据结构不同,可能需要修改脚本中的字段映射。

  • 如有任何问题或错误,请查看控制台输出的错误信息。

相关推荐
易安说AI3 小时前
Claude Opus 4.6 凌晨发布,我体验了一整晚,说说真实感受。
后端
易安说AI3 小时前
Ralph Loop 让Claude无止尽干活的牛马...
前端·后端
易安说AI3 小时前
用 Claude Code 远程分析生产日志,追踪 Claude Max 账户被封原因
后端
颜酱4 小时前
图结构完全解析:从基础概念到遍历实现
javascript·后端·算法
Coder_Boy_6 小时前
基于SpringAI的在线考试系统-考试系统开发流程案例
java·数据库·人工智能·spring boot·后端
掘金者阿豪7 小时前
关系数据库迁移的“暗礁”:金仓数据库如何规避数据完整性与一致性风险
后端
ServBay8 小时前
一个下午,一台电脑,终结你 90% 的 Symfony 重复劳动
后端·php·symfony
sino爱学习8 小时前
高性能线程池实践:Dubbo EagerThreadPool 设计与应用
java·后端
颜酱8 小时前
从二叉树到衍生结构:5种高频树结构原理+解析
javascript·后端·算法
掘金者阿豪8 小时前
UUID的隐形成本:一个让数据库“慢下来”的陷阱
后端