1. 程式人生 > >【NLP面試QA】預訓練模型

【NLP面試QA】預訓練模型

[TOC] #### 自迴歸語言模型與自編碼語言 - 自迴歸語言模型 - 通過給定文字的上文,對下一個字進行預測 - 優點:對文字序列聯合概率的密度估計進行建模,使得該模型更適用於一些生成類的NLP任務,因為這些任務在生成內容的時候就是從左到右的,這和自迴歸的模式天然匹配。 - 缺點:聯合概率是按照文字序列從左至右進行計算的,因此無法提取下文資訊; - 代表模型:ELMo/GPT1.0/GPT2.0/XLNet(XLNet 做了些改進使得能夠提取到下文特徵) - 自編碼語言模型 - 其通過隨機 mask 掉一些單詞,在訓練過程中根據上下文對這些單詞進行預測,使預測概率最大化。其本質為去噪自編碼模型,加入的 [MASK] 即為噪聲,模型對 [MASK] 進行預測即為去噪。 - 優點:能夠利用上下文資訊得到雙向特徵表示 - 缺點:其引入了獨立性假設,即每個 [MASK] 之間是相互獨立的。這實際上是語言模型的有偏估計,另外,由於預訓練中 [MASK] 的存在,使得模型預訓練階段的資料與微調階段的不匹配,使其難以直接用於生成任務。 - 代表模型:Bert/Roberta/ERNIE #### Bert ##### Bert 中的預訓練任務 ###### Masked Language Model 在預訓練任務中,15%的 Word Piece 會被 mask,這15%的 Word Piece 中,80%的時候會直接替換為 [Mask] ,10%的時候將其替換為其它任意單詞,10%的時候會保留原始Token - 沒有 100% mask 的原因 - 如果句子中的某個Token100%都會被mask掉,那麼在fine-tuning的時候模型就會有一些沒有見過的單詞 - 加入 10% 隨機 token 的原因 - Transformer 要保持對每個輸入token的分散式表徵,否則模型就會記住這個 [mask] 是token ’hairy‘ - 另外編碼器不知道哪些詞需要預測的,哪些詞是錯誤的,因此被迫需要學習每一個 token 的表示向量 - 另外,每個 batchsize 只有 15% 的單詞被 mask 的原因,是因為效能開銷的問題,雙向編碼器比單項編碼器訓練要更慢 ###### Next Sentence Prediction 僅僅一個MLM任務是不足以讓 BERT 解決閱讀理解等句子關係判斷任務的,因此添加了額外的一個預訓練任務,即 Next Sequence Prediction。 具體任務即為一個句子關係判斷任務,即判斷句子B是否是句子A的下文,如果是的話輸出’IsNext‘,否則輸出’NotNext‘。 訓練資料的生成方式是從平行語料中隨機抽取的連續兩句話,其中50%保留抽取的兩句話,它們符合IsNext關係,另外50%的第二句話是隨機從預料中提取的,它們的關係是NotNext的。這個關係儲存在圖4中的[CLS]符號中 但實際上這個任務是過於簡單了的,對於模型的預訓練並沒有太大的幫助,在 Roberta 的模型中將其去掉了 ##### Bert 的 Embedding BERT的輸入表徵由三種Embedding求和而成: - Token Embeddings:即傳統的詞向量層,每個輸入樣本的首字元需要設定為 [CLS],可以用於之後的分類任務,若有兩個不同的句子,需要用 [SEP] 分隔,且最後一個字元需要用 [SEP] 表示終止 - Segment Embeddings:為 $[0, 1]$ 序列,用來在 NSP 任務中區別兩個句子,便於做句子關係判斷任務 - Position Embeddings:與 Transformer 中的位置向量不同,BERT 中的位置向量是直接訓練出來的 ##### BERT-wwm - Whole Word Masking 即全詞 Mask,打破了傳統 Bert 的獨立性假設,即每個 [MASK] 之間是相互獨立的。這使得同一個詞中不同字元的預測的上下文語境是相同的,加強同一個詞不同字元之間的相關性。 ##### Roberta 與 Bert 的區別 - 訓練引數經過了仔細的挑參,訓練資料更大,訓練 Batch Size 更大 - 認為 Next Sentence Prediction 任務沒有太大幫助,將 NSP loss 去掉,輸入改為從一個文件中連續抽取句子,當到達文件末尾時,加一個分隔符再抽樣下一個文件的句子。 - Bert 的語料在預處理的時候就會被 Mask,在訓練階段保持不變;而 Roberta 中改為動態的 Mask,使得每次讀取到的資料都不一樣(具體是將資料複製10遍,統一隨機 Mask) ##### ERNIE 與 Bert 的區別 由於 Bert 僅對單個的字元進行 Mask 很容易使得模型提取到字搭配的低層次的語義特徵,而對於短語和實體層次的語義資訊抽取能力較弱。因此將外部知識引入到預訓練任務中,主要有三個層次的預訓練任務 - Basic-Level Masking: 跟bert一樣對單字進行mask,很難學習到高層次的語義資訊; - Phrase-Level Masking: 輸入仍然是單字級別的,mask連續短語; - Entity-Level Masking: 首先進行實體識別,然後將識別出的實體進行mask。 #### XLNet XLNet 針對自迴歸語言模型單向編碼以及 BERT 類自編碼語言模型的有偏估計的缺點,提出了一種廣義自迴歸語言預訓練方法。 ##### 排列語言模型(Permutation Language Model,PLM) 通過引入一個排列語言模型,希望語言模型用自迴歸的方法從左往右預測下一個字元的時候,不僅要包含上文資訊,同時也要能夠提取到對應字元的下文資訊,且不需要引入Mask符號。 首先將句子進行重排列,重排列後的末尾幾個字就能夠看見其之後的一些詞,根據能夠看到的物件進行相應的 Mask 即可。在實現上是通過對 Attention 矩陣增加掩碼來選擇哪些詞能夠被看見哪些詞不能夠被看見的。
##### 雙流注意力機制(Two-Stream Self-Attention) 由於我們有多層的 Transformer,需要在最後一層預測最末尾的幾個字,比如最大長度為 512,最後一層只需要預測最後 10 個詞,我們需要所有字的資訊都能傳輸到最後一層,但又希望最後在預測某個字的時候看不到這個字的資訊,因此引入了雙流注意力機制 Query Stream 的掩碼矩陣中僅傳輸位置資訊,用於表明預測順序是什麼樣的;Content Stream 與傳統的 Transformer 一致,包括內容資訊和位置資訊,確保所有的字資訊都能傳輸到最後一層。個 Attention Stream 的區別僅在於掩碼是否能看見自己,以及輸入一個是僅有位置資訊,另一個是包括位置和內容資訊。
##### 部分預測(Partial Prediction) 如果重排列之後對所有字都進行預測的話模型難以收斂(可能是前幾個字看到的字的個數太少),計算量也大。因此僅對最後 15% 的字進行預測 ##### Transformer-XL 傳統的 Transformer 的輸入長度限制在 512,更長的文字資訊模型是學不到的。 - 片段遞迴機制(segment-level recurrence mechanism):指的是當前時刻的隱藏資訊在計算過程中,將通過迴圈遞迴的方式利用上一時刻較淺層的隱藏狀態(上一時刻的隱藏狀態均儲存到一個臨時儲存空間中),這使得每次的計算將利用更大長度的上下文資訊,大大增加了捕獲長距離資訊的能力。 - 相對位置編碼(Relative Positional Encodings):採用了片段遞迴機制之後,不同片段的位置資訊是一樣的然後疊加在了一起,這是不合適的,因此提出了相對位置編碼的方式來替代絕對位置編碼
#### ALBERT ALBERT 貢獻在於,其提出了兩種模型引數縮減的技術,使得在減小模型重量的同時,模型效能不會受到太大的影響。 ##### 對Embedding因式分解 採用了一個因式分解的方式對 Embedding 層的矩陣進行壓縮。簡單來說,就是先將 one-hot 對映到一個低維空間 $E$,然後再將其從低維空間對映到高維空間 $H$,即引數量的變化為 $O(V \times H) => O(V \times E + E \times H)$,且論文也用實驗證明,Embedding的引數縮減對整個模型的效能並沒有太大的影響 ##### 跨層引數共享 多層 Transformer 共享引數,提高參數利用率,使得引數量得到有效的減少。(引數共享的物件為 Transformer 中的 feed-forward layer 引數和 self-attention 的引數) ##### 句間連貫性損失 ALBERT 針對預訓練任務中的 NSP 任務進行改進,即句間連貫性判斷。NSP 任務僅需判斷兩個文段是否是一個主題即可,該任務太簡單了。句間連貫性判斷任務需要判斷兩個文段的順序是否顛倒,強迫模型去學習文段的語意,這相比於 NSP 任務更加巧妙。 > 該系列文章是個人為面試做的知識儲備,如有出錯,請大家指正,