self-supervised learning(BERT和GPT)

1芝麻街与NLP模型

我們接下來要講的主題呢叫做Self-Supervised Learning,在講self-supervised learning之前呢,就不能不介紹一下芝麻街,為什麼呢因為不知道為什麼self-supervised learning的模型都是以芝麻街的人物命名。

image-20241021142639755

因為Bert是一個非常巨大的模型,有多大 它有340個million的參數, B E R T b a s e BERT_{base} BERTbase也有110M

image-20241021142926213

但是其實你可能覺得Bert已經很大了
但是還有更多更巨大的模型

image-20241021143336106

這個時代就像是被發動的地名一樣,有很多超巨大的巨人從地底湧出

最早的是ELMO,ELMO也有94個million,這邊用這些角色的身高來代表它的參數量,Bert大了一點 340個million,遠比你在作業裡面做的大了一千倍以上,但是它還不算是特別大的,GPT-2它有一千五百個million的參數

image-20241021143452455

但就算是GPT-2它也不算是太大的,這個Megatron有8個billion的參數,GPT-2的8倍左右

image-20241021143715450

後來又有T5,T5就是有一款福特汽車叫T5,雖然T5是Google做的跟車子也沒有什麼關係,那這邊就放一個福特汽車,T5有11個billion,但這也不算什麼,Turing NLG有17個billion,那這也不算什麼,GPT-3有Turing NLG的10倍那麼大,它有10倍那麼大,到底GPT-3有多大呢,如果我們把它具象化的話,它有這麼大

image-20241021144523711

2BERT简介

那在等一下的課程裡面我們會講兩個東西,我們會講Bert跟GPT

image-20241021144632562

首先解释自监督

image-20241021145552224

一大堆无标签的x,分为两部分, x ′ , x ′ ′ x',x'' x,x′′。输入 x ′ x' x ,让输出的y与 x ′ ′ x'' x′′越接近越好。

bert其实就是transformer的encoder

image-20241021150415350

这里的输入是一个序列,不只可以是文字,可以是语音,甚至是图像。

随机遮盖一些输入的文字,比如输入100个token (token就是你在处理一段文字的时候的单位)token的大小是你自己决定的,处理中文的时候,token通常是一个方块字。

image-20241021150928715

随机的mask就是,有一个特殊的token ,或者随机换成一个其他词

image-20241021151126466

论文附录有给例子。

image-20241021151312285

那我们希望遮住部分的输出湾的概率越大越好

image-20241021151438992

训练的时候,就最小化交叉熵。Bert训练同时还会做另一方法

image-20241021152225214

从语料库sample两个句子,为了分割这两句子,会有一个特殊的符号[SEP],这样Bert才知道这是两个不同的句子。还会在整个sequence的最前面加一个特殊的符号[CLS]

image-20241021152522201

现在我们只看cls对应的输出,其他位置的输出不去管它,

image-20241021153236081

但是后面有人发文章说next sentence prediction并不是很有用。人们发现sentence order prediction比较有用,就是把文章里挨着的两个句子的前后顺序打乱,让model判断哪个在前哪个在后。

那这样训练的模型可以做完形填空有什么用呢,其实Bert的用处在于可以解决很多的下游任务,这些任务和完形填空没有太大的关系。

image-20241021153837549

不过拿来做你感兴趣的下游任务时需要一些有标签的数据,对模型进行微调。

今天你要测试一个self supervised learning model的能力,通常会在多个任务上测试,看看在每个任务上的正确率是多少,然后取平均值。任务集里最知名的标杆就是glue

image-20241021154654225

里面有九个任务,你会在九个任务上分别微调,得到九个模型,然后计算平均正确率

image-20241021155021156

横轴是不同的模型,这些五颜六色的点就是不同的任务。黑线是人类在这个任务上的准确率,因为不同任务的评估标准不同,不能直接放在一起比较,所以是和人类做对比。

那具体要怎么使用Bert

image-20241021155928096

这里是需要有标签的下游任务数据集。为什么要用预训练的参数初始化呢,随机初始化和使用预训练的对比如下

image-20241021160220256

BERT的第二个例子是词性标注

image-20241021161901567

第三个例子

image-20241021162319134

给出前提和推论,判断是不是可以从前提得到推论。 这样的任务可以用在,文章下的评论是反对还是支持,把文章和评论丢给模型。BERT怎么解这个问题呢

image-20241021163755806

输入两个句子,判断他们的关系,是不是矛盾。这些例子中bert都是用预训练的参数初始化,然后linear是随机初始化,然后在有标签的数据集上进行训练

image-20241021164049881

第四个例子是问答,但是这个问答是有限制的,答案一定在文章里

image-20241021164214326

输入是两个序列,如果是中文,{d1,d2,d3…}每一个d就是一个中文字,{q1,q2…}每个q代表一个中文字。D和Q丢入模型,输出两个正整数,s,e ,从文字中截取s到e的部分就是答案。

image-20241021164724035

怎么训练呢

image-20241021164958367

把橙色的部分和document的输出做inner product,接下来通过softmax得到三个值,这部分和self-attention很像,把橙色部分想成query,黄色部分想成key,那这就是做一个attention。

蓝色的部分也做一样的事情,蓝色的部分代表答案结束的位置

image-20241021165701710

所以这个时候答案就d2到d3,

实际上由于硬件的限制(运算量)bert的输入长度会限制,训练的时候一篇文章往往很长,我们会把文章截成一小段一小段的,每次只拿一个段出来训练

image-20241021170537601

那么bert的厉害之处在哪里,自己也可以训练一个做完形填空的model,厉害之处就在你没法自己做,你自己训练不起来。我们实验室(李宏毅)试着训练bert看能不能得到和google一样的结果。3billion的资料看起来很多,但是是unlabel的,可以从网上爬,不是很难,难的是训练过程。横轴就是训练过程的参数update1000000次。用TPU跑了8天,你用conlab可能200天都不一定

image-20241021192359552

那么google已经训练了bert,而且这些pre-training model都是公开的,为什么还要训练一个和谷歌结果差不多的bert,这里想要做的事情是建立bert胚胎学,因为bert的训练非常的花费计算资源,那有没有可能加速训练,想知道怎么训练的更快也许就要从观察训练过程开始,过去是没有人观察bert的训练过程,因为google的paper直接说这个bert在各个任务上都很好,但实际上在训练bert这个学填空题的过程中到底bert学到了什么,他什么时候会填动词,什么时候会填名词,什么时候会填代名词,没有人去研究过这件事。所以自己train一个bert就可以观察bert在什么时候学会填什么样的词汇,他填空的能力 是怎么增进的

image-20241021194814920

结果可能和你想的不太一样。

再补充一个事情,前面讲的任务都没包括seq2seq的model,我们要解seq2seq的问题怎么办?BERT只有Encoder,有没有办法pre-traing seq2seq model的Decoder呢,可以的,

image-20241021200022840

你有个transformer,输入是一串句子,输出是一串句子。

给encoder输入故意做一些扰动,把输入弄坏,Decoder输出的就是弄坏前的结果。encoder看到弄坏的结果,decoder要输出,还原弄还前的结果,train下去就是pre-train一个seq2seq的model。

怎么把输入弄坏,就有各种不同的方法

image-20241021200717587

把一些地方mask,或者删掉一下词汇,把词汇顺序弄乱,词汇顺序旋转,或者即插入mask有删掉一些词汇

image-20241021201403985

有一篇paper叫BART使用了所有方法

你可能会问,这么多种方法,哪种比较好,可能需要做一些实验尝试一下,google已经帮你做了

image-20241021201741893

T5是在C4上训练的,C4数据集是公开的,但是有7T,你可能很难下载下来,下载下来也不知放在哪里,而且网站有提示前处理用一张GPU要花355天

3BERT的奇闻轶事

为什么BERT有用,先提供一个最常见的解释

image-20241021202845214

输出的embeding代表这个词的意思

image-20241021203055160

BERT考虑了上下文,计算它们的相似度

这边选了10个句子

image-20241021203238442

所以我们可以说,BERT在训练做填空的时候,学会了每个中文词的意思,所以可以在接下来的任务做的更好

image-20241021203415198

那BERT为什么会有这样的能力呢,为什么他输出的向量就代表那个词的意思。

基于一个语言学假设,一个词的意思要看常常和他一起出现的词汇,也就是上下文。苹果的果上下文常常是树,吃等等,而苹果手机的果常常跟的是专利,电。所以一个词汇的意思可以从他的上下文看出来。

而bert在做完形填空的时候也许学的就是从上下文抽取资讯

image-20241021204030177

因为训练的时候只给w1,w3,w4预测w2,怎么预测w2,他就是看上下文。其实这样的想法在bert前就有了,word embedding的CBOW

image-20241021204302905

CBOW是个很简单的模型。

BERT其实相当于deep版的CBOW,BERT可以做到同一个词汇,根据不同的上下文,Embeding不一样

image-20241021204910139

所以BERT抽出的这些向量就叫Contextualized word embedding

这是你最常见的BERT有效的解释,但是真的是这样吗

image-20241021205155989

做个实验

image-20241021205342820

A T C G对应一个word,对应什么不重要,随便对应什么,然后训练,你可能觉得怪怪的,不知道这样有什么意思

image-20241021205537949

但是你就这样去做,BERT竟然比不使用BERT(蓝色)要好,这样实验说明,BERT为什么要好还有很多需要研究的地方。

这里并不是否认BERT学到语义,从embeding来看,BERT确实学到了语义,知道哪些词汇比较像,这里想要表达的意思是你就算给他一些乱七八糟的句子,竟然也可以分类的不错,所以他的能力不完全来自于他看的懂文章这件事,可能有其他理由。比如说bert本身是一个初始化比较好的参数,不见得和语义有关,这种初始化好的参数就是适合拿来做大型模型的训练。是不是这样还尚待商榷。

之所以告诉你这个实验的结果只是想说,今天这些模型都是非常新的模型,他们为什么能够成功还有很大的研究空间

image-20241021210356767

接下来要将多语言的BERT,你在训练的时候会拿各种各样的语言,中英法等拿去做完形填空

image-20241021210554730

multi -lingual BERT的优点在于

image-20241021210715347

拿英文训练,自动就会学习中文的QA问题

image-20241021211225373

在104个语言预训练填空,在English资料训练问答,然后直接在中文测试问答,它竟然可以回答中文问题,虽然预训练的104种语言有中文,但是只训练了填空,在英文资料训练(fine-tune)问答,它没有见过中文问答,竟然可以直接回答中文问答。

为什么会这样,一种解释是,也许对multi -lingual BERT不同语音间没有什么差异,不管中文还是英文,最终这些词汇的embedding只有意思是一样的,都会很近

image-20241021214106250

这不只是猜测,其实是有验证的,MRR越高说明同样意思不同语言的词汇的向量越接近

image-20241021215418210

200k的时候效果没有达到Google效果,加大数据呢,1000k,how about 1000K?

image-20241021215646959

不同资料量真的有用

image-20241021215728626

The amount of training data is critical for alignment

最后还有一个神奇的实验,你说bert可以把不同语言同样意思的符号,让他们的向量很近,但是训练multi - BERT时是给他英文做英文填空,给中文做中文填空,它不会混在一起啊

image-20241022092027779

如果对他来说不同语言没有差别,给他英文的句子和填空,它可能填中文进去,但是它没有这样做,代表它知道语言的资讯对他来说同样不同,来自不同语言的那些符号终究还是不一样,它并没有完全抹掉语言的资讯。There must be language
information.

那我们来找一下语言的资讯到底在哪里,后来发现语言的资讯没有藏得很深

image-20241022094426104

把所有英文的embedding,把所有英文词汇丢到multi-BERT里,把所有的embedding平均,把所有中文的embedding平均起来,两者相减就是中文和英文之间的差距。

你可以做的什么神奇的事情呢,你限制给multi-BERT一句英文,得到embedding,加上蓝色的向量(中英文之间的差距)这些向量就变成了中文。你再叫他去做填空题的时候就会填中文的答案了。

下面是真实的例子

image-20241022095250314

bert读进去的句子是The girl that can help me is all the way across town. There is no one who can help me.变成embedding后加上蓝色的向量,bert就会觉得它读到的是中文的句子。然后你叫他做填空题,把embedding变回句子以后得到的结果就是孩,can 来我是all the way across 市。。There 是无人人can help 我·

image-20241022095906775

虽然表面上不同语言同样意思的词汇拉的很近,但是语言的资讯还是藏在multi-lingual BERT里面的

4GPT的野望

image-20241022100549480

Bert是做填空,GPT做的是什么呢,GPT做的任务是预测接下来的token是什么

image-20241022100934572

BOS即句子开始标记(Begin of Sentence)

h t h_t ht就是你的embedding

image-20241022101300924

然后用成千上万个句子来训练这个模型。GPT的模型就像transformer的Decoder,不过拿掉了cross attention这部分

image-20241022101645806

你做的也是mask的attention

image-20241022101800811

因为GPT可以预测下一个词汇,所有他有生成的能力,你可以让他不断的预测下一个token,产生完整的文章。

GPT可以把话补全,怎么怎么使用在问答,或者其他语言处理问题上

GPT也可以和BERT一样,BERT是怎么做的,把BERT model拿过来,后面接一个简单的linear的classifier,那你就可以做很多事情,你也可以把GPT拿出來,接一個簡單的classifier我相信也是有效,但是在GPT的論文中它沒有這樣做

image-20241022103033452

它有一個更狂的想法,為什麼會有更狂的想法呢,因為首先就是BERT那一招,BERT用過了嘛,所以總不能再用一樣的東西,這樣寫paper就沒有人覺得厲害了,然後再來就是GPT這個模型
也許真的太大了,大到連fine tune可能都有困難,你想想看我們在用BERT的時候,你要把BERT模型後面接一個linear classifier,然後BERT也是你的要train的model的一部分,所以它的參數也是要調的,所以在剛才助教公告的BERT相關的作業裡面你還是需要花一點時間來training,雖然助教說你大概20分鐘就可以train完了,因為你並不是要train一個完整的BERT的模型,BERT的模型在之前在做這個填空題的時候已經訓練得差不多了,你只需要微調它就好了。
但是微調還是要花時間的,也許GPT實在是太過巨大,巨大到要微調它,要train一個η可能都有困難,所以GPT系列有一個更狂的使用方式。

image-20241022103339462

這個更狂的使用方式和人類更接近,你想想看假設你去考,譬如說托福的聽力測驗,你是怎麼去考托福的聽力測驗的呢,這個托福聽力測驗的敘述是長什麼樣子的呢,首先你會看到一個題目的說明告訴你說現在要考選擇題,請從ABCD四個選項裡面選出正確的答案等等,然後給你一個範例告訴你說這是題目然後正確的答案是多少,然後你看到新的問題期待你就可以舉一反三開始作答,GPT系列要做的事情就是這個模型能不能夠做一樣的事情呢。

舉例來說假設要GPT這個模型做翻譯,你就先打Translate English to French,就先給它這個句子,這個句子代表問題的描述,然後給它幾個範例,跟它說sea otter然後=>後面就應該長這個樣子,或者是這個什麼plush girafe,plush girafe後面就應該長這個樣子等等,然後接下來你問它說cheese=>叫它把後面的補完,希望它就可以產生翻譯的結果

image-20241022103542634

不知道大家能不能夠了解這一個想法是多麼地狂,在training的時候GPT並沒有教它做翻譯這件事,它唯一學到的就是給一段文字的前半段把後半段補完,

就像我們剛才給大家示範的例子一樣,現在我們直接給它前半段的文字就長這個樣子,告訴它說你要做翻譯了,給你幾個例子告訴你說翻譯是怎麼回事,接下來給它cheese這個英文單字後面能不能就直接接出法文的翻譯結果呢,這個在GPT的文獻裡面叫做Few-shot Learning,但是它跟一般的Few-shot Learning又不一樣,所謂Few Shot的意思是說確實只給了它一點例子所以叫做Few Shot,但是它不是一般的learning,這裡面完全沒有什麼gradient descent ,training的時候就是要跑gradient descent嘛,這邊完全沒有gradient descent,完全沒有要去調GPT那個模型參數的意思。

所以在GPT的文獻裡面把這種訓練給了一個特殊的名字,它們叫做In-context Learning,代表說它不是一種一般的learning,它連gradient descent都沒有做

image-20241022104417452

當然你也可以給GPT更大的挑戰,我們在考托福聽力測驗的時候都只給一個例子而已,那GPT可不可以只看一個例子就知道它要做翻譯這件事,這個叫One-shot Learning,還有更狂的是Zero-shot Learning,直接給它一個敘述說我們現在要做翻譯了,GPT能不能夠自己就看得懂,就自動知道說要來做翻譯這件事情呢,那如果能夠做到的話那真的就非常地驚人了

image-20241022104628738

那GPT系列到底有沒有達成這個目標呢,這個是一個見仁見智的問題啦,它不是完全不可能答對,但是正確率有點低,相較於你可以微調模型正確率是有點低的,那細節你就再看看GPT那篇文章,第三代的GPT它測試了42個任務,這個縱軸是正確率,這些實線 這三條實線是42個任務的平均正確率,那這邊包括了Few Shot One Shot跟Zero Shot。

從20幾%的 平均正確率一直做到50幾%的平均正確率,那至於50幾%的平均正確率算是有做起來 還是沒有做起來,那這個就是見仁見智的問題啦,目前看起來狀況是有些任務它還真的學會了,舉例來說2這個加減法你給它一個數字加另外一個數字它真的可以得到正確的兩個數字加起來的結果,但是有些任務它可能怎麼學都學不會,譬如說一些跟邏輯推理有關的任務它的結果就非常非常地慘,好 那有關GPT3的細節這個就留給大家再自己研究

image-20241022104832092

剛才舉的例子到目前為止我們舉的例子都是只有跟文字有關,但是你不要誤會說這種self-supervised learning的概念只能用在文字上,在語音 ,在CV,CV就是computer vision也就是影像,在語音跟影像的應用上也都可以用。

image-20241022105531660

那其實今天self-supervised learning的技術非常非常地多,我們講的BERT跟GPT系列它只是三個類型的的其中一種,它們是屬於prediction那一類,

那接下來的課程你可能會覺得有點流水帳,就是我們每一個主題呢就是告訴你說這個主題裡面有什麼, 但是細節這個更多的知識就留給大家自己來做更進一步的研究

所以這些投影片只是要告訴你說在self-supervised learning這個部分,我們講的只是整個領域的其中一小塊,那還有更多的內容是等待大家去探索的

那有關影像的部分呢,我們就真的不會細講,我這邊就是放兩頁投影片帶過去,告訴你說有一招非常有名的叫做SimCLR,它的概念也不難我相信你自己讀論文應該也有辦法看懂它

GIF 2024-10-22 11-06-18

那還有很奇怪的叫做BYOL,BYOL這個東西呢我們是不太可能在上課講它,為什麼呢,因為根本不知道它為什麼會work

image-20241022110731320

假設它不是已經發表的文章,然後學生來跟我提這個想法我一定就是我一定不會讓他做,這不可能會work的,這是個不可能會實現的想法,不可能會成功的,這個想法感覺有一個巨大的瑕疵,但不知道為什麼它是work的,而且還曾經一度得到state of the art的結果,deep learning就是這麼神奇

所以這個呢我們也就不細講,就跳過去好, 那在語音的部分你也完全可以使用self-supervised learning的概念

image-20241022110940842

你完全可以試著訓練語音版的BERT,那怎麼訓練語音版的BERT呢,你就看看文字版的BERT是怎麼訓練的,譬如說做填空題,語音也可以做填空題,就把一段聲音訊號蓋起來,叫機器去猜蓋起來的部分是什麼嘛,語音也可以預測接下來會出現的內容

所以你也可以做語音版的GPT,不管是語音版的BERT,語音版的GPT,其實都已經有很多相關的研究成果了

image-20241022111135784

不過其實在語音上相較於文字處理的領域還是有一些比較缺乏的東西,那我認為現在很缺乏的一個東西就是像GLUE這樣子的benchmark corpus,在自然語言處理的領域在文字上有GLUE這個corpus,這個基準的資料庫叫做GLUE,它裡面有九個NLP的任務。今天你要知道BERT做得好不好就讓它去跑那九個任務,在去平均,那代表這個self-supervised learning模型的好壞,但在語音上 到目前為止還沒有類似的基準的資料庫

所以我們實驗室就跟其他的研究團隊共同開發了一個語音版的GLUE,我們叫做SUPERB它是Speech processing Universal PERformance Benchmark的縮寫,你知道今天你做什麼模型都一定要硬湊梗才行啦,所以這邊也是要硬湊一個梗把它叫做SUPERB

在這個基準語料庫裡面包含了十個不同的任務,那語音其實有非常多不同的面向,很多人講到語音相關的技術都只知道語音辨識,把聲音轉成文字,但這並不是語音技術的全貌

語音其實包含了非常豐富的資訊,它除了有內容的資訊,就是你說了什麼,還有其他的資訊,舉例來說這句話是誰說的,舉例這個人說這句話的時候他的語氣是什麼樣,還有這句話背後它到底有什麼樣的語意。

所以我們準備了十個不同的任務這個任務包含了語音不同的面向,包括去檢測一個模型它能夠識別內容的能力,識別誰在說話的能力,識別他是怎麼說的能力,甚至是識別這句話背後語意的能力,從全方位來檢測一個self-supervised learning的模型它在理解人類語言上的能力。

而且我們還有一個Toolkit,這個Toolkit裡面就包含了各式各樣的self-supervised learning的模型。

image-20241022111808869

還有這些
self-supervised learning的模型它可以做的各式各樣語音的下游的任務,然後把連結放在這邊給大家參考

講這些只是想告訴大家說self-supervised learning的技術不是只能被用在文字上,在這個影像上 在語音上都仍然有非常大的空間可以使用。

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

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

相关文章

使用Bert+BiLSTM+CRF训练 NER任务

使用的数据集在这里E-Commercial NER Dataset / 电商NER数据集_数据集-阿里云天池 针对面向电商的命名实体识别研究,我们通过爬取搜集了淘宝商品文本的标题,并标注了4大类,9小类的实体类别。具体类型及实体数量如下 针对面向电商的命名实体…

iptables防火墙总结

iptables防火墙总结 四表五链 P 默认策略,-p 协议 出口防火墙,默认配置,使用Forword,采用-P 例题:设置iptables防火墙默认不允许任何数据包进入,相应命令是: Iptables -t filter -P FORWORD -j…

【数据结构】五分钟自测主干知识(十一)

上回(半年前)我们讲了二叉树,如果我们要找到二叉树某序遍历下的前驱和后继,我们需要对其作动态遍历求得,比较费时;或者给每个结点增加两个指针域prior和next,但比较费空间。 有没有既能省时间&…

【K8S系列】Kubernetes Service 基础知识 详细介绍

在 Kubernetes 中,Service 是一种抽象的资源,用于定义一组 Pod 的访问策略。它为这些 Pod 提供了一个稳定的访问入口,解决了 Pod 可能频繁变化的问题。本文将详细介绍 Kubernetes Service 的类型、功能、使用场景、DNS 和负载均衡等方面。 1.…

Openlayers高级交互(2/20):清除所有图层的有效方法

Openlayers项目中,经常会放置很多的图层,在业务操作的时候,会做出删除所有图层的行为。这里面给出了一个详细的方法,能够有效的解决 清除所有图层的问题。 效果图 专栏名称内容介绍Openlayers基础实战 (72篇)专栏提供73篇文章,为小白群体提供基础知识及示例演示,能解决…

[软件工程]—桥接(Brige)模式与伪码推导

桥接(Brige)模式与伪码推导 1.基本概念 1.1 动机 由于某些类型的固有的实现逻辑,使它们具有两个变化的维度,乃至多个维度的变化。如何应对这种“多维度的变化”?如何利用面向对象技术是的类型可以轻松的沿着两个乃至…

022_matrix_dancing_in_Matlab中求解一个超简单的矩阵问题

矩阵体操 首先,可以复习一下向量、矩阵和索引的基础知识。 向量约定矩阵约定矩阵索引 一般而言,我们利用进行计算大概就是以下的步骤: #mermaid-svg-UovF0Uldf5XxntJi {font-family:"trebuchet ms",verdana,arial,sans-serif;fo…

MFC实现以不规则PNG图片作为窗口背景

效果图 显示的不规则PNG图片 头文件 #pragma once #include <gdiplus.h> #pragma comment (lib,"Gdiplus.lib")// CShowBack 对话框class CShowBack : public CDialogEx {DECLARE_DYNAMIC(CShowBack) public:CShowBack(CWnd* pParent nullptr); // 标准构…

C++学习路线(二十二)

构造函数 构造函数作用 在创建一个新的对象时&#xff0c;自动调用的函数&#xff0c;用来进行“初始化”工作:对这个对象内部的数据成员进行初始化。 构造函数特点 1.自动调用(在创建新对象时&#xff0c;自动调用) 2.构造函数的函数名&#xff0c;和类名相同 3.构造函数…

react18中的jsx 底层渲染机制相关原理

jsx 底层渲染机制 渲染 jsx 时&#xff0c;会先解析 jsx&#xff0c;生成一个虚拟 dom(virtual dom)。然后将虚拟 dom 渲染成真实 dom。如果 jsx 中包含事件&#xff0c;会将事件绑定到真实 dom 上。 虚拟 dom 对象&#xff0c;是框架内部构建的一套对象体系&#xff0c;对象…

无废话、光速上手 React-Router

React-Router React Router 是一个用于 React 应用的声明式路由库。它允许开发者通过组件化的方式定义应用的路由结构&#xff0c;使得路由管理更加直观和可维护 安装 pnpm i react-router-dom定义路由 定义路由有两种方式&#xff0c;分别是对象路由和路由组件&#xff0c…

AIGC时代 | 从零到一,打造你的专属AI Chat应用!

文章目录 目标功能概要&#xff08;1&#xff09;Chat 交互界面&#xff08;2&#xff09;流式接口&#xff08;3&#xff09;多轮会话&#xff08;4&#xff09;打字效果 系统架构&#xff08;1&#xff09;大模型服务层&#xff08;2&#xff09;应用服务层&#xff08;3&…

深入解析东芝TB62261FTG,步进电机驱动方案

TB62261FTG是一款由东芝推出的两相双极步进电机驱动器&#xff0c;采用了BiCD工艺&#xff0c;能够提供高效的电机控制。这款芯片具有多种优秀的功能&#xff0c;包括PWM斩波、内置电流调节、低导通电阻的MOSFET以及多种步进操作模式&#xff0c;使其非常适合用于需要精确运动控…

微信小程序的日期区间选择组件的封装和使用

组件化开发是一种将大型软件系统分解为更小、更易于管理和复用的独立模块或组件的方法。这种方法在现代软件开发中越来越受到重视&#xff0c;尤其是在前端开发领域。微信小程序的日期区间选择组件的使用 wxml 代码 <view><view bind:tap"chooseData">…

第一个Qt程序

创建项目 进入ui界面拖一个按钮 在头文件中添加函数说明 #ifndef HELLO_H #define HELLO_H#include <QMainWindow>QT_BEGIN_NAMESPACE namespace Ui { class Hello; } QT_END_NAMESPACEclass Hello : public QMainWindow {Q_OBJECTpublic:Hello(QWidget *parent nullpt…

上海亚商投顾:沪指缩量调整 NMN概念股逆势大涨

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 市场全天震荡调整&#xff0c;三大指数午后一度跌超1%&#xff0c;北证50指数则涨超4%&#xff0c;北交所个股…

前端发送请求格式

1.multipart/form-data格式发送请求参数 什么时候用&#xff1a; 当后端API要求以表单的形式接收数据时&#xff0c;比如<input type"text" name"username">和<input type"password" name"password">&#xff0c;这些数据…

html全局属性、框架标签

常用的全局属性&#xff1a; 属性名含义id 给标签指定唯一标识&#xff0c;注意&#xff1a;id是不能重复的。 作用&#xff1a;可以让label标签与表单控件相关联&#xff1b;也可以与css、JavaScript配合使用。 注意&#xff1a;不能再以下HTML元素中使用&#xff1a;<hea…

自动化部署-01-jenkins安装

文章目录 前言一、下载安装二、启动三、问题3.1 jdk版本问题3.2 端口冲突3.3 系统字体配置问题 四、再次启动五、配置jenkins5.1 解锁5.2 安装插件5.3 创建管理员用户5.4 实例配置5.5 开始使用5.6 完成 总结 前言 spingcloud微服务等每次部署到服务器上&#xff0c;都需要本地…

鸿蒙到底是不是纯血?到底能不能走向世界?

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 2016年5月鸿蒙系统开始立项。 2018年美国开始经济战争&#xff0c;其中一项就是制裁华为&#xff0c;不让华为用安卓。 2019年8月9日华为正式发布鸿蒙系统。问题就出在这里&#xff0c;大家可以仔细看。 安卓一…