SimCSE:Contrastive Learning 在 NLP 的應用,Sentence Embedding 的新 SOTA
Abstract:
去年(2020)在 Computer Vision 領域,Contrastive Learning(CL,對比學習)顯得風風火火,許多用上 Contrastive Learning 概念的模型相繼被提出,最出名的例如:Google 提出 SimCLR,Facebook 提出 MoCo、MoCo V2。Contrastive Learning 可套用於不同的學習上,不管是 supervised 或 unsupervised,如:SimCLR 藉由 Self-Supervised Learning(SSL,自監督學習),不只不需要人工標註的資料集即可訓練,表現也相當出色,在 ImageNet 上甚至能跟使用 Supervised Learning 的模型表現相當。那麼既然 Contrastive Learning 這麼厲害,在 NLP 的領域一定也有用上的地方對吧?答案是是的,今天筆者就要來介紹 SimCSE: Simple Contrastive Learning of Sentence Embeddings 這篇論文。
Introduction
![](https://fcuai.tw/wp-content/uploads/2021/05/image-3.png)
SimCSE 關注的問題是 universal sentence embeddings,這在 NLP 領域是個基礎且重要的問題。SimCSE 提出一個應用 Contrastive Learning 的訓練方法,來訓練預訓練語言模型(如:BERT 或 RoBERTa),可以使用不管是 unlabeled 或 labeled data 來訓練 sentence embeddings。在使用 unlabeled data 進行 unsupervised learning 的情況下,SimCSE 在 STS(Semantic textual similarity)任務的表現上,不只是遠超其它之前提出的 unsupervised models,甚至能超越 supervised models,使用 labeled data 進行 supervised learning 則更不用說了,穩穩的成為 STS 任務的新 SOTA。如果將 SimCSE 訓練出的模型,遷移到其它任務進行微調,則表現也能比之前提出的其它方法有相當抑或好上一點的表現。
接下來筆者將慢慢講解 SimCSE,包括:
- Contrastive Learning
- Unsupervised SimCSE
- Supervised SimCSE
- Result
- Conclusion
Contrastive Learning
![](https://tobiaslee.top/img/dollar.png)
左:憑記憶畫出來的美元鈔票。右:在有美元鈔票的情況下畫出來的圖。
圖(2)說明了一件事,即使我們見過很多次鈔票,也無法重現出完美的鈔票,但是我們仍然能夠藉由某些關鍵特徵,就能輕易地辨別是否為鈔票。藉此,也就表示其實模型並不需要記住每一個細節,只要能擷取出關鍵特徵,就可以區分不同的東西,這就是 Contrastive Learning 的核心思想。
![](https://1.bp.blogspot.com/--vH4PKpE9Yo/Xo4a2BYervI/AAAAAAAAFpM/vaFDwPXOyAokAC8Xh852DzOgEs22NhbXwCLcBGAsYHQ/s1600/image4.gif)
這裡藉由 SimCLR 圖(3)是怎麼做的,來簡單了解 CL。(1)先 sample 一些 data(batch);(2)對 batch 裡的 data 做不同的 augmentation;(3)一樣的 data 的 representation 要互吸,不一樣的要互斥,簡易流程就是這樣。一樣要拉近,不一樣要拉遠,這就是 CL 的目標。
接下來我們就來看看 SimCSE 是怎麼設計 CL 的訓練。
Unsupervised SimCSE
![](https://fcuai.tw/wp-content/uploads/2021/05/image-2.png)
Unsupervised SimCSE 最關鍵的地方就是對如何建構 positive pair 的回答,對於 CV 領域有很多方法,如:cropping、flipping、distortion、rotation 這些 augmentation method,NLP 在近年也有許多方法被提出,如:word deletion、reordering、substitution。但作者發現這些方法反而會傷害到模型的表現,對此作者最後給出的答案非常簡單,那就是 dropout,dropout 可以作為 minimal data augmentation,並達到比之前其它的 augmentation 方法更好的表現。
所以要建構 positive pair 就非常簡單,作者直接利用原始 Transformer 裡的 dropout,讓一個句子分別通過模型兩次,因為 dropout 的關係,產出的兩個 sequence embedding 就會有些許的不同,從而變成一對 positive pair。接下來就是照上面所敘述的 CL 概念進行訓練就好。
Supervised SimCSE
![](https://fcuai.tw/wp-content/uploads/2021/05/image-5.png)
剛剛我們提到作者提出使用 dropout 來建構 positive pairs,並進行 unsupervised learning。接下來作者也研究了,如果我們使用 supervised datasets 來進行 supervised learning 能不能得到更好的表現?
![](https://fcuai.tw/wp-content/uploads/2021/05/image-6.png)
圖(6)回答了上述的問題,作者實驗了各種不同的 supervised dataset ,結果顯示使用 supervised dataset 訓練的確有效提高了模型的表現。並且作者提出利用 NLI datasets 的 contradiction pairs 當作 hard negative pairs,可以更進一步提高表現。作者也發現之前的方法(如:Sentence-BERT、StackSeq2Seq)常使用的 dual encoder framework 反而會降低模型的表現。
Results
最後我們來看看 SimCSE 的各項表現。
![](https://fcuai.tw/wp-content/uploads/2021/05/image-7-1030x776.png)
圖(7)顯示我們同時評估 supervised 和 unsupervised SimCSE 在每一個 STS 任務的表現。不管是哪一種 learning,SimCSE 在每個任務上表現相較之前都有所提升,綜合表現遠超之前的模型。SimCSE-RoBERTa_large 在只使用 unsupervised learning 下,表現甚至已經跟之前的 supervised model 旗鼓相當。
![](https://fcuai.tw/wp-content/uploads/2021/05/image-8.png)
圖(9)顯示當我們遷移 SimCSE 去做其它 NLP 的下游任務,SimCSE 都能有相當或是更好一點的表現。作者也發現,如果在訓練時加入 MLM(Masked Language Model,克漏字)一起訓練,根據下游任務的不同,可能會有幫助或是傷害。
論文還有很多有趣的實驗,像是 pooler(如何產出 sequence embedding)的選擇、batch size、其它 unsupervised 方法在訓練的表現等等,因為篇幅關係,筆者就只取一部分講解,有興趣的人可以去看看原始論文。
Conclusion
SimCSE 提出利用 Contrastive Learning 進行訓練,可以使用不管是 Supervised 或 unsupervised learning 進行訓練,方法簡單暴力,在 STS 任務上成為新 SOTA。
發表評論
Want to join the discussion?Feel free to contribute!