就知道调bert,都不知道加个对比学习吗?
說到句向量,大家除了第一反應是用bert的CLS作為句向量,還有就是用word2vec學到每個詞的向量,然后把句子中所有的詞向量做pooling作為句子的向量。有篇論文SimCSE提到可以引入對比學習。
先回顧下對比學習,對比學習的目標無非就是讓相似的數據點離的更近,疏遠不相關的。假設有一系列pair對:
Xi和Xi+是語意相關的,然后可以使用in-batch內負樣本配合交叉熵損失。整個學習目標可以用下式表達:
T控制溫度,sim是cos相似度,h是bert或者RoBERTa輸出的句向量。在對比學習最重要的就是如何構建(Xi,Xi+)對,在圖像領域就是各種裁剪,旋轉等操作。NLP中就很難有這種操作。
無監督SimCSE
取一個集合的句子{xi}i=1~m,讓xi+= xi。兩個一樣的正例,怎么能work? loss都是0了。重點就是用獨立采樣的dropout mask。標準的bert中,dropout的mask都是在全連接層上的。現在我們簡單的把同樣的輸入放到encoder兩次,通過兩種不同的dropout masks z和z'(transformer中標準的dropout mask),然后得到兩個embeddings,訓練目標就變成了下式:
無監督SimCSE和其他方法對比,效果也是最好的:
有監督的SimCSE
充分利用NLI(自然語言推理)數據集中的相互沖突的句子作為強負例。在NLI數據集,給定一個前提,注釋者需要手動編寫一個絕對正確(蘊涵)、一個可能正確(中立)和一個絕對錯誤(矛盾)的句子。所以樣本從(Xi,Xi+)擴展成了(Xi,Xi+,Xi-),訓練目標變成了下式:
從結果上看,可以顯著提升效果。論文還嘗試了混合unsupervised SimCSE,發現沒有任何幫助。使用雙重encoder的框架也會降低效果。
實驗
論文在STS任務比較了無監督和有監督SimCSE和之前句向量的方法,結果如下圖所示:
參考文獻
就知道調bert,都不知道加個對比學習嗎?
總結
以上是生活随笔為你收集整理的就知道调bert,都不知道加个对比学习吗?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AI圈最新深度学习量化算法!
- 下一篇: 双塔模型没效果了?请加大加粗!