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