自 BERT 起,預訓練語言模型沿著海量訓練資料和龐大網路結構的方向在不斷髮展著。在12月落幕的 NeurIPS 2020 會議上,語言模型 GPT-3 榮膺最佳論文獎。OpenAI 的研究人員使用了多達 45TB 的文字資料來訓練它的 1750 億個引數。GPT-3 不僅僅是“變得更大”,它用“Few-Shot”學習替代了 FineTune,能夠出色完成程式碼生成、領域問答、吉他譜曲等高難度的複合型 NLP 任務。
那麼,在相反的道路上,當資料受限並且算力不足,是否有輕量級的預訓練模型能夠幫助我們更好地處理文字分類等經典NLP問題呢?
AllenAI 團隊開源的 VAMPIRE(Variational Methods for Pretraining In Resource-limited Environments)正是這樣一款模型。全文《Variational Pretraining for Semi-supervised Text Classification》收錄於ACL-2019。
本文將詳細介紹一種基於預訓練半監督的文字分類輕量型模型,即 VAMPIRE 模型,為解決由於大量資料和高昂計算力導致的資源不足問題提供一些思路。
01變分自編碼器
VAMPIRE 從 VAE 中借鑑了不少思路,在詳細介紹它之前,先來說說什麼是 Variational AutoEncoder(VAE),中文譯作變分自編碼器。VAE 出自 ICLR-2014 的 《Auto-Encoding Variational Bayes》,是一種影像生成技術,近年來也被遷移到 NLP 中作為一種文字生成模型。原文中有大段大段的公式推導,全部理解需要費不少功夫。不過對於 VAMPIRE 來說,重要的是弄明白 VAE 是建立在什麼樣的假設之上,它是透過什麼樣的方式來實現文字生成的。
和 encoder-decoder 架構一樣,VAE 也是透過“編碼”和“解碼”來完成對輸入句子的重建。兩者的區別在於,發源於 CV 的 VAE 並不是一種天然有序的 NLP 模型。在理解 VAE 之前,需要先徹底拋下頭腦中關於 Seq2Seq 那種 one by one 生成方式的固有印象。輸入序列中的每個詞可以是相關的,也可以互相獨立的,這取決於你使用什麼樣的編碼器。但是,輸出序列中的每個詞,一定是互不依賴的。它們被各自建模,同時生成。為了便於理解,我們暫且將重建任務看成是對單個詞的建模。這一過程可以用更廣義的分佈-取樣概念來描述:
對於一個離散樣本X,計算其機率分佈,根據分佈表示式進行取樣,生成新的離散樣本 X'。令 X' 無限逼近 X。
如果用 encoder-decoder 的術語來說,“計算機率分佈”即“編碼”,“分佈表示式”即隱 層,“取樣生成”即“解碼”。這裡有一個難點。X 是個離散變數,它很有可能服從某個奇奇怪怪的 分佈,根本就寫不出具體的表示式,更別提根據表示式來取樣了。因此,VAE 以正態分佈作為搭橋, 先將 X 變換到正態分佈 N(X) 上,再根據公式進行取樣得到 Z,對 Z 進行變換生成 X'。至於 X -> N(X) 和 Z -> X',就直接扔進神經網路學出來。一個特定的正態分佈,只由均值和方差決定。因此, X -> N(X) 的變換,實際使用了兩個神經網路,分別估算均值 u 和方差 sigma。
以上是對於單個詞的建模。當輸入的是 n 個片語成的句子時,在每個詞位置都需要進行上述處理。也就是說,有 n 組正態分佈,對應著 n 組均值和 n 組方差。好了,現在可以畫出整個前向計算的流程圖了:
在前向計算過程中,每個 X 都是 embedding 向量,經編碼產生的均值和方差也同樣是向量(假設維 度為dim)。那麼,實際上生成了 dim 個正態分佈,它們各自獨立取樣,組成維度為 dim 向量 Z。從 Pytorch 示例程式碼中可以更直觀地看到資料流向:
VAE 的最佳化目標分為兩部分。第一部分是重建目標,即 X' = X:
在不加入額外約束項時,模型可以很輕鬆地做到 100% 地還原 X,只要讓方差全部為 0,均值取原值即可。顯然,這樣的模型是不具備真正生成能力的。因此,VAE 的最佳化目標還包含第二部分,使用 KL 散度把 Z(X) 拉向標準正太分佈N(0, I)。可以理解為正則化項,或是對生成網路加噪。
兩個 loss 互相對抗,同步學習最佳化。
02 VAMPIRE
現在可以正式介紹 VAMPIRE 了。這是一個為算力和資料雙雙受限的情況設計的輕量預訓練模型,它的典型應用場景是半監督文字分類。VAMPIRE 在本質上是一個文件話題模型,它從一開始就拋棄了序列資訊,將句子當作 BOW(Bag of Words)進行建模。模型捕捉的是詞與詞的共現資訊,重建的是詞頻向量。這樣的設計使得無論是模型訓練還是預測推理都大大加快。
對於輸入句子 X,VAMPIRE 統計詞表中每個詞的頻次,構建詞頻向量作為句子表示。編碼器部分是和 VAE 一樣的均值方差預測,然後進行重引數取樣:
解碼器部分做了適配改造,先對取樣變數 Z 做一次 softmax 得到 theta,作者將其解釋為對隱話題的分佈計算。其中,公式13 即重建目標 loss1。
在完成預訓練後,theta 被記為 vampire embedding,參與下游任務。和 Bert 等模型不同的是, vampire embedding 作為輔助話題資訊,並不能單獨完成編碼訓練。它需要和 word embedding 融合在一起,共同進行分類預測:
03 應用場景
在低資源場景下,當算力受限並且也沒有可觀的領域資料時,VAMPIRE 等輕量級的預訓練模型也可以作為一種備選方案。作者在 AG News、Hatespeech、IMDB 和 Yahoo! 四個任務上,測試了 VAMPIRE 與基線詞向量模型在標註資料量從 200~10000 範圍內的分類準確度。從圖上可以明顯地觀察到,在標註資料不足 2000 條時,VAMPIRE 模型的表現較基線有大幅度的提升。
04總結
ELMO、BERT 和 GPT 等預訓練模型的出現,徹底革新了半監督 NLP 的研究。在海量無標註資料上訓練的文字向量表示,不僅能夠顯著提升下游任務的效能,而且這種助力不侷限於單一的任務型別。