論文閱讀筆記 : Do Not Have Enough Data? Deep Learning to the Rescue! (AAAI 2020)
論文連結 : https://arxiv.org/pdf/1911.03118.pdf
前言:
此篇論文簡單來說是使用了GPT-2模型來輔助NLP的資料擴增(DA),他們把此方法稱為LAMBADA(language-model-based data augmentation),適合用在極少量標籤樣本(labeled data)的情況下(如每個類別只有5個labeled data);在3個資料集的實驗上皆勝過CVAE, CBERT, EDA等SOTA(state-of-the-art)方法,可以說是現今最優秀的DA方法之一。
因為這篇論文有點新,目前只找到知乎上有2篇介紹NLP的DA方法,文中有很簡單地提及LAMBADA。
水管只有一部影片在講這篇,而且居然是希伯來文也沒英文字幕(因為是IBM以色列的頻道,所以應該是希伯來文吧🤔),但有些投影片依然是英文而且做得淺顯易懂,也會放在這裡給大家參考。
這篇論文並沒有到很難,我會盡量講重點以及講清楚它的原理。
知乎2篇(如果對NLP的DA有興趣的很推薦閱讀,兩位作者皆總結得非常好):
标注样本少怎么办?「文本增强+半监督学习」总结(从PseudoLabel到UDA/FixMatch)
Abstract
IBM團隊使用預訓練模型來合成labeled data,此方法稱為LAMBADA。首先用SOTA的語言生成模型微調(fine-tuning)在原始資料集(通常只有labeled data);接著用fine-tuning過的模型與給予的label,來合成符合該label的新樣本;最後再用原分類器(在原資料集上訓練的classifier)來過濾(filter)合成的標籤樣本。
1. Introduction
這裡主要介紹文本分類的歷史,以及文本分類中少量labeled data的問題,有興趣的可以自己看原文,我就簡單講一下🤗
文本分類包含了各種任務,如意圖分析、情感分析、主題分類、關係分類等,根據手頭上的任務,需要適合的分類器和大量labeled data,但labeled data通常很少且獲取成本很高。
文中以開發意圖分析的聊天機器人為例,開發者通常在每個意圖只有3~5個樣本時就開始開發了,甚至有些意圖還沒有labeled data。
所以DA就出現啦,DA就是專門用來處理少量labeled data問題的常用策略;但NLP的DA不像CV的DA一樣,用簡單的裁剪、翻轉、平移就好,必須考量到合成文本語義、語法是否正確;像EDA論文所建議的,用同義詞替換、隨機刪除詞/插入詞/交換詞序等方法會比較穩定,但文本生成模型的出現又給了DA新的發展方向。
由於LAMBADA的DA建立在GPT-2上,而GPT-2已經在大量文本上預訓練過了,代表對自然語言的結構有很大程度的學習,所以能產生非常連貫的句子和段落。
透過對小型資料集fine-tuning,用fine-tuning的模型生成labeled data,用原分類器過濾生成的labeled data,保留足夠穩定(noise比較少)的合成樣本,最後與原始資料集混和再重新訓練分類器。(此為LAMBADA的步驟,會在LAMBADA Method此節細講,但可以參考一下IBMIsrael的投影片)
LAMBADA在小/微型資料集(如每個類別只有5個樣本)此情況下,最能明顯改善baseline(baseline為不做任何DA直接訓練)。
LAMBADA在3個方面做出貢獻:
- 統計上能提高分類器準確性(透過McNemar test),於實驗二證明
- 在少標籤樣本情況下,表現優於其他SOTA方法,於實驗三證明
- 當不存在無標籤樣本時,建議替代半監督式學習,於實驗四證明
(其實這點不太懂😂)
2. Related Work
這裡在介紹一些DA方法與演進,一樣也是簡單講,因為這裡介紹的paper我大部分都還沒看過😂
以前NLP的DA方法著重在樣本更改,對於不改變原始句子標籤的前提下,用幾種方式去更改原始句子,以生成新標籤樣本。
這類樣本更改的方法中最新方法之一就是EDA,屬於局部更改(local changes);這類還有另一種方法是CBERT,屬於上下文擴增(contextual augmentation),在給予label的情況下預測masked words,以生成labeled data。局部更改將會產生與原始樣本相似的結構,貢獻的corpus-level多樣性比較少。
其他的DA方法就是生成整個句子,包含VAE, round-trip translation, paraphrasing或GAN,通常還會加上data noising技術,但這類方法需要大量的訓練資料來生成好的樣本。
預訓練模型與遷移學習的出現改變了NLP領域的發展(如ELMO, GPT, GPT-2, BERT),更好個開發出高性能的深度學習模型;它們透過遷移學習,打破了NLP, NLU中許多benchmark任務的紀錄(其中有些任務有涉及到文本生成)。
即使是在小型資料集上微調,也能生成高品質句子(如Table 1所示),所以應該能用這些微調模型生成的高品質句子,來改善文本分類表現。
3. LAMBADA Method
Input
- Dtrain為sentences set且都有label
2. A可為任意分類方法(證明LAMBADA的表現與分類方法無關)
3. 語言模型G必為GPT-2
4. N1~Nq(共q個class)每個class要加入原資料集的labeled data數量(這個很重要喔😤😤,這是指經過Step 4 filtering後加入的合成labeled data數量,並非生成的labeled data數量)。
Step 1: Train baseline classifier
不用任何DA方法來訓練baseline classifier h(也就是h=A(Dtrain)),這個h會用在Step 4的data filtering。
Step 2: Fine-tune language model
將G在Dtrain上fine-tuning得到Gtuned,具體作法如下:
- 將Dtrain的句子都串接成U*型式,(xi, yi)為句子與標籤
- <SEP>分隔標籤與句子,<EOS>表示句子的結束
- 透過預測next token(此過程跟GPT-2預訓練過程一樣,一樣的loss function和超參數)來訓練GPT-2可學習的參數,最終得到Gtuned。
U*=y1<SEP>x1<EOS>y2<SEP>x2<EOS>…yn<SEP>xn<EOS>
Step 3: Synthesize labeled data
只要給予label y,Gtuned就能對任意y<SEP>…起頭的序列一直預測後續直到<EOS>。
對於每個類別也能合成任意數量的標籤樣本,因此可以建立平衡資料集或控制每個類生成樣本的比例;生成的標籤資料集合表示為D*。
在生成標籤資料時使用簡單的啟發式方法,還記得Ny表示為最終類別y過濾後要加入的合成資料數量,所以生成時就會生成Ny的10倍,即10Ny,在這裡也可以用更複雜的啟發式方法(我不是很懂啟發式方法😭)。
We use a simple and rather crude heuristic, where we generate for each class y, 10 times more sentences than we wish to add to the class (i.e., 10Ny).
Step 4: Filter synthesized data
此階段將fitering D*,因為在合成資料時難免會有noise或error產生,會影響分類表現,使用Step 1訓練的h來過濾,只保留穩定的合成labeled data。
對於每個類別y,我們從D*取top Ny個句子且其標籤為y:
- 對於每個合成labeled data(x, y),用h來確認其標籤y是否正確,即h(x)=y
- 用h產生的信心值來排序標籤資料(x, y)
- 對於類別y取出top Ny個句子
- 結果放入集合Dsynthesized(此集合為LAMBADA的最終輸出)
最後把合成資料與原始資料混和,用A訓練出分類器h’(也就是h’=A(Dtrain ∪ Dsynthesized))。
h給予(x, y)的信心值可視為(x, y)對於h來說的保守程度
(原文是conservative, 應該是指穩定度的意思,越保守則越接近Dtrain結構、與A越契合,也就是越穩定)
The confidence score given to a data instance by h can be regarded as the extent the instance is conservative with respect to h.
為何與Dtrain和A有關呢? 其實h同時考慮了Dtrain和A,這個方法是從半監督式學習上Semi-supervised classification for natural language processing (2014)借鑿的。(因為我看這篇時,對半監督式學習還沒什麼概念,這段有看沒懂😨)
半監督式學習就是用這種conservative方法來對unlabeled data分類和過濾。
In turn, h takes into account both Dtrain and the algorithm A that is to be used with the augmented dataset. This approach is borrowed from semi-supervised learning (Shams 2014), where it is used to classify and filter unlabeled data in a conservative manner.
而這種條件生成(Step 3)+過濾(Step 4)的方法,意味著LAMBADA有著double voting mechanism(雙重投票機制,這應該是指LAMBADA最終產生的資料很robust的意思吧,畢竟可以投票兩次,代表最終留下的資料超強大吧🤔🤔)
Note, however, that Gtuned generates sentences conditioned on a class label. In our case, this means we have a type of double voting mechanism.
這裡作者還提到了,也可以用最終的混合資料集(Dtrain ∪ Dsynthesized)再用LAMBADA方法生成Dsynthesized',但此篇沒討論。
4. Experiment
實驗使用3種分類方法(SVM, LSTM, BERT), 3種資料集(ATIS, TREC, WVA)。
每個實驗皆用McNemar test,在統計上驗證實驗結果。
Datasets
主要關注用於句子分類(task of classifying a sentence)的主題分類資料集(topic classification datasets),並非分類文章(document)。
這裡還有提到短文本分類其實是更困難的任務(應該是指對於LAMBADA來說而不是整個文本分類領域,我印象中EDA對於短文本分類效果很不錯)。
We mainly focus on topic classification datasets with the task of classifying a sentence, not an entire document. Notably, classification of shorter text is considered a more difficult task.
拆分訓練:驗證:測試 = 80%, 10%, 10%,接著從訓練集中隨機取5, 10, 20, 50, 100個樣本來測試LAMBADA在何種情況下最好。
Classifiers
作者為甚麼要挑這SVM, LSTM, BERT作為分類方法呢?因為這三個方法剛好跨越了三種時代(蠻有趣的理由):
SVM:
在深度學習出來前最常用的分類方法,實驗使用IBM自己的商業用SVM(IBm Watson Natural Language Classifier),SVM在較小資料集中表現也不錯,在此問題中可能有優勢。
LSTM:
在RNN, word embeddings發展後出現的方法,通常用於序列和文本分類,會在LSTM後面接上2層Dense+1層softmax,實驗使用了100維的GLoVe作為word embedding,LSTM通常需要大量資料來訓練,可能表現會不太好。
BERT:
為transformer架構,透過2個非監督任務(masked language model, next-sentence prediction)進行預訓練,所以在較小資料集上也能表現不錯。
Generative Models
把LAMBADA跟其他SOTA生成方法(EDA, CVAE, CBERT)進行比較。
為了公平起見,這裡主要考慮條件生成模型(conditional generative models,標籤作為條件),這樣就能建立平衡資料集。
其實原文還有對這三個方法做簡單介紹,但我只看過EDA的paper,所以就索性跳過惹😍👌。
5. Results
實驗一: 在不同的每類樣本數下,LAMBADA的表現差異
使用ATIS資料集來測試5, 10, 20, 50, 100各種樣本數。
從圖一可以發現,在每類樣本數<=50時,LAMBADA的效果均優於baseline。也可以以發現BERT的效能明顯優於另外2種,這就是預訓練模型的威力😁!!
也如預期那樣,SVM處理少量標籤資料的能力優於LSTM,且此方法甚至能改善BERT的表現。
實驗二:以每類5個樣本為前提,在3種資料集上與baseline差距
值得注意的是BERT和SVM在ATIS的改善幅度遠大於其他,作者們認為是因為LAMBADA可以改善不平衡資料集問題,幫少類別資料多生成資料。
實驗三:在3種資料集上,與其他SOTA方法表現差距
實驗四:LAMBADA vs. Unlabeled Data
這個實驗有點不清楚在做甚麼,跟半監督式學習有很大關係😥
(強烈建議參考原文,因為我對半監督式學習真的很外行🤣)
原文應該是說,LAMBADA不需要無標籤資料(unlabeled data),所以很適合應用在無標籤資料無法取得和取得成本高的情境下。(這推論我懂,但這情況可能發生嗎?無標籤資料應該很好取得吧,很難取得的是有標籤資料吧🤔)
所以要在此種情境下(沒有unlabeled data的情境)與使用unlabeled data的半監督式學習方法比較表現。
Our augmentation framework does not require additional unlabeled data. As such, it can be applied when unlabeled data is unavailable or costly. To test the expected LAMBADA performance in such a scenario, we compared it to a semi-supervised approach (Ruder and Plank 2018) that uses unlabeled data. Table 6 compares between different experimental settings on ATIS using three classifiers and five samples per class.
此半監督式學習方法來自:Strong Baselines for Neural Semi-supervised Learning under Domain Shift (2018)
Unlab. Data設置:
從原始資料集(有標籤的)中隨機選取樣本且去除標籤,建立無標籤資料集,接著採取簡單的弱標籤方法(weak labeling approach, 沒聽過😂,但流程應該是照底下這樣跑):
用原始資料集(這個是有標籤的)上訓練過的分類器分類此樣本,這個分類結果就屬於Unlab. Data了,再將它與LAMBADA的結果作比較。
可以看出LAMBADA比weak labeling approach(Unlab. Data)的準確度還高。所以可以推論合成的標籤資料對分類器表現的貢獻,比從原始資料集提取的無標籤資料貢獻還高。(所以這實驗是怎樣做?半監督學習方法也是使用5個有標籤的資料😅??無標籤資料要抽幾個???)
作者對此結果(合成標籤資料貢獻度>來自原始資料集的無標籤資料)做出2個解釋(我覺得不太好理解😂)
- LAMBADA的合成資料的"標籤"能明顯改善分類器表現。(等等這很正常吧,LAMBADA目的不就在於生成標籤資料嗎?這有點答非所問😅)
- LAMBADA可以生成平衡資料集(這也蠻奇怪的,難道半監督式學習不能解決嗎😅)
1. LAMBADA uses its ”generated” labels, which significantly improve performance.
2. LAMBADA allows us to control the number of samples per class by investing more effort in generating samples for classes that are under-represented in the original dataset.
Unlab. GPT設置(這是針對上面理由1的實驗,理由2放在future work):
把LAMBADA合成的資料去除標籤,結果紀錄為Unlab. GPT,與LAMBADA的結果作比較。還是可以發現label其實是對生成資料很重要的。(這不是理所當然的嗎😂)
6. Discussion and Future Work
LAMBADA是基於預訓練語言模型的DA方法,其中還涉及了微調、條件生成標籤樣本與過濾;並且在實驗上證明可以明顯提高小型資料集上的表現,也超越其他SOTA方法如EDA, CVAE, CBERT表現很多。
作者們在這裡給出蠻多有趣的方向,其中也有新技術的嘗試,雖然有些看不懂要表達甚麼😂。
Generative vs. Discriminative
(我覺得這不算future work啦,就只是討論一下此篇的精神)
要訓練一個生成模型比判別模型(這裡指分類器)難很多,是因為生成模型要近似每個類別中樣本的機率分布,判別模型只需估計類別邊界,所以生成模型更需要訓練資料,用生成模型來提升判別模型準確度是很矛盾的(應該是指若要讓生成模型效能可強到提升判別模型,就需要比訓練一個好的判別模型更多的資料量)。但是生成模型現在可以用在大量無監督的文本預訓練的方式,只需在集少量的標籤樣本上微調,就能得到一個效能很強的生成模型。
Filtering Approach
LAMBADA現在採用是跟半監督式有關的啟發式方法(不太懂這跟Step 3用的生成10Ny句子所用的啟發式方法是同一個嗎?看起來LAMBADA有兩個啟發式方法😂?我對啟發式方法很外行🤣),該方法會考慮以下因素:
- 合成樣本的標籤
- filter classifier(也就是baseline classifier h)給出的標籤(分類結果)和信心值
- 每個類別的句子數(這裡應該是指Ny)
作者有提到在未來會使用其他的過濾用啟發式方法。
LAMBADA synthesizes data in two steps. It first generates a large number of sentences per class and then filters them by multiple conditions. In this work, we employ a simple filtering heuristic, inspired by the semi-supervised paradigm that takes into account: 1) the class label of the generated sentence 2) the class label as given by the filtering classifier, together with its confidence score and 3) the number of sentences per class. We plan to further investigate other filtering heuristics and approaches in future work.
Weak Labeling and Self-Supervision
它是指LAMBADA生成的標籤資料屬於弱標籤(weakly labeled data),也許可以將LAMBADA生成的弱標籤資料結合到其他半監督式學習框架,如此篇論文提到的Strong Baselines for Neural Semi-supervised Learning under Domain Shift (2018)。
LAMBADA synthesizes corpora of weakly labeled data by conditionally generating sentences on a given class’ label. Thus, one may incorporate a LAMBADA synthesized corpus within any weak labeling or semi-supervised framework such as one of these suggested by (Ruder and Plank 2018). Moreover, one may use a synthesized corpus in situations where unlabeled data is not available and still expect comparable results.
Zero-shot Learning
這個感覺是很新的東西,其實GPT-2的論文就有做過這個實驗了(不微調直接裸測GPT-2在各任務上的表現),也許可以對沒看過的類別生成樣本(聽起來有點抽象......😅),作者也有提到未來會研究這個想法。
Most textual datasets contain class names with semantic meaning. LAMBADA, an approach based on a language model, utilizes this class label meaning in its generation process. Consequently, it enables synthesizing samples for any meaningful, domain-related, class name. It thus potentially allows the generation of samples for unseen classes, a method also known as zero-shot learning (Socher et al. 2013). We plan to investigate this idea in future research.
Iterative Training Process
它是說如果Algorithm 1不斷疊代的情況下,可能會有data drifting(可能讓合成資料在訓練集中佔大多數,其實也不是很懂這是甚麼😅),所以可能需要設置一個停損點來中止此Algorithm。
While a single step of the augmentation process may sufficiently improve the classifier, as shown in this paper, there is no real impediment to repeat the process by running several iterations of Algorithm 1. One of the possible hazards that the repetition of this process may cause is data drifting, in which biased synthesized samples gain domination over the training dataset.
7. Comment
因為目前論文會往NLP的DA方面去研究,剛好最近也在看GPT-2怎麼微調之類的教學文章,剛好這篇論文都有涵蓋到,而且演算法步驟也沒有很複雜。
雖然有些小細節還不是很清楚(如啟發式演算法),整體來說很值得接著做,尤其時future work寫得還不錯,應該會往Weak Labeling and Self-Supervision嘗試看看。
至於Code我下次再補,公開Code真的非常少,目前只找到一個,而且是一家德國新創公司網站裏的教學文章(也只有2篇),甚至還有重新說明LAMBADA理論,很值得一看。
結語
今天的介紹大概就到這邊了,這篇論文也沒有100%懂,如果有觀點錯誤請幫我指出,謝謝大家😎👍