日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【NLP】一份相当全面的BERT模型精讲

發(fā)布時間:2025/3/8 编程问答 10 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【NLP】一份相当全面的BERT模型精讲 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本文概覽:

1. Autoregressive語言模型與Autoencoder語言模型

1.1 語言模型概念介紹

Autoregressive語言模型:指的是依據(jù)前面(或后面)出現(xiàn)的單詞來預(yù)測當前時刻的單詞,代表有 ELMo, GPT等。

Autoencoder語言模型:通過上下文信息來預(yù)測被mask的單詞,代表有 BERT , Word2Vec(CBOW) 。

1.2 二者各自的優(yōu)缺點

Autoregressive語言模型:

  • 缺點:只能利用單向語義而不能同時利用上下文信息。ELMo通過雙向都做Autoregressive模型,然后進行拼接,但從結(jié)果來看,效果并不是太好。

  • 優(yōu)點:對生成模型友好,天然符合生成式任務(wù)的生成過程。這也是為什么 GPT 能夠編故事的原因。

Autoencoder語言模型:

  • 缺點:由于訓(xùn)練中采用了 [MASK] 標記,導(dǎo)致預(yù)訓(xùn)練數(shù)據(jù)與微調(diào)階段數(shù)據(jù)不一致的問題。BERT獨立性假設(shè)問題,即沒有對被遮掩(Mask)的 token 之間的關(guān)系進行學(xué)習(xí)。此外對于生成式問題,Autoencoder模型也顯得捉襟見肘。

  • 優(yōu)點:能夠很好的編碼上下文語義信息(即考慮句子的雙向信息), 在自然語言理解相關(guān)的下游任務(wù)上表現(xiàn)突出。

2. DAE與Masked Language Model

2.1 AutoEncoder

如下圖所示,AutoEncoder框架包含兩大模塊:編碼過程和解碼過程。通過 將輸入樣本 映射到特征空間 ,即編碼過程;然后再通過 將抽象特征 映射回原始空間得到重構(gòu)樣本 ,即解碼過程。優(yōu)化目標則是通過最小化重構(gòu)誤差來同時優(yōu)化encoder和decoder,從而學(xué)習(xí)得到針對輸入樣本 的抽象特征表示 。

這里我們可以看到,AutoEncoder在優(yōu)化過程中無需使用樣本的label,本質(zhì)上是把樣本的輸入同時作為神經(jīng)網(wǎng)絡(luò)的輸入和輸出,通過最小化重構(gòu)誤差希望學(xué)習(xí)到樣本的抽象特征表示 。這種無監(jiān)督的優(yōu)化方式大大提升了模型的通用性。

對于基于神經(jīng)網(wǎng)絡(luò)的AutoEncoder模型來說,則是encoder部分通過逐層降低神經(jīng)元個數(shù)來對數(shù)據(jù)進行壓縮;decoder部分基于數(shù)據(jù)的抽象表示逐層提升神經(jīng)元數(shù)量,最終實現(xiàn)對輸入樣本的重構(gòu)。

這里值得注意的是,由于AutoEncoder通過神經(jīng)網(wǎng)絡(luò)來學(xué)習(xí)每個樣本的唯一抽象表示,這會帶來一個問題:當神經(jīng)網(wǎng)絡(luò)的參數(shù)復(fù)雜到一定程度時AutoEncoder很容易存在過擬合的風(fēng)險。

2.2 Denoising AutoEncoder(DAE)

為了緩解經(jīng)典AutoEncoder容易過擬合的問題,一個辦法是在輸入中加入隨機噪聲,Vincent等人提出了Denoising AutoEncoder,即在傳統(tǒng)AutoEncoder輸入層加入隨機噪聲來增強模型的魯棒性;另一個辦法就是結(jié)合正則化思想,Rifai等人提出了Contractive AutoEncoder,通過在AutoEncoder目標函數(shù)中加上encoder的Jacobian矩陣范式來約束使得encoder能夠?qū)W到具有抗干擾的抽象特征。

下圖是Denoising AutoEncoder的模型框架。目前添加噪聲的方式大多分為兩種:

  • 添加服從特定分布的隨機噪聲;

  • 隨機將輸入x中特定比例的數(shù)值置為0;

DAE模型的優(yōu)勢:

  • 通過與非破損數(shù)據(jù)訓(xùn)練的對比,破損數(shù)據(jù)訓(xùn)練出來的Weight噪聲較小。因為擦除數(shù)據(jù)的時候不小心把輸入噪聲給擦掉了。

  • 破損數(shù)據(jù)一定程度上減輕了訓(xùn)練數(shù)據(jù)與測試數(shù)據(jù)的代溝。由于數(shù)據(jù)的部分被擦掉了,因而這破損數(shù)據(jù)一定程度上比較接近測試數(shù)據(jù)。

推薦閱讀論文:
【1】Extracting and composing robust features with denoising autoencoders, Pascal Vincent etc, 2008.
【2】Contractive auto-encoders: Explicit invariance during feature extraction, Rifai S etc, 2011.

2.3 DAE與Masked Language Model聯(lián)系

  • BERT模型是基于Transformer Encoder來構(gòu)建的一種模型。

  • BERT模型基于DAE(Denoising AutoEncoder,去燥自編碼器)的,這部分在BERT中被稱為Masked Language Model (MLM)

  • MLM并不是嚴格意義上的語言模型,它僅僅是訓(xùn)練語言模型的一種方式。BERT隨機把一些單詞通過MASk標簽來代替,并接著去預(yù)測被MASk的這個單詞,過程其實就是DAE的過程。

3. ?Transformer模型回顧

Transformer模型使用經(jīng)典的encoder-decoder架構(gòu),由encoder和decoder兩部分組成。

  • 下圖左側(cè)用框出來的,就是我們encoder的一層。encoder一共有層這樣的結(jié)構(gòu)。

  • 下圖右側(cè)用框出來的,就是我們decoder的一層。decoder一共有層這樣的結(jié)構(gòu)。

  • 輸入序列經(jīng)過Input Embedding和Positional Encoding相加后,輸入到encoder中。

  • 輸出序列經(jīng)過Output Embedding和Positional Encoding相加后,輸入到decoder中。

  • 最后,decoder輸出的結(jié)果,經(jīng)過一個線性層,然后計算。

3.1 Encdoer部分

輸入是原始詞表中詞的。接著進行Input Embedding,把詞轉(zhuǎn)換成分布式的表示。在語言模型中詞的順序還是很重要的,因此Transformer加入了Positional Encoding,也就是加入了詞的位置信息。encoder的輸入是Input Embedding 加上對應(yīng)位置的Positional Encoding。

Input Embedding 加上對應(yīng)位置的Positional Encoding作為encoder的輸入,首先會經(jīng)過Multi-Head Attention,學(xué)習(xí)輸入中詞與詞之間的相關(guān)性。接著是Add & Norm層,Add殘差的方式對不同的輸出相加,是借鑒CV中的殘差網(wǎng)絡(luò)思想解決梯度消失問題;Norm用的是Layer Norm。然后進行Feed Forward的前向計算,這一層就是全連接的神經(jīng)網(wǎng)絡(luò)。最后再接一層Add & Norm,防止梯度消失。

3.2 Decoder部分

通過encoder部分已經(jīng)獲得了所有輸入的信息,把這些信息當作decoder后面Multi-Head Attention的輸入,也就是self-attention中的、來自encoder部分輸出的特征,來自decoder部分的輸入。

decoder之前解碼出的單詞當作本次decoder的輸入,也是通過Output Embedding 加上對應(yīng)位置的Positional Encoding輸入到Masked Multi-Head Attention,再經(jīng)過Add & Norm層,這里還把decoder輸入和Masked Multi-Head Attention輸出做了殘差連接,最后得到的輸出就是我們上面提到的了。

把encoder部分獲得的所有輸入的信息和decoder前半部分得到的輸入信息,一同送到后面這個Multi-Head Attention中,它學(xué)習(xí)哪些輸入信息和之前輸出信息的特征更有利于解碼,最后還經(jīng)過了Add & Norm層、Feed Forward層和Add & Norm層,得到了decoder的最終輸出。

解碼這里要特別注意一下,編碼可以并行計算,一次性全部encoding出來,但是解碼不是一次把所有序列解出來的,而是像RNN一樣一個一個解出來的,因為要用前幾個位置單詞的結(jié)果當作self-attention的query。

3.3 Linear 和 Softmax

拿到decoder的輸出做一個線性變換,最后通過一個計算對應(yīng)位置的輸出詞的概率。Transformer本次的輸出當作下一步decoder的輸入。

關(guān)于Transformer更詳細的內(nèi)容,可以參考我之前寫的一篇文章:《Self-Attention與Transformer》

面試題:為什么NLP中的模型一般使用Layer Norm,而不是Batch Norm?

回答:

  • 在CV中,深度網(wǎng)絡(luò)中一般會嵌入批歸一化(BatchNorm,BN)單元,比如ResNet;而NLP中,則往往向深度網(wǎng)絡(luò)中插入層歸一化(LayerNorm,LN)單元,比如Transformer。為什么在歸一化問題上會有分歧呢?一個最直接的理由就是,BN用在NLP任務(wù)里實在太差了(相比LN),此外,BN還難以直接用在RNN中,而RNN是前一個NLP時代的最流行模型。雖然有大量的實驗觀測,表明NLP任務(wù)里普遍BN比LN差太多,但是迄今為止,依然沒有一個非常嚴謹?shù)睦碚搧碜C明LN相比BN在NLP任務(wù)里的優(yōu)越性。

  • 基于我閱讀過的文獻,我個人認為:BatchNorm就是通過對batch size這個維度歸一化來讓分布穩(wěn)定下來,有助于訓(xùn)練深度神經(jīng)網(wǎng)絡(luò),是因為它可以讓loss曲面變得更加平滑。LayerNorm則是通過對Hidden size這個維度歸一化來讓某層的分布穩(wěn)定,主要作用是在訓(xùn)練初期緩解梯度消失和爆炸的問題,提升穩(wěn)定性。

  • 關(guān)于BatchNorm為什么在NLP問題上不work和LayerNorm在NLP問題上work的討論,我強烈推薦大家閱讀這篇文章《LayerNorm是Transformer的最優(yōu)解嗎?》

4. BERT模型

BERT的全稱是Bidirectional Encoder Representation from Transformers,模型是基于Transformer中的Encoder并加上雙向的結(jié)構(gòu),因此一定要熟練掌握Transformer的Encoder。BERT模型的主要創(chuàng)新點都在pre-train方法上,即用了Masked Language Model和Next Sentence Prediction兩種方法分別捕捉詞語和句子級別的representation。

在用Masked Language Model方法訓(xùn)練BERT的時候,隨機把語料庫中15%的單詞做Mask操作。對于這15%的單詞做Mask操作分為三種情況:80%的單詞直接用[Mask]替換、10%的單詞直接替換成另一個新的單詞、10%的單詞保持不變。

因為涉及到Question Answering (QA) 和 Natural Language Inference (NLI)之類的任務(wù),增加了Next Sentence Prediction預(yù)訓(xùn)練任務(wù),目的是讓模型理解兩個句子之間的聯(lián)系。與Masked Language Model任務(wù)相比,Next Sentence Prediction更簡單些,訓(xùn)練的輸入是句子A和B,B有一半的幾率是A的下一句,輸入這兩個句子,BERT模型預(yù)測B是不是A的下一句。

由于注意力計算開銷是輸入序列長度的平方,較長的序列會影響訓(xùn)練速度,為了加快實驗中的預(yù)訓(xùn)練速度,所以90%的steps都用序列長度為128進行預(yù)訓(xùn)練,余下10%的steps預(yù)訓(xùn)練為512長度的輸入。

BERT預(yù)訓(xùn)練之后,會保存它的Embedding table和層Transformer權(quán)重(BERT-BASE)或?qū)覶ransformer權(quán)重(BERT-LARGE)。使用預(yù)訓(xùn)練好的BERT模型可以對下游任務(wù)進行Fine-tuning,比如:文本分類、相似度判斷、閱讀理解等。

5. BERT模型在實際場景的應(yīng)用

BERT模型在現(xiàn)實中的應(yīng)用:

  • 情感分類:通過用戶對商品評價來對商品質(zhì)量問題進行分析,比如是否新鮮、服務(wù)問題等;

  • 意圖識別;

  • 問答匹配;

  • 槽位提取:BERT后接CRF來做命名實體識別;

6. BERT模型的預(yù)訓(xùn)練及其改進

7. BERT的Fine-tuning不同訓(xùn)練方式及常見的改進策略

7.1 Fine-tuning的不同訓(xùn)練方式

7.2 BERT的Fine-tuning中常見的改進策略

如果機器不足、預(yù)料不足,一般都會直接考慮用原始的BERT、Roberta、XLnet等在下游任務(wù)中微調(diào),這樣我們就不能在預(yù)訓(xùn)練階段進行改進,只能在Fine-tuning階段進行改進。改進方案如下圖所示:

7.3 BERT在實踐中的trick

  • 篩選訓(xùn)練數(shù)據(jù),剔除過短或者過長的數(shù)據(jù);

  • 嘗試bert+conv, bert+conv+avg_max_pooling, bert_last_layer_concat等方式;

  • 針對本場景數(shù)據(jù),進行少步數(shù)的進一步預(yù)訓(xùn)練;

8. 總結(jié)

BERT模型作為當今NLP應(yīng)用的大殺器,具有易于使用、穩(wěn)定性強等諸多優(yōu)點。本文深入了解BERT的原理,如何做到BERT的預(yù)訓(xùn)練改進以及Fine-tuning中所涉及到的常見改進策略。另外,本文也講述了BERT模型在實際場景中的應(yīng)用及在實踐中的一些tricks。

9. Reference

本文部分內(nèi)容是Microstrong在觀看徐路在B站上講解的視頻《BERT模型精講》的筆記,地址:https://www.bilibili.com/video/BV1M5411x7FZ?from=search&seid=7509511278753452725 ,剩余部分是Microstrong從BERT論文及下列參考文章中整理而來。

【1】Devlin J, Chang M W, Lee K, et al. Bert: Pre-training of deep bidirectional transformers for language understanding[J]. arXiv preprint arXiv:1810.04805, 2018.
【2】BERT模型精講,地址:https://www.bilibili.com/video/BV1M5411x7FZ?from=search&seid=7509511278753452725
【3】LayerNorm是Transformer的最優(yōu)解嗎?,地址:https://mp.weixin.qq.com/s/W4gI9SWJm3MjbQHYgvFKbg
【4】The Illustrated Transformer,地址:https://jalammar.github.io/illustrated-transformer/
【5】一文看懂AutoEncoder模型演進圖譜 - 深度的文章 - 知乎 https://zhuanlan.zhihu.com/p/68903857
【6】【NLP】Google BERT詳解 - 李如的文章 - 知乎 https://zhuanlan.zhihu.com/p/46652512

往期精彩回顧適合初學(xué)者入門人工智能的路線及資料下載機器學(xué)習(xí)及深度學(xué)習(xí)筆記等資料打印機器學(xué)習(xí)在線手冊深度學(xué)習(xí)筆記專輯《統(tǒng)計學(xué)習(xí)方法》的代碼復(fù)現(xiàn)專輯 AI基礎(chǔ)下載機器學(xué)習(xí)的數(shù)學(xué)基礎(chǔ)專輯獲取一折本站知識星球優(yōu)惠券,復(fù)制鏈接直接打開:https://t.zsxq.com/yFQV7am本站qq群1003271085。加入微信群請掃碼進群:

總結(jié)

以上是生活随笔為你收集整理的【NLP】一份相当全面的BERT模型精讲的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。