AI模型训练——入门篇(二)

news2024/11/25 7:48:06

导语:本文主要介绍了基于BERT的文本分类方法,通过使用huggingface的transformers库实现自定义模型和任务。具体步骤包括:使用load_dataset函数加载数据集,并应用自定义的分词器;使用map函数将自定义分词器应用于数据集;使用filter函数过滤数据集中的不必要字段;使用batch函数将处理后的数据集批处理;使用DataCollatorWithPadding将批处理后的数据集进行整理;将整理后的数据集传递给模型进行训练。在transformers库中,可以使用AutoModel和AutoTokenizer分别加载预训练模型和Tokenizer。对于文本分类任务,可以使用SequenceClassifierOutput类定义任务的输出。在训练模型时,可以使用DataCollatorForLanguageModeling对数据进行排序和分割。最后,使用Trainer类对模型进行训练和评估

一、Tokenizer

1.1 Tokenizer 初介绍

在前文也介绍过,NLP 中重要的一环就是数据预处理,那么在数据预处理过程中,我们会完成那些任务呢?一般来说会分为以下四步:

1.分词:将自然语言分解成字或者词。

2.创建词典:根据分词结果,构建相应映射词典。

3.数据转换:将词典中的文本序列转换为数字序列。

4.数据填充与截断:通过截断、填充,将数字序列进行长度的统一。

Tokenizer则是集上述过程为一体的工具,有了它,就可以轻松实现上述所有步骤,实现数据预处理。

1.2 Tokenizer 核心逻辑

Transformers 中提供了AutoTokenizer方便开发者使用,有了它我们只要提供 models 名字,就可以自动去选择分词器完成分词!(对于怕麻烦的人来说简直不要太友好,无需在记忆相应的API或查阅文档)

分词步骤:构建分词器->句子分词->查看词典->索引转换->填充截断,AutoTokenizer提供了每一步骤实现的函数,感兴趣的同学可以跟着下列代码输出各步骤得到的结果,了解分词的具体过程。当然,强大的AutoTokenizer也支持直接输出最终结果。

from transformers import AutoTokenizer

str = "我最喜欢学 ai!"

tokenizer = AutoTokenizer.from_pretrained("uer/roberta-base-finetuned-dianping-chinese")#随便加载一个 model 的分词器

tokenizer.save_pretrained("./test")#可以保存分词器到本地
tokenizer = AutoTokenizer.from_pretrained("./test/")#直接用本地的分词器 无需远程

#分词
tokens = tokenizer.tokenize(str)
print(tokenizer.vocab,tokenizer.vocab_size) #打印词典词典长度

# 索引转换(文本序列->数字序列)
ids = tokenizer.convert_tokens_to_ids(tokens)
# 索引转换(数字序列->文本序列)
tokens = tokenizer.convert_ids_to_tokens(ids)

#字符转数字序列
#默认encode会在字符串开头添加cls 末尾添加 sep(bert的标记位), add_special_tokens=true取消添加
ids = tokenizer.encode(str, add_special_tokens=True) 

# 会把长度填补到 15
inputs_res = tokenizer.encode_plus(str, padding="max_length", max_length=15 )
# input_ids:字符的->id的集合 
# token_type_ids:标记字符属于哪一个字符串
# attention_mask: 标记真实/填充位  1 为真实  0 为填充

print(inputs_res)
# 结果:{'input_ids': [101, 2769, 3297, 1599, 3614, 2110, 8578, 106, 102, 0, 0, 0, 0, 0, 0], 
# 'token_type_ids': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], //标识是否是一个句子
# 'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0]}//后 6 位是填补的

1.3 Tokenizer 应用

在实际使用过程中,分词流程一般记住以下两点就可以了:

1.将句子分成词/字/特殊字符(这里可以自己设置所需,后文会陆续介绍)。

2.完成 token-> id,并获取一些额外信息, 以distilbert-base-uncased-finetuned-sst-2-english(情感分析 model)为例,使用方法如下:

# 分词 demo
from transformers import AutoTokenizer
model_name="distilbert-base-uncased-finetuned-sst-2-english"
tokenizers=AutoTokenizer.from_pretrained(model_name) 
strArr=['I have a dream','yes'] 
inputs=tokenizers(strArr, padding=True,truncation=True,return_tensors="pt")
print(inputs)

借助AutoTokenizer+from_pretrained()就可以快速构建一个分词器,完成“傻瓜式“分词操作。不过在使用分词器的时候还是要注意有一些额外的参数,常用的如:padding、truncation、retuen_tensors等

{'input_ids': tensor([[101, 151, 9531, 143, 10252, 102],[101, 9719, 106, 102, 0, 0]]), 
'token_type_ids': tensor([[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, 0, 0, 0, 0, 0]])}

有一些参数在使用过程中有一些注意事项,比如常用的padding可以取"max_length" 、“longest”,默认会取 longest也就是以最长的句子为准进行补齐操作;max_length可以设置为指定值,当max_length值小于分词的长度,如果不设置truncation=True,则超出部分并不会被截断;token_type_ids标识是否为一句话,常在句子合并中使用 比如两个句子合并成一句,token_type_ids能准确区分出合并的句子成分是从属于元数据中的哪一句…最后贴一个 huggingface 文档 https://huggingface.co/docs/tokenizers/index

二、Datasets

2.1Datasets初介绍

Datasets是一个数据集加载库,通过它我们可以轻松加载本地或者 Huggingface 提供的数据集。

# pip datasets之后
from datasets import *

加载远程数据时的常用操作:

1.划分加载数据集(load_dataset——split):默认数据集一般会分为train(训练集)、validation(验证集)、两部分,加载过程中可以通过设置split参数决定加载哪一部分,举个例子:

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

split=“train”,表示只加载训练集,如果split="train[:100]"则表示加载前 100条数据,加载数据的时候支持切片语法,也可以按照百分比进行dataset切片split=“train[:50%]”,split也接受数组类型的参数,比如想将 train 分两次加载,可以写成:splint=[“train[:50%]”,“train[:50%]”],类比一下也可以组合加载validation和 train~具体看所需

如果数据集为复合类型的,即包含一些子任务,比如加载 super_glue数据集的 rte 任务,在 huggingface 的docs会指明包含的任务

dataset=load_dataset("super_glue","rte")

2.数据集划分(train_test_split——test_size):加载dataset 之后我们可以指定测试集大小,例如,test_size=0.2表示将20%的数据划分为测试集,而80%的数据将用于训练集。 在实际应用中往往配合stratify_by_column参数,使划分更加均衡,如按照 label 均衡划分

dataset.train_test_split(test_size=0.2,stratify_by_column="label")

3.选取加载数据集(select):接收的参数为数组类型,从而实现数据的选取,区间为闭开区间

dataset.select([1,3])
#输出结果:Dataset({features: ['title', 'content'],num_rows: 2}) 就意味着过滤出了1,2 两个索引下的两条数据。

4.过滤加载数据集(filter):通过 filter 方法可以实现数据集的划分:

dataset["train"].filter(lambda content: "原标题:中国北京世界园艺博览会" in content["content"])
#输出结果:Dataset({features: ['title', 'content'],num_rows: 1}) 就意味着只过滤出了一条。

5.查看数据集内容(通过索引):数据集的结构是 dict,所以想要取具体的数据集内容,直接按照 dict 的取值方法即可,比如我想要取 train 中的第一条:

print(dataset["test"][1])

6.数据映射(map):处理数据的时候,往往要对数据进行一些操作处理,这个时候可以通过 map 方法,调用一个函数,函数的逻辑则为操作逻辑,比如为每个数据的 title加“example”前缀:

def add(str):
    str["title"] = "example" + str["title"]
    return str
dataset.map(add)
print(dataset.map(add)["train"][:10]["title"])

7.保存数据到本地与加载(save_to_disk、load_from_disk):当对数据处理完成之后,可以直接存到本地,再次使用的时候就可以直接加载.

dataset.save_to_disk("./dataset_data")
dataset= load_from_disk("./dataset_data")

加载本地数据时的常用操作:

加载数据集文件(load_dataset/Dataset.from_xxx):加载的方法和上述的远程加载使用同一个,只是在设定参数上有一定区别,格式如下:

dataset = load_dataset("csv", data_files="./test.csv", split="train")

也可以对应数据集类型直接调用方法from_xxx xxx取决于文件名后缀:

dataset = Dataset.from_csv("./test.csv")

多个数据集文件的时候可以通过文件夹进行批量加载(指定文件夹路径即可):

dataset = load_dataset("csv", data_files="./test/", split="train")

2.2Datasets+tokenizer 使用
在实际训练模型的过程中,数据集肯定是要结合分词器一起使用,处理成机器能够识别的序列,然后喂给 model。在实际开发中,经常将上述tokenizer 和 map 方法结合起来,举个例子:

def tokenizer_def(str):
    return tokenizer(str["title"])
tokenizer_dataset=dataset.map(tokenizer_def,batched=True)[:8]

上述函数就将数据集中的 title 字段,进行了标记,同时处理多个文本样本时,启用batched=True可以显著提高分词的效率。
在这里插入图片描述

在这里插入图片描述

可以看到其实就是文本内容+ tokenizer 生成的内容组合到一起,没有什么高深的,不过我们在想一下,当生成 token 之后,我们其实就不需要原文本了,那我们就可以把转换前的原文本删掉,并且现在的数据格式还不是最终model 想要的,我们需要近一步整理这些数据:

sample={k: v for k, v in tokenizer_dataset.items() if k not in ['title', 'content']}

不了解 py 的同学可以看下这段解释,大神自动忽略…这是一个字典推导式,用于从名为tokenizer_dataset的字典中筛选出那些键不在[‘title’, ‘content’]中的键值对,并将它们构成一个新的字典。{k: v}:表示创建一个新字典,其中的键为k,值为v。循环语句会遍历tokenizer_dataset字典中的每一个键-值对,将键赋值给变量k,将值赋值给变量v。并检查当前循环中的键k是否不在[‘title’, ‘content’]列表中。

除了上述的函数自处理方式,也可以通过 datasets.map() 函数中的remove_columns 参数,移除指定的列(字段),可移除的字段不包括:input_ids 、token_type_ids、attention_mask等…也就是标记过程中,分词器自动生成的属性。

tokenizer_dataset=dataset.map(tokenizer_def,batched=True,remove_columns=['title', 'content'])[:8]

这句代码和上面的作用是一样的~是不是更简洁呢

在实际生产中,对于数据的处理大多都是批量的,就会用到DataCollatorXXX

去处理这些批量数据,打包成一个一个的 batch,但是DataCollator官方库只会处理默认的tokenizer 生成的字段:input_ids 、token_type_ids、attention_mask等… 若数据中还有其他自定义字段,则不能调用DataCollator进行处理,所以再把数据喂到DataCollator前,先剔除多余的字段,确保将“纯净的、标记后的”数据喂给 models。以DataCollatorPadding 为例子:

from transformers import DataCollatorWithPadding
data_collator=DataCollatorWithPadding(tokenizer=tokenizer)
batch=data_collator(sample)

这里说一下我本人在处理数据的时候遇到的一个混淆点(大神可跳过):

最初我理解,如果利用 def 函数调用 tokenizer 将数据标记,然后再传入到DataCollatorWithPadding(tokenizer=tokenizer),这个过程就重复了,误以为tokenizer=tokenizer 是标记化的过程,其实不然,这里指定的tokenizer不是用来进行标记化,而是为了将预先创建的 tokenizer 对象传递给 DataCollatorWithPadding,以便在数据整理过程中使用相同的 tokenizer。并且DataCollatorWithPadding只接受标记化后的数据而不是文本数据,所以先标记化是必须的!否则会报错的 。

现在生成的 batch 就是标准化格式的了,可以喂到 models 中去了。

最后再贴一个社区已经提供给我们 docs : https://huggingface.co/docs/datasets/index

三、Model

3.1 Model 初介绍

当数据预处理进行完之后,就要将数据“喂”到model中去,先来理解两个model 中的基本概念:编码器(Encoder)、解码器(Decoder)。
Encoder接收输入的内容并构建固定长度的向量。Decoder则使用Encoder的编码结果以及其他信息或数据(例如:每个样本对应的标签或类别信息、环境变量),输出最终目标结果,无论是编码器还是解码器,都是由多个TransformerBlock组成的,TransformerBlock主要由两个子模块组成:注意力机制(attention mechanism)和前馈神经网络(FFN),注意力机制可以选择性获取上下文信息,并对每个位置进行编码;前馈神经网络则可以对自注意力机制的输出进行进一步处理,以提取更高层次的特征表示。数据流如下:
在这里插入图片描述

通过编码器和解码器的搭配使用,model可以被分为一下三种类型:
1.编码器模型:自编码模型(无监督学习),双向注意力机制,考虑输入序列当前位置之前和之后的所有信息,对每个位置进行编码时都可以看到完整上下文。常被用来实现文分类、阅读理解,实现BERT、ALBERT、RoBERTa等预训练模型。

2.解码器模型:自回归模型(生成模型),单向注意力机制,只考虑输入序列中当前位置之前的信息,对每个位置进行编码时,只可以看到上文,看不到下文。常被用来实现文本生成任务,实现GPT、Bloom、LLaMA等预训练模型。

3.编码器解码器模型:序列到序列模型(生成模型)Encoder部分使用双向注意力机制,Decoder 部分使用单向注意力机制。常被用来实现文本摘要、机器翻译任务,实现BART、GLM、Marian等预训练模型。

Model Head :如果只用Model去处理Token,那么只会返回编码结果,并不能返回我们想要的最终结果哦。这个时候就需要利用Model Head,它可以对 Model 输出的结果进行进一步映射,从而解决任务。在NLP中所有的任务其实都是分类任务,仔细思考一下,对于分类任务来说,其本质区别就是分类位置的不同,那为了实现这个“不同”,我们就可以去选择不同的输出头去完成~从输入 token 到最终输出结果的流程图如下:
在这里插入图片描述

3.2 Model 及ModelHead使用

类似于Tokenizer,model 在使用的时候也是利用Automodel 就可以直接实现模型的加载使用了(inputs来自于上文 tokenizer)

from transformers import AutoModel
model=AutoModel.from_pretrained(model_name)
model_output=model(**inputs)
print(model_output.last_hidden_state.shape)# torch.Size([2, 6, 768])

输出结果中的2 代表有 2 个文本数据,6 则为分出的 token 数目,768为固定输出的一个向量。

ModelHead使用方式和 tokenizer、model 也是大同小异,

# modelHead demo

from transformers import AutoModelForSequenceClassification
model_for_head=AutoModelForSequenceClassification.from_pretrained(model_name) model_for_head_output=model_for_head(**inputs) 
print(model_for_head_output)
#SequenceClassifierOutput(loss=None, logits=tensor([[-3.7845, 4.0785],
#[-4.0741, 4.3500],
#[ 3.1336, -2.5025]], grad_fn=<AddmmBackward0>), hidden_states=None, attentions=None)

输出结果中可以看到,这个 modelhead 对于每一个词进行了 2分类,分类成几个是可以通过参数num_labels进行设定的,如下代码就是分成了 10 类。(记得加ignore_mismatched_sizes=True 否则会报错)

model_for_head=AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=10, ignore_mismatched_sizes=True)

补充一下,huggingface为了方便用户能够快递的了解到model 在使用时可以配置的 config,还提供了“AutoConfig”,也就是说在调用 model 的时候,想要知道可以配置哪些参数,无需死记硬背API,可以直接利用config查看源码:

from transformers import AutoConfig
config=AutoConfig.from_pretrained(model_name)
print(config,'config')
 

在这里插入图片描述

可以看到该模型的 config 类型为DistilBertConfig,那我们就可以直接在 transformers 中导入这个包,然后跳转到源码中查看,如下图就是可以利用的 args,并且需要注意的是DistilBertConfig继承于PretrainedConfig,所以也要去查看PretrainedConfig中的 args(在实际应用中更多的是使用PretrainedConfig中声明的args)
在这里插入图片描述

老规矩,贴一个官方链接 https://huggingface.co/models

四、 Evaluate

4.1 Evaluate 初介绍

如果说model、tokenizer 、dataset是训练模型必需品,那evaluate的作用就是锦上添花,它可以帮助你监控性能、调整超参数、选择模型,并生成性能报告。使用起来还是十分简便的

使用起来依旧是老方法——安装pip install evaluate->调用API即可
常用的 api 如下:

1.查看支持的函数list_evaluation_modules()

print(evaluate.list_evaluation_modules())

如上图所示就会打印出来evaluate所有支持的函数。

2.加载函数load()

cuad=evaluate.load('cuad')

加载成功在此基础上可以直接对此评估函数调用.inputs_description 查看函数的使用详情

print(cuad.inputs_description)

在这里插入图片描述

如上图,这个函数需要两个参数,参数的格式为词典,并且明确指明了 key-value , return 5 个值 每个值的作用,以及最后给出了一个完整的使用示例。

除了inputs_description ,也可以直接在加载函数成功之后打印函数本身print(cuad) 也能获取到相应的使用说明+函数本身的一些属性。

ps: load其他evaluate函数,如 f1的时候,报错ImportError: To be able to use evaluate-metric/f1, you need to install the following dependencies[‘sklearn’] using ‘pip install sklearn’ for instance’ 但是 pip install sklearn之后仍无效,后来通过以下命令成功解决此问题:

pip install scikit-learn

3.计算compute()

全局计算:将所涉及的所有参数直接按照打印出来的格式塞到计算函数中 。

predictions = [{'prediction_text': ['The seller:', 'The buyer/End-User: Shenzhen LOHAS Supply Chain Management Co., Ltd.'],
'id': 'LohaCompanyltd_20191209_F-1_EX-10.16_11917878_EX-10.16_Supply Agreement__Parties'}]

references = [{'answers': {'answer_start': [143, 49],
'text': ['The seller:', 'The buyer/End-User: Shenzhen LOHAS Supply Chain Management Co., Ltd.']},
'id': 'LohaCompanyltd_20191209_F-1_EX-10.16_11917878_EX-10.16_Supply Agreement__Parties'}]
results = cuad.compute(predictions=predictions, references=references)

迭代计算(add_batch):在实际训练中,我们常常会对数据以 batch 为单位进行计算。

for refs, preds in zip([references,references], [predictions,predictions]):
    cuad.add_batch(references=refs, predictions=preds)
print(cuad.compute()) #我直接组合了上述参数作为 batch 

这样的输出结果和results是一样的

4.组合计算combine()

上述的评估函数是可以组合到一起进行组合计算的,例如:

combine_evaluate = evaluate.combine([“accuracy”, “cuad” ])
就会输出每一个函数下的结果,便捷~

5.结果可视化

上述输出的结果大多都是数字,不够直观,你可以选择自己调用matplotlib进行数据可视化,也可以直接使用evaluate 中提供的功能,目前evaluate提供了雷达图(暂时只有一种,这里插一句可以通过源码,看出来有没有更新)供我们评估结果可视化:

from evaluate.visualization import radar_plot
combine_evaluate = evaluate.combine(["accuracy", "cuad" ])
data = [
{"accuracy": 0.59, "cuad": 0.6, "f1": 0.75, "ter": 10.6},
{"accuracy": 0.48, "cuad": 0.17, "f1": 0.11, "ter": 10.2},
{"accuracy": 0.18, "cuad": 0.38, "f1": 0.38, "ter": 75.6},
{"accuracy": 0.18, "cuad": 0.48, "f1": 0.41, "ter": 141.6}
]
model_names = ["Model1", "Model2", "Model3", "Model4"]

plot = radar_plot(data=data, model_names=model_names)
plot.show()

五、 Trainer

有了上述一些列的操作,我们就可以正式开启我们的diy训练了 撒花🌸~其实训练模型在 huggingface 的帮助下已经变成了各种api调用(感激不尽)所以, trainer 过程依旧如此!

5.1 Trainer 初介绍

trainer()是一个用于训练和评估模型的高级训练器。它提供了一个简化的接口,可以轻松地进行模型训练、评估和推理。

使用trainer可以实现以下功能:

数据加载和预处理:处理数据加载、批处理、分布式训练等数据处理任务。
模型训练:自动执行模型的训练过程,包括前向传播、反向传播和参数优化。
模型评估:计算模型在验证集或测试集上的性能指标,如准确率、损失等。
模型保存和加载:保存和加载训练好的模型,方便后续使用或部署。
学习率调度:支持学习率的自动调整,可以根据训练过程中的性能动态调整学习率。
提前停止:根据验证集性能的变化情况,在模型性能不再提升时自动停止训练,避免过拟合。

不过,在使用 trainer 的时候需要注意,它对模型的输入和输出是有一定限制的,要求模型返回元组或者 modeloutput 的子类。并且若输入中提供了 labels,模型需要返回 loss 结果,若输入的是元祖类型的数据,则要求loss 为元组中的一个值。听起来有一点高深,但是不要担心,目前huggingface 自带的模型是符合要求的,这些是在对模型进行修改时需要考虑的因素。

官方文档链接: https://huggingface.co/docs/transformers/main_classes/trainer#trainer

5.2 trainer 初体验

依旧是老套路,从 transformer 中导入Trainer

from transformers import Trainer

声明,然后 hover 一下,就可以看到支持的所有参数,我们来一个一个说明一下

在这里插入图片描述

上文介绍的model、data_collator、train_dataset、eval_dataset、tokenizer直接指定就好了,这里不再赘述。其他的参数可以看官网介绍
https://huggingface.co/docs/transformers/v4.32.1/en/main_classes/trainer

值得一提的是对于args的设置,可以通过导包➕结合文档的方式 快速添加参数。

from transformers import TrainingArguments
training_args=TrainingArguments('test-trainer')
print(training_args)
#加载训练模型
trainer=Trainer(
model,
data_collator,
tokenizer,
train_dataset=tokenizer_dataset[:10],
eval_dataset=tokenizer_dataset[10:2],
args=training_args
)
print(trainer.train())

至此,我们就成功跑通实现了模型的训练~

六、pipeline

6.1 pipeline 初介绍

继入门篇(一)顺利安装环境并成功跑通一个 demo的童鞋们,肯定有一点疑惑,我们之前明明用的是 pipeline,怎么你在这篇文章闭口不提了?

别急,有了上述的基础概念,现在来聊聊pipeline。它翻译过来是流水线,也就是说它是代表一个连贯性的功能,在pipeline中处理任务可以大致分为三步,通过“流水线”对数据进行预处理(Tokenizer),然后调用模型(Model),最后处理结果(Post Processing)。细致化来讲就是:

加载模型和预训练的 tokenizer。
预处理输入数据,将文本转换为标记化序列。
将标记化序列输入到模型中。
处理模型输出并根据任务返回相应的结果。
至此,我相信你一定豁然开朗了,在我们想要测试一个 model 的时候,可以直接用pipeline 测试效果,但如果我们想玩点什么,就要自己处理数据,加载 model,进行 train。

不过 pipline支持的任务类型也是有限的,他支持 huggingface 大部分任务,但并不支持所有哦!在社区我们可以看到目前任务可以被分为以下几大类(这里要区分一下任务和模型,任务是模型的父级,如下图红框为任务,蓝框为模型):
在这里插入图片描述

1、Multimodal:多模态任务中的模型可以处理多种类型的数据,如文本、语音、图像和视频等。在模型中将多个信息进行融合,从而提高对自然语言的理解和生成能力。例如,在Text-to-Image中,Multimodal可以将自然语言文本转换为图像,带来新的应用和发展机会。

2、 Computer Vision:计算机视觉任务中的模型可以处理与图像和视频相关的自然语言文本,用于图像和视频的生成、标注、分类和检索等任务。例如,在Depth Estimation中,估计图像中的物体信息,通过对其进行分析和建模来推断深度信息,从而可以被应用到VR等技术中去。

3、Natural Language Processing:自然语言处理任务中的模型的目标是让计算机能够理解、处理和生成自然语言文本。NLP技术可以应用于多种场景,例如,在Text Classification中,可以实现将给定的文本分配到预定义的类别中,帮助用户更快、更准确地处理大量文本数据。

4、Audio:音频任务中的模型的目标是处理音频相关的任务,例如语音识别、语音合成、音频分类等。例如,在Automatic Speech Recognition中,将语音转换为计算机可以理解和处理的文本数据,从而实现语音交互、搜索、翻译等应用。

5、Tabular:表格任务中的模型提供了各种用于表格数据处理和分析的深度学习模型。例如,在Tabular regression中,则可利用表格数据进行回归分析,预测各类连续性变量,如基金股票价格、生产效率等。

6、Reinforcement Learning:强化学习任务中的模型通过让计算机在不断的交互中试错学习,以达到最优的决策。在强化学习中,计算机会根据当前状态采取某种行动,并通过环境的反馈来调整自己的行为策略,以获得最大化的长期奖励。
目前pipeline中的任务类型,除了最后两个,其他的都有一定量的覆盖,可以通过以下代码进行查看

from transformers.pipelines import SUPPORTED_TASKS
print(len(SUPPORTED_TASKS.items())) //支持的任务数量
for k, v in SUPPORTED_TASKS.items():
print('模型', k) //k是模型

输出结果

6.2 pipeline 初体验

6.2 pipeline 初体验

虽然在(一)中带着大家执行了一个demo 但是还是不够流程化, 这里再次规范化介绍一下pipeline使用步骤

1.从 transformers 中引入 pipeline,

from transformers import pipeline

2.根据需求,创建一个流水线任务,可选的任务就是刚才输出的SUPPORTED_TASK.item(),model 则可以去 huggingface 下(如下图) 找到想要用的,语法如下:

pipe = pipeline("question-answering", model="uer/roberta-base-chinese-extractive-qa")

在这里插入图片描述

流水线创建好了,但是怎么去传参,然后落地使用呢,有两种方法
1、直接看huggingface 社区文档()

2、通过编译器:

以上面的 pipe为例,当构建好一个流水线之后,我们可以直接打印出来:
在这里插入图片描述

可以看到这个任务所属类型为QuestionAnsweringPipeline,然后跳转到 transformers 源码库里(鼠标 hover+ctrl),全局搜索
在这里插入图片描述

然后跳转到,可以看到它的参数和返回值:

在这里插入图片描述

这个时候就可以按照参数提示进行调用了。

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

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

相关文章

光伏开发过程中能运用到的软件有哪些?

在光伏开发过程中&#xff0c;软件的应用贯穿了整个项目生命周期&#xff0c;从设计到建设再到运营管理。下面是一些在光伏开发过程中可能用到的软件工具&#xff1a; 制图和设计软件&#xff1a;CAD软件如AutoCAD、Bentley等被广泛用于光伏系统的设计和制图。这些软件可以帮助…

装饰设计模式(常用)

装饰器模式&#xff08;装饰设计模式&#xff09; 我们这些上班族大多都有睡懒觉的习惯&#xff0c;每天早上上班时间都很紧张&#xff0c;于是很多人为了多睡一会&#xff0c;就会用方便的方式解决早餐问题。有些人早餐可能会吃煎饼&#xff0c;煎饼中可以加鸡蛋&#xff0c;…

AutoDIR: Automatic All-in-One Image Restoration with Latent Diffusion

AutoDIR: Automatic All-in-One Image Restoration with Latent Diffusion (Paper reading) Yitong Jiang, The Chinese University of Hong Kong, arXiv23, Code, Paper 1. 前言 我们提出了一种具有潜在扩散的一体化图像恢复系统&#xff0c;名为AutoDIR&#xff0c;它可以…

供应链 | “利刃出鞘”——顶刊POMS论文解读:制造商借助电子商务部门入侵

论文解读者&#xff1a;肖善&#xff0c;温梓曦&#xff0c;张怡雯&#xff0c;杨子豪 编者按&#xff1a; 解密品牌商在线电商平台&#xff1a;组织结构、策略选择、三方共赢 Manufacturer encroachment with an e‐commerce division 原文作者信息 Shi, S., Wang, C., Ch…

C语言进阶指南(14)(部分字符串库函数及其模拟实现)

欢迎来到博主的专栏——C语言进阶指南 博主id&#xff1a;reverie_ly 文章目录 1、strlen&#xff08;&#xff09;——字符串长度计算函数自定义strlen函数的实现 2、strcpy——字符串拷贝函数strcpy的模拟实现 3.strcat——字符串追加函数strcat的模拟实现 4、strcmp——字符…

喜讯!安全狗入选《2024中国企业服务云图(精选版)》多个细分领域

近日&#xff0c;由吴中区人民政府、苏州市工信局指导&#xff0c;崔牛会主办&#xff0c;苏州太湖国家旅游度假区管委会协办的2023中国SaaS大会在苏州顺利举办。 作为国内云原生安全领导厂商&#xff0c;安全狗突出的多项安全能力也在大会上受到认可。 厦门服云信息科技有限公…

软件需求分析报告

《软件需求分析报告》 软件开发全套资料获取&#xff1a;点我获取

VR虚拟教育展厅,为教学领域开启创新之路

线上虚拟展厅是一项全新的展示技术&#xff0c;可以为参展者带来不一样的观展体验。传统的实体展览存在着空间限制、时间限制以及高昂的成本&#xff0c;因此对于教育领域来说&#xff0c;线上虚拟教育展厅的出现&#xff0c;可以对传统教育方式带来改革&#xff0c;凭借强大的…

【RT-DETR改进】SIoU、GIoU、CIoU、DIoU、AlphaIoU等二十余种损失函数

一、本文介绍 这篇文章介绍了RT-DETR的重大改进&#xff0c;特别是在损失函数方面的创新。它不仅包括了多种IoU损失函数的改进和变体&#xff0c;如SIoU、WIoU、GIoU、DIoU、EIOU、CIoU&#xff0c;还融合了“Alpha”思想&#xff0c;创造了一系列新的损失函数。这些组合形式的…

私域数字化建设:解锁企业融资新引擎

私域数字化建设对于增加企业融资能力的机遇是十分重要的&#xff0c;随着数字化经济的快速发展和数据技术的不断进步&#xff0c;企业需要正确认识到数据资产的重要性和私域数字化建设在提升融资能力等方面所带来的机遇。 近期&#xff0c;财政部发布了《企业数据资源相关会计…

教你设置疯狗都咬不烂的防火墙

1 安全技术和防火墙 1.1 安全技术 入侵检测系统&#xff08;Intrusion Detection Systems&#xff09;&#xff1a;特点是不阻断任何网络访问&#xff0c;量化、定位来自内外网络的威胁情况&#xff0c;主要以提供报警和事后监督为主&#xff0c;提供有针对性的指导措施和安全…

一文详解Python中常用数据类型

文章目录 Python 中常用的数据类型包括&#xff1a;Python 中布尔类型(bool)Python 中的数字类型概述Pyhon中的字符串概述Python 中的List概述Python 中的元组类型(tuple)Python中的字典&#xff08;Dictionary&#xff09;Python中的集合&#xff08;Set&#xff09;Python中的…

基于STM32+定时器中断和定时器外部时钟(标准库函数讲解)

前言 本篇博客主要学习了解定时器的标准库函数&#xff0c;以及定时器中断进行LED灯的反转&#xff0c;还有定时器外部时钟获取脉冲计数功能。本篇博客大部分是自己收集和整理&#xff0c;如有侵权请联系我删除。 本篇博客主要是对通用定时器来讲解&#xff0c;功能适中比较常…

C语言进阶指南(15)(函数指针的创建与使用)

*欢迎来到博主的专栏——C语言进阶指南 博主id 文章目录 函数指针函数指针的应用——回调函数函数指针数组 函数指针 函数也有地址&#xff08;函数在调用的时候会占用内存空间&#xff0c;所以函数是有地址的&#xff09;&#xff0c;因此我们也可以用一个指针指向函数 1 函数…

OSCP系列靶场-Esay保姆级

总结 getwebshell : ftp可匿名登录 → 发现隐藏文件夹 → 发现ssh密钥 → 猜解ssh用户名 → ssh密钥登录 提 权 思 路 : 发现suid权限文件 → cpulimit提权 准备工作 启动VPN 获取攻击机IP → 192.168.45.191 启动靶机 获取目标机器IP → 192.168.179.130 信息收集-端口扫…

基于SpringBoot实现的教务查询系统

一、系统架构 前端&#xff1a;html | js | css | jquery | bootstrap 后端&#xff1a;springboot | springdata-jpa 环境&#xff1a;jdk1.7 | mysql | maven 二、代码及数据库 三、功能介绍 01. 登录页 02. 管理员端-课程管理 03. 管理员端-学生管理 04. 管理员端-教师管理…

又有两大巨头官宣加入鸿蒙, 鸿蒙已成, 华为余承东说得没错

自从华为发布HarmonyOS 4系统后&#xff0c;宣布下一个鸿蒙版本将不再支持安卓应用&#xff0c;并启动鸿蒙原生应用&#xff0c;随后国内巨头纷纷响应&#xff0c;为鸿蒙系统开发原生应用。 如今&#xff0c;又有两大巨头官宣加入鸿蒙&#xff0c;一家是广汽传祺&#xff0c;M…

智慧工地解决方案,Spring Cloud智慧工地项目平台源码

智慧工地一体化信息管理平台源码&#xff0c;微服务架构JavaSpring Cloud UniApp MySql 智慧工地云平台是专为建筑施工领域所打造的一体化信息管理平台。通过大数据、云计算、人工智能、物联网和移动互联网等高科技技术手段&#xff0c;将施工区域各系统数据汇总&#xff0c;建…

Flutter创建TabBar

使用TabBar和TabBarView来创建一个包含"首页"、"分类"和"我的"的TabBar。每个Tab对应一个Tab控件&#xff0c;TabBarView中的每个页面对应一个Widget。 1.Tab使用自定义图标和颜色 一般UI设计的图会带渐变色之类的&#xff0c;应该保持图片的原…

由于找不到steam_api64.dll如何修复?steam_api64.dll丢失多种解决方法

steam_api64.dll文件介绍 steam_api64.dll是Steam平台的一个关键组件&#xff0c;主要用于支持Steam客户端和相关游戏的应用程序。这个文件缺失或损坏会导致Steam及相关游戏无法正常运行。它位于Steam安装目录的bin子文件夹中。 steam_api64.dll丢失的原因 系统误删&#xf…