【自然语言处理】【对比学习】SimCSE:基于对比学习的句向量表示
相關博客:
【自然語言處理】【對比學習】SimCSE:基于對比學習的句向量表示
【自然語言處理】BERT-Whitening
【自然語言處理】【Pytorch】從頭實現SimCSE
【自然語言處理】【向量檢索】面向開發域稠密檢索的多視角文檔表示學習
【自然語言處理】【向量表示】AugSBERT:改善用于成對句子評分任務的Bi-Encoders的數據增強方法
【自然語言處理】【向量表示】PairSupCon:用于句子表示的成對監督對比學習
一、簡介
- 學習通用句嵌入向量是一個NLP的基礎問題。本文通過對比學習的方式實現了SOTA句嵌入向量。具體來說,論文提出了稱為SimCSE(Simple?Contrastive?Sentence?Embedding?Framework)\text{SimCSE(Simple Contrastive Sentence Embedding Framework)}SimCSE(Simple?Contrastive?Sentence?Embedding?Framework)的對比學習框架,可以用于學習通用句嵌入向量。其中SimCSE\text{SimCSE}SimCSE可以分為“無監督SimCSE\text{SimCSE}SimCSE”和"有監督SimCSE\text{SimCSE}SimCSE"。
- 在無監督SimCSE\text{SimCSE}SimCSE中,僅使用dropout進行數據增強操作。具體來說,將同一個樣本輸入預訓練編碼器兩次(BERT),由于每次的dropout是不同的,那么就會生成兩個經過dropout后的句向量表示,將這兩個樣本作為“正樣本對”。
- 通過實驗發現,使用dropout進行數據增強好于其他常見的數據增強方法,例如:單詞刪除和替換。可以將dropout看作是最小的數據增強。
- 在有監督SimCSE\text{SimCSE}SimCSE中,我們基于NLI\text{NLI}NLI數據集來構造對比樣本,從而實現有監督的對比學習。具體來說,論文將entailment樣本作為“正樣本對”,并將contradiction樣本作為hard“負樣本對”。實驗表明,NLI\text{NLI}NLI數據集對于學習句子表示特別有效。
- 論文進一步分析了兩個指標,分別是:正樣本對的alignment和表示空間的uniformity。證明了SimCSE\text{SimCSE}SimCSE能夠學習到更好的句子嵌入向量。
- 論文從理論上證明SimCSE\text{SimCSE}SimCSE改善了uniformity,并將對比學習與近期發現的預訓練詞向量各向異性聯系起來。
二、背景知識
1. 對比學習
【自然語言處理】【對比學習】搞nlp還不懂對比學習,不會吧?快來了解下SimCLR
2. Alignment和Uniformity
Wang等人確定了對比學習的兩個關鍵特性:alignment和uniformity,并提出了衡量這兩個特性的評估指標。
2.1 Alignment
給定一個正樣本對分布pposp_{pos}ppos?,alignment的目標就是計算正樣本對嵌入向量的期望距離
?align?E(x,x+)~ppos∣∣f(x)?f(x+)∣∣2\ell_{\text{align}}\triangleq \mathop{\mathbb{E}}_{(x,x^+)\sim p_{pos}}||f(x)-f(x^+)||^2 ?align??E(x,x+)~ppos??∣∣f(x)?f(x+)∣∣2
其中,f(x)f(x)f(x)將樣本轉換為嵌入向量的編碼器。直觀來看,alignment越小越好。
2.2 Uniformity
uniformity用于衡量嵌入向量是否有良好的統一分布
?uniform?logEx,y~pdatae?2∣∣f(x)?f(y)∣∣2\ell_{\text{uniform}}\triangleq \text{log} \mathop{\mathbb{E}}_{x,y\sim p_{data}} e^{-2||f(x)-f(y)||^2} ?uniform??logEx,y~pdata??e?2∣∣f(x)?f(y)∣∣2
其中,pdatap_{data}pdata?表示數據分布。?uniform\ell_{\text{uniform}}?uniform?越小,則兩個隨機樣本的距離也就越大,整個樣本的嵌入向量就會越分散。因此,?uniform\ell_{\text{uniform}}?uniform?越小越好。
三、無監督SimCSE
1. 方法
給定一個句子集合{xi}i=1m\{x_i\}_{i=1}^m{xi?}i=1m?,并且令xi+=xix_i^+=x_ixi+?=xi?。使用獨立的dropout作為掩碼來進一步獲得增強的正樣本對。由于在標準的Transformer訓練過程中,會有多個dropout掩碼。因此,樣本的嵌入向量生成表示為hiz=fθ(xi,z)\textbf{h}_i^z=f_\theta(x_i,z)hiz?=fθ?(xi?,z),其中zzz是隨機的dropout掩碼。
SimCSE\text{SimCSE}SimCSE通過將相同的樣本輸入的編碼器,并應用不同的dropout掩碼z,z′z,z'z,z′,從而獲得相同樣本的不同增強樣本。最終的對比損失函數為
?i=?logesim(hizi,hizi′)/τ∑j=1Nesim(hizi,hizj′)/τ\ell_i=-\text{log}\frac{e^{sim(\textbf{h}_i^{z_i},\textbf{h}_i^{z_i'})/\tau}} {\sum_{j=1}^N e^{sim(\textbf{h}_i^{z_i},\textbf{h}_i^{z_j'})/\tau}} ?i?=?log∑j=1N?esim(hizi??,hizj′??)/τesim(hizi??,hizi′??)/τ?
其中,NNN是隨機采樣batch的大小。
2. 不同數據增強方式的對比
dropout可以看做是數據增強的最小形式。
我們在STS-B\text{STS-B}STS-B數據集上比較了的dropout數據增強與常見數據增強技術。在這些實驗中,語料是從Wikipedia\text{Wikipedia}Wikipedia中抽取的,且令N=512N=512N=512且m=106m=10^6m=106。在表2中可以看到,對比了常見的數據增強技術,例如:crop、word deletion和replacement等。這些數據增強技術的應用可以看著是h=fθ(g(x),z)\textbf{h}=f_\theta(g(x),z)h=fθ?(g(x),z),其中ggg是一個在xxx上的離散數據增強操作。
我們的實驗發現,即使僅刪除一個單詞,也是對方法性能有顯著影響的。沒有任何一種離散數據增強方式由于dropout噪音。
3. dropout進一步實驗
這部分的實驗如表4所示。
- 為了進一步研究dropout,論文嘗試了不同dropout的比例,并發現默認的dropout比率p=0.1p=0.1p=0.1是效果最好的。
- 在兩個極端情況下:p=0p=0p=0(沒有進行dropout增強)和Fixed?0.1\text{Fixed 0.1}Fixed?0.1(兩個樣本使用相同的dropout),性能會顯著下降且結果相似。
圖2中,分別比較了p=0p=0p=0和Fixed?0.1\text{Fixed 0.1}Fixed?0.1兩種極端情況,及刪除一個單詞方式的數據增強與SimCSE\text{SimCSE}SimCSE在alignment和uniformity上的表現。
- 可以發現所有的方法都能改善uniformity;
- 但是p=0p=0p=0和Fixed?0.1\text{Fixed 0.1}Fixed?0.1情況下的alignment會急劇下降,但是標準的SimCSE\text{SimCSE}SimCSE的alignment會非常的平穩;
- “刪除一個單詞”的方式能夠改善alignment,但是在uniformity上的效果沒有SimCSE\text{SimCSE}SimCSE好;
4. 其他實驗設置的比較
論文比較了next-sentence\text{next-sentence}next-sentence損失函數和對比損失函數,并比較了單個編碼器和2個獨立編碼器的效果。實驗結果如表3所示。
實驗表明,對比損失函數顯著優于next-sentences\text{next-sentences}next-sentences,且單個編碼器顯著優于2個獨立的編碼器
四、有監督SimCSE
有監督SimCSE\text{SimCSE}SimCSE主要的目標是利用有監督數據集來改善句嵌入向量表示。由于之前的研究已經證明了有監督自然語言推斷(NLI)數據集對于學習句子嵌入向量非常有效。因此,在有監督SimCSE\text{SimCSE}SimCSE中我們同樣使用NLI\text{NLI}NLI數據集來構造對比樣本。
- NLI\text{NLI}NLI數據集中包含三種句子度關系,分別為:包含(entailment)、中立(neutral)、矛盾(contradiction)。
1. 探索有監督數據集
論文在各種句子對數據集上進行了實驗,實驗結果有:
- 所有的有監督句子對數據集都好于無監督的方法,也就是有監督是有效的;
- 在所有數據集中,使用NLI(SNLI+MNLI)\text{NLI(SNLI+MNLI)}NLI(SNLI+MNLI)數據集中的entailment構造正樣本對效果最好;
- 初步分析認為NLI\text{NLI}NLI效果好的原因主要是,entailment樣本對的詞覆蓋顯著低于其他數據集;
2. 將contradiction樣本對作為“難”負樣本對
為了進一步利用NLI\text{NLI}NLI數據集,論文將contradiction樣本對作為更加難的負樣本對。
在NLI\text{NLI}NLI數據集中,通常會先給定一個前提(premise),然后標注者需要寫出三個句子,分別是:一個正確的句子(entailment)、一個可能正確的句子(neutral)和一個絕對錯誤的句子(contradiction)。因此,對于每個前提(premise),都對應一個entailment句子和一個contradiction句子。
因此,在有監督SimCSE\text{SimCSE}SimCSE中,將(xi,xi+)(x_i,x_i^+)(xi?,xi+?)擴展至(xi,xi+,xi?)(x_i,x_i^+,x_i^-)(xi?,xi+?,xi??)。其中,xix_ixi?是前提(premise),xi+x_i^+xi+?和xi?x_i^-xi??是entailment和contradiction。最終的訓練目標?i\ell_i?i?定義為
?logesim(hi,hi+)/τ∑j=1N(esim(hi,hj+)/τ+esim(hi,hj?)/τ)-\text{log}\frac {e^{sim(\textbf{h}_i,\textbf{h}_i^+)/\tau}} {\sum_{j=1}^N(e^{sim(\textbf{h}_i,\textbf{h}_j^+)/\tau}+e^{sim(\textbf{h}_i,\textbf{h}_j^-)/\tau})} ?log∑j=1N?(esim(hi?,hj+?)/τ+esim(hi?,hj??)/τ)esim(hi?,hi+?)/τ?
實驗結果表明,添加這樣的“難”負樣本對能夠進一步改善模型效果,這也是我們最終的有監督SimCSE\text{SimCSE}SimCSE。
五、與Anisotropy的關系
1. 各向異性問題(anisotropy)
最近的研究表明語言模型的表示具有各向異性(anisotropy)的問題,例如:學習到的嵌入向量出現在向量空間中的一個狹窄圓錐中,這極大的限制了表達能力。Gao等人稱這個問題為“表示退化”問題。此外,Wang等人的研究顯示詞嵌入矩陣的奇異值會急劇衰減。簡單來說,除了少數奇異值外,其他奇異值都接近0。
2. 不同的解決方案
- 一種解決方案是:后處理,通過消除主成分、或者將表示空間映射至各向同性(isotropic)分別中。
- 另一種方案是,在訓練過程中添加正則約束。
3. 證明對比學習能夠解決各向異性問題
對比學習損失函數可以被近似為
?1τE(x,x+)~ppos[f(x)?f(x+)]+Ex~pdata[logEx?~pdata[ef(x)?f(x?)/τ]](1)-\frac{1}{\tau}\mathop{\mathbb{E}}_{(x,x^+)\sim p_{pos}}\Big[f(x)^\top f(x^+)\Big] + \mathop{\mathbb{E}}_{x\sim p_{data}}\Big[log \mathop{\mathbb{E}}_{x^-\sim p_{data}}[e^{f(x)^\top f(x^-)/\tau}]\Big] \tag{1} ?τ1?E(x,x+)~ppos??[f(x)?f(x+)]+Ex~pdata??[logEx?~pdata??[ef(x)?f(x?)/τ]](1)
其中,公式(1)(1)(1)的第一項用于保證正樣本對的相似,而第二項則是將負樣本對的距離拉開。
當pdatap_{data}pdata?在有限樣本集{xi}i=1m\{x_i\}_{i=1}^m{xi?}i=1m?上均勻分布且hi=f(xi)\textbf{h}_i=f(x_i)hi?=f(xi?),我們可以利用Jensen不等式來推斷公式(1)(1)(1)中的第二項
Ex~pdata[logEx?~pdata[ef(x)?f(x?)/τ]]=1m∑i=1mlog(1m∑j=1mehi?hj/τ)≥1τm2∑i=1m∑j=1mhi?hj\begin{aligned} &\mathop{\mathbb{E}}_{x\sim p_{data}}\Big[log \mathop{\mathbb{E}}_{x^-\sim p_{data}}[e^{f(x)^\top f(x^-)/\tau}]\Big] \\ &=\frac{1}{m}\sum_{i=1}^m log\Big(\frac{1}{m}\sum_{j=1}^m e^{\textbf{h}_i^\top \textbf{h}_j/\tau}\Big) \\ &\geq \frac{1}{\tau m^2}\sum_{i=1}^m\sum_{j=1}^m\textbf{h}_i^\top \textbf{h}_j \end{aligned} ?Ex~pdata??[logEx?~pdata??[ef(x)?f(x?)/τ]]=m1?i=1∑m?log(m1?j=1∑m?ehi??hj?/τ)≥τm21?i=1∑m?j=1∑m?hi??hj??
若令W\textbf{W}W表示樣本集{xi}i=1m\{x_i\}_{i=1}^m{xi?}i=1m?的句嵌入矩陣(W\textbf{W}W的第i行是hi\textbf{h}_ihi?)。那么最小化公式(1)(1)(1)的第二項,本質上等于由于WW?\text{WW}^\topWW?中所有元素之和的上界,因為
Sum(WW?)=∑i=1m∑j=1mhi?hj\text{Sum}(\textbf{WW}^\top)=\sum_{i=1}^m\sum_{j=1}^m\textbf{h}_i^\top \textbf{h}_j Sum(WW?)=i=1∑m?j=1∑m?hi??hj?
其中,hi\text{h}_ihi?是標準化的向量,因此WW?\textbf{WW}^\topWW?的所有對角線元素均為1。
由于Gao等人發現WW?\textbf{WW}^\topWW?在絕大多數情況下,所有的元素都是整數。那么根據Merikoski的結論可以得知Sum(WW?)\text{Sum}(\textbf{WW}^\top)Sum(WW?)是WW?\textbf{WW}^\topWW?最大特征值的上界。
因此,可以推導出
- 最小化公式(1)(1)(1)的第二項等價于最小化1τm2∑i=1m∑j=1mhi?hj\frac{1}{\tau m^2}\sum_{i=1}^m\sum_{j=1}^m\textbf{h}_i^\top \textbf{h}_jτm21?∑i=1m?∑j=1m?hi??hj?的上界;
- 等價于最小化Sum(WW?)\text{Sum}(\textbf{WW}^\top)Sum(WW?)的上界;
- 等價于最小化WW?\textbf{WW}^\topWW?的最大特征值上界;
- 也就是減小WW?\text{WW}^\topWW?的最大特征值;
因此,對比損失函數本質上拉平了嵌入空間的奇異值,改善了uniformity。
六、實驗
- 有/無監督SimCSE\text{SimCSE}SimCSE能夠極大的改善句嵌入的效果(句向量相似度代碼句語義相似性);
- 雖然改善了句嵌入,但是句嵌入并不能改善下游的遷移任務;
- 使用[CLS]\text{[CLS]}[CLS]來表示句向量的效果最好;
- 將MLM\text{MLM}MLM作為輔助訓練目標函數,可以改善模型在下游遷移任務上的效果;
總結
以上是生活随笔為你收集整理的【自然语言处理】【对比学习】SimCSE:基于对比学习的句向量表示的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2003 文件服务器权限设置,win20
- 下一篇: 程序分析-对程序依赖图(PDG)的理解