文章目錄
BERT是什麼
- BERT是Transformer的雙向編碼器表示的縮寫。它是由Google在2018年末開發和發佈的一種新型語言模型。像BERT這樣的預訓練語言模型在許多自然語言處理任務中發揮着重要作用,
- 例如問答,命名實體識別,自然語言推理,文本分類等等
語言模型
- 語言模型(Language Modeling)會根據前面單詞來預測下一個單詞 /NLP中最基礎的模型結構(可以應用到各個NLP的應用場景中)。常 用的語言模型有:N-gram、Word2Vec、ELMo、OpenAI GPT、Bert、 XLNet、ALBert;
Mask機制
- Mask:遮擋掩蓋的意思,比如:把需要預測的詞給擋住。主要出 現出現在OpenAI GPT和Bert中。
BERT
- bert主要的問題就是計算量非常的大,參數量非常的多,所以在使用的時候一定要有好的設備。並且bert是一個與訓練好的模型,經常應用於數據的預處理階段。
- bert中的新特徵
-
Bidirectional Transformers (Transformer)
-
Pre-training
- Masked Language Model(掩蔽語言模型)
- Next Sentence Predictio(下一個句子預測)
-
- Bert一共有倆個,一個爲小的Bert共12層,大的Bert24層效果更好,相對參數也多。
Bert vs Transformer
- Bert中Encoder Layers是12/24層,而Transformer則是6層;
- Bert中E前饋神經網絡單元是768/1024維度的,而Transformer則是512;
- Bert中 Multi Headed Attention是12/16個,而Transformer則是8;
- Bert Encoder中有Mask 機制,而Transformer中沒有Mask 機制;
- Bert詞嵌入是單詞+位置信息+segment,而Transformer單詞+位置信息;
- Bert的網絡輸入存在佔位符[CLS], Transformer沒有;
Bert Model Input
Bert Model Output
Bert和CNN中的VGG類似,都是提取高階特徵,如下圖:
Bert Masked Language Model
Bert Next Sentence Prediction
第一個預測值是與衆不同的他是來提取整個序列的信息的。
Bert with Feature Extraction
Bert有12層,每一層的輸出都是高階向量,都可以自由使用。
下面用“hello”做了一個實驗,用於命名實體識別任務CoNLL-2003 NER,效果如下圖:
Bert應用場景
Bert-GPT-ELMo
EMLo採用的是第一種方法。
ELMo
EMLo的倆種方式
EMLo採用的是第一種,下圖紅色框。第二中會帶來信息泄露。
GPT
- GPT在BooksCorpus(800M單詞)訓練;BERT在BooksCorpus(800M單詞)和維基百科(2,500M單詞)訓 練。
- GPT使用一種句子分隔符([SEP])和分類符詞塊([CLS]),它們僅在微調時引入;BERT在預訓練期間 學習[SEP],[CLS]和句子A/B嵌入。
- GPT用一個批量32,000單詞訓練1M步;BERT用一個批量128,000單詞訓練1M步。
- GPT對所有微調實驗使用的5e-5相同學習率;BERT選擇特定於任務的微調學習率,在開發集表現 最佳。
- GPT是12層,Bert是24層。
- GTP使用的是Transformer的類似Decoder結構(單向的Transformer,裏面沒有Encoder-Decoder Attention,只有Mask Self-Attention和FFNN),Bert使用的是Encoder結構(雙向Transformer)
vanilla transformer
- 屬於一種語言模型的訓練方式,來根據之前的字符預測片段中的下一個字符;論 文中採用64層模型,並僅限於處理512個字符的輸入,因此如果序列太長會進行分 段,然後每段進行學習訓練。
- 論文:https://arxiv.org/pdf/1808.04444.pdf
- 缺陷:
- 上下文長度受限:字符之間的最大依賴距離受輸入長度的限制,模型看不到出現在幾個句 子之前的單詞。
- 上下文碎片:對於長度超過512個字符的文本,都是從頭開始單獨訓練的。段與段之間沒有 上下文依賴性,會讓訓練效率低下,也會影響模型的性能。
- 推理速度慢:在測試階段,每次預測下一個單詞,都需要重新構建一遍上下文,並從頭開 始計算,這樣的計算速度非常慢。
Transfomer-XL(2019-01)
- RNN和Transformer都可以學習序列之間的依賴關係,但是對於長時依賴 上都存在一定的侷限性,在vanilla Transformer的基礎上,Transfomer-XL語言模型引入兩點創新:
- 循環機制(Recurrence Mechanism)
- 相對位置編碼(Relative Positional Encoding)
- 論文:https://arxiv.org/pdf/1901.02860.pdf
- 代碼:https://arxiv.org/pdf/1901.02860.pdf .
- 解析:https://www.lyrn.ai/2019/01/16/transformer-xl-sota-languagemodel.
XLNet(2019-06)
- XLNet:Generalized Autoregressive Pretraining for Language Understanding
- 論文: https://arxiv.org/pdf/1906.08237.pdf
- 解決BERT的問題 (解決,Bert中Transformer是雙向的,即考慮前面也要考慮後面,所以只能做編碼結構不能做解碼結構的問題):
- 訓練數據和測試數據的不一致,訓練數據中使用了Mask,測試數據/預測數據中沒 有使用Mask,這個問題叫做:pretrain-finetune discrepancy (預訓練微調存在差異性,訓練的時候做Mask,而遷移學習是時候不加Mask)
- BERT模型不能用來生成數據。
- 參考:https://blog.csdn.net/weixin_37947156/article/details/93035607k
ALBERT
-
ALBERT:A Lite BERT for Self-supervised Learning of Language Representations
-
解決Bert和XLNet的問題:
- 模型參數變的更少(因式分解,在Embedding之後的全連接做);
- 模型使用更少的內存(參數共享);
- 提升模型效果(損失函數做了一個更新);