<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          NLP系列之句子向量、語義匹配(三):BERT_avg/BERT_whitening/SBERT/SimCSE—實驗代碼

          共 3329字,需瀏覽 7分鐘

           ·

          2021-09-11 20:15


           作者簡介




          作者:ZHOU-JC (廣州云迪科技有限公司 NLP算法工程師)

          原文:https://zhuanlan.zhihu.com/p/387271169

          轉(zhuǎn)載者:楊夕

          面筋地址:https://github.com/km1994/NLP-Interview-Notes

          個人筆記:https://github.com/km1994/nlp_paper_study


          前言

          上篇主要討論了四種方法的原理,本篇通過中文數(shù)據(jù)集對四種方法的表現(xiàn)進(jìn)行對比。

          項目實驗代碼地址:

          https://github.com/zhoujx4/NLP-Series-sentence-embeddingsgithub.com/zhoujx4/NLP-Series-sentence-embeddings

          Base BERT用的是哈工大科大訊飛聯(lián)合實驗室發(fā)布的6層RoBERTa。

          用于驗證的是STS-B數(shù)據(jù)集(中文版本)的驗證集和測試集,監(jiān)督訓(xùn)練SBERT和SmiCSE用的是SNLI數(shù)據(jù)集(中文版本)。

          數(shù)據(jù)集來源于github.com/pluto-junzen, 是從原英文數(shù)據(jù)集SNLI和STS-B通過翻譯加部分人工修正的方法得到的,感謝開源數(shù)據(jù)集的朋友。

          下方為數(shù)據(jù)示例

          • SNLI數(shù)據(jù)集是三元組的方式,每個樣本為(原句,與原句有蘊(yùn)含關(guān)系的句子,與原句矛盾的句子)

          STS-B數(shù)據(jù)集,句子的相似度分為0~5共六個等級

          評測指標(biāo):斯皮爾曼等級相關(guān)系數(shù)Spearman's rank correlation coefficient

          把句子對分別輸入模型編碼得到embedding對后,計算embedding對的余弦距離。

          由于STS-B數(shù)據(jù)集是把句子對進(jìn)行0~5的打分,所以評測指標(biāo)采用斯皮爾曼等級相關(guān)系數(shù),指標(biāo)介紹可以看這篇博文

          斯皮爾曼等級相關(guān)系數(shù)Spearman's rank correlation coefficient16 贊同 · 1 評論文章

          在python中只需要調(diào)用scipy庫則可計算,

          BERT-avg

          BERT-avg實現(xiàn)了

          • 使用CLS-token最后一層的輸出作為embedding(沒有用BERT做NSP任務(wù)得到的CLS-pooling層)

          • 使用第一層和最后一層的輸出求平均作為embedding


          STS-B(dev)STS-B(test)
          BERT-avg(CLS-token)54.3948.34
          BERT-avg(First-last avg.)40.3538.20

          Bert-Whitening

          把STS-B訓(xùn)練集輸入BERT,用第一層和最后一層的輸出求平均得到句子的embeddings,然后計算得到u和變換矩陣W保存下來。

          預(yù)測時先得到句子的embedding,再用保存好的u和W做變換,還實驗了降維為512和256的版本,效果如下:


          STS-B(dev)STS-B(test)
          BERT-whitening74.7066.98
          BERT-whitening(512)74.9767.04
          BERT-whitening(256)74.1867.21

          BERT-Whitening論文里提到降維到原來的1/3效果是最好的。因為特征值小的方向,噪聲成份多(通常有用信息的方差大,噪聲方差?。?,因此降維不僅能起到節(jié)約存儲空間、提高計算效率的好處,還能降噪。但實驗發(fā)現(xiàn),768、512、256維的效果都差不多,在差不多的情況下,當(dāng)然是取維度小的。

          SBERT

          訓(xùn)練用到SentenceTransformers庫,提供了模型、數(shù)據(jù)集、損失函數(shù)、評價器,訓(xùn)練,預(yù)測等接口。庫十分豐富,其中損失函數(shù)就有如下這么多種,遠(yuǎn)遠(yuǎn)不止SBERT論文里提到的SoftmaxLoss、MSELoss、TripletLoss。

          損失函數(shù)的選擇需要根據(jù)自己手頭訓(xùn)練集的特性。但無論采用哪種,預(yù)測的時候只用到BERT的輸出得到句子的embeddings,求它們的余弦距離作為相似度。

          • SBERT(SNLI) :用SNLI訓(xùn)練集進(jìn)行監(jiān)督訓(xùn)練SBERT,因為SNLI是三元組(anchor, positive, negative)的形式,所以這里損失函數(shù)為TripleLoss

          • SBERT(STS-B):用STS-B訓(xùn)練集進(jìn)行監(jiān)督訓(xùn)練SBERT,因為把STS-B標(biāo)簽的0·5映射為相似度0, 0.2, 0.4, 0.6, 0.8, 1。損失函數(shù)采用與評價指標(biāo)一樣的CosineSimilarLoss

          學(xué)習(xí)率都用庫默認(rèn)的默認(rèn)參數(shù),SBERT(SNLI) 訓(xùn)練2個epoch,SBERT(STS-B)訓(xùn)練8個epoch,驗證集都使用STS-B(dev),評價指標(biāo)就為Spearman's rank correlation coefficient,庫提供了很好的封裝,保存在驗證集上分?jǐn)?shù)最好的模型,然后對測試集進(jìn)行計算。


          STS-B(dev)STS-B(test)
          SBERT(SNLI)72.9768.78
          SBERT(STS-B)80.3974.21

          SmiCSE

          比較兩種方法

          • SmiCSE(unsupervised):用STS-B訓(xùn)練集無監(jiān)督訓(xùn)練,訓(xùn)練細(xì)節(jié)為attention層和hidden層的dropout都設(shè)為0.3,batch_size=128,epoch=8,學(xué)習(xí)率=4e-5,每20個step在STS-B(dev)上計算Spearman's rank correlation coefficient,保存最佳的模型,用最佳模型在STS-B(test)計算分?jǐn)?shù)

          • SmiCSE(supervised):用SNLI訓(xùn)練集監(jiān)督訓(xùn)練,訓(xùn)練細(xì)節(jié)為batch_size=64,epoch=2,學(xué)習(xí)率=4e-5,每200個step在STS-B(dev)上計算Spearman's rank correlation coefficient,保存最佳的模型,設(shè)置了早停策略,用最佳模型在STS-B(test)計算分?jǐn)?shù)


          STS-B(dev)STS-B(test)
          SmiCSE(unsupervised)63.1260.57
          SmiCSE(supervised)75.4273.61

          總結(jié)

          這里還是從實際可能遇到的場景出發(fā),假如現(xiàn)在要做一個相似度檢索的場景,

          • 場景1:沒有任務(wù)相關(guān)的labeled數(shù)據(jù),只能用unlabeled數(shù)據(jù)做無監(jiān)督訓(xùn)練,或者從其它相似的labeled數(shù)據(jù)集上進(jìn)行監(jiān)督訓(xùn)練。例如目前有SNLI這個已標(biāo)注好的數(shù)據(jù)集,目標(biāo)場景是STS-B數(shù)據(jù)集。


          STS-B(dev)STS-B(test)
          BERT-avg(CLS-token)54.3948.34
          BERT-avg(First-last avg.)40.3538.20
          BERT-whitening74.7066.98
          BERT-whitening(512)74.9767.04
          BERT-whitening(256)74.1867.21
          SBERT(SNLI)72.9768.78
          SmiCSE(unsupervised)63.1260.57
          SmiCSE(supervised)75.4273.61
          • 場景2:有任務(wù)相關(guān)的labeled數(shù)據(jù)集,那當(dāng)然是用任務(wù)相關(guān)的數(shù)據(jù)進(jìn)行監(jiān)督訓(xùn)練好,或者先在相關(guān)數(shù)據(jù)集上做監(jiān)督訓(xùn)練,再在任務(wù)相關(guān)的數(shù)據(jù)集上繼續(xù)做監(jiān)督訓(xùn)練。


          STS-B(dev)STS-B(test)
          SBERT(STS-B)80.3974.21

          總的來說,SmiCSE(supervised)和SBERT(STS-B) 效果是較好的。不過做具體的業(yè)務(wù)時,還需要多根據(jù)業(yè)務(wù)的數(shù)據(jù)特點(diǎn),選擇最優(yōu)的方法,并根據(jù)實驗科學(xué)地選擇最佳的超參。

          參考資料:

          1. zhengyanzhao1997/NLP-model

          2. autoliuweijie/BERT-whitening-pytorch

          3. 中文任務(wù)還是SOTA嗎?我們給SimCSE補(bǔ)充了一些實驗 - 科學(xué)空間|Scientific Spaces

          瀏覽 153
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  台湾精品一区二区三区四区 | 无套暴操 | 亚洲成人三区 | 操的好爽视频 | 欧美性爱视频简体中文 |