最近看了一篇最新的Sentence Embedding論文,今年4月份的,丹琦大神發(fā)表的《Simple Contrastive Learning of Sentence Embeddings》, 簡稱就是SimCSE,直譯過來就是 基于簡單對比學(xué)習(xí)句子嵌入。和沒有對比學(xué)習(xí)的Bert相比,個人認(rèn)為最大的區(qū)別就是:
- 考慮到了拉大當(dāng)前樣本和不相關(guān)樣本的距離,uniformity。 而原始的Bert僅僅考慮了相似樣本越相似越好,也就是Alignment。
整篇文章的關(guān)鍵詞有兩個,simple 和 Contrastive Learning。接下里,我們分別來看下,如何簡單,又如何對比學(xué)習(xí)。
Contrastive Leaning
釋義
對比學(xué)習(xí),顧名思義,就是兩個事物之間作比對,山羊和綿羊之間相似度高。 山羊和飛機之間相似度低。而其思想就是,讓相似度更加拉近,不相似的之間距離更加遠。有點類似于聚類的思想,類的內(nèi)部距離越小越好,類的外部距離越大越好。其損失函數(shù)的設(shè)計也吻合了上面思想:

假設(shè)我們數(shù)據(jù)集中有兩個相似樣本,xi+和xi, 那么他們的輸出為hi+和hi, 他們應(yīng)該是相似的,越小越好,距離越近,即分子越小越好。
而分母則是,xi和數(shù)據(jù)集中其他的樣本的距離,不相識的樣本,越大越好,即分母越大越好。
總起來說,就是這個損失越小,越能達到對比學(xué)習(xí)的思想。
評價指標(biāo)
引入兩個指標(biāo)分別刻畫對比學(xué)習(xí)的兩個目標(biāo):
-
Alignment: 代表相似樣本之間距離更近。
其公式為:
公式
所有的樣本和自己的相似樣本做差平方,越小越相似。在下面圖上更直觀:
image.png
假設(shè)x和y是相似樣本,那么輸出的向量f(x)和f(y) 越近越好,最好到了一個點上。 -
uniformity
uniformity是從另一個角度來考慮問題,不相關(guān)的樣本越遠越好。
其公式為:
公式
這個公司可以近似看做熵, 假設(shè)x和y是不相似樣本,那么輸出的向量f(x)和f(y) 越遠,uniformity越小,最好不相關(guān)都滾遠點。
下面圖上更直觀:

每一家都住在這個圖上,家庭內(nèi)部都住著相似樣本,家之外都不相似,彼此離得越遠越好,也許最理想的境界就是 每一家彼此都離的差不多遠,比較平均的住在這個球上,這樣整體的平均距離才能達到最大,這也就是熵的含義。 因為均勻分布信息熵最高,分布越均勻則保留的信息越多.
SimCSE
原理和損失函數(shù)都有了,接下來是如何構(gòu)造正負例了。 在這文章中,分為兩種情況,分別取構(gòu)建自己的正負例。
Unsupervised SimCSE

實線箭頭代表正例,虛線代表負例。
- 正例構(gòu)造: 給定輸入,用Bert Encoder兩次得到的兩個向量和作為正例對。
由于Bert本身就有隨機DropOut 功能,所以同一句話 走兩次Bert,得到的兩個向量不同,但是是相似的。因為原樣本和生成的正樣本的語義是完全一致的,只是生成的embedding不同而已,可以看做Bert Encoder過程中,對數(shù)據(jù)做了一個小增強。 - 負例構(gòu)造:使用in-batch negatives的方式,即隨機采樣一個batch中另一個輸入作為的負例。說白了就是batch中其他的樣本就是負例。
-
損失如下:
image.png
而且這種dropoutmask 比數(shù)據(jù)增強也強很多,文章中實驗指標(biāo)如下:

為什么會強這么多呢?這是個好問題
可能是,增強嘛,無非對輸入的原始詞做改變,無論是刪除,替換,回譯等等吧,畢竟是源頭上,離最后的輸出太遠了。而 Dropout基本上是最后的階段,干掉一些神經(jīng)元,可能效果更直接一些。
Supervised SimCSE

正例就是人工標(biāo)注的相關(guān)的,負例就是batch中其他的負樣本。
損失函數(shù):

如下圖:

Two dogs are running. 和 There are animals outdoors. 是人工標(biāo)注的相關(guān)的兩句話,所以是正例,用實線連接的。
其他的都是負例,用虛線連接的。同一個batch的中的。
總結(jié)
整篇論文,我覺的兩個亮點:
1.考慮到了拉大當(dāng)前樣本和不相關(guān)樣本的距離,uniformity。 而原始的Bert僅僅考慮了相似樣本越相似越好,不會考慮不同的樣本間的距離增大,也就是Alignment。
- Dropout在Encoder內(nèi)部干預(yù),要比源頭增強更好,更直接。



