AI大模型探索之路-训练篇12:语言模型Transformer库-Datasets组件实践

news2024/11/20 15:40:41

系列篇章💥

AI大模型探索之路-训练篇1:大语言模型微调基础认知
AI大模型探索之路-训练篇2:大语言模型预训练基础认知
AI大模型探索之路-训练篇3:大语言模型全景解读
AI大模型探索之路-训练篇4:大语言模型训练数据集概览
AI大模型探索之路-训练篇5:大语言模型预训练数据准备-词元化
AI大模型探索之路-训练篇6:大语言模型预训练数据准备-预处理
AI大模型探索之路-训练篇7:大语言模型Transformer库之HuggingFace介绍
AI大模型探索之路-训练篇8:大语言模型Transformer库-预训练流程编码体验
AI大模型探索之路-训练篇9:大语言模型Transformer库-Pipeline组件实践
AI大模型探索之路-训练篇10:大语言模型Transformer库-Tokenizer组件实践
AI大模型探索之路-训练篇11:大语言模型Transformer库-Model组件实践


目录

  • 系列篇章💥
  • 前言
  • 一、在线加载数据集
    • 1、加载数据集
    • 2、加载数据集合集中的某一项任务
    • 3、按照数据集划分进行加载
  • 二、查看数据集
    • 1、查看索引为1的数据
    • 2、查看数据集前2条数据
    • 3、获取训练集中标题列的前5个元素
    • 4、获取训练集的列名
    • 5、获取训练集中的特征信息
  • 三、数据集划分
    • 1、按占比划分
    • 2、按占比划分&分层抽样
  • 四、数据集选取,过滤,映射
    • 1、索引过滤
    • 2、字符过滤
    • 3、数据映射过滤
    • 4、输入准备
    • 5、多进程并行处理
    • 6、分批处理
    • 7、批处理&移除列
  • 五、数据集保存与加载
    • 1、保存数据集到本地
    • 2、加载本地数据集
  • 六、加载本地数据集
    • 1、load_dataset直接加载本地文件
    • 2、Dataset.from_csv加载本地文件
    • 3、pandas库的read_csv方法加载本地文件
    • 4、pandas对象转化为数据集
    • 5、自定义List加载数据集
    • 6、通过JSON加载数据集
    • 7、自定义脚本加载数据集
  • 七、DataCollator
    • 1、加载数据集
    • 2、数据处理
    • 3、数据填充
  • 总结


前言

在AI语言模型学习任务中,数据是至关重要的部分。一个高质量的数据集不仅决定了模型的上限,还影响着模型训练的效率和效果。然而,获取、处理和组织数据往往耗时耗力。为了简化这一过程,Hugging Face推出了Datasets组件,它集成了多种公开数据集,支持在线加载、筛选和预处理等功能。通过本文的介绍,我们将了解到如何利用Datasets组件快速加载和处理数据,为模型训练打下坚实基础。

本文将从在线加载数据集开始,逐步介绍如何查看、划分、选取、过滤和映射数据集。接着,我们将讨论如何保存和加载处理好的数据集,以及如何使用DataCollator进行数据填充等后处理操作。最后,我们还将探讨如何通过自定义脚本加载非标准格式的数据集。通过这些内容,我们将掌握Datasets组件的基本用法,提高数据处理的效率和质量。

官网API:https://huggingface.co/docs/datasets/index
在这里插入图片描述

一、在线加载数据集

1、加载数据集

安装依赖

pip install datasets

加载数据集:使用load_dataset函数,可以通过数据集名称、数据集文件路径等方式加载数据集
查看在线数据集信息:

代码实现如下:

from datasets import load_dataset
datasets = load_dataset("madao33/new-title-chinese")
datasets

输出

DatasetDict({
    train: Dataset({
        features: ['title', 'content'],
        num_rows: 5850
    })
    validation: Dataset({
        features: ['title', 'content'],
        num_rows: 1679
    })
})

2、加载数据集合集中的某一项任务

加载数据集合集中的某一项任务,加载布尔问答任务数据集。
查看在线数据集信息:

代码实现

boolq_dataset = load_dataset("super_glue", "boolq")
boolq_dataset

输出

DatasetDict({
    train: Dataset({
        features: ['question', 'passage', 'idx', 'label'],
        num_rows: 9427
    })
    validation: Dataset({
        features: ['question', 'passage', 'idx', 'label'],
        num_rows: 3270
    })
    test: Dataset({
        features: ['question', 'passage', 'idx', 'label'],
        num_rows: 3245
    })
})

3、按照数据集划分进行加载

1)使用train关键字加载训练数据集

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

输出

Dataset({
    features: ['title', 'content'],
    num_rows: 5850
})

2)按区间加载训练数据集

dataset = load_dataset("madao33/new-title-chinese", split="train[10:100]")
dataset

输出

Dataset({
    features: ['title', 'content'],
    num_rows: 90
})

3)按百分比加载数据集

dataset = load_dataset("madao33/new-title-chinese", split="train[:50%]")
dataset

输出

Dataset({
    features: ['title', 'content'],
    num_rows: 2925
})

加载名为"madao33/new-title-chinese"的数据集,并将其划分为训练集的前50%和后50%

dataset = load_dataset("madao33/new-title-chinese", split=["train[:50%]", "train[50%:]"])
dataset

输出

[Dataset({
     features: ['title', 'content'],
     num_rows: 2925
 }),
 Dataset({
     features: ['title', 'content'],
     num_rows: 2925
 })]

二、查看数据集

可以使用索引、切片等方式查看数据集中的部分数据

datasets = load_dataset("madao33/new-title-chinese")
datasets

输出

DatasetDict({
    train: Dataset({
        features: ['title', 'content'],
        num_rows: 5850
    })
    validation: Dataset({
        features: ['title', 'content'],
        num_rows: 1679
    })

1、查看索引为1的数据

datasets["train"][1]

输出

{'title': '大力推进高校治理能力建设',
 'content': '在推进“双一流”高校建设进程中,我们要紧紧围绕为党育人、为国育才,找准问题、破解难题,以一流意识和担当精神,大力推进高校的治理能力建设。\n增强政治引领力。坚持党对高校工作的全面领导,始终把政治建设摆在首位,增强校党委的政治领导力,全面推进党的建设各项工作。落实立德树人根本任务,把培养社会主义建设者和接班人放在中心位置。紧紧抓住思想政治工作这条生命线,全面加强师生思想政治工作,推进“三全育人”综合改革,将思想政治工作贯穿学校教育管理服务全过程,努力让学生成为德才兼备、全面发展的人才。\n提升人才聚集力。人才是创新的核心要素,创新驱动本质上是人才驱动。要坚持引育并举,建立绿色通道,探索知名专家举荐制,完善“一事一议”支持机制。在大力支持自然科学人才队伍建设的同时,实施哲学社会科学人才工程。立足实际,在条件成熟的学院探索“一院一策”改革。创新科研组织形式,为人才成长创设空间,建设更加崇尚学术、更加追求卓越、更加关爱学生、更加担当有为的学术共同体。\n培养学生竞争力。遵循学生成长成才的规律培育人才,着力培养具有国际竞争力的拔尖创新人才和各类专门人才,使优势学科、优秀教师、优质资源、优良环境围绕立德树人的根本任务配置。淘汰“水课”,打造“金课”,全力打造世界一流本科教育。深入推进研究生教育综合改革,加强事关国家重大战略的高精尖急缺人才培养,建设具有国际竞争力的研究生教育。\n激发科技创新力。在国家急需发展的领域挑大梁,就要更加聚焦科技前沿和国家需求,狠抓平台建设,包括加快牵头“武汉光源”建设步伐,积极参与国家实验室建设,建立校级大型科研仪器设备共享平台。关键核心技术领域“卡脖子”问题,归根结底是基础科学研究薄弱。要加大基础研究的支持力度,推进理论、技术和方法创新,鼓励支持重大原创和颠覆性技术创新,催生一批高水平、原创性研究成果。\n发展社会服务力。在贡献和服务中体现价值,推动合作共建、多元投入的格局,大力推进政产学研用结合,强化科技成果转移转化及产业化。探索校城融合发展、校地联动发展的新模式,深度融入地方创新发展网络,为地方经济社会发展提供人才支撑,不断拓展和优化社会服务网络。\n涵育文化软实力。加快体制机制改革,优化学校、学部、学院三级评审机制,充分发挥优秀学者特别是德才兼备的年轻学者在学术治理中的重要作用。牢固树立一流意识、紧紧围绕一流目标、认真执行一流标准,让成就一流事业成为普遍追求和行动自觉。培育具有强大凝聚力的大学文化,营造积极团结、向上向善、干事创业的氛围,让大学成为吸引和留住一大批优秀人才建功立业的沃土,让敢干事、肯干事、能干事的人有更多的荣誉感和获得感。\n建设中国特色、世界一流大学不是等得来、喊得来的,而是脚踏实地拼出来、干出来的。对标一流,深化改革,坚持按章程办学,构建以一流质量标准为核心的制度规范体系,扎实推进学校综合改革,探索更具活力、更富效率的管理体制和运行机制,我们就一定能构建起具有中国特色的现代大学治理体系,进一步提升管理服务水平和工作效能。\n(作者系武汉大学校长)'}

2、查看数据集前2条数据

datasets["train"][:2]

3、获取训练集中标题列的前5个元素

datasets["train"]["title"][:5]

输出

['望海楼X国打“WW牌”是危险的赌博',
 '大力推进高校治理能力建设',
 '坚持事业为上选贤任能',
 '“大朋友”的话儿记心头',
 '用好可持续发展这把“金钥匙”']

4、获取训练集的列名

datasets["train"].column_names

输出

['title', 'content']

5、获取训练集中的特征信息

datasets["train"].features

输出

{'title': Value(dtype='string', id=None),
 'content': Value(dtype='string', id=None)}

三、数据集划分

1、按占比划分

使用train_test_split方法将数据集划分为训练集和测试集,其中测试集占比为0.1

dataset = datasets["train"]
dataset.train_test_split(test_size=0.1)

输出

DatasetDict({
    train: Dataset({
        features: ['title', 'content'],
        num_rows: 5265
    })
    test: Dataset({
        features: ['title', 'content'],
        num_rows: 585
    })
})

2、按占比划分&分层抽样

使用train_test_split方法将数据集划分为训练集和测试集,其中测试集占比为0.1,并按照"label"列进行分层抽样

dataset = boolq_dataset["train"]
## 参数"stratify_by_column="label""表示按照数据集中的"label"列进行分层抽样,
## 保证训练集和测试集中各类别的样本比例与原始数据集中的比例相同
dataset.train_test_split(test_size=0.1, stratify_by_column="label")     # 分类数据集可以按照比例划分

输出

DatasetDict({
    train: Dataset({
        features: ['question', 'passage', 'idx', 'label'],
        num_rows: 8484
    })
    test: Dataset({
        features: ['question', 'passage', 'idx', 'label'],
        num_rows: 943
    })

四、数据集选取,过滤,映射

1、索引过滤

选择训练集中索引为0和1的数据

# 选取
datasets["train"].select([0, 1])

输出

Dataset({
    features: ['title', 'content'],
    num_rows: 2
})

2、字符过滤

过滤训练集中标题包含"中国"的数据,获取过滤后的训练集的前5个标题

# 过滤
filter_dataset = datasets["train"].filter(lambda example: "中国" in example["title"])

filter_dataset["title"][:5]
['聚焦两会,世界探寻中国成功秘诀',
 '望海楼中国经济的信心来自哪里',
 '“中国奇迹”助力世界减贫跑出加速度',
 '和音瞩目历史交汇点上的中国',
 '中国风采感染世界']

3、数据映射过滤

通过函数进行数据集过滤

# 映射(map)
def add_prefix(example):
    example["title"] = 'Prefix: ' + example["title"]
    return example
prefix_dataset = datasets.map(add_prefix)
prefix_dataset["train"][:10]["title"]

输出

['Prefix: 望海楼X国打“WW牌”是危险的赌博',
 'Prefix: 大力推进高校治理能力建设',
 'Prefix: 坚持事业为上选贤任能',
 'Prefix: “大朋友”的话儿记心头',
 'Prefix: 用好可持续发展这把“金钥匙”',
 'Prefix: 跨越雄关,我们走在大路上',
 'Prefix: 脱贫奇迹彰显政治优势',
 'Prefix: 拱卫亿万人共同的绿色梦想',
 'Prefix: 为党育人、为国育才',
 'Prefix: 净化网络语言']

4、输入准备

使用分词器对样本的内容和标题进行编码。编码后的结果存储在model_inputs字典中,其中labels键用于存储标题编码的结果,进行输出备用

from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("bert-base-chinese")
def preprocess_function(example):
    model_inputs = tokenizer(example["content"], max_length=512, truncation=True)
    labels = tokenizer(example["title"], max_length=32, truncation=True)
    # labels就是title编码的结果
    # "labels"键是用来存储标题编码结果的。在训练模型时,我们通常需要指定输入的标签或目标,以便计算损失函数并进行模型优化
    model_inputs["labels"] = labels["input_ids"]
    return model_inputs

在这里插入图片描述

processed_datasets = datasets.map(preprocess_function)
processed_datasets

在这里插入图片描述

5、多进程并行处理

使用了4个进程并行地对数据集进行处理,以提高处理速度

processed_datasets = datasets.map(preprocess_function, num_proc=4)
processed_datasets

在这里插入图片描述

6、分批处理

使用了批处理的方式对数据集进行处理,可以处理较大的数据集

processed_datasets = datasets.map(preprocess_function, batched=True)
processed_datasets

在这里插入图片描述

7、批处理&移除列

使用批处理的方式对数据集进行处理,并且移除了原始数据集中的列信息,只保留了处理后的数据集。

processed_datasets = datasets.map(preprocess_function, batched=True, remove_columns=datasets["train"].column_names)
processed_datasets

在这里插入图片描述

五、数据集保存与加载

1、保存数据集到本地

将处理后的数据集processed_datasets保存到当前目录下的"./processed_data"文件夹中。

processed_datasets.save_to_disk("./processed_data")

在这里插入图片描述
执行完成后,本地新增了processed_data文件夹
在这里插入图片描述

2、加载本地数据集

从当前目录下的"./processed_data"文件夹中加载数据集,并将其赋值给变量processed_datasets。

processed_datasets = load_from_disk("./processed_data")
processed_datasets

在这里插入图片描述

六、加载本地数据集

1、load_dataset直接加载本地文件

使用load_dataset函数从指定的文件路径中加载数据集,并将其赋值给变量dataset。其中,data_files参数指定了数据集的文件路径,split参数指定了要加载的数据集的划分方式(这里是"train")。

dataset = load_dataset("csv", data_files="/root/pretrains/ChnSentiCorp_htl_all/ChnSentiCorp_htl_all.csv", split="train")
dataset

输出
在这里插入图片描述

2、Dataset.from_csv加载本地文件

使用Dataset.from_csv方法从指定的文件路径中加载数据集,并将其赋值给变量dataset。

dataset = Dataset.from_csv("/root/pretrains/ChnSentiCorp_htl_all/ChnSentiCorp_htl_all.csv")
dataset

输出
在这里插入图片描述

3、pandas库的read_csv方法加载本地文件

通过预先加载的其他格式转换加载数据集
使用pandas库的read_csv方法从指定的文件路径中读取CSV格式的数据,并将其赋值给变量data。

import pandas as pd

data = pd.read_csv("/root/pretrains/ChnSentiCorp_htl_all/ChnSentiCorp_htl_all.csv")
data.head()

在这里插入图片描述

4、pandas对象转化为数据集

使用Dataset.from_pandas方法将data转换为datasets对象,并将其赋值给变量dataset。

dataset = Dataset.from_pandas(data)
dataset

输出

Dataset({
    features: ['label', 'review'],
    num_rows: 7766
})

5、自定义List加载数据集

定义了一个包含两个字典的列表data,每个字典表示一个样本,其中键为"text",值为字符串类型的文本数据。然后使用Dataset.from_list方法将data转换为datasets对象,并将其赋值给变量dataset。

# List格式的数据需要内嵌{},明确数据字段
data = [{"text": "abc"}, {"text": "def"}]
# data = ["abc", "def"]
Dataset.from_list(data)

输出

Dataset({
    features: ['text'],
    num_rows: 2
})

6、通过JSON加载数据集

使用load_dataset函数从指定的JSON文件中加载数据集,并将其赋值给变量dataset。其中,field参数指定了要加载的数据集的字段名(这里是"data")。

load_dataset("json", data_files="./cmrc2018_trial.json", field="data")

输出
在这里插入图片描述

7、自定义脚本加载数据集

使用自定义的加载脚本load_script.py加载数据集,并将其赋值给变量dataset。其中,split参数指定了要加载的数据集的划分方式(这里是"train")

dataset = load_dataset("./load_script.py", split="train")
dataset

输出
在这里插入图片描述

dataset[0]

输出

{'id': 'TRIAL_800_QUERY_0',
 'context': '基于《跑跑卡丁车》与《泡泡堂》上所开发的游戏,由韩国Nexon开发与发行。中国大陆由盛大游戏运营,这是Nexon时隔6年再次授予盛大网络其游戏运营权。台湾由游戏橘子运营。玩家以水枪、小枪、锤子或是水炸弹泡封敌人(玩家或NPC),即为一泡封,将水泡击破为一踢爆。若水泡未在时间内踢爆,则会从水泡中释放或被队友救援(即为一救援)。每次泡封会减少生命数,生命数耗完即算为踢爆。重生者在一定时间内为无敌状态,以踢爆数计分较多者获胜,规则因模式而有差异。以2V2、4V4随机配对的方式,玩家可依胜场数爬牌位(依序为原石、铜牌、银牌、金牌、白金、钻石、大师) ,可选择经典、热血、狙击等模式进行游戏。若游戏中离,则4分钟内不得进行配对(每次中离+4分钟)。开放时间为暑假或寒假期间内不定期开放,8人经典模式随机配对,采计分方式,活动时间内分数越多,终了时可依该名次获得奖励。',
 'question': '生命数耗完即算为什么?',
 'answers': {'text': ['踢爆'], 'answer_start': [127]}}

load.script.py

import json
import datasets
from datasets import DownloadManager, DatasetInfo


class CMRC2018TRIAL(datasets.GeneratorBasedBuilder):

    def _info(self) -> DatasetInfo:
        """
            info方法, 定义数据集的信息,这里要对数据的字段进行定义
        :return:
        """
        return datasets.DatasetInfo(
            description="CMRC2018 trial",
            features=datasets.Features({
                    "id": datasets.Value("string"),
                    "context": datasets.Value("string"),
                    "question": datasets.Value("string"),
                    "answers": datasets.features.Sequence(
                        {
                            "text": datasets.Value("string"),
                            "answer_start": datasets.Value("int32"),
                        }
                    )
                })
        )

    def _split_generators(self, dl_manager: DownloadManager):
        """
            返回datasets.SplitGenerator
            涉及两个参数: name和gen_kwargs
            name: 指定数据集的划分
            gen_kwargs: 指定要读取的文件的路径, 与_generate_examples的入参数一致
        :param dl_manager:
        :return: [ datasets.SplitGenerator ]

        """
        return [datasets.SplitGenerator(name=datasets.Split.TRAIN, 
                                        gen_kwargs={"filepath": "./cmrc2018_trial.json"})]

    def _generate_examples(self, filepath):
        """
            生成具体的样本, 使用yield
            需要额外指定key, id从0开始自增就可以
        :param filepath:
        :return:
        """
        # Yields (key, example) tuples from the dataset
        with open(filepath, encoding="utf-8") as f:
            data = json.load(f)
            for example in data["data"]:
                for paragraph in example["paragraphs"]:
                    context = paragraph["context"].strip()
                    for qa in paragraph["qas"]:
                        question = qa["question"].strip()
                        id_ = qa["id"]

                        answer_starts = [answer["answer_start"] for answer in qa["answers"]]
                        answers = [answer["text"].strip() for answer in qa["answers"]]

                        yield id_, {
                            "context": context,
                            "question": question,
                            "id": id_,
                            "answers": {
                                "answer_start": answer_starts,
                                "text": answers,
                            },
                        }


七、DataCollator

DataCollatorWithPadding是Hugging Face Transformers库中的一个类,用于处理文本数据。它的主要功能和作用如下:

  1. 填充(Padding): DataCollatorWithPadding可以将不同长度的文本序列进行填充,使它们具有相同的长度。这对于批量输入到神经网络模型中非常重要,因为模型通常要求输入数据具有相同的形状。
  2. 动态填充(Dynamic Padding): DataCollatorWithPadding可以根据输入数据的最大长度动态地调整填充的长度。这意味着如果一个批次中的最长文本序列长度为100,那么所有其他较短的文本序列将被填充至长度为100。
  3. 指定填充值(Padding Value): DataCollatorWithPadding允许用户指定填充值,默认为0。这可以用于区分填充部分和实际文本内容。
  4. 支持多种框架(Framework Support): DataCollatorWithPadding支持多种深度学习框架,包括PyTorch、TensorFlow等。这使得用户可以在不同的框架之间灵活切换,而无需更改数据处理代码。
    DataCollatorWithPadding是一个功能强大的工具,可以帮助用户在处理文本数据时进行填充操作,确保输入数据的一致性和模型训练的稳定性。

1、加载数据集

加载CSV格式的数据集,并对数据进行过滤

from transformers import  DataCollatorWithPadding

dataset = load_dataset("csv", data_files="/root/pretrains/ChnSentiCorp_htl_all/ChnSentiCorp_htl_all.csv", split='train')
dataset = dataset.filter(lambda x: x["review"] is not None)
dataset

输出
在这里插入图片描述

2、数据处理

函数的作用是对输入的文本数据进行分词和截断处理,并将标签添加到结果中

def process_function(examples):
    tokenized_examples = tokenizer(examples["review"], max_length=128, truncation=True)
    tokenized_examples["labels"] = examples["label"]
    return tokenized_examples
tokenized_dataset = dataset.map(process_function, batched=True, remove_columns=dataset.column_names)
tokenized_dataset

在这里插入图片描述

打印前4个样本的信息

print(tokenized_dataset[:4])

在这里插入图片描述

3、数据填充

创建DataCollatorWithPadding对象,用于对数据进行填充

collator = DataCollatorWithPadding(tokenizer=tokenizer)
collator

输出

DataCollatorWithPadding(tokenizer=BertTokenizerFast(name_or_path='bert-base-chinese', vocab_size=21128, model_max_length=512, is_fast=True, padding_side='right', truncation_side='right', special_tokens={'unk_token': '[UNK]', 'sep_token': '[SEP]', 'pad_token': '[PAD]', 'cls_token': '[CLS]', 'mask_token': '[MASK]'}, clean_up_tokenization_spaces=True),  added_tokens_decoder={
	0: AddedToken("[PAD]", rstrip=False, lstrip=False, single_word=False, normalized=False, special=True),
	100: AddedToken("[UNK]", rstrip=False, lstrip=False, single_word=False, normalized=False, special=True),
	101: AddedToken("[CLS]", rstrip=False, lstrip=False, single_word=False, normalized=False, special=True),
	102: AddedToken("[SEP]", rstrip=False, lstrip=False, single_word=False, normalized=False, special=True),
	103: AddedToken("[MASK]", rstrip=False, lstrip=False, single_word=False, normalized=False, special=True),
}, padding=True, max_length=None, pad_to_multiple_of=None, return_tensors='pt')

创建DataLoader对象,指定批量大小为4,使用collator进行数据填充,并进行随机打乱

from torch.utils.data import DataLoader

dl = DataLoader(tokenized_dataset, batch_size=4, collate_fn=collator, shuffle=True)
#获取下一个批次的数据
next(enumerate(dl))

输出

	(0,
 {'input_ids': tensor([[ 101, 1057,  857,  749, 6121, 3124, 2145, 2791, 8024, 2600,  860, 3341,
          6432, 8024, 6983, 2421, 6820,  679, 7231, 8024, 3302, 1218, 1447, 4638,
          5162, 6574,  738, 3683, 6772, 7770,  511, 2215, 1071, 3221, 6121, 3124,
          3517, 2231, 4638, 3302, 1218, 1447,  966, 2533, 6134, 2813,  511,  704,
          7623, 7667, 4638, 3343, 2376, 5831, 2523, 1962, 1391, 8024, 4384, 1862,
           738, 6820,  679, 7231, 8024,  966, 2533, 2972, 5773, 8013, 6432, 6432,
          5375, 4157, 1416, 8038, 1765, 3175, 3300,  671, 4157,  974, 8024, 4895,
          6205, 3959, 1920, 5276, 8115, 1146, 7164, 6756, 4923, 8024, 2802, 6756,
           679, 2159, 3211, 8024,  679, 6814,  680, 2791,  817, 1276, 6981, 3341,
          4692,  738, 5050, 1394, 4415,  511,  852, 3297, 1400,  671, 1921, 6842,
          2791, 3198, 8024, 2769,  812, 2347, 5307,  102],
         [ 101, 2600,  860, 2697, 6230,  679, 7231,  119,  817, 3419, 6844,  704,
           119, 4500, 7623, 3340,  816,  671, 5663,  119, 6983, 2421, 5632, 2346,
          4638, 7623, 1324,  679, 1922, 1962,  117, 7392, 1880, 4638, 1920, 6825,
          3862, 7831, 7623, 7667, 2213, 1377,  117,  852,  679, 5543, 1762, 6983,
          2421, 2145, 2791, 5041, 1296,  117,  679, 3221, 2523, 3175,  912,  119,
           102,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
             0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
             0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
             0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
             0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
             0,    0,    0,    0,    0,    0,    0,    0],
         [ 101, 2791, 7313, 3300, 5273,  510, 7942,  510, 5905,  676, 4905, 5682,
          6444,  511, 1057,  857, 3198, 8024, 1184, 1378, 6820,  712, 1220, 6418,
          7309, 6848, 2885, 1525, 4905, 7582, 5682, 4638, 2791, 7313,  119, 2414,
           677, 4500, 1501, 2523, 5653, 6844,  119, 2697, 6230, 3221, 1059, 3469,
          4638,  511, 2791, 7313, 6006, 2207, 8024,  852, 6163,  934, 7599, 3419,
          4324, 4294, 8024,  966, 2533,  671,  857,  511,  102,    0,    0,    0,
             0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
             0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
             0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
             0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
             0,    0,    0,    0,    0,    0,    0,    0],
         [ 101, 2496, 1765, 3297, 1962, 4638, 8024, 1762, 1059, 1744, 5050, 2595,
           817, 3683,  679, 7231, 4638,  758, 3215, 5277, 6983, 2421,  102,    0,
             0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
             0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
             0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
             0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
             0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
             0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
             0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
             0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
             0,    0,    0,    0,    0,    0,    0,    0]]), 'token_type_ids': tensor([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0],
         [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0],
         [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0],
         [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0]]), 'attention_mask': tensor([[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
          1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
          1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
          1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
          1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
          1, 1, 1, 1, 1, 1, 1, 1],
         [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
          1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
          1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0],
         [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
          1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
          1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0],
         [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0]]), 'labels': tensor([1, 1, 1, 1])})

总结

本文介绍了Hugging Face Transformer库中的Datasets组件,包括如何加载数据集、查看数据集、划分数据集、选择、过滤和映射数据集、保存和加载数据集以及使用DataCollator处理文本数据。通过这些功能,可以方便地对数据集进行预处理和后处理,为训练AI模型提供高质量的数据。

在这里插入图片描述

🎯🔖更多专栏系列文章:AIGC-AI大模型探索之路

如果文章内容对您有所触动,别忘了点赞、⭐关注,收藏!加入我,让我们携手同行AI的探索之旅,一起开启智能时代的大门!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1641839.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何使用提示测试为LLMs构建单元测试?

原文地址:how-to-build-unit-tests-for-llms-using-prompt-testing 确保您的人工智能交付:快速测试完美生成应用程序的基本指南 2024 年 4 月 26 日 如果你曾经编写过软件,你就会知道测试是开发过程中必不可少的一部分。特别是单元测试&#…

windows系统网页卡死的时候 解决办法

第一种办法 同时按下ctrlshiftdelete键,清除缓存 如果这种办法不行,强制退出再打开还不行的话,再试第二种办法 第二种办法 打开f12开发者工具,如图在application标签页下,打开local storage, 右键选中virt…

Slave SQL线程与PXB FTWRL死锁问题分析

1. 问题背景 2.27号凌晨生产环境MySQL备库在执行备份期间出现因FLUSH TABLES WITH READ LOCK未释放导致备库复制延时拉大,慢日志内看持锁接近25分钟未释放。 版本: MySQL 5.7.21PXB 2.4.18 慢查询日志: 备份脚本中的备份命令:…

Hibernate执行流程分析及配置文详解

目录 1、Hibernate执行流程分析及配置文件详解 1)Configuration对象 2)ServiceRegistry对象(hibernate4的新特性) 3)SessionFactory对象 4)Session对象 5)Transaction对象 6)…

算法打卡day41

今日任务: 1)198.打家劫舍 2)213.打家劫舍II 3)337.打家劫舍III 4)复习day16 198.打家劫舍 题目链接:198. 打家劫舍 - 力扣(LeetCode) 你是一个专业的小偷,计划偷窃沿街…

AttributeError: module ‘numpy‘ has no attribute ‘int‘.

问题描述 复现代码过程中遇到错误:AttributeError: module numpy has no attribute int. 错误代码行: self.sf np.int(data[sf][0,...].squeeze().cpu().numpy()) # scale factor 解决方案 这是因为在Numpy 1.2.0版本中就已经弃用了这个用法&#x…

探索动态内存开辟的奥秘

✨✨欢迎👍👍点赞☕️☕️收藏✍✍评论 个人主页:秋邱博客 所属栏目:C语言 前言 开始之前,我们先来了解一下C/C中程序内存区域划分。 在C/C程序中,内存区域通常被划分为以下几个部分: 1.栈&…

【基础算法总结】滑动窗口一

滑动窗口 1.长度最小的字数组2.无重复字符的最长子串3.最大连续1的个数 III4.将 x 减到 0 的最小操作数 点赞👍👍收藏🌟🌟关注💖💖 你的支持是对我最大的鼓励,我们一起努力吧!😃&…

软件测试(实验五)——Jmeter的使用

目录 实验目的 一、使用JMeter演示取样器、监听器、配置元件、断言的使用; 1、取样器 2、监听器 3、配置元件的使用 ① 用户定义的变量 ②HTTP信息头管理器 ③HTTP请求默认值 ④CSV数据文件设置 4、断言 ①响应断言 ②JSON断言 ③断言持续时间 二、使用…

普通二维码打开微信小程序并且传递参数

实现方法: 【1】确保有一个企业级别的认证过的微信小程序 【2】有一个https并且备案过的域名 【3】进入微信后台“开发”-“开发设置”-“扫普通链接二维码打开小程序”-“添加” 官方文档:https://developers.weixin.qq.com/miniprogram/introduction/q…

C语言实验-学生信息管理系统

按以下菜单界面编写学生信息管理系统; 1)录入学生信息首先输入学生人数,然后根据学生人数开辟动态数组; 2)学生信息包括学号、姓名、性别、三门课成绩、总分;其中学号、姓名、 性别、三门课成绩是需要从键盘…

YOLO自研模块:多尺度轻量化卷积模块

目录 一、原理 二、代码 三、配置文件 一、原理 不同大小的卷积核,提取目标特征的特征尺度不同,所以通过使用不同大小卷积核的卷积来提取特征就可以保证获取到目标的多尺度特征。 借鉴YOLOv8中,将通道数进行划分的操作,在卷积的输入过程中为了减小参数量,将输入通道数…

截图时,VSCode屏幕泛白

问题如图所示: 放弃前摇,直接给出解决方案:换个主题即可。 实测,Light Modern 的色域正常,其他的没有经过测试。 出现这个问题的原因,大概率就是色彩空间不匹配。 HDR 内容是为了在支持 HDR 的显示设备上展…

H3C MSTP 实验

H3C MSTP 实验 实验拓扑 ​​ 实验需求 所有交换机上创建 Vlan10,Vlan20,Vlan30 和 Vlan40所有交换机之间的端口配置为 Trunk,并放行相关 VLAN按照图示分区域配置 MSTP,并配置主备根网桥 实验步骤 VLAN基础配置(…

C++ 多态(二)

四、多态纯虚函数 纯虚函数是在C中用来定义抽象类的一种特殊函数。纯虚函数没有具体的实现,只有函数声明,它的作用是为派生类提供一个接口,让派生类必须实现这个函数。如果一个类中包含了纯虚函数,那么这个类就是抽象类&#xff…

史上最复杂的探测器嫦娥六号,如何采取人类首份月背样品? | 最新快讯

作者:LM-51D-YZ4D2,航天爱好者 今天,长征五号遥八火箭即将从海南文昌航天发射场点火起飞,把嫦娥六号探测器送入预定轨道。作为嫦娥五号的备份器,嫦娥六号继承了嫦娥五号的结构,又针对月球背面着陆进行了优化…

6.【Orangepi Zero2】localtime、asctime函数

【Orangepi Zero2】localtime、asctime函数 localtime、asctime localtime、asctime #include <time.h>struct tm *localtime(const time_t *timep); char *asctime(const struct tm *tm);localtime() 是 把从1970-1-1零点零分到当前时间系统所偏移的秒数时间转换为本地…

批量视频剪辑新选择:一键式按照指定秒数分割视频并轻松提取视频中的音频,让视频处理更高效!

是否经常为大量的视频剪辑工作感到头疼&#xff1f;还在一个个手动分割、提取音频吗&#xff1f;现在&#xff0c;我们为你带来了一款全新的视频批量剪辑神器&#xff0c;让你轻松应对各种视频处理需求&#xff01; 首先&#xff0c;进入媒体梦工厂的主页面&#xff0c;并在板…

后台架构总结

前言 疫情三年&#xff0c;全国各地的健康码成为了每个人的重要生活组成部分。虽然过去一年&#xff0c;但是回想起来任然历历在目。 今天我就通过当时基于小程序的健康码架构&#xff0c;来给大家讲一下如何基于java&#xff0c;springboot等技术来快速搭建一个后台业务系统…

freeRTOS任务通知(1-17)

任务通知简介&#xff1a; def&#xff1a; 任务通知是用来通知任务的&#xff0c;任务控制块中的结构体成员变量ulNotifiedValue就是这个通知值。 任务通知的内存消耗比较小 1&#xff1a; 使用队列&#xff0c;信号量&#xff0c;时间标志组都需要另外创建结构体&#xff…