做解析视频网站违法莫,近期舆情热点话题,做响应式网站的框架,微网站建设方案书1芝麻街与NLP模型
我們接下來要講的主題呢叫做Self-Supervised Learning#xff0c;在講self-supervised learning之前呢#xff0c;就不能不介紹一下芝麻街#xff0c;為什麼呢因為不知道為什麼self-supervised learning的模型都是以芝麻街的人物命名。 因為Bert是一個非常…1芝麻街与NLP模型
我們接下來要講的主題呢叫做Self-Supervised Learning在講self-supervised learning之前呢就不能不介紹一下芝麻街為什麼呢因為不知道為什麼self-supervised learning的模型都是以芝麻街的人物命名。 因為Bert是一個非常巨大的模型有多大 它有340個million的參數 B E R T b a s e BERT_{base} BERTbase也有110M 但是其實你可能覺得Bert已經很大了 但是還有更多更巨大的模型 這個時代就像是被發動的地名一樣有很多超巨大的巨人從地底湧出
最早的是ELMOELMO也有94個million這邊用這些角色的身高來代表它的參數量Bert大了一點 340個million遠比你在作業裡面做的大了一千倍以上但是它還不算是特別大的GPT-2它有一千五百個million的參數 但就算是GPT-2它也不算是太大的這個Megatron有8個billion的參數GPT-2的8倍左右 後來又有T5T5就是有一款福特汽車叫T5雖然T5是Google做的跟車子也沒有什麼關係那這邊就放一個福特汽車T5有11個billion但這也不算什麼Turing NLG有17個billion那這也不算什麼GPT-3有Turing NLG的10倍那麼大它有10倍那麼大到底GPT-3有多大呢如果我們把它具象化的話它有這麼大 2BERT简介
那在等一下的課程裡面我們會講兩個東西我們會講Bert跟GPT 首先解释自监督 一大堆无标签的x分为两部分 x ′ , x ′ ′ x,x x′,x′′。输入 x ′ x x′ 让输出的y与 x ′ ′ x x′′越接近越好。
bert其实就是transformer的encoder 这里的输入是一个序列不只可以是文字可以是语音甚至是图像。
随机遮盖一些输入的文字比如输入100个token token就是你在处理一段文字的时候的单位token的大小是你自己决定的处理中文的时候token通常是一个方块字。 随机的mask就是有一个特殊的token 或者随机换成一个其他词 论文附录有给例子。 那我们希望遮住部分的输出湾的概率越大越好 训练的时候就最小化交叉熵。Bert训练同时还会做另一方法 从语料库sample两个句子为了分割这两句子会有一个特殊的符号[SEP],这样Bert才知道这是两个不同的句子。还会在整个sequence的最前面加一个特殊的符号[CLS] 现在我们只看cls对应的输出其他位置的输出不去管它 但是后面有人发文章说next sentence prediction并不是很有用。人们发现sentence order prediction比较有用就是把文章里挨着的两个句子的前后顺序打乱让model判断哪个在前哪个在后。
那这样训练的模型可以做完形填空有什么用呢其实Bert的用处在于可以解决很多的下游任务这些任务和完形填空没有太大的关系。 不过拿来做你感兴趣的下游任务时需要一些有标签的数据对模型进行微调。
今天你要测试一个self supervised learning model的能力通常会在多个任务上测试看看在每个任务上的正确率是多少然后取平均值。任务集里最知名的标杆就是glue 里面有九个任务你会在九个任务上分别微调得到九个模型然后计算平均正确率 横轴是不同的模型这些五颜六色的点就是不同的任务。黑线是人类在这个任务上的准确率因为不同任务的评估标准不同不能直接放在一起比较所以是和人类做对比。
那具体要怎么使用Bert 这里是需要有标签的下游任务数据集。为什么要用预训练的参数初始化呢随机初始化和使用预训练的对比如下 BERT的第二个例子是词性标注 第三个例子 给出前提和推论判断是不是可以从前提得到推论。 这样的任务可以用在文章下的评论是反对还是支持把文章和评论丢给模型。BERT怎么解这个问题呢 输入两个句子判断他们的关系是不是矛盾。这些例子中bert都是用预训练的参数初始化然后linear是随机初始化然后在有标签的数据集上进行训练 第四个例子是问答但是这个问答是有限制的答案一定在文章里 输入是两个序列如果是中文{d1,d2,d3…}每一个d就是一个中文字,{q1q2…}每个q代表一个中文字。D和Q丢入模型输出两个正整数se 从文字中截取s到e的部分就是答案。 怎么训练呢 把橙色的部分和document的输出做inner product接下来通过softmax得到三个值这部分和self-attention很像把橙色部分想成query黄色部分想成key那这就是做一个attention。
蓝色的部分也做一样的事情蓝色的部分代表答案结束的位置 所以这个时候答案就d2到d3
实际上由于硬件的限制运算量bert的输入长度会限制训练的时候一篇文章往往很长我们会把文章截成一小段一小段的每次只拿一个段出来训练 那么bert的厉害之处在哪里自己也可以训练一个做完形填空的model厉害之处就在你没法自己做你自己训练不起来。我们实验室李宏毅试着训练bert看能不能得到和google一样的结果。3billion的资料看起来很多但是是unlabel的可以从网上爬,不是很难难的是训练过程。横轴就是训练过程的参数update1000000次。用TPU跑了8天你用conlab可能200天都不一定 那么google已经训练了bert而且这些pre-training model都是公开的为什么还要训练一个和谷歌结果差不多的bert,这里想要做的事情是建立bert胚胎学因为bert的训练非常的花费计算资源那有没有可能加速训练想知道怎么训练的更快也许就要从观察训练过程开始过去是没有人观察bert的训练过程因为google的paper直接说这个bert在各个任务上都很好但实际上在训练bert这个学填空题的过程中到底bert学到了什么他什么时候会填动词什么时候会填名词什么时候会填代名词没有人去研究过这件事。所以自己train一个bert就可以观察bert在什么时候学会填什么样的词汇他填空的能力 是怎么增进的 结果可能和你想的不太一样。
再补充一个事情前面讲的任务都没包括seq2seq的model我们要解seq2seq的问题怎么办BERT只有Encoder有没有办法pre-traing seq2seq model的Decoder呢可以的 你有个transformer输入是一串句子输出是一串句子。
给encoder输入故意做一些扰动把输入弄坏Decoder输出的就是弄坏前的结果。encoder看到弄坏的结果decoder要输出还原弄还前的结果train下去就是pre-train一个seq2seq的model。
怎么把输入弄坏就有各种不同的方法 把一些地方mask或者删掉一下词汇把词汇顺序弄乱词汇顺序旋转或者即插入mask有删掉一些词汇 有一篇paper叫BART使用了所有方法
你可能会问这么多种方法哪种比较好可能需要做一些实验尝试一下google已经帮你做了 T5是在C4上训练的C4数据集是公开的但是有7T你可能很难下载下来下载下来也不知放在哪里而且网站有提示前处理用一张GPU要花355天
3BERT的奇闻轶事
为什么BERT有用先提供一个最常见的解释 输出的embeding代表这个词的意思 BERT考虑了上下文计算它们的相似度
这边选了10个句子 所以我们可以说BERT在训练做填空的时候学会了每个中文词的意思所以可以在接下来的任务做的更好 那BERT为什么会有这样的能力呢为什么他输出的向量就代表那个词的意思。
基于一个语言学假设一个词的意思要看常常和他一起出现的词汇也就是上下文。苹果的果上下文常常是树吃等等而苹果手机的果常常跟的是专利电。所以一个词汇的意思可以从他的上下文看出来。
而bert在做完形填空的时候也许学的就是从上下文抽取资讯 因为训练的时候只给w1w3w4预测w2怎么预测w2他就是看上下文。其实这样的想法在bert前就有了word embedding的CBOW CBOW是个很简单的模型。
BERT其实相当于deep版的CBOWBERT可以做到同一个词汇根据不同的上下文Embeding不一样 所以BERT抽出的这些向量就叫Contextualized word embedding
这是你最常见的BERT有效的解释但是真的是这样吗 做个实验 A T C G对应一个word对应什么不重要随便对应什么然后训练你可能觉得怪怪的不知道这样有什么意思 但是你就这样去做BERT竟然比不使用BERT蓝色要好这样实验说明BERT为什么要好还有很多需要研究的地方。
这里并不是否认BERT学到语义从embeding来看BERT确实学到了语义知道哪些词汇比较像这里想要表达的意思是你就算给他一些乱七八糟的句子竟然也可以分类的不错所以他的能力不完全来自于他看的懂文章这件事可能有其他理由。比如说bert本身是一个初始化比较好的参数不见得和语义有关这种初始化好的参数就是适合拿来做大型模型的训练。是不是这样还尚待商榷。
之所以告诉你这个实验的结果只是想说今天这些模型都是非常新的模型他们为什么能够成功还有很大的研究空间 接下来要将多语言的BERT你在训练的时候会拿各种各样的语言中英法等拿去做完形填空 multi -lingual BERT的优点在于 拿英文训练自动就会学习中文的QA问题 在104个语言预训练填空在English资料训练问答然后直接在中文测试问答它竟然可以回答中文问题虽然预训练的104种语言有中文但是只训练了填空在英文资料训练fine-tune问答它没有见过中文问答竟然可以直接回答中文问答。
为什么会这样一种解释是也许对multi -lingual BERT不同语音间没有什么差异不管中文还是英文最终这些词汇的embedding只有意思是一样的都会很近 这不只是猜测其实是有验证的MRR越高说明同样意思不同语言的词汇的向量越接近 200k的时候效果没有达到Google效果加大数据呢1000khow about 1000K? 不同资料量真的有用 The amount of training data is critical for alignment
最后还有一个神奇的实验你说bert可以把不同语言同样意思的符号让他们的向量很近但是训练multi - BERT时是给他英文做英文填空给中文做中文填空它不会混在一起啊 如果对他来说不同语言没有差别给他英文的句子和填空它可能填中文进去但是它没有这样做代表它知道语言的资讯对他来说同样不同来自不同语言的那些符号终究还是不一样它并没有完全抹掉语言的资讯。There must be language information.
那我们来找一下语言的资讯到底在哪里后来发现语言的资讯没有藏得很深 把所有英文的embedding把所有英文词汇丢到multi-BERT里把所有的embedding平均把所有中文的embedding平均起来两者相减就是中文和英文之间的差距。
你可以做的什么神奇的事情呢你限制给multi-BERT一句英文得到embedding加上蓝色的向量中英文之间的差距这些向量就变成了中文。你再叫他去做填空题的时候就会填中文的答案了。
下面是真实的例子 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 我· 虽然表面上不同语言同样意思的词汇拉的很近但是语言的资讯还是藏在multi-lingual BERT里面的
4GPT的野望 Bert是做填空GPT做的是什么呢GPT做的任务是预测接下来的token是什么 BOS即句子开始标记Begin of Sentence h t h_t ht就是你的embedding 然后用成千上万个句子来训练这个模型。GPT的模型就像transformer的Decoder不过拿掉了cross attention这部分 你做的也是mask的attention 因为GPT可以预测下一个词汇所有他有生成的能力你可以让他不断的预测下一个token产生完整的文章。
GPT可以把话补全怎么怎么使用在问答或者其他语言处理问题上
GPT也可以和BERT一样BERT是怎么做的把BERT model拿过来后面接一个简单的linear的classifier那你就可以做很多事情你也可以把GPT拿出來接一個簡單的classifier我相信也是有效但是在GPT的論文中它沒有這樣做 它有一個更狂的想法為什麼會有更狂的想法呢因為首先就是BERT那一招BERT用過了嘛所以總不能再用一樣的東西這樣寫paper就沒有人覺得厲害了然後再來就是GPT這個模型 也許真的太大了大到連fine tune可能都有困難你想想看我們在用BERT的時候你要把BERT模型後面接一個linear classifier然後BERT也是你的要train的model的一部分所以它的參數也是要調的所以在剛才助教公告的BERT相關的作業裡面你還是需要花一點時間來training雖然助教說你大概20分鐘就可以train完了因為你並不是要train一個完整的BERT的模型BERT的模型在之前在做這個填空題的時候已經訓練得差不多了你只需要微調它就好了。 但是微調還是要花時間的也許GPT實在是太過巨大巨大到要微調它要train一個η可能都有困難所以GPT系列有一個更狂的使用方式。 這個更狂的使用方式和人類更接近你想想看假設你去考譬如說托福的聽力測驗你是怎麼去考托福的聽力測驗的呢這個托福聽力測驗的敘述是長什麼樣子的呢首先你會看到一個題目的說明告訴你說現在要考選擇題請從ABCD四個選項裡面選出正確的答案等等然後給你一個範例告訴你說這是題目然後正確的答案是多少然後你看到新的問題期待你就可以舉一反三開始作答GPT系列要做的事情就是這個模型能不能夠做一樣的事情呢。
舉例來說假設要GPT這個模型做翻譯你就先打Translate English to French就先給它這個句子這個句子代表問題的描述然後給它幾個範例跟它說sea otter然後後面就應該長這個樣子或者是這個什麼plush girafeplush girafe後面就應該長這個樣子等等然後接下來你問它說cheese叫它把後面的補完希望它就可以產生翻譯的結果 不知道大家能不能夠了解這一個想法是多麼地狂在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都沒有做 當然你也可以給GPT更大的挑戰我們在考托福聽力測驗的時候都只給一個例子而已那GPT可不可以只看一個例子就知道它要做翻譯這件事這個叫One-shot Learning還有更狂的是Zero-shot Learning直接給它一個敘述說我們現在要做翻譯了GPT能不能夠自己就看得懂就自動知道說要來做翻譯這件事情呢那如果能夠做到的話那真的就非常地驚人了 那GPT系列到底有沒有達成這個目標呢這個是一個見仁見智的問題啦它不是完全不可能答對但是正確率有點低相較於你可以微調模型正確率是有點低的那細節你就再看看GPT那篇文章第三代的GPT它測試了42個任務這個縱軸是正確率這些實線 這三條實線是42個任務的平均正確率那這邊包括了Few Shot One Shot跟Zero Shot。
從20幾%的 平均正確率一直做到50幾%的平均正確率那至於50幾的平均正確率算是有做起來 還是沒有做起來那這個就是見仁見智的問題啦目前看起來狀況是有些任務它還真的學會了舉例來說2這個加減法你給它一個數字加另外一個數字它真的可以得到正確的兩個數字加起來的結果但是有些任務它可能怎麼學都學不會譬如說一些跟邏輯推理有關的任務它的結果就非常非常地慘好 那有關GPT3的細節這個就留給大家再自己研究 剛才舉的例子到目前為止我們舉的例子都是只有跟文字有關但是你不要誤會說這種self-supervised learning的概念只能用在文字上在語音 在CVCV就是computer vision也就是影像在語音跟影像的應用上也都可以用。 那其實今天self-supervised learning的技術非常非常地多我們講的BERT跟GPT系列它只是三個類型的的其中一種它們是屬於prediction那一類
那接下來的課程你可能會覺得有點流水帳就是我們每一個主題呢就是告訴你說這個主題裡面有什麼 但是細節這個更多的知識就留給大家自己來做更進一步的研究
所以這些投影片只是要告訴你說在self-supervised learning這個部分我們講的只是整個領域的其中一小塊那還有更多的內容是等待大家去探索的
那有關影像的部分呢我們就真的不會細講我這邊就是放兩頁投影片帶過去告訴你說有一招非常有名的叫做SimCLR它的概念也不難我相信你自己讀論文應該也有辦法看懂它 那還有很奇怪的叫做BYOL,BYOL這個東西呢我們是不太可能在上課講它,為什麼呢,因為根本不知道它為什麼會work 假設它不是已經發表的文章,然後學生來跟我提這個想法我一定就是我一定不會讓他做這不可能會work的這是個不可能會實現的想法不可能會成功的這個想法感覺有一個巨大的瑕疵但不知道為什麼它是work的而且還曾經一度得到state of the art的結果deep learning就是這麼神奇
所以這個呢我們也就不細講就跳過去好 那在語音的部分你也完全可以使用self-supervised learning的概念 你完全可以試著訓練語音版的BERT那怎麼訓練語音版的BERT呢你就看看文字版的BERT是怎麼訓練的譬如說做填空題語音也可以做填空題就把一段聲音訊號蓋起來叫機器去猜蓋起來的部分是什麼嘛語音也可以預測接下來會出現的內容
所以你也可以做語音版的GPT不管是語音版的BERT語音版的GPT其實都已經有很多相關的研究成果了 不過其實在語音上相較於文字處理的領域還是有一些比較缺乏的東西那我認為現在很缺乏的一個東西就是像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的模型。 還有這些 self-supervised learning的模型它可以做的各式各樣語音的下游的任務然後把連結放在這邊給大家參考
講這些只是想告訴大家說self-supervised learning的技術不是只能被用在文字上在這個影像上 在語音上都仍然有非常大的空間可以使用。