python JSON Lines (JSONL)的保存和读取;jsonl的数据保存和读取,大模型prompt文件保存常用格式

1. JSON Lines (JSONL)文件保存

将一个包含多个字典的列表保存为 JSON Lines (JSONL) 格式的文件,每个字典对应一个 JSONL 文件中的一行。以下是如何实现这一操作的 Python 代码

import json

# 定义包含字典的列表
data = [
    {"id": 1, "name": "Alice", "age": 30, "email": "alice@example.com"},
    {"id": 2, "name": "Bob", "age": 25, "email": "bob@example.com"},
    {"id": 3, "name": "Charlie", "age": 35, "email": "charlie@example.com"}
]

# 指定要保存的 JSON Lines 文件路径
file_path = 'data.jsonl'

# 将数据写入 JSON Lines 文件
with open(file_path, 'w', encoding='utf-8') as file:
    for entry in data:
        # 使用 json.dumps() 将字典转换为 JSON 格式的字符串
        json.dump(entry, file)
        # 写入换行符,以便每个字典占据文件中的一行
        file.write('\n')

print(f"已将数据写入到 {file_path} 文件中。")

 2. JSON Lines (JSONL)文件读取

读取 JSON Lines (JSONL) 格式的文件并将其解析成 Python 字典列表的操作可以使用以下 Python 代码来实现 

import json

# JSON Lines 文件路径
file_path = 'data.jsonl'

# 用于存储解析后的字典列表
data = []

# 读取 JSON Lines 文件
with open(file_path, 'r', encoding='utf-8') as file:
    for line in file:
        # 使用 json.loads() 将 JSON 格式的字符串解析为字典
        entry = json.loads(line)
        # 将解析后的字典添加到列表中
        data.append(entry)

# 打印读取的数据
print("从 JSON Lines 文件中读取的数据:")
for entry in data:
    print(entry)
### LLaMA 数据格式说明 #### 文件结构 LLaMA 类型的数据集通常由多个文件组成,其中最重要的是 `dataset_info.json` 实际存储对话数据JSON 文件。对于特定于 XTuner 的 LLaMA3 微调,数据集遵循一种特殊的结构来支持更复杂的交互模式[^1]。 - **JSON 对话记录** 实际的对话数据保存在一个或多个 `.jsonl` 或者 `.json` 文件中。每一行代表一条独立的对话记录,每条记录是一个字典对象,包含了提示(`prompt`)、查询(`query`)、响应(`response`)等字段。这些字段用于描述一次完整的对话轮次。 ```json { "instruction": "解释什么是机器学习", "input": "", "output": "机器学习是一种让计算机通过经验自动改进的技术..." } ``` - **元数据配置 (`dataset_info.json`)** 此文件定义了如何解析上述 JSON 文件的内容。它指定了各个字段的意义以及它们之间的关系。特别是,在某些实现方式下(如 Alpaca 格式的变体),该文件可能看起来像这样: ```json { "dataset_name": { "file_name": "alpaca_data_cleaned.json", "columns": { "prompt": "instruction", "query": "input", "response": "output", "system": "system", "history": "history" } } } ``` 这里,“columns”的键名表示模型期望接收的标准名称,而对应的值则是原始数据集中相应信息的实际位置[^2]。 #### 处理方法 为了正确加载并处理这样的数据集,可以采用 Python 结合 Pandas 库的方式读取转换数据。下面给出了一段简单的代码片段作为示范,展示了如何从指定路径加载数据,并将其转化为适合训练的语言模型输入格式。 ```python import json import pandas as pd def load_dataset(file_path, info_file='dataset_info.json'): with open(info_file) as f: config = json.load(f) data = [] # 假设我们只处理单个数据集的情况 ds_config = list(config.values())[0] df = pd.read_json(path_or_buf=file_path, lines=True) mapped_columns = {v: k for k, v in ds_config['columns'].items()} transformed_df = df.rename(columns=mapped_columns)[list(mapped_columns.keys())] return transformed_df.to_dict('records') if __name__ == "__main__": dataset = load_dataset('./data/alpaca_data_cleaned.json') print(dataset[:5]) # 打印前五个样本查看效果 ``` 此脚本首先会读取 `dataset_info.json` 来获取有关数据集的具体细节;接着利用 Pandas 将 JSONL 文件中的内容映射到统一命名的空间内,从而简化后续操作过程中的复杂度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

医学小达人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值