首页/新闻资讯/正文详情

【LLM】第二章:HuggingFace入门+大模型初体验

发布时间:2026/11/6 1:31:23 来源:云帆数科 栏目:资讯中心
【LLM】第二章:HuggingFace入门+大模型初体验
【LLM】第二章HuggingFace入门学习说明学习大模型会使用HuggingFace是必备的因为HuggingFace是AI大模型的平台。HuggingFace之于大模型就像pytorch之于神经网络一样。所以本章我们先入门一下HuggingFace的基本操作。一、HuggingFace概述HuggingFace是一个提供开源预训练模型和相关工具链的平台目前已经是一个完整的AI开发生态系统支持NLP、计算机视觉、语音处理、多模态任务等多个领域。我们使用HF可以简化预训练模型的使用加速项目的开发和落地。HF生态系统主要由两个核心部分组成1、HuggingFace Hub,是一个提供托管和分享模型、数据集、各种AI应用的开源平台。1HuggingFace官网地址https://huggingface.co/ 官网我们国内一般访问不了。2国内镜像地址HF-Mirror 我们一般用这个镜像地址。3国内类似的网站还有比如ModelScope2、HuggingFace上的重点库(Libraries)HF提供了一套围绕预训练模型构建的工具库覆盖从数据处理到模型训练与推理的完整流程。我们只需要重点学习下面3个库即可1Transformers库用于加载、使用各种微调方法训练模型、保存预训练模型。支持数百种预训练模型用于只需要from_pretrained()直接加载公开模型就可以进行训练和推理。2Tokenizers库用于将文本转化为模型输入的工具。比如文本分词、编码(token ID)、处理特殊符号、填充(padding)、attention mask、句子对标记(token type ID)等我们一般称为分词器。由于每个模型它的特殊符号、输入格式都不一样所以每个模型都有其对应的Tokenizer我们一般加载model的时候也加载其tokenizer。3Datasets库用于加载和处理数据集的工具库。支持在线仓库、本地文件加载数据、数据清洗、编码、切分等预处理操作。处理后的数据可直接用于模型训练。3、安装工具首先先安装这3个包pip install transformers datasets tokenizers本篇重点演示如何使用这些工具。二、预训练模型的加载1、下载预训练模型如果你是window系统你需要在你的环境变量中添加HF_ENDPOINThttps://hf-mirror.com ,如下图所示这样AutoModel会根据模型名称从hf-mirror上下载所需的模型权重和模型的配置文件这些文件默认下载到~/.cache/huggingface/hub/下面。下次你再加载的时候就会直接先从缓存中读取不再联网下载了。这是我们下载完毕的bert-base预训练模型2、加载本地已有的预训练模型假如我们本地就已经有bert-base和其对应的配置文件了我们只需要加载一下即可3、添加带任务头(Task Head)的大模型1上面的AutoModel只是加载预训练的主干结构我们想把模型迁移到具体的下游任务上我们还得添加适配具体任务的输出层也就是我们通常说的任务头(Task Head)。 Transforms也提供了添加具体任务头的类这样模型就可以直接用于分类、命名实体识别、问答等任务的训练和推理了。2示例用AutoModelForSequenceClassification直接加载带任务头的bert-base预训练模型三、简单体验一下HF上的大模型就是我们先在线访问几个大模型体验一下效果。然后再下载几个大模型到本地体验一下本地运行的效果。最后我们再用HF微调框架本地微调一个模型。一使用Inference API在线访问大模型并进行推理Hugging Face Inference API无服务器推理API,就是HF的云端模型调用接口用户只需要发一条http请求给HF云端服务器云端运行模型推理服务并把结果返回用户。所以运行下面的代码首先你要保证你可以通畅地访问HF。1、匿名在线访问hf上的中文GPT2模型uer/gpt2-chinese-cluecorpussmall,让模型续写import requests API_URL https://api-inference.huggingface.co/models/uer/gpt2-chinese-cluecorpussmall re requests.post(API_URL, json{inputs:你好hugging face!}) re re.json()2、非匿名在线访问hf上的英文gpt2模型models--gpt2让其续写得使用API_TOKENAPI_TOKEN是你注册HF网站的时候免费获得的也是你身份的标志。import requests API_URL https://api-inference.huggingface.co/models/gpt2 #英文模型 API_TOKEN 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 #这里是你注册hf时hf会给你生成一个身份串 headers {Authorization:fBearer {API_TOKEN}} #header就是你的用户名和API_TOKEN response requests.post(API_URL, headersheaders, json{inputs:你好hugging face!}) response response.json()3、pipeline也可以远程调用HF的Inference APIHF的pipeline工具就是用来进行端到端推理的所以pipeline不仅可以本地推理也可以远程推理。但它只适用hf平台的模型其他平台的模型就不一定了。from transformers import pipeline API_TOKEN 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 #这是你注册时的api token generator pipeline(text-generation, modelgpt2, use_auth_tokenAPI_TOKEN) #英文GPT2模型 output generator(你好hugging face!, max_length50) output说明上面访问的gpt2都是一个续写模型就是我们先写个开头你好hugging face!模型顺着这句话继续续写。当然模型续写的内容也不一定是我想要的内容所以一般我们都不会在线访问大模型不实用。如果我们想让gpt2写一些我们想要的内容比如对联、古诗词、或者小说等内容。此时在线访问的方式是得不到我们想要的结果的。此时我们就需要把gpt2下载到本地然后用本地的对联、古诗词、或者小说等语料微调模型训练完毕后调用本地的这个模型进行推理才能生成我们想要的内容。二把模型下载到本地本地调用并进行推理1、将模型gpt2-chinese-cluecorpussmall下载到本地直接用pipeline进行文本生成from transformers import pipeline model_path D:\BigModels\gpt2\models--uer--gpt2-chinese-cluecorpussmall\snapshots\c2c0249d8a2731f269414cc3b22dff021f8e07a3 #已经下载到本地的大模型而且路径已经不在~/.cache中的大模型 #此时加载模型的路径一定要在snapshots下能看到config.json文件的目录下加载才能顺利加载并推理 generator pipeline(tasktext-generation, modelmodel_path) generator prompt 你好hugging face! output generator(prompt, max_new_tokens100) output2、将模型gpt2-chinese-cluecorpussmall下载到本地用AutoModelForCausalLM、AutoTokenizer进行个性化设置推理说明我想让模型做续写任务的如果你用AutoModel加载的模型就会有一层任务头层报参数没有初始化此时就没法推理了。所以这里我们调用AutoModelForCausalLM接口。from transformers import AutoModelForCausalLM, AutoTokenizer,pipeline model_path D:\BigModels\gpt2\models--uer--gpt2-chinese-cluecorpussmall\snapshots\c2c0249d8a2731f269414cc3b22dff021f8e07a3 model AutoModelForCausalLM.from_pretrained(model_path) ##只要传入地址就加载成功了 tokenizer AutoTokenizer.from_pretrained(model_path) #用Pipeline实例化一个生成器 generator pipeline(text-generation, modelmodel, tokenizertokenizer) #用更多的参数调整模型的输出效果 prompt 你好hugging face! output generator(prompt, max_new_tokens100, num_return_sequences3, truncationTrue, temperature0.7, top_k50, top_p0.9, clean_up_tokenization_spacesFalse) output参数说明1“你好hugging face!”这是生成文本的输入种子文本也叫prompt也叫硬提示词模型会根据这个种子文本生成后续的文本。GPT2默认就是一个续写模型。2max_length:指定生成文本的最大长度。这里的100表示生成的文本最多包含100个标记(tokens)。3num_return_sequences: 指定返回多少个独立生成的文本序列。这里的3表示生成并返回3段文本。4truncation: 是否截断输入文本以适应模型的最大输入长度。如果true超出模型最大输入长度的部分就被截断如果false可能会出现模型无法处理过程输入而出现报错情况。5temperature: 控制生成文本的随机性。值越低倾向选择概率较高的词生成的文本越保守值越高倾向选择更多不同的词生成的文本更多样。我们一般设置为0.7既不保守也不激进。6top_k: 表示模型在每一步生成时仅从概率最高的K个词中选择下一个词。50表示模型在生成每个词时只考虑概率最高的前50个候选词从而减少生成不太可能的词的概率。7top_p: 该参数又称核采样用于进一步限制模型生成时的词汇选择范围。它会选择一组累计概率达到p的词汇模型只会从这个概率集合中采样。0.9表示模型只会在累计可能性的90%的词汇中选择。8clean_up_tokenization_spaces:表示生成的文本中是否清理分词时引入的空格。true表示清除空格false表示保留原样。默认值是false。3、用roberta-wwm-ext模型做分类任务不训练直接推理hfl/chinese-roberta-wwm-ext是哈工大发布一个大模型是RoBERTa的一个变种去掉NSP(下一句预测)而且特别针对中文进行了优化。所以是一款中文效果很强的预训练模型适合做中文NLP任务的基座模型。“wwm”代表“word-level whole word masking”就是在预训练过程中采用了整词掩码Whole Word Masking, WWM策略不是单独掩码一个汉字而是掩住一个词语这更贴合中文语义。“ext”是extended的意思扩展数据集语料不仅有维基百科还加入了大量新闻、网页等中文文本训练数据量更大。from transformers import AutoModel, AutoTokenizer, AutoModelForSequenceClassification from sklearn.metrics import accuracy_score, f1_score #在线下载模型和相应的tokenizer下载的文件都在本地的~/cache目录下 model AutoModelForSequenceClassification.from_pretrained(hfl/chinese-roberta-wwm-ext,num_labels3) #第一个参数是模型名第二个是3分类 tokenizer AutoTokenizer.from_pretrained(hfl/chinese-roberta-wwm-ext) #准备数据 df pd.DataFrame([{text:这个产品真的很好用, label:0}, {text:还可以吧没有特别惊喜, label:1}, {text:非常失望再也不会买了, label:2}, {text:非常喜欢这个设计, label:0}, {text:一般般没太多感觉, label:1}, {text:服务太差了, label:2}]) inputs tokenizer(df[text].tolist(), paddingTrue, truncationTrue, max_length128, return_tensorspt) labels torch.tensor(df[label].tolist()) #不训练直接推理 #model.eval() with torch.no_grad(): outputs model(**inputs) print(outputs) predictions torch.argmax(outputs.logits, dim1) print(predictions) acc accuracy_score(labels, predictions) f1 f1_score(labels, predictions, averagemacro) acc, f1三把模型下载到本地用FH框架本地微调roberta-wwm-ext大模型下面代码是在HF框架下微调hfl/chinese-roberta-wwm-ext大模型做二分类任务。from transformers import AutoModel, AutoTokenizer, AutoModelForSequenceClassification from sklearn.metrics import accuracy_score, f1_score from datasets import load_dataset from transformers import TrainingArguments, Trainer #下载模型和相应的tokenizer model AutoModelForSequenceClassification.from_pretrained(hfl/chinese-roberta-wwm-ext,num_labels2) #下载到~/cacha中了 tokenizer AutoTokenizer.from_pretrained(hfl/chinese-roberta-wwm-ext) #准备数据 dataset load_dataset(csv, data_filesstr(D:\pytorch-data\online_shopping_10_cats.csv)) #是一个二分类数据集 dataset1 dataset[train].remove_columns(cat) #删除不需要的列 dataset2 dataset1.filter(lambda x:x[review] is not None) #删除一行空行 def preprocess(sample): return tokenizer(sample[review], truncationTrue, paddingmax_length, max_length128) encoded_dataset dataset2.map(preprocess) encoded_dataset #定义训练参数 training_args TrainingArguments(output_dir./trained_models, #模型保存的目录 per_device_train_batch_size4, #batch大小 num_train_epochs5, #训练几个epoch logging_steps5, #每隔5步打印一次日志, 就是训练5个batch就打印一次 save_steps10) #每隔10步保存一次模型检查点checkpoint 1个batch权重更新1次就是1步step #定义训练器这是hf提供的高级别的训练封装器 trainer Trainer(modelmodel, argstraining_args, train_datasetencoded_dataset) trainer.train()四用roberta-base-chinese-extractive-qa本地搭建问答模型用pipeline测试效果roberta-base-chinese-extractive-qa是在roberta-wwm-ext底座之上用阅读理解数据集微调得到的成品问答模型。extractive,抽取式阅读理解问答。抽取式QA和生成式问答模型不一样抽取式问答的答案必须在原文中模型不自己造新答案。是token级别的分类任务。抽取式轻量、速度快、显存需求小。GPT\Qwen\Llama等都是生成式大模型。# 将模型roberta-base-chinese-extractive-qa下载到本地搭建问答系统也就是阅读理解直接用pipeline推理 from transformers import AutoModel, AutoModelForQuestionAnswering, AutoTokenizer,pipeline #model_path https:/api-inference.huggingface.co/models/uer/roberta-base-chinese-extractive-qa #这个地址可以在线下载模型 model_path rD:\BigModels\roberta\models--uer--roberta-base-chinese-extractive-qa\snapshots\9b02143727b9c4655d18b43a69fc39d5eb3ddd53 model AutoModelForQuestionAnswering.from_pretrained(model_path) #本地模型加载 tokenizer AutoTokenizer.from_pretrained(model_path) #用Pipeline实例化一个qa_pipeline qa_pipeline pipeline(question-answering, modelmodel, tokenizertokenizer) #定义问题与上下文 QA_input {question:hugging face是什么, context:hugging face是一个自然语言处理平台是一款AI开发工具。} answer qa_pipeline(QA_input) answer四、Tokenizer的加载和使用1、在线加载Tokenizer在Transformers库中AutoTokenizer类是用于加载与指定模型配套的分词器该类可以根据模型名称自动选择并实例化正确的分词器类型比如BertTokenizer、GPT2Tokenizer、T5Tokenizer等。下面示例如何加载bert-base配套的分词器可见AutoTokenizer会帮我们下载词表、tokenizer的配置文件、token和id之间对应关系的文件这3个文件文件保存路径和AutoModel一样。下载完毕后AutoTokenizer就根据词表和配置文件实例化一个Tokenizer对象。2、离线加载Tokenizer当我们自己本地就有词表和配置文件我们就可以从本地路径加载3、Tokenizer的使用1字词切分不同模型采用的分词算法是不一样的欲知详情请参考【NLP】第二章分词算法BPE、WordPiece、Unigram、分词工具jieba_nlp分词策略-CSDN博客所以不同的分词算法--导致词的切分不同--导致词表不同--导致词的编码不同--导致不同的词id。也所以不同模型配套着不同的Tokenizer。不同的Tokenizer就会把你喂入模型的文本切分成不同的token。也所以不同模型就对应不同的词id映射。也就是同一个词BERT预训练模型对应的id可能是100而T5模型的id可能就是1000。2编码(encode)编码是词id特殊token后的编码。比如你给Tokenizer一句文本它分词--按照词表将词转id--再自动添加如[CLS]和[SEP]等特殊token或者进行添加padding、truncate等操作。重点1不同模型使用的特殊token都不一样所以你使用哪个模型你要配套使用它对应的词表这样就不会弄错特殊token。重点2padding和truncate是截断和补齐的意思就是超过规定长度的文本要被截断小于规定长度的文本要被补齐。不同模型支持不同的文本长度这些超参数都放在配置文件中所以要使用配套的tokenizer文件。说明这些api的功能很多所以参数的逻辑也很多我上面的示例仅仅是冰山一角想要知道更多的个性化操作最好自己查阅这个tokenizer的文档文档里面有各种参数的详细说明。3解码(decode)4直接构造模型所需的输入tokenizer()方法tokenizer()方法是最有用的一个API。tokenizer()底层调用的是__call__方法这个方法打包了分词、转id、添加特殊token、padding和truncate操作、辅助输入各种mask等。所以它生成的序列可以直接喂入模型。这种是输入单个句子的情况。返回三个对象一个是添加了特殊token的序列id一个是BERT的段落嵌入id一个是注意力模型中的maskBERT的注意力模型是不需要mask的所以都是11表示不遮盖。我们再看看句子对儿和一个batch的句子的情况4、自定义字典五、分词器和模型的配合使用方式1、我们先看看BERT预训练模型的输出import torch from transformers import AutoModel from transformers import AutoTokenizer #这是我要测试的数据 texts [闲看庭前花开花落漫随天外云卷云舒。, 晚风漫过山野星河温柔抚平世间所有疲惫‌学会与生活握手言和 。, 我爱自然语言处理] #加载模型 model AutoModel.from_pretrained(google-bert/bert-base-chinese) #加载分词器 tokenizer AutoTokenizer.from_pretrained(google-bert/bert-base-chinese) #测试数据在BERT主体模型中前向传播一次 inputs tokenizer(texts, paddingTrue, return_tensorspt) with torch.no_grad(): output1 model(**inputs) output1.last_hidden_state.shape output1.pooler_output.shape output12、再看看带任务头的BERT的输出import torch from transformers import AutoModel, AutoTokenizer, AutoModelForSequenceClassification #这是我要测试的数据 texts [闲看庭前花开花落漫随天外云卷云舒。, 晚风漫过山野星河温柔抚平世间所有疲惫‌学会与生活握手言和 。, 我爱自然语言处理] #加载模型 model AutoModel.from_pretrained(google-bert/bert-base-chinese) #被BERT预训练模型添加一个5分类的任务头 model_full AutoModelForSequenceClassification.from_pretrained(google-bert/bert-base-chinese, num_labels5) #加载分词器 tokenizer AutoTokenizer.from_pretrained(google-bert/bert-base-chinese) #测试数据前向传播一次 inputs tokenizer(texts, paddingTrue, return_tensorspt) with torch.no_grad(): output2 model_full(**inputs) output2A、B处因为大模型和我们深度学习的模型不太一样大模型包装得更多大模型的输出直接就是loss!意思是你还得给大模型传标答这样大模型在前向传播后自动就帮你计算了loss你连loss计算都省了因为这个示例中我没有传标答所以lossNone但是大模型还是给我返回了logits,logits是最后任务头线性层的输出所以有正有负。下面我们看看给模型传入Label的情况那么大模型究竟是怎么计算loss的呢多分类任务自然是交叉熵损失了下面我手动给大家验证一下可见大模型计算的是样本的平均损失如果连这个损失都不明白怎么计算的同学说明基础太差相关知识点可以参考这篇博文中最后的补充知识点【LLM】第四章项目实操案例文本情感分析_llm训练实例-CSDN博客也可以参考我之前的基础系列https://blog.csdn.net/friday1203/category_12824284.html?spm1001.2014.3001.5482六、Datasets库datasets是hf提供的一个轻量级数据处理库。它是原始数据和hf中的tokenizer之间的承接件。主要功能有读取hf中的开源线上数据集读取本地的线下数据集字段筛选就是数据清洗比如筛选列筛选空行等数据清洗工作批量映射就是.map()方法后面会有详细介绍训练集、验证集的划分就是.train_test_split()方法。1、安装datasets库pip install datasets2、自制数据集from datasets import Dataset data_dic {text:[闲看庭前花开花落漫随天外云卷云舒。, 晚风漫过山野星河温柔抚平世间所有疲惫‌学会与生活握手言和 。, 我爱自然语言处理], label:[0, 1, 1]} dataset Dataset.from_dict(data_dic) dataset3、加载本地数据集load_dataset()接口说明本地数据来源是使用之前的情感分析案例 【NLP】第八章项目实操案例文本情感分析-CSDN博客 中的数据为例的。datasets库提供了统一的接口load_dataset(),支持CSV、JSON、Parquet三种格式并允许一次加载一个或多个文件。其中Parquet是一种列式存储文件是大数据领域中常见的存储方式。dataset load_dataset(json, data_files路径或字典)load_dataset的参数说明第1个参数可选csv、json、parquet第2个参数dta_files路径或字典。1示例1加载本地的多个CSV文件说明上面是以csv格式文件为例json文件也是同理。2示例2加载本地的、单个的、CSV或者JSON文件说明加载单个文件返回的还是一个字典对象。3示例3抽样加载部分数据当原始语料太多要加载很长时间时可以先加载部分数据4小结一是参数data_files的值是字符串形式的路径。所以如果你的文件就在当前路径下你直接写文件名即可。但是如果你的文件在别的路径下此时你得把你拼接的路径用str转化一下。二是load_dataset()接口默认的就是加载多个文件所以加载单文件返回的也是一个字典。三是当原始数据太大我们想要部分数据测试时可以用shuffleselect加载部分数据。4、DatasetDict对象和Dataset对象从上面例子中我们可以看出load_dataset返回的是DatasetDict对象DatasetDict对象是一个字典。字典中每个元素的值都是一个Dataset对象这个Dataset对象是HuggingFace datasets库中的Dataset对象和我们torch.utils.data中的Dataset不是一个东西和pandas中的DataFrame也不是一个东西它也是一个二维表格数据但是是按列组织数据的如果想查看表格形式的数据可以使用Dataset对象的内置方法将其转化为pandas的DataFrame格式查看5、加载hf上的开源数据集hf提供了大量的开源数据集涵盖文本分类、问答、翻译、摘要等任务。你首先登录到hf-mirror然后找到dataset,然后找到你要的数据集然后从网站上下载到本地然后用load_datase读取即可。当然你也可以在线下载下面是一个示例6、预处理数据集预处理指数据清洗比如删除某行、过滤样本、划分子集、转张量类型等操作。1删除列、过滤行说明数据清洗操作都是映射操作就是删除不是真删除只是映射删除所以你的操作结果要再赋值给一个新变量新变量才是删除后的数据。2划分数据集当数据集中的样本是均衡时就用下面示例的简单分法说明划分数据集只能针对一个个dataframe进行split不能在DatasetDict上split。当我们数据集的样本不均衡时我们希望随机划分训练集和测试集时能按照标签列的分布来划分时报错的原因是Dataset对象中的各个字段的数据类型引起的。所以下面详细讲解一下Dataset对象的类型。3Dataset对象的数据类型前面我们已经说过Dataset对象是一个按列组织的表格数据。既然是表格数据又是按列保存的那每列的数据类型就得规定明确。那我们如何查看各列的数据类型呢使用Dataset对象的.features方法来查看Dataset对象的.features方法返回值是表格数据的各个字段的类型它是表格每列数据在计算机底层的保存格式。但是上图示例的数据有点简单其实不仅有上图示例中的Value类型还有比如ClassLabel格式比如下面例子意思就是Dataset有一列它的值都是equivalent和not_equivalent或者说Dataset中有一列数据一般都是标签列但是这个标签列不是0123...这种类别编号的值而是有限个文本格式的值比如这个例子中的等价、不等价这种标签。datasets库作为大模型的配套库它是支持这种文本表示的标签的这种列就是ClassLabel类型。相反datasets却是不支持标答是0123...的这种列的因为大模型能返回自然语言答案会显得更智能一些所以它会维护一份编码和文本类型的词表直接返回用户文本。但是又因为训练模型还得用数字类型的标答所以datasets会在底层自动把文本转换成数字编码并且维护一份ClassLabel.int2str()和ClassLabel.str2int()将来我们用模型推理时就非常方便将结果转换成文本。下面示例如何强制将我们label列的数据类型从value转化成ClassLabel类型强制转换后我们再用label列的分布来随机切分训练集和测试集就不会报错了七、Datasets和Tokenizer的联合使用Datasets.map()方法编码样本前面讲的Dataset是加载原始数据、清洗原始数据、划分数据集等操作。这些操作完成后就该使用分词器Tokenizer把数据集中的样本进行分词、编码、添加特殊token、padding和截断、解码等操作了。所以此时就涉及到Datasets和Tokenizer的搭配使用。Datasets.map()方法支持对整个数据集中的每一条样本或每一批样本进行tokenize处理。将该方法与tokenizer配合就可以将原始文本样本编码成模型可用的输入格式比如BERT模型要求的input_ids、attention_mask、token_type_ids格式。Datasets.map()的语法说明上面的参数只是几个最重要的参数其实.map()方法还有很多参数大家最好是去看看文档。下面是示例1、准备工作数据集加载--预处理--划分训练集和测试集2、对DatasetDict对象进行tokenize示例一次性批量处理了2个Dataset对象。.map()方法将其function参数的返回值updata到dataset3中。就是如果dataset3中如果有function返回的列就不添加如果没有就添加。所以返回值dataset4中变长5个字段。3、对Dataset对象、批量的tokenize示例批处理就是一次性处理完毕Dataset对象中的所有样本。这种场景适用于训练阶段。4、对Dataset对象、单个样本的tokenize示例这种底层是对Dataset对象中样本一个个进行tokenize。这种场景适用于测试阶段。八、保存和加载DatasetDict、Dataset对象我们在数据预处理和tokenizer的过程中生成很多DatasetDict对象和Dataset对象这些数据都是可以保存到本地以供后续训练或复用避免重复处理。Datasets提供了下面几种保存方式适用于不同场景1、Arrow格式数据的保存和加载.save_to_disk()和load_from_disk()HuggingFace官方推荐的数据持久化方式是Arrow格式既支持单个Dataset也支持多个子集的DatasetDict对象。Arrow格式的性能比较高是一个二进制文件的格式。而CSV和JSON文件都是文本文件得格式所以我们打开csv文件或者json文件我们都是认识文件中的字符的。而二进制文件我们人类是看不懂的是计算机认识的符号。所以如果你追求性能就选择Arrow格式如果你追求可读性就用CSV或者JSON格式。1下图是如何将DatasetDict保存成Arrow格式的示例保存用.save_to_disk(路径)即可连文件名都不需要自动就保存成2个文件夹。2下图是如何加载多个Arrow格式文件的示例注意文件名路径写到processed层即可此时加载的就是DatasetDict对象就是加载两个文件。3下图是如何加载单个Arrow格式文件的示例说明load_dataset是在线调用dataset需要保持网络畅通它会先在cache目录中检查是否有文件如果有就加载如果没有就在线下载并加载。而且load_datase可以加载多种格式的数据。load_from_disk是本地调用dataset并且加载的数据集格式必须是datasets格式的数据集就是HF自己的数据格式。2、.to_csv()和.to_json()方法.to_csv()或.to_json()方法都只适用于单个Dataset不支持DatasetDict而要加载csv文件或者json文件就用datasets.load_dataset(csv/json, data_files路径或字典)详见大标题六中的load_dataset()接口讲解。九、Datasets和torch.utils.data.DataLoader的联合使用数据预处理完毕、tokenize完毕数据就可以喂入模型进行正向传播了。但是在模型训练过程中我们不是手动把数据送入模型的我们还得借助pytorch中的DataLoader把数据按照batch送入模型进行正向传播-求损失-反向传播-求梯度-更新网络参数的。1、为什么非得DataLoader我们前面讲FNN的时候就论证过模型训练时一定要有适度的随机性否则模型无法被训练模型参数无法被更新所以我们分小批次带入模型训练学习的时候一定一定要是随机的小批次不明白的同学可参考我的FNN博文【深度学习】第六章模型效果评估与优化_模型评估与优化-CSDN博客 里面有实验的小例子可以佐证。而将训练样本随机分小批次的功能就是DataLoader的功能之一所以在训练模型之前我们还得将数据和pytorch中的DataLoader进行无缝衔接。经过预处理的、HF框架中的datasets.Dataset对象可以直接与pytorch中的DataLoader集成使用。虽然HF框架中的datasets.Dataset对象和torch.utils.data.Dataset类毫无关系但由于实现了__len__()和__getitem__()这两个核心接口所以能够被torch.utils.data.DataLoader正确识别并进行批量迭代。2、.set_format()方法在使用前需要通过.set_format()方法将指定字段转换为张量格式以适配模型输入比如说明该方法仅仅是通过__getitem__()(即通过Dataset[i])访问样本时返回格式不会修改底层数据存储。3、示例把上图中for训练中的batch以解引用的方式给模型传参即可顺利训练了。4、用pytorch的dataset封装数据集我们开发Ai应用时主流的框架还是pytorch所以这里再展示一下pytorch是怎样封装数据集的封装数据集就是把数据集打包成模型可识别的数据结构下面是pytorch的封装示例from torch.utils.data import Dataset from datasets import load_dataset class MyDataset(Dataset): def __init__(self, split): self.dataset load_dataset(csv, data_files {train:./train.csv, test:./test.csv}) if split train: self.dataset self.dataset[train] elif split test: self.dataset self.dataset[test] else: print(数据集名称错误) def __len__(self): return len(self.dataset) def __getitem__(self, item): text self.dataset[item][review] label self.dataset[item][label] return text, label本篇完。

相关推荐

dsh-web 插件安装失败或不显示?5 类高频故障的快速定位与修复
dsh-web 插件安装失败或不显示?5 类高频故障的快速定位与修复

dsh-web 插件安装失败或不显示?5 类高频故障的快速定位与修复 【免费下载链接】dsh-web DeepSeek Harness (DSH) Web 插件聚合生态 万物皆插件,通过创意工坊分发||DeepSeek Harness (DSH) Web Plugin Aggregation Ecosystem Eve… · 2026/11/6 1:31:23

iloader 完整实战指南:零基础 5 步把 SideStore 装上 iPhone
iloader 完整实战指南:零基础 5 步把 SideStore 装上 iPhone

iloader 完整实战指南:零基础 5 步把 SideStore 装上 iPhone 【免费下载链接】iloader User friendly sideloader 项目地址: https://gitcode.com/GitHub_Trending/iloa/iloader iloader 是一款免费的 iOS 侧载工具,不用越狱就能把你想装的应用签… · 2026/11/6 1:31:23

一站式跑通 VS Code 扩展开发:80+ 官方示例覆盖 Hello World 到 LSP
一站式跑通 VS Code 扩展开发:80+ 官方示例覆盖 Hello World 到 LSP

一站式跑通 VS Code 扩展开发:80 官方示例覆盖 Hello World 到 LSP 【免费下载链接】vscode-extension-samples Sample code illustrating the VS Code extension API. 项目地址: https://gitcode.com/gh_mirrors/vs/vscode-extension-samples 微软官方的 vs… · 2026/11/6 1:31:23

工业 Qt 上位机全套开源库分类清单,随手而来的便利
工业 Qt 上位机全套开源库分类清单,随手而来的便利

今天来盘一下工业 Qt 上位机常用开源库分类。列个大概的清单(工控场景全覆盖,分通讯、数据解析、界面、日志、存储、协议、工具、嵌入式适配) 结合我这些年做 Qt 工控、Modbus 设备、RK 嵌入式、Windows 上位机的开发场景,以下是工… · 2026/11/6 1:34:24

OpenSCAD 源码编译速查:几条命令编出你的 3D 编译器
OpenSCAD 源码编译速查:几条命令编出你的 3D 编译器

OpenSCAD 源码编译速查:几条命令编出你的 3D 编译器 【免费下载链接】openscad OpenSCAD - The Programmers Solid 3D CAD Modeller 项目地址: https://gitcode.com/gh_mirrors/op/openscad OpenSCAD 是个"写代码画形状"的 3D CAD 建模工具&#… · 2026/11/6 1:34:24

谁最先意识到电脑需要操作系统的和汇编编译器用汇编语言编写的自举编译,计算机简史,机械,电子硬件,编程语言,编译,打孔式,操作系统
谁最先意识到电脑需要操作系统的和汇编编译器用汇编语言编写的自举编译,计算机简史,机械,电子硬件,编程语言,编译,打孔式,操作系统

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/6 1:34:24

trackerslist 完整配置指南:5 份 Tracker 列表的选择与 BT 客户端配置实操
trackerslist 完整配置指南:5 份 Tracker 列表的选择与 BT 客户端配置实操

trackerslist 完整配置指南:5 份 Tracker 列表的选择与 BT 客户端配置实操 【免费下载链接】trackerslist Updated list of public BitTorrent trackers 项目地址: https://gitcode.com/GitHub_Trending/tr/trackerslist 某个冷门资源排了两天队,… · 2026/11/6 1:34:24

PPT Master 完整安装指南:免费开源 AI PPT 工具,把 PDF 变成逐元素可编辑的演示文稿
PPT Master 完整安装指南:免费开源 AI PPT 工具,把 PDF 变成逐元素可编辑的演示文稿

PPT Master 完整安装指南:免费开源 AI PPT 工具,把 PDF 变成逐元素可编辑的演示文稿 【免费下载链接】ppt-master AI turns documents or topics into real, native PowerPoint decks—with native shapes, transitions and animations, data-backed cha… · 2026/11/6 1:34:24

Akaunting:免费自托管会计软件,三步开张
Akaunting:免费自托管会计软件,三步开张

Akaunting:免费自托管会计软件,三步开张 【免费下载链接】akaunting Online Accounting Software 项目地址: https://gitcode.com/gh_mirrors/ak/akaunting Akaunting 是一款可以免费自托管的在线会计软件,面向不想买 SaaS 订阅、也不… · 2026/11/6 1:33:23

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:27:59

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:28:03

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:28:07

三菱PLC数据采集到数据库的时序设计:Python+MC协议实战
三菱PLC数据采集到数据库的时序设计:Python+MC协议实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/6 1:02:11

ASIC主模式RTL设计:状态机与三态驱动的流片级实现
ASIC主模式RTL设计:状态机与三态驱动的流片级实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/6 1:02:11

STM32嵌入式C++开发:GDB调试与Renode仿真实战指南
STM32嵌入式C++开发:GDB调试与Renode仿真实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/6 1:02:11

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:27:59

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:28:03

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:28:07

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码