大模型微调数据集加载和分析

大模型微调数据集加载和分析

1. 项目简介

loaddataset.py 是一个用于加载和分析 JSONL 格式数据集的 Python 脚本。它支持读取训练集和验证集,并对这些数据集进行基本的统计分析,包括样本数量统计和文本长度统计。

2. 主要功能

  • 读取 JSONL 文件 :通过 read_jsonl 函数,脚本能够读取 JSONL 格式的文件,并将其解析为 Python 列表。
  • 数据集大小统计:统计训练集和验证集的样本数量,并输出总样本数。
  • 文本长度统计 :计算并输出训练集和验证集中源文本(src)和目标文本(tgt)的平均长度、最大长度和最小长度。

3. 使用说明

3.1 准备工作

数据集中包含以下文件:

  • data/train.json:训练集数据文件,JSONL 格式。
  • data/dev.json:验证集数据文件,JSONL 格式。

3.2 运行脚本

在终端或命令行中,找到 loaddataset.py 文件的目录,并运行以下命令:

python 复制代码
import os

import json

  


def read_jsonl(file_path):

    if not os.path.exists(file_path):

    print(file_path, "不存在")

    return []

    data = []

    with open(file_path, "r", encoding="utf-8") as f:

    for line in f.readlines():

    data.append(json.loads(line))

    return data

  


# 虽然文件扩展名是 json,但其实是 jsonl,需要按行读入后再解析。

train = read_jsonl("data/train.json")

dev = read_jsonl("data/dev.json")

  


for i in range(5):

print(train[i])

  


# 数据集大小统计

print(f"训练集样本数: {len(train)}")

print(f"验证集样本数: {len(dev)}")

print(f"总样本数: {len(train) + len(dev)}")

  


# 文本长度统计(按字符计算)

def analyze_data(data, name):

    src_lens = [len(d['src']) for d in data]

    tgt_lens = [len(d['tgt']) for d in data]

    print(f"\n{name}数据集统计:")

    print(f"• src平均长度: {sum(src_lens)/len(src_lens):.1f} 字符")

    print(f"• tgt平均长度: {sum(tgt_lens)/len(tgt_lens):.1f} 字符")

    print(f"• src最大长度: {max(src_lens)} 字符")

    print(f"• tgt最大长度: {max(tgt_lens)} 字符")

    print(f"• src最小长度: {min(src_lens)} 字符")

    print(f"• tgt最小长度: {min(tgt_lens)} 字符")

  


# 执行统计分析

analyze_data(train, "训练集")

analyze_data(dev, "验证集")

3.3 输出结果

脚本将输出以下内容:

  • 训练集和验证集的前 5 个样本(以 JSON 格式)。
  • 训练集和验证集的样本数量。
  • 训练集和验证集的总样本数。
  • 训练集和验证集中源文本和目标文本的平均长度、最大长度和最小长度。

4. 注意事项

  • 确保 JSONL 文件中的每一行都是一个有效的 JSON 对象。
  • 如果 JSONL 文件不存在,脚本将输出文件不存在的提示,并返回空列表。

5. 代码结构

plaintext 复制代码
loaddataset.py
├── read_jsonl(file_path): 读取并解析 JSONL 文件。
├── analyze_data(data, name): 对数据集进行文本长度统计。
├── main: 加载数据集并执行统计分析。

6. 依赖库

  • os:用于文件路径操作。
  • json:用于解析 JSON 数据。
相关推荐
oden7 小时前
0成本搭建!20分钟用 Workers AI + Vectorize 搞定 RAG(附全套源码)
后端
不会画画的画师8 小时前
Go开发指南:io/ioutil包应用和迁移指南
开发语言·后端·golang
youliroam9 小时前
ESP32-S3+OV2640简单推流到GO服务
开发语言·后端·golang·esp32·ov2640
码luffyliu10 小时前
从 2 小时价格轮询任务通知丢失,拆解 Go Context 生命周期管控核心
后端·golang·go
a努力。10 小时前
宇树Java面试被问:方法区、元空间的区别和演进
java·后端·面试·宇树科技
码事漫谈10 小时前
二叉树中序遍历:递归与非递归实现详解
后端
码事漫谈10 小时前
跨越进程的对话之从管道到gRPC的通信技术演进
后端
无限大612 小时前
为什么"数据压缩"能减小文件大小?——从冗余数据到高效编码
后端
用户7294294322312 小时前
kubernetes/k8s全栈技术讲解+企业级实战项目课程
后端
用户7294294322312 小时前
基于Dubbo的分布式系统架构+事务解决方案
后端