大模型Prompt-Tuning技术入门

Prompt-Tuning方法

在这里插入图片描述


1 NLP任务四种范式

目前学术界一般将NLP任务的发展分为四个阶段,即NLP四范式:

  • 第一范式:基于「传统机器学习模型」的范式,如TF-IDF特征+朴素贝叶斯等机器算法;
  • 第二范式:基于「深度学习模型」的范式,如word2vec特征+LSTM等深度学习算法,相比于第一范式,模型准确有所提高,特征工程的工作也有所减少;
  • 第三范式:基于「预训练模型+fine-tuning」的范式,如Bert+fine-tuning的NLP任务,相比于第二范式,模型准确度显著提高,模型也随之变得更大,但小数据集就可训练出好模型;
  • 第四范式:基于「预训练模型+Prompt+预测」的范式,如Bert+Prompt的范式相比于第三范式,模型训练所需的训练数据显著减少。

在整个NLP领域,整个发展历程是朝着精度更高、少监督,甚至无监督的方向发展的。而 Prompt-Tuning是目前学术界向这个方向进军最新也是最火的研究成果。


2 Fine-Tuning(微调)💥

Fine-Tuning属于一种迁移学习方式,在自然语言处理(NLP)中,Fine-Tuning是用于将预训练的语言模型适应于特定任务或领域。Fine-Tuning的基本思想是采用已经在大量文本上进行训练的预训练语言模型,然后在小规模的任务特定文本上继续训练它.

经典的Fine-Tuning方法包括将预训练模型与少量特定任务数据一起继续训练。在这个过程中,预训练模型的权重被更新,以更好地适应任务。所需的Fine-Tuning量取决于预训练语料库和任务特定语料库之间的相似性。如果两者相似,可能只需要少量的Fine-Tuning,如果两者不相似,则可能需要更多的Fine-Tuning.

但是,在大多数下游任务微调时,下游任务的目标和预训练的目标差距过大导致提升效果不明显(过拟合),微调过程中需要依赖大量的监督语料等等。至此,以GPT3、PET等为首的模型提出一种基于预训练语言模型的新的微调范式–Prompt-Tuning.该方法的目的是通过添加模板的方法来避免引入额外的参数,从而让模型可以在小样本(few-shot)或者零样本(zero-shot)场景下达到理想的效果。

Prompt-Tuning主要解决传统Fine-Tuning方式的两个痛点:

  • 降低语义偏差:预训练任务主要以MLM为主,而下游任务则重新引入新的训练参数,因此两个阶段目标差异较大。因此需要解决Pre-Training和Fine-Tuning之间的Gap。
  • 避免过拟合:由于Fine-Tuning阶段需要引入新的参数适配相应任务,因此在样本数量有限的情况下容易发生过拟合,降低模型泛化能力。因此需要解决预训练模型的过拟合能力。

3 Prompt-Tuning(提示微调)

3.1 什么是Prompt?💥

prompt顾名思义就是“提示”的意思,应该有人玩过你画我猜这个游戏吧,对方根据一个词语画一幅画,我们来猜他画的是什么,因为有太多灵魂画手了,画风清奇,或者你们没有心有灵犀,根本就不好猜啊!这时候屏幕上会出现一些提示词比如3个字,水果,那岂不是好猜一点了嘛,毕竟3个字的水果也不多呀。看到了吧,这就是prompt的魅力.

3.2 Prompt-Tuing定义💥

基于Fine-Tuning的方法是让预训练模型去迁就下游任务,而基于Prompt-Tuning的方法可以让下游任务去迁就预训练模型, 其目的是将Fine-tuning的下游任务目标转换为Pre-training的任务。那么具体如何工作呢?我们以一个二分类的情感分析为例子,进行简单理解:

  • eg: 定一个句子[CLS] I like the Disney films very much. [SEP]
  • 传统的Fine-tuning方法: 将其通过BERT的Transformer获得 [CLS]表征之后再喂入新增加的MLP分类器进行二分类,预测该句子是积极的(positive)还是消极的(negative),因此需要一定量的训练数据来训练。
  • Prompt-Tuning执行步骤:
    • 1.构建模板(Template Construction): 通过人工定义、自动搜索、文本生成等方法,生成与给定句子相关的一个含有[MASK]标记的模板。例如It was [MASK].,并拼接到原始的文本中,获得Prompt-Tuning的输入:[CLS] I like the Disney films very much. [SEP] It was [MASK]. [SEP]。将其喂入BERT模型中,并复用预训练好的MLM分类器(在huggingface中为BertForMaskedLM),即可直接得到[MASK]预测的各个token的概率分布。
    • 2.标签词映射(Label Word Verbalizer) :因为[MASK]部分我们只对部分词感兴趣,因此需要建立一个映射关系。例如如果[MASK]预测的词是“great”,则认为是positive类,如果是“terrible”,则认为是negative类。
    • 3.训练:根据Verbalizer,则可以获得指定label word的预测概率分布,并采用交叉信息熵进行训练。此时因为只对预训练好的MLM head进行微调,所以避免了过拟合问题。

注意思考:不同的句子应该有不同的template和label word,没错,因为每个句子可能期望预测出来的label word都不同,因此如何最大化的寻找当前任务更加合适的template和label word是Prompt-tuning非常重要的挑战。

其实我们可以理解,引入的模板和标签词本质上属于一种数据增强,通过添加提示的方式引入先验知识。


4 Prompt-Tuning技术发展历程


Prompt-Tuning自GPT-3被提出以来,从传统的离散、连续的Prompt构建、走向面向超大规模模型的In-Context Learning、Instruction-tuning和Chain_of_Thought.💬


5 Prompt-Tuning的主要方法

Prompt-Tuning具体如何实现,其有什么困难和挑战?这里我们挑选一些具有代表性的.

5.1 Prompt-Tuning的鼻祖----GPT3和PET

Prompt-Tuning最早是在GPT-3《Language Models are Few-Shot Learners》中被提出来的。其开创性的提出了In-context Learning(ICL, 情景学习)的思想。即无须修改模型即可实现few-shot、zero-shot的learning。同时引入了Demonstrate Learning, 即让模型知道与标签相似的语义描述,提升推理能力.

  • In-context Learning: Prompt前身,通过从训练集挑选一些样本作为任务的提示,来实现免参数更新的模型预测。
  • Demonstration Learning:添加一些新的样本作为提示。模型可以根据新添加的样例句子就可以"照猫画虎"式的预测结果了.

常用的In-context learning方法包括:

  • zero-shot learning
    • 定义: 给出任务的描述, 然后提供测试数据对其进行预测, 直接让预训练好的模型去进行任务测试.
    • 示例: 向模型输入“这个任务要求将中文翻译为英文. 销售->”, 然后要求模型预测下一个输出应该是什么, 正确答案应为“sell”.
  • one-shot learning
    • 定义: 在预训练和真正翻译的样本之间, 插入一个样本做指导. 相当于在预训练好的结果和所要执行的任务之间, 给一个例子, 告诉模型英语翻译为法语, 应该这么翻译.
    • 示例: 向模型输入“这个任务要求将中文翻译为英文. 你好->hello, 销售->”, 然后要求模型预测下一个输出应该是什么, 正确答案应为“sell”.
  • few-shot learning
    • 定义: 在预训练和真正翻译的样本之间, 插入多个样本(一般10-100条)做指导. 相当于在预训练好的结果和所要执行的任务之间, 给多个例子, 告诉模型应该如何工作.
    • 示例: 向模型输入“这个任务要求将中文翻译为英文. 你好->hello, 再见->goodbye, 购买->purchase, 销售->”, 然后要求模型预测下一个输出应该是什么, 正确答案应为“sell”.

但是这类方法有一个明显的缺陷是——其建立在超大规模的预训练语言模型上,此时的模型参数数量通常超过100亿,在真实场景中很难应用,因此众多研究者开始探索GPT-3的这套思路在小规模的语言模型(如Bert)上还是否适用?事实上,这套方法在小规模的语言模型上是可行的,但是需要注意:

  • 模型参数规模小了,prompt直接用在zero-shot上效果会下降,因此需要考虑将In-context Learning和Demonstrate Learning应用在Fine-Tuning阶段,也就是后面要讲到的Prompt-Tuning。
  • GPT-3中提供的提示(Natural Language Prompt)过于简单,泛化性能低。

因此,PET模型问世.


5.2 PET模型

PET(Pattern-Exploiting Training)出自《Exploiting Cloze Questions for Few Shot Text Classification and Natural Language Inference》(EACL2021),根据论文题目则可以猜出,Prompt-Tuning启发于文本分类任务,并且试图将所有的分类任务转换为与MLM一致的完形填空。


PET模型提出两个很重要的组件:

  • Pattern(Template) :记作T, 即上文提到的Template,其为额外添加的带有[mask]标记的短文本,通常一个样本只有一个Pattern(因为我们希望只有1个让模型预测的[mask]标记)。由于不同的任务、不同的样本可能会有其更加合适的pattern,因此如何构建合适的pattern是Prompt-Tuning的研究点之一
  • Verbalizer :记作V, 即标签词的映射,对于具体的分类任务,需要选择指定的标签词(label word)。例如情感分析中,我们期望Verbalizer可能是 (positive和negative是类标签)。同样,不同的任务有其相应的label word,但需要注意的是,Verbalizer的构建需要取决于对应的Pattern。因此 如何构建Verbalizer是另一个研究挑战

上述两个组件被称为Pattern-Verbalizer-Pair(PVP),在后续的大多数研究中均采用这种PVP组件。基于这套框架,目前的研究主要关注如何选择或构建合适的Pattern和Verbalizer 。一种简单的方法是根据特定任务的性质和先验知识人工设计模板。例如上文例子中通常会选择It was [mask]. 作为情感分析类的模板。人工构建方法虽然直观简单,但是致命问题也很突出。有相关工作在实验中发现,在同样的数据集和训练条件下, 选择不同的Pattern和Verbalizer会产生差异很大的结果 ,如下图所示(一般情况下,Template等同于Pattern,Verbalizer等同于Label word)


在相同Pattern时,选择不同的label word对结果影响很大,同理,不同的Pattern对结果影响也很明显,在真正应用中,调参者需要尝试多个不同的模板和标签词以穷举出最好的结果,并不能充分发挥Prompt简单快捷的优势。因此我们总结人工设计方法的缺陷:

  • 采用人工构建的方法成本高,需要与领域任务相关的先验知识;
  • 人工设计的Pattern和Verbalizer不能保证获得最优解,训练不稳定,不同的PVP对结果产生的差异明显,方差大;
  • 在预训练阶段MLM任务并非完全按照PVP的模式进行训练的(比如MLM训练通常都是长文本,mask的数量也并非只有1个,预测的概率分布也并非是有限的),因此人工构建的Pattern和Verbalizer使得Prompt-Tuning与MLM在语义和分布上依然存在差异。

因此如何能够自动地挑选合适的PVP? 目前构建Verbalizer的方法也有很多,不过这里不进行详细解释,我们主要着重介绍构建Pattern的方法:Prompt-Tuning.接下来我们根据使用场景的不同,分别介绍几种成熟的Prompt-Tuning方法.


5.3 Prompt-Oriented Fine-Tuning

Prompt-Oriented Fine-Tuning训练方法的本质是将目标任务转换为适应预训练模型的预训练任务,以适应预训练模型的学习体系。


例如我们利用BERT模型来实现情感分类任务:

传统Fine-Tuning方式: 将训练文本经过BERT编码后,生成向量表征,再利用该向量表征,连接全连接层,实现最终的情感类别识别。但是这种方式存在一个显式的弊端:预训练任务与下游任务存在gap。回忆BERT的预训练任务:MLM与NSP,简单来说,MLM任务是通过分类模型识别被MASK掉的词,类别大小即为整个词表大小;NSP任务是预测两个句子之间的关系。

而Prompt-Oriented Fine-Tuning方式: 将情感分类任务转换为类似于MLM任务的[MASK]预测任务,具体来说,我们构建如下的prompt文本: prompt = It was [MASK]. 将prompt文本与输入文本text = The film is attractive.进行拼接生成: It was [MASK].The film is attractive.,输入预训练模型中,训练任务目标和MLM任务的目标一致,即识别被[MASK]掉的词。通过这种方式,可以将下游任务转换为和预训练任务较为一致的任务,实验证明,Prompt-Oriented Fine-Tuning相对于常规的Fine-Tuning,效果会得到明显提升(Prompt进行情感分类)。


基于上述内容可以了解,在Prompt-Oriented Fine-Tuning方法中,预训练模型参数是可变的。其实将Prompt-Oriented Fine-Tuning方法放在Prompt-Tuning这个部分合理也不合理,因为它其实是Prompt-Tuning+Fine-Tuning的结合体,将它视为Fine-Tuning的升级版是最合适的。

Prompt-Oriented Fine-Tuning方法在BERT类相对较小的模型上表现较好,但是随着模型越来越大,如果每次针对下游任务,都需要更新预训练模型的参数,资源成本及时间成本都会很高,因此后续陆续提出了不更新预训练模型参数,单纯只针对prompt进行调优的方法,例如Hard PromptSoft Prompt


5.4 Hard Prompt & Soft Prompt

Hard Prompt (离散提示):是一种固定的提示模板,通过将特定的关键词或短语(真实的文本字符串)直接嵌入到文本中,引导模型生成符合要求的文本。这种提示方法的特点在于,提示模板是固定的,不能根据不同的任务和需求进行调整。

  • 上述我们讲述的PET 是一种较为经典的硬模板方法,该方法主要思想:将问题建模成一个完形填空问题,然后优化最终的输出词。虽然 PET 也是在优化整个模型的参数,但是相比于传统的 Finetuning 方法,对数据量需求更少
  • 但是硬模板产生依赖两种方式:根据经验的人工设计 & 自动化搜索;从上图介绍中可以看出硬模板 对于prompt,改变prompt中的单个单词 会给实验结果带来巨大的差异, 所以也为后续优化提供了方向,如索性直接放弃硬模板,去优化 prompt token embedding即Soft Prompt。

Soft Prompt (连续提示) :是指通过给模型输入一个可参数化的提示模板,从而引导模型生成符合特定要求的文本。这种提示方法的特点在于,提示模板中的参数可以根据具体任务和需求进行调整,以达到最佳的生成效果。

接下来,我们主要针对soft Prompt方式进行讲述:


5.4.1 连续提示模板

Soft Prompt目的其将模板转换为可以进行优化的连续向量,换句话说,我们不需要显式地指定这些模板中各个token具体是什么,而只需要在语义空间中表示一个向量即可。


这样,不同的任务、数据可以自适应地在语义空间中寻找若干合适的向量,来代表模板中的每一个词,相较于显式的token,这类token称为 伪标记(Pseudo Token) 。下面给出基于连续提示的模板定义:

假设针对分类任务,给定一个输入句子 x x x,连续提示的模板可以定义为 T = [ x ] , [ v 1 ] , [ v 2 ] , . . . , [ v n ] [ M A S K ] T=[x],[v1],[v2],...,[vn][MASK] T=[x],[v1],[v2],...,[vn][MASK]:其中[v1]则是伪标记,其仅代表一个抽象的token,并没有实际的含义,本质上是一个向量。

总结来说:Soft Prompt方法,是将模板变为可训练的参数,不同的样本可以在连续的向量空间中寻找合适的伪标记,同时也增加模型的泛化能力。因此,连续法需要引入少量的参数并在训练时进行参数更新,但预训练模型参数是不变的,变的是prompt token对应的词向量(Word Embedding)表征及其他引入的少量参数。


目前基于连续提示的Prompt-Tuning的实现方法,以下列三篇论文为代表,分别作简要介绍:

  • 《The Power of Scale for Parameter-Efficient Prompt Tuning》:代表方法为Prompt Tuning
  • 《GPT Understands, Too》:代表方法为P-tuning
  • 《PPT: Pre-trained Prompt Tuning for Few-shot Learning》:代表方法PPT

5.4.2 Prompt Tuning(NLG任务)

Prompt Tuning(基于T5模型来做的)方法为每一个输入文本假设一个固定前缀提示,该提示表由神经网络参数化,并在下游任务微调时进行更新,整个过程中预训练的大模型参数被冻结。


形式化的描述如下:

给定 n n n个tokens,记作​ x 1 , . . . , x n x1, ...,xn x1,...,xn ,通过一个预训练模型对应的embedding table,可以将​ n n n个token表示为一个向量矩阵​ ( X e − > R n ∗ e ) (X_e->R^{n*e}) (Xe>Rne),其中​ e e e是向量的维度(其与预训练模型的配置有关,例如BERT-base是768)。连续模板中的每个伪标记​ v i v_i vi可以视为参数,也可以视为一个token,因此,可以通过另一个embedding table获得​ p p p个伪标记token标记为向量矩阵​ ( P e − > R p ∗ e ) (P_e->R^{p*e}) (Pe>Rpe),然后将文本和Prompt拼接获得新的输入​ [ P e : X e ] − > R ( p + n ) ∗ e [P_e:X_e]->R^{(p+n)*e} [Pe:Xe]>R(p+n)e.这个新的输入将会喂入一个MLP获得新的表征。注意,只有prompt对应的向量表征参数P ( P e − > R p ∗ e ) (P_e->R^{p*e}) (Pe>Rpe)会随着训练进行更新


每个伪标记的初始化可以有下列几种情况:

  • 最简单的是随机初始化:即随机初始化一个面向所有伪标记的embedding table,可采用正态分布或者均匀分布等;
  • 每个token使用预训练模型已有的embedding table进行初始化,此时,每一个伪标记先随机指定词表中的一个词,并取对应词的embedding作为这个伪标记的初始化;
  • 在分类任务上,使用label word(verbalizer)对应的embedding作为初始化,可以有效限制模型输出的是预设的输出类对应的word。

因此,在训练过程中,每个伪标记以及对应的MLP参数都可以得到训练,对于不同的输入句子 ,这些伪标记对应的embedding也各不相同,达到了预期的目的。

Prompt Tuning特点:

  • 优点:

    • 大模型的微调新范式
    • 模型参数规模大了之后,可以将大模型参数固定,指定附加参数来适配下游任务,而且适配性能基本和全参数微调相当。
  • 缺点:

    • 在小样本学习场景上表现不太行
    • 收敛速度比较慢
    • 调参比较复杂
5.4.3 P-tuning(NLU任务)

P-tuning的详细内容请参考论文解读:GPT Understands, Too。

P-tuning是另一个具有代表性的连续提示方法,主要针对的是NLU任务,方法图如下所示(图中的 P i P_i Pi等价于上文的 v i v_i vi ,表示伪标记), 谷歌于2021年发表。


P-Tuning方法中四个技巧点:

  • 考虑到这些伪标记的相互依赖关系 :认为 [ P 1 ] [P_1] [P1] [ P 2 ] [P_2] [P2]是有先后关系的,而transformer无法显式地刻画这层关系,因此引入Prompt Encoder,实际过程中采用一层Bi-LSTM+两个前馈神经网络组成;
  • 指定上下文词 :如果模板全部是伪标记,在训练时无法很好地控制这些模板朝着与对应句子相似的语义上优化,因此选定部分具有与当前句子语义代表性的一些词作为一些伪标记的初始化(例如上图中“capital”、“Britain”等);
  • 重参数(Reparameterization) :具体到代码实现上,P-tuning先通过一个Prompt Encoder表征这些伪标记后,直接将这些新的表征覆盖到对应的embedding table上,换句话说,Prompt Encoder只在训练时候会使用到,而在推理阶段则不再使用。
  • 混合提示(Hydride Prompt) :将连续提示与离散token进行混合,例如 [ x ] [ i t ] [ v 1 ] [ m a s k ] ​ [x][it][v1][mask]​ [x][it][v1][mask]

P-Tuning V2是升级版本,该方法在模型的每一层都应用连续的 prompts 并对 prompts 参数进行更新优化。同时,该方法是也是针对 NLU 任务优化和适配的。

5.4.4 PPT(Pre-trained Prompt Tuning)

Prompt-Tuning通常适用于低资源场景,但是由于连续的模板是随机初始化的,即其存在新的参数,少量样本可能依然很难确保这些模板被很好地优化。因此简单的方法就是对这些连续的模板也进行预训练。PPT旨在通过先让这些连续提示在大量无标注的预训练语料进行预训练(注意,预训练过程中,Pre-train-model参数固定不变,只改变soft prompt),然后将其加载到对应下游任务的PLM上进行训练,如下图所示(图中的 P ​ P​ P即连续的提示模板, < X > ​ <X>​ <X>并表示为mask token):

每一类任务都会预训练一个soft Prompt, 预训练后的soft Prompt可以直接运用到相似任务中

  • 首先在大量无标注语料上进行预训练,获得训练好的连续提示(初始化下游微调任务的soft prompt);
  • 对下游任务(是非问答、NLI、文本匹配等),加载这些训练好的提示之后,进行微调,或者直接进行zero-shot预测。

💫PPT的特点:

  • 优点:
    • 预训练soft-prompt带来了 小样本学习场景上的显著提升
    • 缓解了prompt-tuning收敛慢的问题
  • 缺点
    • 合并同类人物需要人工设计

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java打印99乘法表

public class NineNineMulTable{public static void main(String[] args){for(int i 1; i < 9; i ){for(int j 1; j < i; j ){System.out.print(j " * " i " " i * j "\t");//再次先输出j在输出i是打印出来是1*2&#xff0c;2*2}S…

网络安全技术实验六 入侵检测技术实践

一、实验目的和要求 理解基于网络的入侵检测系统的基本原理&#xff0c;掌握snort IDS工作机理&#xff1b; 学习应用snort三种方式工作&#xff1b;熟练编写snort规则&#xff1b; 完成snort数据包记录、日志查看、字符串匹配、ARP欺骗攻击检测、端口扫描工具检测等功能。 …

【计算机视觉】人脸算法之图像处理基础知识(二)

图像处理基础知识&#xff08;二&#xff09; 1.图像的颜色空间转换 我们常见的图像通常由R&#xff08;红色&#xff09;、G&#xff08;绿色&#xff09;、B&#xff08;蓝色&#xff09;组成。但是在很多时候我们会将彩色图像转换成灰度图像进行处理。此时会用到cv2.cvtCo…

C#观察者模式应用

目录 一、什么是观察者模式 二、C#中观察者模式的实现 三、两种实现的用法 1、事件与委托 2、IObserver和IObservable 四、参考文献 一、什么是观察者模式 观察者&#xff08;Observer&#xff09;模式的定义&#xff1a;指多个对象间存在一对多的依赖关系&#xff0c;当…

AGI 远不止 ChatGPT!一文入门 AGI 通识及应用开发

AI 大语言模型进入爆发阶段 2022 年 12 月 ChatGPT 突然爆火&#xff0c;原因是其表现出来的智能化已经远远突破了我们的常规认知。虽然其呈现在使用者面前仅仅只是一个简单的对话问答形式&#xff0c;但是它的内容化水平非常强大&#xff0c;甚至在某些方面已经超过人类了&am…

WordPress插件数据库批量替换内容工具插件

1、安装插件后&#xff0c;我们就可以在后台菜单看到工具操作界面 2、目前支持网站内容、标题、评论指定字符的快速替换 3、可以快速解决以往我们需要从MYSQL数据库命令替换的烦恼

聊聊DoIP吧(三)-端口号port

DoIP在UDP和TCP建立连接和发送诊断报文的过程中使用的端口定义如下&#xff1a;

通过腾讯云TDSQL TCPTCE(MySQL版)认证考试秘籍宝典

腾讯云TDSQL(MySQL版)交付运维高级工程师TCCP证书展示 腾讯云TDSQL(MySQL版)交付运维专家TCCE考试成绩、证书展示 认证类型与级别 TCCA:入门级(初级) TCCP:高级(中级) TCCE:专家级(高级) 考试形式 考试是在线考试&#xff0c;考生需要在腾讯云大学官网上完成。 腾讯云TDSQ…

最新情侣飞行棋高阶羞羞版,解锁私密版情侣小游戏,文末有福利!

今天要跟大家聊聊一种特别有意思的游戏——情侣飞行棋羞羞版。别急着脸红&#xff0c;这可是专为情侣设计的游戏&#xff0c;让你们在轻松愉快的氛围中&#xff0c;增进了解&#xff0c;加深感情。 谈恋爱&#xff0c;不就是两个人在一起&#xff0c;做些有趣的事情吗&#xf…

鸿蒙开发:【设置任务快照的图标和名称】

设置任务快照的图标和名称 设置任务快照的图标和名称是为了提高用户界面的可视化性和用户体验&#xff0c;以便更好地管理和跟踪应用程序中的任务和功能。通过为每个任务快照设置不同的图标和名称&#xff0c;可以更轻松地区分和识别每个任务的功能。 默认情况下任务快照的图…

江协科技51单片机学习- p7 独立按键控制LED灯

前言&#xff1a; 本文是根据哔哩哔哩网站上“江协科技51单片机”视频的学习笔记&#xff0c;在这里会记录下江协科技51单片机开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了江协科技51单片机教学视频和链接中的内容。 引用&#xff1a; 51单片机入门教程-2…

SAP FI 批量显示科目余额 发生额的报表

实际界面 结果 源代码 *&---------------------------------------------------------------------* *& Report ZRPT_FICO_F01 *&---------------------------------------------------------------------* *& 20240614 批量显示余额 发生额 *&---------…

Python | Leetcode Python题解之第149题直线上最多的点数

题目&#xff1a; 题解&#xff1a; class Solution:def maxPoints(self, points: List[List[int]]) -> int:n len(points)if n < 2:return nres 2for i in range(n):x1, y1 points[i][0], points[i][1]has {}for j in range(i 1, n):x2, y2 points[j][0], points…

[Java基本语法] 异常

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏:&#x1f355; Collection与数据结构 (92平均质量分)https://blog.csdn.net/2301_80050796/category_12621348.html?spm1001.2014.3001.5482 &#x1f9c0;线程与…

从0到1:手动测试迈向自动化——手机web应用的自动化测试工具

引言&#xff1a; 在当今移动互联网时代&#xff0c;手机web应用已经成为人们生活中不可或缺的一部分。为了保证手机web应用的质量和稳定性&#xff0c;自动化测试工具变得十分重要。本文将介绍手机web应用自动化测试工具的选择和使用&#xff0c;提供一份超详细且规范的指南&a…

ChatGPT魔法背后的原理:如何做到词语接龙式输出?

介绍 我们都知道 ChatGPT 是 AIGC 工具&#xff0c;其实就是生成式人工智能。大家有没有想过这些问题 &#x1f914;️&#xff1a; 1、我们输入一段话&#xff0c;就可以看见它*噼里啪啦的一顿输出*&#xff0c;那么它的原理到底是什么&#xff1f; 2、到底它是怎么锁定这些…

SpringCloud之Zuul源码解析

Zuul 是在云平台上提供动态路由&#xff0c;监控&#xff0c;弹性&#xff0c;安全等边缘服务的框架。Zuul 相当于是设备和 Netflix 流应用的 Web 网站后端所有请求的前门。Zuul 可以适当的对多个 Amazon Auto Scaling Groups 进行路由请求。 其架构如下图所示&#xff1a; Zuu…

Oracle数据库安装-Linux

Oracle数据库安装-Linux 1、修改CentOS系统标志&#xff08;oracle默认不支持CentOS&#xff09;2、安装oracle 1、修改CentOS系统标志&#xff08;oracle默认不支持CentOS&#xff09; 1.1、备份原有的配置文件&#xff0c;编辑文件&#xff0c;将原有内容删除&#xff0c;替…

hrm人力管理系统源码(从招聘到薪酬的全过程人力管控系统)

一、项目介绍 一款全源码可二开&#xff0c;可基于云部署、私有部署的企业级数字化人力资源管理系统&#xff0c;涵盖了招聘、人事、考勤、绩效、社保、酬薪六大模块&#xff0c;解决了从人事招聘到酬薪计算的全周期人力资源管理&#xff0c;符合当下大中小型企业组织架构管理运…

Linux网络-HttpServer的实现

文章目录 前言一、请求报文的解析URL的解析 二、响应报文的发送Content-LenthConten-TypeCookie和Set-CookieCookie的风险 三、尝试发送一个HTML网页404网页Location 重定向 四、浏览器的多次请求行为总结 前言 之前我们简单理解了一下Http协议&#xff0c;本章我们将在LInux下…