1. 程式人生 > 其它 >NLP之預訓練模型+模型蒸餾與壓縮

NLP之預訓練模型+模型蒸餾與壓縮

一、分散式詞表示(直接使用低維、稠密、連續的向量表示詞)(靜態的表示)

1、Word2Vec

  • 訓練方法:用中心詞預測周圍詞。
  • 侷限性:Word2Vec產生的詞向量只有每個單詞獨立的資訊,而沒有上下文的資訊。

 2、Glove

  • Global Vector for Word Representation 利用全域性統計資訊,即共現頻次。
  • 構建共現矩陣:共現強度按照距離進行衰減。

二、詞向量(動態的表示)

1、Cove(Contextualized WordVectors)

  • 首次提出使用上下文相關的文字表示
  • 主要思想:將神經機器翻譯(NMT)的表示遷移到通用NLP任務上
  • 訓練階段:訓練一個神經機器翻譯模型(NMT)
  • 侷限性:訓練依賴於雙語平行語料、單獨使用效果一般,價效比不高,需要搭配傳統靜態詞向量才能獲得較為顯著的效能提升

2、語言模型(BiLM、GPT、ELMo、BERT、XLNet、RoBERTa、ALBERT、Google T5、ELECTRA)

2.1、BiLM(雙向語言模型)

  • 從前向後兩個方向同時建立語言模型

2.2、ELMo

  • 三層雙向LSTM語言模型(與當時使用越來越複雜的模型來得到好一點效果的模型相比是非常簡單的模型)
  • 預訓練任務:雙向語言模型

2.3、GPT(Generative Pre-Training)

  • Transformer的decoder
  • 自迴歸預訓練模型的代表
  • “生成式預訓練”+“判別式近精調”框架
  • “生成式預訓練”:在大規模文字資料上訓練一個高容量的語言模型;“判別式近精調”:將訓練好的模型適配到下游任務中,並使用由標註資料學習判別式任務。

2.4、BERT

  • Transformer的encoder(Encoded是可以平行計算的,LSTM是從左往右一步步計算的)
  • 自編碼預訓練模型代表
  • 模型層數更深:24層Transformer(每一層都有不同的引數)
  • 訓練資料量很大,TPU大算力加持
  • 預訓練任務:Masked Language Model(MLM,掩碼語言模型)、Next Sentence Prediction(NSP,下一個句子預測)
  • GPT:單向的從左至右的Transformer語言模型。
  • ELMo:將獨立的前向和後向的LSTM語言模型拼接所得。
  • BERT:雙向Transformer語言模型。

2.5、XLNet(Transformer-XL Net)

  • 雙流自注意力機制,可以捕獲雙向上下文的基於自迴歸的語言模型建模方法。
  • 解決了BERT中存在的“預訓練-精調”不一致的問題

2.6、RoBERTa(加強版EBERT)

  • 加大訓練資料16GB->160GB,更大的batch size,更長的訓練時間
  • 不需要NSP Loss
  • 更長的訓練Sequence
  • Static -> Dynamic Masking (動態掩碼,每次是不同的單詞mask)

 2.7、ALBERT

  • 一個輕量級的BERT模型(A Lite BERT)
  • 主要技術:詞向量因式分解、跨層引數共享(24層用相同的引數,把引數量減小)
  • 詞向量因式分解:O(V * H)-> O(V*E+E*H)在BERT中,embedding_size==hidden_size;在ALBERT中,embedding_size<hidden_size.
  • 訓練時雖然引數共享,但每層的梯度是不同的,仍然需要額外的儲存空間儲存;推斷時,前向計算仍然一層層展開,並不能節省推斷時間。

 2.8、Google T5

  • 非常大規模且乾淨的預訓練資料集 C4(745GB)
  • BERT的訓練目標
  • 隨機取樣15%的span作為mask
  • 更大的模型T5-11B

2.9、ELECTRA

  • 一個新的思路:使用GAN的訓練思路(一個生成器、一個判別器),把生成式的Masked language model(MLM)預訓練任務改成了判別式的Replaced token detection(RTD)任務,判斷當前token是否被語言模型替換過。

    

  • 對於一段文字,我們隨機Mask一些單詞。Generator會預測這些被Mask的位置。
  • Discrimnator的任務是預測測每個位置的單詞是來自於原文還是來自於Generator生成的文字。

3、長文字處理

3.1、Transformer-XL

  • Transformer中處理長文字的傳統策略是將文字切分成固定長度的塊,並單獨編碼每個塊,塊與塊之間沒有資訊互動。
  • Transformer-XL提出兩種該進策略:狀態複用的塊級別迴圈、相對位置編碼。

3.2、Reformer

  • 引入了局部敏感雜湊注意力(LSH)和可逆Transformer技術,有助於減少模型的記憶體佔用,進一步提升了模型對長文字的處理能力。
  • LSH:高效計算與每個詞關聯度最高的n個詞。

3.3、Longformer

  • 基於稀疏注意力機制。最大可處理長度擴充套件至4096
  • 三種稀疏注意力模式:滑動視窗注意力、擴張滑動視窗注意力、全域性+滑動視窗

3.4、BigBird

  • 同樣借鑑了稀疏注意力的方法:結合了三種不同注意力模式:隨機注意力、滑動視窗注意力、全域性注意力。

 

三、模型蒸餾與壓縮

1、為什麼需要蒸餾?

  預訓練模型通常需要佔用很大的空間,並且訓練和推斷時間也很慢;直接在實際產品或應用中使用預訓練模型難以滿足時間和空間需求;知識蒸餾技術可以在不損失或少量損失效能的基礎上,將大模型的知識遷移到小模型,從而提升推斷速度。

2、DistilBERT

  • 通用、任務無關的BERT(6層),相比BERT-base,小40%,快60%,在NLU任務上可達到原模型的97%。
  • 使用MLM預訓練任務進行知識蒸餾(無NSP)。
  • 訓練目標:由資料集自帶的硬標籤計算的有監督MLM損失、由教師模型提供的軟標籤計算的蒸餾MLM損失、教師模型和學生模型隱層輸出之間的餘弦相似度損失。
  • 總損失:有監督的MLM損失+蒸餾MLM損失+詞向量餘弦損失。

3、TinyBERT

  • 對BERT不同層進行匹配的蒸餾策略。
  • 提出了兩階段蒸餾策略,在預訓練和精調階段均進行知識蒸餾。
  • TinyBERT能達到教師模型BERT-base的96%的效果(GLUE),大小隻有教師的13.3%
  • 蒸餾的損失由三部分組成:詞向量損失、中間層損失、預測層損失。

4、MobileBERT

  • 在自注意力和前饋神經網路的設計上也有一定的改進,與BERT-large深度相同但更“苗條”。
  • 蒸餾損失:MLM損失+隱含層匹配損失+注意力匹配損失。
  • 漸近式知識遷移:
  1. 詞向量層和最終分類輸出層的權重是直接從教師模型拷貝至學生模型的,始終不參與引數更新;
  2. 對於中間的Transformer層,採用了漸近式逐步訓練;
  3. 當學生模型學習教師模型的第X層時,學生模型中是所有小於X層的權重均不參與更新。

5、TextBrewer(An Open-Source Knowledge Distillation Toolkit)

  •  推出首個面向自然語言處理領域的基於Pythorch的知識蒸餾工具包。
  • 準備工作:訓練教師模型,定義並初始化學生模型。構造蒸餾用資料集的DataLoader.
  • 知識蒸餾:初始化Distiller,構造訓練配置和蒸餾配置。定義adaptors和callback,分別用於適配模型輸入輸出和訓練過程中的回撥。呼叫Distiller的train方法開始蒸餾。

 

四、生成模型

1、BART

  • 採用了經過細微調整的基於Transformer的序列到序列結構。
  • 結合雙向的Transformer編碼器與單向的自迴歸Transformer解碼器,通過對含有噪聲的輸入文字去噪重構進行預訓練,是一種典型的去噪自編碼器。
  • 訓練過程:雙向編碼器編碼帶噪音的文字,用單向自迴歸編碼器重構文字。
  • 預訓練任務:單詞掩碼、單詞刪除、句子排列變換、文件旋轉變換、文字填充
  • 模型精調:序列分類、序列標註、文字生成、機器翻譯

2、UniLM

  • 只用一個Transformer就可以同時完成語言表示和文字生成的預訓練。
  • 可同時應用於語言理解任務和文字生成任務。
  • 核心思想:使用不同的注意力掩碼矩陣,控制每個詞的注意力範圍,從而實現不同的語言模型對於資訊流的控制。
  • 可以利用雙向語言模型,單向語言模型、序列到序列語言模型進行預訓練。

3、T5(Text-to-Text Transfer Transformer)

  • 提出了一種適用於各種型別的NLP任務的Encoder-Decoder框架。
  • 提供了非常細緻的模型設計決策過程。
  • 提出了C4資料集,包含750G高質量英文資料。
  • 提出了一種基於span-corruption的無監督訓練任務。
  • input:對句子的若干文字片段進行mask;output:預測被mask的文字片段

4、GPT-3(Language Models are Few-Shot Learners)

  • 展示了超大規模語言模型在小樣本學習few-shot learning上的能力。
  • 模型引數量進一步擴充套件至175B,預示著預訓練進入到超大規模時代。
  • 傳統預訓練模型:直接在下游任務資料上精調。
  • GPT-3類超大規模模型:zero-shot、one-shot、few-shot

5、可控文字生成:CTRL

  • 可以根據指定的領域、風格、主題、實體和實體關係等屬性生成相應文字。結構上仍然是一個基於Transformer的自迴歸語言模型。
  • 核心思想:從海量無標註資料中定位文章所在的領域或其他屬性,並作為控制程式碼,放在輸入文字的頭部,以指導後續文字的生成。

6、可控文字生成:PPLM

  • 提供一種無需重新訓練,且即插即用的方法實現可控的文字生成。
  • 核心思想:對於預訓練語言模型(GPT-2)以及目標屬性a,利用當前的生成結果是否滿足屬性a,對生成進行修正,使其朝著滿足該屬性的方向變化。