BART詳解
一切都得從Transformer說起。Transformer左半邊為Encoder,右半邊為Decoder。我們將Encoder輸入的句子稱為source,Decoder輸入的句子稱為target
Encoder負責將source進行self-attention並獲得句子中每個詞的representation,最經典的Encoder架構就是BERT,通過Masked Language Model來學習詞之間的關係,另外還有XLNet, RoBERTa, ALBERT, DistilBERT等等。但是單獨Encoder結構不適用於生成任務
Decoder如下圖所示,輸入與輸出之間差一個位置,主要是模擬在Inference時,不能讓模型看到未來的詞,這種方式稱為AutoRegressive,常見的基於Decoder的模型通常是用來做序列生成的,例如GPT, CTRL等等。但是單獨Decoder結構僅基於左側上下文預測單詞,無法學習雙向互動
而兩者合在一起後,就能當成一種Seq2Seq模型,進行翻譯任務。下圖是BART的主要結構,看上去似乎和Transformer沒什麼不同,主要區別在於source和target
訓練階段,Encoder端使用雙向模型編碼被破壞的文字,然後Decoder採用自迴歸的方式計算出原始輸入;測試階段或者是微調階段,Encoder和Decoder的輸入都是未被破壞的文字
BART vs Transformer
BART使用標準的Transformer模型,不過做了一些改變:
- 同GPT一樣,將ReLU啟用函式改為GeLU,並且引數初始化服從正態分佈 N ( 0 , 0.02 ) N(0, 0.02) N(0,0.02)
- BART base模型的Encoder和Decoder各有6層,large模型增加到了12層
- BART解碼器的各層對編碼器最終隱藏層額外執行cross-attention
- BERT在詞預測之前使用了額外的Feed Forward Layer,而BART沒有
Pre-training BART
BART作者嘗試了不同的方式來破壞輸入:
- Token Masking:Following BERT (Devlin et al., 2019), random tokens are sampled and replaced with [MASK] elements.
- Sentence Permutation:A document is divided into sentences based on full stops, and these sentences are shuffled in a random order.
- Document Rotation:A token is chosen uniformly at random, and the document is rotated so that it begins with that token. This task trains the model to identify the start of the document.
- Token Deletion:Random tokens are deleted from the input. In contrast to token masking, the model must decide which positions are missing inputs.
- Text Infilling:A number of text spans are sampled, with span lengths drawn from a Poisson distribution ( λ = 3 \lambda=3 λ=3). Each span is replaced with a single [MASK] token. 0-length spans correspond to the insertion of [MASK] tokens. Text infilling teaches the model to predict how many tokens are missing from a span.
Fine-tuning BART
Sequence Classification Tasks
序列分類任務中,編碼器和解碼器的輸入相同,解碼器token的最終隱藏狀態被輸入到多類別線性分類器中。BART在解碼器最後額外新增了一個token,如下圖所示,該token位置的輸出可以被認為是該句子的representation
Sequence Generation Tasks
由於BART具備自迴歸解碼器,因此它可以針對序列生成任務進行直接微調,如問答或者文字摘要
Machine Translation
作者採用新的隨機初始化Encoder替換BART編碼器的Embedding層。該模型以端到端的方式進行訓練,即訓練一個新的編碼器將外來詞對映到輸入。新的編碼器可以使用不同於原始 BART 模型的詞彙。其中隨機初始化Encoder的訓練分兩步,均需要將來自 BART 模型輸出的交叉熵損失進行反向傳播。第一步,作者凍結 BART 的大部分引數,僅更新隨機初始化的Encoder、BART 位置嵌入和 BART 編碼器第一層的自注意力輸入投影矩陣。第二步,作者將所有模型引數進行少量迭代訓練
Results
從上表可以看出,貌似帶上Document Rotation或Sentence Shuffling效果都不是太好,可以這麼理解,假如模型在訓練的時候看到的句子順序都是亂的,它可能就認為這個世界的句子順序都是亂的,當你做測試的時候,輸入的句子是正序的,可能模型就不知所措了。實際上Text Infilling可以看作是Token Masking+Token Deletion,所以Text Infilling效果這麼好也可以理解
Reference
相關文章
- ACL2020論文閱讀筆記:BART筆記
- 多項NLP任務新SOTA,Facebook提出預訓練模型BART模型
- http協議/cookie詳解/session詳解HTTP協議CookieSession
- Java註解最全詳解(超級詳細)Java
- Lombok 註解詳解Lombok
- @FeignClient註解詳解client
- Java 註解詳解Java
- Java註解詳解Java
- FindResource詳解
- DP 詳解
- HttpUtils 詳解HTTP
- HDMI詳解
- RIAD詳解
- iperf詳解
- dBFS詳解
- kubectl詳解
- 列表詳解
- Callback詳解
- ARM 詳解
- Symbol詳解Symbol
- Dockerfile詳解Docker
- Service詳解
- HugePages詳解
- Pod詳解
- HTML詳解HTML
- Weakmap詳解
- MyBatisPlus詳解MyBatis
- Git詳解Git
- GRPC詳解RPC
- SpringBoot詳解Spring Boot
- beenline 詳解
- Typescript詳解TypeScript
- dcokerfile 詳解
- TCP詳解TCP
- JSON詳解JSON
- DiffUtil詳解
- LVS詳解
- JDBC詳解JDBC