文献阅读:SimCSE:Simple Contrastive Learning of Sentence Embeddings
- 文獻閱讀:SimCSE:Simple Contrastive Learning of Sentence Embeddings
- 1. 文獻內(nèi)容簡介
- 2. 主要方法介紹
- 3. 主要實驗介紹
- 1. STS Experiment
- 2. Downsteam Experiment
- 4. 討論
- 1. loss function考察
- 2. 其他正例構(gòu)造方式考察
- 3. 消解實驗
- 5. 結(jié)論 & 思考
文獻鏈接:https://arxiv.org/abs/2104.08821v2
1. 文獻內(nèi)容簡介
這篇文章將對比學習引入到了sentence embedding的學習過程當中。
主要思路感覺還是接著之前的SentenceBert一脈相承的(這部分內(nèi)容我之前也寫過一個小博客《文獻閱讀:Sentence-BERT:Sentence Embeddings using Siamese BERT-Networks》進行過介紹),主體還是使用的Bert或者Roberta模型,但是不同于sentence bert的截斷遷移,這里采用的方式是通過引入對比學習來直接對sentence embedding進行學習,從而達到一個更好的效果。
2. 主要方法介紹
如前所述,這里的核心方法在于引入度量學習從而可以直接對sentence embedding進行學習。
不過這樣的方法帶來的問題在于說數(shù)據(jù)的準備,對比學習需要在數(shù)據(jù)上準備好正負例,但是這個缺乏直接的訓練數(shù)據(jù)。
比較標準的范式就是自己去通過一些簡單的方法來構(gòu)造一些偽正負例,比如說刪詞、加詞、換序、雙向翻譯這類比較常規(guī)的操作,但是這篇文章里面提出了一種新型的正負例構(gòu)造的方式,也就是標題中所說的SimCSE方法。
其思路異常的簡單,就是同一條數(shù)據(jù)過兩次模型,由于dropout的隨機性導致兩個計算結(jié)果會有一定的不一致,然后將這兩個結(jié)果作為正例對,而batch當中的其他所有的結(jié)果作為負例對,從而就完成了正負例的構(gòu)建,然后就可以進行計算了。
3. 主要實驗介紹
1. STS Experiment
這部分實驗主要就是考察sentence embedding的直接表現(xiàn)。考察方式和之前幾篇文獻的方法一致,就是考察一下STS數(shù)據(jù)集在spear correlation的性能表現(xiàn),得到結(jié)果如下:
可以看到,基本就是碾壓局,而且提升的點還挺多的。
2. Downsteam Experiment
另一方面,SimCSE finetune之后得到的模型在下游分類任務當中的性能表達也不錯。
該文獻同樣在下游一些分類任務當中的結(jié)果如下:
可以看到,即使放到下游任務當中,SimCSE依然可以得到很好的性能表現(xiàn)。
4. 討論
但是,雖然上述實驗結(jié)果顯示SimCSE方法在結(jié)果上展現(xiàn)了很高的優(yōu)越性,但是其何以如此優(yōu)秀依然是一個值得討論的問題。
對此,文獻中也進行了一定的考察。
1. loss function考察
首先,考察文獻中對于loss function的定義,其具體的表達式如下:
L=?logesim(hizi,hizi′)/τ∑j=1Nesim(hizi,hjzj′)/τL = - log \frac{e^{sim(h_i^{z_i}, h_{i}^{z_i'})/\tau}}{\sum_{j=1}^N e^{sim(h_i^{z_i}, h_{j}^{z_j'})/\tau}}L=?log∑j=1N?esim(hizi??,hjzj′??)/τesim(hizi??,hizi′??)/τ?
這個loss function的定義事實上就我所知算是現(xiàn)階段對比學習比較慣用的一個定義了,文獻中對于這個公式的有效性方面進行了一定的討論。
具體而言,上述loss函數(shù)可以展開為:
L=?1τE[f(x)T?f(x+)]+E[logE[ef(xT?f(x?)/τ)]]L = -\frac{1}{\tau} E[f(x)^T \cdot f(x^+)] + E[log E[e^{f(x^T \cdot f(x^-)/\tau)}]]L=?τ1?E[f(x)T?f(x+)]+E[logE[ef(xT?f(x?)/τ)]]
其中,前者可以用于保證alignment,即正例之間的相似性,而后者則可以用于保證uniformity,即正例與負例之間的相異性以及在整個表示空間當中embedding的分布均勻性。
而實際在結(jié)果的表現(xiàn)當中,文獻中也給出了不同方法在alignment以及uniformity的性能表達如下:
可以看到,SimCSE在alignment以及uniformity方面是比較均衡的。
2. 其他正例構(gòu)造方式考察
但是,如前所述,這個loss函數(shù)的定義事實上算是對比學習的常用定義了,并不算什么新穎的東西,該文獻最新穎的技術(shù)點還是在于兩次dropout的正例對的定義方式,但是,這樣的構(gòu)造方式是否真的較之其他的實驗方法會更有效呢?
文中同樣給出了不同的正例構(gòu)造方式下模型在STS數(shù)據(jù)集下的性能表達,具體如下表所示:
可以看到,較之其他的整理構(gòu)造方式,SimCSE同樣具有更好的性能表達。
3. 消解實驗
最后,文獻還做了一些消解實驗來看一下一些基礎(chǔ)的因子對實驗結(jié)果的影響,具體如下兩表所示:
不過整體而言,上述內(nèi)容顯示batch size、MLM以及sentence embedding的選擇方面都會對結(jié)果產(chǎn)生一定的影響,但是影響事實上都不是特別顯著,唯一值得一提的可能就是batch size,其大小選擇需要保持適中,不要太大也不要太小。
5. 結(jié)論 & 思考
這篇文獻對我而言最大的意義在于提供了一種新型的表征學習的方式,以及在缺乏優(yōu)質(zhì)的標注數(shù)據(jù)的情況下進行自監(jiān)督學習的方式,在如今數(shù)據(jù)為王的時代下,能夠有效的擴展并利用好數(shù)據(jù)無疑有著巨大的意義。
因此,我也是在推薦場景下借鑒上文的思路進行了一些實驗,值得一提的是,在看文獻的時候事實上我就存在著一個疑問,即我不奇怪SimCSE能夠?qū)W到很好的uniformity,但是對于alignment的學習我始終抱有一定的疑惑,因為事實上他的正例對是通過dropout進行構(gòu)建的,本質(zhì)而言都是他自己,僅在參數(shù)上進行了生成靠近,但是這無法學習到跨輸入的相似性,對于兩個相似的句子,只能通過全局的loss最小化的方式進行間接的學習。
因此,我事實上對于上文能夠在alignment方面獲取較好的效果是比較驚訝的,實際進行實驗之后發(fā)現(xiàn),如果直接從0開始訓練,上文的方式在alignment方面確實效果不佳,盡在uniformity方面獲得了較好的性能表達,但是,如果基于已經(jīng)pretrain之后的模型在進行finetune,上述問題看起來似乎是可以解決的,至少在我這邊的實驗結(jié)果,看起來無論是本身的embedding表達還是在下游的recall以及ranker模型當中,都超越了之前的baseline,似乎還是可以的。
總結(jié)
以上是生活随笔為你收集整理的文献阅读:SimCSE:Simple Contrastive Learning of Sentence Embeddings的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vs2013 应用程序无法正常启动
- 下一篇: Filament 渲染引擎剖析 之 Fr