开心六月综合激情婷婷|欧美精品成人动漫二区|国产中文字幕综合色|亚洲人在线成视频

    1. 
      
        <b id="zqfy3"><legend id="zqfy3"><fieldset id="zqfy3"></fieldset></legend></b>
          <ul id="zqfy3"></ul>
          <blockquote id="zqfy3"><strong id="zqfy3"><dfn id="zqfy3"></dfn></strong></blockquote>
          <blockquote id="zqfy3"><legend id="zqfy3"></legend></blockquote>
          打開(kāi)APP
          userphoto
          未登錄

          開(kāi)通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

          開(kāi)通VIP
          【深度學(xué)習(xí)】小白看得懂的BERT原理

          0.導(dǎo)語(yǔ)

          自google在2018年10月底公布BERT在11項(xiàng)nlp任務(wù)中的卓越表現(xiàn)后,BERT(Bidirectional Encoder Representation from Transformers)就成為NLP領(lǐng)域大火,在本文中,我們將研究BERT模型,理解它的工作原理,這個(gè)是NLP(自然語(yǔ)言處理)的非常重要的部分。

          備注:前面的文章講了transformer的原理

          作者:jinjiajia95

          出處:https://blog.csdn.net/weixin_40746796/article/details/89951967

          原作者:Jay Alammar

          原鏈接:https://jalammar.github.io/illustrated-bert/

          正文開(kāi)始

          前言

          2018年可謂是自然語(yǔ)言處理(NLP)的元年,在我們?nèi)绾我宰钅?strong>捕捉潛在語(yǔ)義關(guān)系的方式  來(lái)輔助計(jì)算機(jī)對(duì)的句子概念性的理解 這方面取得了極大的發(fā)展進(jìn)步。此外, NLP領(lǐng)域的一些開(kāi)源社區(qū)已經(jīng)發(fā)布了很多強(qiáng)大的組件,我們可以在自己的模型訓(xùn)練過(guò)程中免費(fèi)的下載使用。(可以說(shuō)今年是NLP的ImageNet時(shí)刻,因?yàn)檫@和幾年前計(jì)算機(jī)視覺(jué)的發(fā)展很相似)

          上圖中,最新發(fā)布的BERT是一個(gè)NLP任務(wù)的里程碑式模型,它的發(fā)布勢(shì)必會(huì)帶來(lái)一個(gè)NLP的新時(shí)代。BERT是一個(gè)算法模型,它的出現(xiàn)打破了大量的自然語(yǔ)言處理任務(wù)的記錄。在BERT的論文發(fā)布不久后,Google的研發(fā)團(tuán)隊(duì)還開(kāi)放了該模型的代碼,并提供了一些在大量數(shù)據(jù)集上預(yù)訓(xùn)練好的算法模型下載方式。Goole開(kāi)源這個(gè)模型,并提供預(yù)訓(xùn)練好的模型,這使得所有人都可以通過(guò)它來(lái)構(gòu)建一個(gè)涉及NLP的算法模型,節(jié)約了大量訓(xùn)練語(yǔ)言模型所需的時(shí)間,精力,知識(shí)和資源。

          BERT集成了最近一段時(shí)間內(nèi)NLP領(lǐng)域中的一些頂尖的思想,包括但不限于 Semi-supervised Sequence Learning (by Andrew Dai and Quoc Le), ELMo (by Matthew Peters and researchers from AI2 and UW CSE), ULMFiT (by fast.ai founder Jeremy Howard and Sebastian Ruder), and the OpenAI transformer (by OpenAI researchers Radford, Narasimhan, Salimans, and Sutskever), and the Transformer (Vaswani et al).。

          你需要注意一些事情才能恰當(dāng)?shù)睦斫釨ERT的內(nèi)容,不過(guò),在介紹模型涉及的概念之前可以使用BERT的方法。

          示例:句子分類
          使用BERT最簡(jiǎn)單的方法就是做一個(gè)文本分類模型,這樣的模型結(jié)構(gòu)如下圖所示:

          為了訓(xùn)練一個(gè)這樣的模型,(主要是訓(xùn)練一個(gè)分類器),在訓(xùn)練階段BERT模型發(fā)生的變化很小。該訓(xùn)練過(guò)程稱為微調(diào),并且源于 Semi-supervised Sequence Learning 和 ULMFiT.。

          為了更方便理解,我們下面舉一個(gè)分類器的例子。分類器是屬于監(jiān)督學(xué)習(xí)領(lǐng)域的,這意味著你需要一些標(biāo)記的數(shù)據(jù)來(lái)訓(xùn)練這些模型。對(duì)于垃圾郵件分類器的示例,標(biāo)記的數(shù)據(jù)集由郵件的內(nèi)容和郵件的類別2部分組成(類別分為“垃圾郵件”或“非垃圾郵件”)。

          這種用例的其他示例包括:

          情感分析

          輸入:電影/產(chǎn)品評(píng)論。輸出:評(píng)論是正面還是負(fù)面?
          示例數(shù)據(jù)集:SST
          事實(shí)查證
          輸入:句子。輸出:“索賠”或“不索賠”
          更雄心勃勃/未來(lái)主義的例子:
          輸入:句子。輸出:“真”或“假”

          模型架構(gòu)

          現(xiàn)在您已經(jīng)了解了如何使用BERT的示例,讓我們仔細(xì)了解一下他的工作原理。

          BERT的論文中介紹了2種版本:

          • BERT BASE - 與OpenAI Transformer的尺寸相當(dāng),以便比較性能

          • BERT LARGE - 一個(gè)非常龐大的模型,它完成了本文介紹的最先進(jìn)的結(jié)果。

          BERT的基礎(chǔ)集成單元是Transformer的Encoder。關(guān)于Transformer的介紹可以閱讀作者之前的文章:The Illustrated Transformer,該文章解釋了Transformer模型 - BERT的基本概念以及我們接下來(lái)要討論的概念。

          2個(gè)BERT的模型都有一個(gè)很大的編碼器層數(shù),(論文里面將此稱為Transformer Blocks) - 基礎(chǔ)版本就有12層,進(jìn)階版本有24層。同時(shí)它也有很大的前饋神經(jīng)網(wǎng)絡(luò)( 768和1024個(gè)隱藏層神經(jīng)元),還有很多attention heads(12-16個(gè))。這超過(guò)了Transformer論文中的參考配置參數(shù)(6個(gè)編碼器層,512個(gè)隱藏層單元,和8個(gè)注意頭)

          模型輸入


          輸入的第一個(gè)字符為[CLS],在這里字符[CLS]表達(dá)的意思很簡(jiǎn)單 - Classification (分類)。

          BERT與Transformer 的編碼方式一樣。將固定長(zhǎng)度的字符串作為輸入,數(shù)據(jù)由下而上傳遞計(jì)算,每一層都用到了self attention,并通過(guò)前饋神經(jīng)網(wǎng)絡(luò)傳遞其結(jié)果,將其交給下一個(gè)編碼器。

          這樣的架構(gòu),似乎是沿用了Transformer 的架構(gòu)(除了層數(shù),不過(guò)這是我們可以設(shè)置的參數(shù))。那么BERT與Transformer 不同之處在哪里呢?可能在模型的輸出上,我們可以發(fā)現(xiàn)一些端倪。

          模型輸出

          每個(gè)位置返回的輸出都是一個(gè)隱藏層大小的向量(基本版本BERT為768)。以文本分類為例,我們重點(diǎn)關(guān)注第一個(gè)位置上的輸出(第一個(gè)位置是分類標(biāo)識(shí)[CLS]) 。如下圖

          該向量現(xiàn)在可以用作我們選擇的分類器的輸入,在論文中指出使用單層神經(jīng)網(wǎng)絡(luò)作為分類器就可以取得很好的效果。原理如下。

          例子中只有垃圾郵件和非垃圾郵件,如果你有更多的label,你只需要增加輸出神經(jīng)元的個(gè)數(shù)即可,另外把最后的激活函數(shù)換成softmax即可。

          Parallels with Convolutional Nets(BERT VS卷積神經(jīng)網(wǎng)絡(luò))
          對(duì)于那些具有計(jì)算機(jī)視覺(jué)背景的人來(lái)說(shuō),這個(gè)矢量切換應(yīng)該讓人聯(lián)想到VGGNet等網(wǎng)絡(luò)的卷積部分與網(wǎng)絡(luò)末端的完全連接的分類部分之間發(fā)生的事情。你可以這樣理解,實(shí)質(zhì)上這樣理解也很方便。

          詞嵌入的新時(shí)代?

          BERT的開(kāi)源隨之而來(lái)的是一種詞嵌入的更新。到目前為止,詞嵌入已經(jīng)成為NLP模型處理自然語(yǔ)言的主要組成部分。諸如Word2vec和Glove 等方法已經(jīng)廣泛的用于處理這些問(wèn)題,在我們使用新的詞嵌入之前,我們有必要回顧一下其發(fā)展。

          詞嵌入的回顧

          為了讓機(jī)器可以學(xué)習(xí)到文本的特征屬性,我們需要一些將文本數(shù)值化的表示的方式。Word2vec算法通過(guò)使用一組固定維度的向量來(lái)表示單詞,計(jì)算其方式可以捕獲到單詞的語(yǔ)義及單詞與單詞之間的關(guān)系。使用Word2vec的向量化表示方式可以用于判斷單詞是否相似,對(duì)立,或者說(shuō)判斷“男人'與’女人”的關(guān)系就如同“國(guó)王”與“王后”。(這些話是不是聽(tīng)膩了? emmm水文必備)。另外還能捕獲到一些語(yǔ)法的關(guān)系,這個(gè)在英語(yǔ)中很實(shí)用。例如“had”與“has”的關(guān)系如同“was”與“is”的關(guān)系。

          這樣的做法,我們可以使用大量的文本數(shù)據(jù)來(lái)預(yù)訓(xùn)練一個(gè)詞嵌入模型,而這個(gè)詞嵌入模型可以廣泛用于其他NLP的任務(wù),這是個(gè)好主意,這使得一些初創(chuàng)公司或者計(jì)算資源不足的公司,也能通過(guò)下載已經(jīng)開(kāi)源的詞嵌入模型來(lái)完成NLP的任務(wù)。

          ELMo:語(yǔ)境問(wèn)題

          上面介紹的詞嵌入方式有一個(gè)很明顯的問(wèn)題,因?yàn)槭褂妙A(yù)訓(xùn)練好的詞向量模型,那么無(wú)論上下文的語(yǔ)境關(guān)系如何,每個(gè)單詞都只有一個(gè)唯一的且已經(jīng)固定保存的向量化形式。Wait a minute “ - 出自(Peters et. al., 2017, McCann et. al., 2017, and yet again Peters et. al., 2018 in the ELMo paper )

          這和中文的同音字其實(shí)也類似,用這個(gè)舉一個(gè)例子吧, '長(zhǎng)’ 這個(gè)字,在 '長(zhǎng)度’ 這個(gè)詞中表示度量,在 '長(zhǎng)高’ 這個(gè)詞中表示增加。那么為什么我們不通過(guò)”長(zhǎng)’周圍是度或者是高來(lái)判斷它的讀音或者它的語(yǔ)義呢?嗖嘎,這個(gè)問(wèn)題就派生出語(yǔ)境化的詞嵌入模型。

          EMLo改變Word2vec類的將單詞固定為指定長(zhǎng)度的向量的處理方式,它是在為每個(gè)單詞分配詞向量之前先查看整個(gè)句子,然后使用bi-LSTM來(lái)訓(xùn)練它對(duì)應(yīng)的詞向量。

          ELMo為解決NLP的語(yǔ)境問(wèn)題作出了重要的貢獻(xiàn),它的LSTM可以使用與我們?nèi)蝿?wù)相關(guān)的大量文本數(shù)據(jù)來(lái)進(jìn)行訓(xùn)練,然后將訓(xùn)練好的模型用作其他NLP任務(wù)的詞向量的基準(zhǔn)。
          ELMo的秘密是什么?

          ELMo會(huì)訓(xùn)練一個(gè)模型,這個(gè)模型接受一個(gè)句子或者單詞的輸入,輸出最有可能出現(xiàn)在后面的一個(gè)單詞。想想輸入法,對(duì)啦,就是這樣的道理。這個(gè)在NLP中我們也稱作Language Modeling這樣的模型很容易實(shí)現(xiàn),因?yàn)槲覀儞碛写罅康奈谋緮?shù)據(jù)且我們可以在不需要標(biāo)簽的情況下去學(xué)習(xí)。

          上圖介紹了ELMo預(yù)訓(xùn)練的過(guò)程的步驟的一部分:我們需要完成一個(gè)這樣的任務(wù):輸入“Lets stick to”,預(yù)測(cè)下一個(gè)最可能出現(xiàn)的單詞,如果在訓(xùn)練階段使用大量的數(shù)據(jù)集進(jìn)行訓(xùn)練,那么在預(yù)測(cè)階段我們可能準(zhǔn)確的預(yù)測(cè)出我們期待的下一個(gè)單詞。比如輸入“機(jī)器”,在'’學(xué)習(xí)'和'買菜’中它最有可能的輸出會(huì)是'學(xué)習(xí)’而不是'買菜’。

          從上圖可以發(fā)現(xiàn),每個(gè)展開(kāi)的LSTM都在最后一步完成預(yù)測(cè)。

          對(duì)了真正的ELMo會(huì)更進(jìn)一步,它不僅能判斷下一個(gè)詞,還能預(yù)測(cè)前一個(gè)詞。(Bi-Lstm)

          ELMo通過(guò)下圖的方式將hidden states(的初始的嵌入)組合咋子一起來(lái)提煉出具有語(yǔ)境意義的詞嵌入方式(全連接后加權(quán)求和)

          ULM-FiT:NLP領(lǐng)域應(yīng)用遷移學(xué)習(xí)

          ULM-FiT機(jī)制讓模型的預(yù)訓(xùn)練參數(shù)得到更好的利用。所利用的參數(shù)不僅限于embeddings,也不僅限于語(yǔ)境embedding,ULM-FiT引入了Language Model和一個(gè)有效微調(diào)該Language Model來(lái)執(zhí)行各種NLP任務(wù)的流程。這使得NLP任務(wù)也能像計(jì)算機(jī)視覺(jué)一樣方便的使用遷移學(xué)習(xí)。

          The Transformer:超越LSTM的結(jié)構(gòu)

          Transformer論文和代碼的發(fā)布,以及其在機(jī)器翻譯等任務(wù)上取得的優(yōu)異成果,讓一些研究人員認(rèn)為它是LSTM的替代品,事實(shí)上卻是Transformer比LSTM更好的處理long-term dependancies(長(zhǎng)程依賴)問(wèn)題。Transformer Encoding和Decoding的結(jié)構(gòu)非常適合機(jī)器翻譯,但是怎么利用他來(lái)做文本分類的任務(wù)呢?實(shí)際上你只用使用它來(lái)預(yù)訓(xùn)練可以針對(duì)其他任務(wù)微調(diào)的語(yǔ)言模型即可。

          OpenAI Transformer:用于語(yǔ)言模型的Transformer解碼器預(yù)訓(xùn)練

          事實(shí)證明,我們并不需要一個(gè)完整的transformer結(jié)構(gòu)來(lái)使用遷移學(xué)習(xí)和一個(gè)很好的語(yǔ)言模型來(lái)處理NLP任務(wù)。我們只需要Transformer的解碼器就行了。The decoder is a good choice because it’s a natural choice for language modeling (predicting the next word) since it’s built to mask future tokens – a valuable feature when it’s generating a translation word by word.

          該模型堆疊了十二個(gè)Decoder層。由于在該設(shè)置中沒(méi)有Encoder,因此這些Decoder將不具有Transformer Decoder層具有的Encoder - Decoder attention層。然而,取而代之的是一個(gè)self attention層(masked so it doesn’t peak at future tokens)。

          通過(guò)這種結(jié)構(gòu)調(diào)整,我們可以繼續(xù)在相似的語(yǔ)言模型任務(wù)上訓(xùn)練模型:使用大量的未標(biāo)記數(shù)據(jù)集訓(xùn)練,來(lái)預(yù)測(cè)下一個(gè)單詞。舉個(gè)列子:你那7000本書喂給你的模型,(書籍是極好的訓(xùn)練樣本~比博客和推文好很多。)訓(xùn)練框架如下:

          Transfer Learning to Downstream Tasks

          通過(guò)OpenAI的transformer的預(yù)訓(xùn)練和一些微調(diào)后,我們就可以將訓(xùn)練好的模型,用于其他下游NLP任務(wù)啦。(比如訓(xùn)練一個(gè)語(yǔ)言模型,然后拿他的hidden state來(lái)做分類。),下面就介紹一下這個(gè)騷操作。(還是如上面例子:分為垃圾郵件和非垃圾郵件)

          OpenAI論文概述了許多Transformer使用遷移學(xué)習(xí)來(lái)處理不同類型NLP任務(wù)的例子。如下圖例子所示:

          BERT: From Decoders to Encoders

          OpenAI transformer為我們提供了基于Transformer的精密的預(yù)訓(xùn)練模型。但是從LSTM到Transformer的過(guò)渡中,我們發(fā)現(xiàn)少了些東西。ELMo的語(yǔ)言模型是雙向的,但是OpenAI的transformer是前向訓(xùn)練的語(yǔ)言模型。我們能否讓我們的Transformer模型也具有Bi-Lstm的特性呢?

          R-BERT:“Hold my beer”

          Masked Language Model
          BERT說(shuō):“我要用 transformer 的 encoders”

          Ernie不屑道:“呵呵,你不能像Bi-Lstm一樣考慮文章”

          BERT自信回答道:“我們會(huì)用masks”

          解釋一下Mask:

          語(yǔ)言模型會(huì)根據(jù)前面單詞來(lái)預(yù)測(cè)下一個(gè)單詞,但是self-attention的注意力只會(huì)放在自己身上,那么這樣100%預(yù)測(cè)到自己,毫無(wú)意義,所以用Mask,把需要預(yù)測(cè)的詞給擋住。

          如下圖:


          Two-sentence Tasks

          我們回顧一下OpenAI transformer處理不同任務(wù)的輸入轉(zhuǎn)換,你會(huì)發(fā)現(xiàn)在某些任務(wù)上我們需要2個(gè)句子作為輸入,并做一些更為智能的判斷,比如是否相似,比如 給出一個(gè)維基百科的內(nèi)容作為輸入,同時(shí)在放入一條針對(duì)該條目的問(wèn)題,那么我們的算法模型能夠處理這個(gè)問(wèn)題嗎?

          為了使BERT更好的處理2個(gè)句子之間的關(guān)系,預(yù)訓(xùn)練的過(guò)程還有一個(gè)額外的任務(wù):給定2個(gè)句子(A和B),A與B是否相似?(0或者1)

          特殊NLP任務(wù)

          BERT的論文為我們介紹了幾種BERT可以處理的NLP任務(wù):

          1. 短文本相似

          2. 文本分類

          3. QA機(jī)器人

          4. 語(yǔ)義標(biāo)注

          BERT用做特征提取

          微調(diào)方法并不是使用BERT的唯一方法,就像ELMo一樣,你可以使用預(yù)選訓(xùn)練好的BERT來(lái)創(chuàng)建語(yǔ)境化詞嵌入。然后你可以將這些嵌入提供給現(xiàn)有的模型。

          哪個(gè)向量最適合作為上下文嵌入?我認(rèn)為這取決于任務(wù)。本文考察了六種選擇(與微調(diào)模型相比,得分為96.4):

          如何使用BERT

          使用BERT的最佳方式是通過(guò) BERT FineTuning with Cloud TPUs 谷歌云上托管的筆記

          https://colab.research.google.com/github/tensorflow/tpu/blob/master/tools/colab/bert_finetuning_with_cloud_tpus.ipynb)。

          如果你未使用過(guò)谷歌云TPU可以試試看,這是個(gè)不錯(cuò)的嘗試。另外BERT也適用于TPU,CPU和GPU

          下一步是查看BERT倉(cāng)庫(kù)中的代碼:

          1. 該模型在modeling.py  (BertModel類)中構(gòu)建,與vanilla Transformer編碼器完全相同。

            https://github.com/google-research/bert/blob/master/modeling.py

          2. run_classifier.py是微調(diào)過(guò)程的一個(gè)示例。

            它還構(gòu)建了監(jiān)督模型的分類層。

            https://github.com/google-research/bert/blob/master/run_classifier.py

            如果要構(gòu)建自己的分類器,請(qǐng)查看該文件中的create_model()方法。

          3. 可以下載幾種預(yù)先訓(xùn)練的模型。

            涵蓋102種語(yǔ)言的多語(yǔ)言模型,這些語(yǔ)言都是在維基百科的數(shù)據(jù)基礎(chǔ)上訓(xùn)練而成的。


            BERT不會(huì)將單詞視為tokens。

            相反,它注重WordPieces。

            tokenization.py是將你的單詞轉(zhuǎn)換為適合BERT的wordPieces的tokensizer。

            https://github.com/google-research/bert/blob/master/tokenization.py

          您還可以查看BERT的PyTorch實(shí)現(xiàn)。

          https://github.com/huggingface/pytorch-pretrained-BERT

          AllenNLP庫(kù)使用此實(shí)現(xiàn)允許將BERT嵌入與任何模型一起使用。

          https://github.com/allenai/allennlp

          https://github.com/allenai/allennlp/pull/2067        

          本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
          打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
          猜你喜歡
          類似文章
          賽爾筆記 | 自然語(yǔ)言處理中的遷移學(xué)習(xí)(上)
          一文讀懂深度學(xué)習(xí):從神經(jīng)元到BERT
          《深入淺出Embedding》隨筆
          解密 BERT
          【技術(shù)綜述】深度學(xué)習(xí)在自然語(yǔ)言處理中的應(yīng)用發(fā)展史
          NLP之PTM:自然語(yǔ)言處理領(lǐng)域—預(yù)訓(xùn)練大模型時(shí)代的各種吊炸天大模型算法概述(Word2Vec→ELMO→Attention→Transfo→GPT系列/BERT系列等)、關(guān)系梳理、模型對(duì)比之詳細(xì)攻略
          更多類似文章 >>
          生活服務(wù)
          分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
          綁定賬號(hào)成功
          后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
          如果VIP功能使用有故障,
          可點(diǎn)擊這里聯(lián)系客服!

          聯(lián)系客服