NLP-transformer学习:(6)dataset 加载与调用

NLP-transformer学习:(6)dataset 加载与调用

平常其实也经常进行trainning等等,但是觉得还是觉得要补补基础,所以静下心,搞搞基础联系

本章节基于 NLP-transformer学习:(5)讲解了如何做一个简单的训练和模型迁移,这里实践一个长用的dataset

相关课程其实是哔站上的视频课程,但是我这里将其实践,并融入自己的心得,代码地址如下:

https://github.com/MexWayne/mexwayne_transformers-code


### 文章目录

  • [NLP-transformer学习:(6)dataset 加载与调用](#文章目录 NLP-transformer学习:(6)dataset 加载与调用 @TOC 1 什么是datasets 2 datasets 实战 2.1 基础操作 2.2 加载某一任务或某一部分 2.3 数据划分 2.4 数据选取和过滤 2.4 数据映射 2.5 数据保存与加载)
  • [@[TOC](文章目录)](#文章目录 NLP-transformer学习:(6)dataset 加载与调用 @TOC 1 什么是datasets 2 datasets 实战 2.1 基础操作 2.2 加载某一任务或某一部分 2.3 数据划分 2.4 数据选取和过滤 2.4 数据映射 2.5 数据保存与加载)
  • [1 什么是datasets](#文章目录 NLP-transformer学习:(6)dataset 加载与调用 @TOC 1 什么是datasets 2 datasets 实战 2.1 基础操作 2.2 加载某一任务或某一部分 2.3 数据划分 2.4 数据选取和过滤 2.4 数据映射 2.5 数据保存与加载)
  • [2 datasets 实战](#文章目录 NLP-transformer学习:(6)dataset 加载与调用 @TOC 1 什么是datasets 2 datasets 实战 2.1 基础操作 2.2 加载某一任务或某一部分 2.3 数据划分 2.4 数据选取和过滤 2.4 数据映射 2.5 数据保存与加载)
  • [2.1 基础操作](#文章目录 NLP-transformer学习:(6)dataset 加载与调用 @TOC 1 什么是datasets 2 datasets 实战 2.1 基础操作 2.2 加载某一任务或某一部分 2.3 数据划分 2.4 数据选取和过滤 2.4 数据映射 2.5 数据保存与加载)
  • [2.2 加载某一任务或某一部分](#文章目录 NLP-transformer学习:(6)dataset 加载与调用 @TOC 1 什么是datasets 2 datasets 实战 2.1 基础操作 2.2 加载某一任务或某一部分 2.3 数据划分 2.4 数据选取和过滤 2.4 数据映射 2.5 数据保存与加载)
  • [2.3 数据划分](#文章目录 NLP-transformer学习:(6)dataset 加载与调用 @TOC 1 什么是datasets 2 datasets 实战 2.1 基础操作 2.2 加载某一任务或某一部分 2.3 数据划分 2.4 数据选取和过滤 2.4 数据映射 2.5 数据保存与加载)
  • [2.4 数据选取和过滤](#文章目录 NLP-transformer学习:(6)dataset 加载与调用 @TOC 1 什么是datasets 2 datasets 实战 2.1 基础操作 2.2 加载某一任务或某一部分 2.3 数据划分 2.4 数据选取和过滤 2.4 数据映射 2.5 数据保存与加载)
  • [2.4 数据映射](#文章目录 NLP-transformer学习:(6)dataset 加载与调用 @TOC 1 什么是datasets 2 datasets 实战 2.1 基础操作 2.2 加载某一任务或某一部分 2.3 数据划分 2.4 数据选取和过滤 2.4 数据映射 2.5 数据保存与加载)
  • [2.5 数据保存与加载](#文章目录 NLP-transformer学习:(6)dataset 加载与调用 @TOC 1 什么是datasets 2 datasets 实战 2.1 基础操作 2.2 加载某一任务或某一部分 2.3 数据划分 2.4 数据选取和过滤 2.4 数据映射 2.5 数据保存与加载)

提示:以下是本篇文章正文内容,下面案例可供参考

1 什么是datasets

地址:https://huggingface.co/datasets

datasets言而简之就是加载数据集用的

使用之前需要:

pip install datasets

有些特殊的库需要

pip install datasets[vision]

pip install datasets[audio]

2 datasets 实战

2.1 基础操作

加载代码如下:

python 复制代码
# if the py name is datasets, the import action will first use the current file 
# not the datasets installed by pip
# for example you may meet the error: will be "NameError: name 'load_dataset' is not defined"

from datasets import *

if __name__ == "__main__":

    # add a dataset
    data_set = load_dataset("madao33/new-title-chinese")
    print(data_set)
    print("------------------------------")
    print("train[0]:")
    print(data_set["train"][0])
    print("------------------------------")
    print("train[:2]:")
    print(data_set["train"][:2])
    print("------------------------------")
    print("train[\"tile\"][:5]:")
    print(data_set["train"]["title"][:5])
    print("------------------------------")
    

这里注意的是,使用的python 文件名不能是"datasets"即重名,不然会首先找当前文件,然后报错:

NameError: name 'load_dataset' is not defined

当改为非datasets 名字后就可以看到数据加载

可以看到这个数据集中只有训练和验证数据集。

然后我们使用一些切片用法可以看到期望结果:

2.2 加载某一任务或某一部分

(1)加载某个任务

datasets 部分数据中不是只有数据还包含了很多任务

对于super_gule,这个datasets 是一个 任务的集合,如果我们要添加某一任务

我们可以这样做,代码如下:

python 复制代码
# if the py name is datasets, the import action will first use the current file 
# not the datasets installed by pip
# for example you may meet the error: will be "NameError: name 'load_dataset' is not defined"

from datasets import *

if __name__ == "__main__":
    
    # add specific task
    boolq_dataset = load_dataset("super_glue", "boolq",trust_remote_code=True)
    print(boolq_dataset)

注意这里有个小细节,如果写成自动化代码时,可以加加上信任主机,这样就不用再敲入一个y

(2)加载某个部分(也叫某个划分)

load_dataset 支持加载某个部分,并且对某个部分进行切片,且切片还可以用%描述,但不能用小数描述

python 复制代码
# if the py name is datasets, the import action will first use the current file 
# not the datasets installed by pip
# for example you may meet the error: will be "NameError: name 'load_dataset' is not defined"

from datasets import *

if __name__ == "__main__":
    
    ## add a dataset
    #data_set = load_dataset("madao33/new-title-chinese")
    #print(data_set)
    
    ## add specific task
    #boolq_dataset = load_dataset("super_glue", "boolq",trust_remote_code=True)
    #print(boolq_dataset)


    dataset = load_dataset("madao33/new-title-chinese", split="train")
    print("train:") 
    print(dataset)

    dataset = load_dataset("madao33/new-title-chinese", split="train[10:100]")
    print("train 10:100:") 
    print(dataset)
    
    dataset = load_dataset("madao33/new-title-chinese", split="train[10%:50%]")
    print("train 10%:100%:") 
    print(dataset)
    
    dataset = load_dataset("madao33/new-title-chinese", split=["train[:40%]", "train[40%:]"])
    print("train 40% and 60%:") 
    print(dataset)

运行结果:

2.3 数据划分

这个dataset 自带了个调整比例的 函数:train_test_split

python 复制代码
# if the py name is datasets, the import action will first use the current file 
# not the datasets installed by pip
# for example you may meet the error: will be "NameError: name 'load_dataset' is not defined"

from datasets import *

if __name__ == "__main__":
    datasets = load_dataset("madao33/new-title-chinese")
    print("origin train datasets:")
    print(datasets["train"])
    print("-----------------")
    print("make train set as test 0.1:")
    dataset = datasets["train"]
    print(dataset.train_test_split(test_size=0.1))
    print("-----------------")
    print("stratify:")
    boolq_dataset = load_dataset("super_glue", "boolq",trust_remote_code=True)
    dataset = boolq_dataset["train"]
    print(dataset.train_test_split(test_size=0.1, stratify_by_column="label"))# 分类数据集可以按照比例划分
    print("-----------------")

运行结果:

这里 test_size = 0.1 指,将训练数据的 0.1 用作test,即585 = 5850 × 0.1

stratify: 这样可以均衡数据

2.4 数据选取和过滤

python 复制代码
from datasets import *

if __name__ == "__main__":
    datasets = load_dataset("madao33/new-title-chinese")
    # 选取
    filter_res = datasets["train"].select([0, 1])
    print("select:")
    print(filter_res["title"][:5])
    # 过滤
    filter_dataset = datasets["train"].filter(lambda example: "中国" in example["title"])
    print("filter:")
    print(filter_dataset["title"][:5])

结果:

2.4 数据映射

数据映射,就是我们写一个函数,然后对数据集中的每个数据都做这样的处理

(1)将个每个数据处理下,这里举例家了前缀

代码:

python 复制代码
from datasets import load_dataset

def add_prefix(example):
    example["title"] = 'Prefix: ' + example["title"]
    return example
    
if __name__ == "__main__":
    datasets = load_dataset("madao33/new-title-chinese")
    prefix_dataset = datasets.map(add_prefix)
    print(prefix_dataset["train"][:10]["title"])

运行结果:

可以看到和期望一样,将每个title 加了个"prefix"

(2)将每个数据做tokenizer

python 复制代码
from datasets import *
from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("bert-base-chinese")
def preprocess_function(example, tokenizer = tokenizer):
    model_inputs = tokenizer(example["content"], max_length = 512, truncation = True)
    labels = tokenizer(example["title"], max_length=32, truncation=True)
    # label就是title编码的结果
    model_inputs["labels"] = labels["input_ids"]
    return model_inputs

if __name__ == "__main__":

    processed_datasets = datasets.map(preprocess_function)
    print("train:")
    print(processed_datasets["train"][:5])
    print("validation:")
    print(processed_datasets["validation"][:5])

结果可以看到,数据已经和前几章讲的类似,变成了token。

运行结果:


2.5 数据保存与加载

python 复制代码
from datasets import *
from transformers import AutoTokenizer

if __name__ == "__main__":
    datasets = load_dataset("madao33/new-title-chinese")
    processed_datasets = datasets.map(preprocess_function)
    print("from web:") 
    print(processed_datasets["validation"][:2])
    processed_datasets = datasets.map(preprocess_function)
    processed_datasets.save_to_disk("./processed_data")
    processed_datasets = load_from_disk("./processed_data")
    print("from local:") 
    print(processed_datasets["validation"][:2])

结果:

相关推荐
warm3snow4 天前
AI 核心技能系列:12 篇文章带你系统掌握大模型岗位必备技能
ai·transformer·agent·skill·mcp·fine-tunning
西岸行者5 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
homelook5 天前
Transformer与电池管理系统(BMS)的结合是当前 智能电池管理 的前沿研究方向
人工智能·深度学习·transformer
悠哉悠哉愿意5 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码5 天前
嵌入式学习路线
学习
毛小茛5 天前
计算机系统概论——校验码
学习
babe小鑫5 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms5 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下5 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。5 天前
2026.2.25监控学习
学习