1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        文本匹配利器:從孿生網(wǎng)絡(luò)到Sentence-BERT綜述

        共 3669字,需瀏覽 8分鐘

         ·

        2021-01-28 22:30

        大家好,我是Giant,這是我的第4篇文章。

        文本匹配是自然語言處理領(lǐng)域一個(gè)基礎(chǔ)且重要的方向,一般研究兩段文本之間的關(guān)系。文本相似度、自然語言推理、問答系統(tǒng)、信息檢索都可以看作針對(duì)不同數(shù)據(jù)和場景的文本匹配應(yīng)用。

        本文總結(jié)了文本匹配任務(wù)中的經(jīng)典網(wǎng)絡(luò)Siamse Network,它和近期預(yù)訓(xùn)練語言模型的組合,一些調(diào)優(yōu)技巧以及在線下數(shù)據(jù)集上的效果檢驗(yàn)。

        Siamese 孿生網(wǎng)絡(luò)

        在正式介紹前,我們先來看一個(gè)有趣的故事。

        孿生網(wǎng)絡(luò)的由來

        “Siamese”中的“Siam”是古時(shí)泰國的稱呼,中文譯作暹羅,所以“Siamese”就是指“暹羅”人或“泰國”人?!癝iamese”在英語中同時(shí)表示“孿生”,這又是為什么呢?

        十九世紀(jì),泰國出生了一對(duì)連體嬰兒“恩”和“昌”,當(dāng)時(shí)的醫(yī)學(xué)技術(shù)無法使他們分離出來,于是兩人頑強(qiáng)地生活了一生。

        1829年他們被英國商人發(fā)現(xiàn),進(jìn)入馬戲團(tuán),在全世界各地演出。1839年他們?cè)L問美國北卡羅萊那州成為“玲玲馬戲團(tuán)” 的臺(tái)柱,最后成為美國公民。1843年4月13日跟英國一對(duì)姐妹結(jié)婚,恩生了10個(gè)小孩,昌生了12個(gè)。1874年,兩人因病均于63歲離開了人間。他們的肝至今仍保存在費(fèi)城的馬特博物館內(nèi)。

        從此之后,“暹羅雙胞胎”(Siamese twins)就成了連體人的代名詞,也因?yàn)檫@對(duì)雙胞胎全世界開始重視這項(xiàng)特殊疾病。

        孿生網(wǎng)絡(luò)

        由于結(jié)構(gòu)具有鮮明的對(duì)稱性,就像兩個(gè)孿生兄弟,所以下圖這種神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)被研究人員稱作“Siamese Network”,即孿生網(wǎng)絡(luò)。

        其中最能體現(xiàn)“孿生”的地方,在于網(wǎng)絡(luò)具有相同的編碼器(sentence encoder),即將文本轉(zhuǎn)換為高維向量的部分。網(wǎng)絡(luò)隨后對(duì)兩段文本的特征進(jìn)行交互,最后完成分類/相似預(yù)測。“孿生網(wǎng)絡(luò)”結(jié)構(gòu)簡單,訓(xùn)練穩(wěn)定,是很多文本任務(wù)不錯(cuò)的baseline模型。

        孿生網(wǎng)絡(luò)的具體用途是衡量兩個(gè)輸入文本的相似程度。

        例如,現(xiàn)在我們有文本1和2,首先把它們分別輸入 sentence encoder 進(jìn)行特征提取和編碼,將輸入映射到新的空間得到特征向量u和v;最終通過u、v的拼接組合,經(jīng)過下游網(wǎng)絡(luò)來計(jì)算文本1和2的相似性。

        整個(gè)過程有2個(gè)值得關(guān)注的點(diǎn):

        • 在訓(xùn)練和測試中,模型的編碼器是權(quán)重共享的(“孿生”);編碼器的選擇非常廣泛,傳統(tǒng)的CNN、RNN和Attention、Transformer都可以
        • 得到特征u、v后,可以直接使用cosine距離、歐式距離得到兩個(gè)文本的相似度;不過更通用的做法是,基于u和v構(gòu)建用于匹配關(guān)系的特征向量,然后用額外的模型學(xué)習(xí)通用的文本關(guān)系映射;畢竟我們的場景不一定只是衡量相似度,可能還有問答、蘊(yùn)含等復(fù)雜任務(wù)

        ????????三連體網(wǎng)絡(luò)????????

        基于孿生網(wǎng)絡(luò),還有人提出了 Triplet network 三連體網(wǎng)絡(luò)。顧名思義,輸入由三部分組成,文本1,和1相似的文本2,和1不相似的文本3。

        訓(xùn)練的目標(biāo)非常樸素,期望讓相同類別間的距離盡可能的小,讓不同類別間的距離盡可能的大,即減小類內(nèi)距,增大類間距。

        Sentence-BERT

        自從2018年底Bert等預(yù)訓(xùn)練語言模型橫空出世,NLP屆的游戲規(guī)則某種程度上被大幅更改了。在計(jì)算資源允許的條件下,Bert成為解決很多問題的首選。甚至有時(shí)候拿Bert跑一跑baseline,發(fā)現(xiàn)問題已經(jīng)解決了十之八九。

        但是Bert的缺點(diǎn)也很明顯,1.1億參數(shù)量使得推理速度明顯比CNN等傳統(tǒng)網(wǎng)絡(luò)慢了不止一個(gè)量級(jí),對(duì)資源要求更高,也不適合處理某些任務(wù)。

        例如,從10,000條句子中找到最相似的一對(duì)句子,由于可能的組合眾多,需要完成49,995,000次推理;在一塊現(xiàn)代V100GPU上使用Bert計(jì)算,將消耗65小時(shí)。

        考慮到孿生網(wǎng)絡(luò)的簡潔有效,有沒有可能將它和Bert強(qiáng)強(qiáng)聯(lián)合呢?

        當(dāng)然可以,這正是論文《Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks》的工作,首次提出了Sentence-Bert模型(以下簡稱SBert)。

        SBert在眾多文本匹配工作中(包括語義相似性、推理等)都取得了最優(yōu)結(jié)果。更讓人驚訝的是,前文所述的從10,000條句子尋找最相似pair任務(wù),SBert僅需5秒就能完成!

        基于BERT的文本匹配

        讓我們簡短回顧此前Bert是怎么處理文本匹配任務(wù)的。

        常規(guī)做法是將匹配轉(zhuǎn)換成二分類任務(wù)。輸入的兩個(gè)文本拼接成一個(gè)序列(中間用特殊符號(hào)“SEP”分割),經(jīng)過12層或24層Transformer模塊編碼后,將輸出層的字向量取平均或者取“CLS”位置的特征作為句向量,經(jīng)softmax完成最終分類。

        但是論文作者 Nils Reimers 在實(shí)驗(yàn)中指出,這樣的做法產(chǎn)生的結(jié)果并不理想(至少在處理語義檢索和聚類問題時(shí)是如此),甚至比Glove詞向量取平均的效果還差。

        基于S-BERT的文本匹配

        為了讓Bert更好地利用文本信息,作者們?cè)谡撐闹刑岢隽巳缦碌?strong>SBert模型。是不是非常眼熟?對(duì),這不就是之前見過的孿生網(wǎng)絡(luò)嘛!

        SBert沿用了孿生網(wǎng)絡(luò)的結(jié)構(gòu),文本Encoder部分用同一個(gè)Bert來處理。之后,作者分別實(shí)驗(yàn)了CLS-token和2種池化策略(Avg-Pooling、Mean-Pooling),對(duì)Bert輸出的字向量進(jìn)一步特征提取、壓縮,得到u、v。關(guān)于u、v整合,作者提供了3種策略:

        • 針對(duì)分類任務(wù),將u、v拼接,接入全連接網(wǎng)絡(luò),經(jīng)softmax分類輸出;損失函數(shù)用交叉熵
        • 直接計(jì)算、輸出余弦相似度;訓(xùn)練損失函數(shù)采用均方根誤差
        • 如果輸入的是三元組,論文種也給出了相應(yīng)的損失函數(shù)

        總的來說,SBert直接用Bert的原始權(quán)重初始化,在具體數(shù)據(jù)集上微調(diào),訓(xùn)練過程和傳統(tǒng)Siamse Network差異不大。

        但是這種訓(xùn)練方式能讓Bert更好的捕捉句子之間的關(guān)系,生成更優(yōu)質(zhì)的句向量。在測試階段,SBert直接使用余弦相似度來衡量兩個(gè)句向量之間的相似度,極大提升了推理速度。

        實(shí)驗(yàn)為證

        作者在7個(gè)文本匹配相關(guān)的任務(wù)中做了對(duì)比實(shí)驗(yàn),結(jié)果在其中5個(gè)任務(wù)上,SBert都有更優(yōu)表現(xiàn)。

        作者還做了一些有趣的消融實(shí)驗(yàn)。

        使用NLI和STS為代表的匹配數(shù)據(jù)集,在分類目標(biāo)函數(shù)訓(xùn)練時(shí),作者測試了不同的整合策略,結(jié)果顯示“(u, v, |u-v|)”的組合效果最好。這里面最重要的部分是元素差:(|u - v|)。句向量之間的差異度量了兩個(gè)句子嵌入維度間的距離,確保相似的pair更近,不同的pair更遠(yuǎn)。

        文章最后,作者將SBert和傳統(tǒng)方????法做了對(duì)比。

        SBert的計(jì)算效率要更高。其中的smart-batching是一個(gè)小技巧。先將輸入的文本按長度排序,這樣同一個(gè)mini-batch的文本長度更加統(tǒng)一,padding時(shí)能顯著減少填充的token。

        線下實(shí)測

        我們將SBert模型在天池—新冠疫情相似句對(duì)判定比賽數(shù)據(jù)集上做了測試。經(jīng)數(shù)據(jù)增強(qiáng)后,線下訓(xùn)練集和驗(yàn)證集分別是13,500和800條句子組合。預(yù)訓(xùn)練模型權(quán)重選擇BERT_large。

        最終SBert單模型在驗(yàn)證集上的準(zhǔn)確率是95.7%。直接使用Bert微調(diào)準(zhǔn)確率為95.2%。

        小結(jié)

        本文介紹了文本匹配任務(wù)中常用的孿生網(wǎng)絡(luò),和在此基礎(chǔ)上改進(jìn)而來的Sentence-BERT模型。

        Siamse Network 簡潔的設(shè)計(jì)和平穩(wěn)高效訓(xùn)練非常適合作為文本匹配任務(wù)的baseline模型。SBert則充分利用了孿生網(wǎng)絡(luò)的優(yōu)點(diǎn)和預(yù)訓(xùn)練模型的特征抽取優(yōu)勢,在眾多匹配任務(wù)上取得了最優(yōu)結(jié)果。

        拋開具體任務(wù),SBert 可以幫助我們生成更好的句向量,在一些任務(wù)上可能產(chǎn)生更優(yōu)結(jié)果。在推理階段,SBert直接計(jì)算余弦相似度的方式,大大縮短了預(yù)測時(shí)間,在語義檢索、信息搜索等任務(wù)中預(yù)計(jì)會(huì)有不錯(cuò)表現(xiàn)。同時(shí),得益于生成的高質(zhì)量句嵌入特征,SBert也非常適合做文本聚類、新FAQ發(fā)現(xiàn)等工作。

        推? 薦? 閱? 讀

        參考資料

        [1] Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks:?https://arxiv.org/abs/1908.10084

        [2]?Sentence-BERT pytorch開源:?
        https://github.com/UKPLab/sentence-transformers
        [3] 文本匹配相關(guān)方向打卡點(diǎn)總結(jié):?
        https://mp.weixin.qq.com/s/Nlr-VbbfUahYjMNPhquH4w




        原創(chuàng)不易,有收獲的話請(qǐng)幫忙點(diǎn)擊分享、??????點(diǎn)贊??????、在看吧??

        瀏覽 86
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            天天摸日日操 | 免费看黄色视频网站 | 亚洲AV成人一区二区三区本码 | 亚洲日韩欧洲无码A∨夜夜爽 | 国产在线观看免费麻豆 | 操美女大黑逼 | 高潮91PORN蝌蚪九色 | 喝尿坐脸上h辣文 | 操操操操操操操操操逼 | 精品国产欧美 |