SimBERTv2来了!融合检索和生成的RoFormer-Sim模型
?PaperWeekly 原創(chuàng) ·?作者|蘇劍林
單位|追一科技
研究方向|NLP、神經(jīng)網(wǎng)絡
去年我們放出了 SimBERT [1] 模型,它算是我們開源的比較成功的模型之一,獲得了不少讀者的認可。簡單來說,SimBERT 是一個融生成和檢索于一體的模型,可以用來作為句向量的一個比較高的 baseline,也可以用來實現(xiàn)相似問句的自動生成,可以作為輔助數(shù)據(jù)擴增工具使用,這一功能是開創(chuàng)性的。
近段時間,我們以 RoFormer 為基礎模型,對 SimBERT 相關技術進一步整合和優(yōu)化,最終發(fā)布了升級版的 RoFormer-Sim 模型。
簡介
RoFormer-Sim 是 SimBERT 的升級版,我們也可以通俗地稱之為 “SimBERTv2”,而 SimBERT 則默認是指舊版。從外部看,除了基礎架構換成了 RoFormer 外,RoFormer-Sim 跟 SimBERT 沒什么明顯差別,事實上它們主要的區(qū)別在于訓練的細節(jié)上,我們可以用兩個公式進行對比:
除此之外,RoFormer-Sim 用到了更多的訓練數(shù)據(jù),并且拓展到了一般句式,也就是說,不同于 SimBERT 僅僅局限于疑問句,RoFormer-Sim 可以用來做一般句子的相似句生成,適用場景更大。其他訓練細節(jié)還包括 RoFormer-Sim 用了更大的 batch_size 和 maxlen 等,這些在后面我們都會進一步介紹。
開源地址:
https://github.com/ZhuiyiTechnology/roformer-sim
語料
SimBERT 和 RoFormer-Sim 的關鍵之處,都是在于訓練語料的構建。RoFormer-Sim 的訓練語料包括兩部分:1)疑問類型相似句;2)通用類型相似句。對于疑問類相似句,我們還是像 SimBERT 一樣,通過收集百度知道的相似問句,然后通過規(guī)則進一步清洗,這部分對我們來說已經(jīng)很成熟了;對于通用類相似句,我們沒有現(xiàn)成的地方可以搜集,于是我們提出了兩種方案,一定程度上可以無監(jiān)督地構建(偽)相似句對。
第一個方案是基于“同一個問題的答案是相似的”思想,假如我們有現(xiàn)成的問答語料,該語料對于同一個問題有多個答案,那么我們可以將每個答案分句,然后用一個現(xiàn)成的相似度函數(shù)來比較答案之間的相似度,挑出相似度超過某個閾值的句對作為相似句對使用;
第二個方案則是基于“同一篇章的句子是相似的”思想,它更加簡單直接一點,就是將每個篇章分句,然后用一個現(xiàn)成的相似度函數(shù)兩兩計算相似度,挑出相似度超過某個閾值的句對作為相似句對使用,顯然該方案的合理性更弱,所以它的閾值也更高。
這里涉及到一個“現(xiàn)成的相似度函數(shù)”,我們是直接使用 Jaccard 相似度的一個變體,換言之只需要一個規(guī)則的、字符級別的相似度就好了,語義上的關聯(lián),則通過篇章內(nèi)部的關聯(lián)以及預訓練模型本身的泛化能力來獲得。
通過第一個方案,我們從幾個閱讀理解數(shù)據(jù)集中構建了約 450 萬個(偽)相似句對;通過第二個方案,我們從 30 多 G 的平行預料中構建了約 470 萬個(偽)相似句對;而爬取的問句則達到了約 3000 萬個相似句組(一組可以構成多對)。從這個角度看來,問句的數(shù)目是遠超于一般句式的,所以我們按照 1:1 的方式從中采樣,使得每種句式的樣本都均衡。
生成
RoFormer-Sim 的訓練方式跟 SimBERT 基本一樣,如下圖所示。稍微不同的是,為了增強模型的生成能力,在構造訓練語料的時候,我們還隨機地將輸入句子的部分 token 替換為[MASK],這種預訓練方法首先由 BART 提出。而我們跟 BART 的區(qū)別在于:BART 是“輸入帶噪聲的句子,輸出原句子”,我們是“輸入帶噪聲的句子,輸出原句子的一個相似句”,理論上我們的任務還更難。
▲ SimBERT訓練方式示意圖
生成效果沒什么特別好的評測指標,我們直接目測一些例子就好:
gen_synonyms(u'廣州和深圳哪個好?') ['深圳和廣州哪個好?','廣州和深圳哪個好','廣州和深圳哪個更好?','深圳和廣州哪個更好?','深圳和廣州,那個更好?','深圳和廣州哪個好一些呢?','深圳好還是廣州好?','廣州和深圳哪個地方好點?','廣州好還是深圳好?','廣州和深圳哪個好一點','廣州和深圳哪個發(fā)展好?','深圳好還是廣州好','深圳和廣州哪個城市更好些','深圳比廣州好嗎?','到底深圳和廣州哪個好?為什么呢?','深圳究竟好還是廣州好','一般是深圳好還是廣州好','廣州和深圳那個發(fā)展好點','好一點的深圳和廣州那邊好?','深圳比廣州好在哪里?' ]gen_synonyms(u'科學技術是第一生產(chǎn)力。') ['科學技術是第一生產(chǎn)力!','科學技術是第一生產(chǎn)力','一、科學技術是第一生產(chǎn)力。','一是科學技術是第一生產(chǎn)力。','第一,科學技術是第一生產(chǎn)力。','第一生產(chǎn)力是科學技術。','因為科學技術是第一生產(chǎn)力。','科學技術是第一生產(chǎn)力知。','也即科學技術是第一生產(chǎn)力。','科學技術是第一生產(chǎn)力嗎','科技是第一生產(chǎn)力。','因此,科學技術是第一生產(chǎn)力。','其次,科學技術是第一生產(chǎn)力。','科學技術才是第一生產(chǎn)力。','科學技術是第一生產(chǎn)力嗎?','第二,科學技術是第一生產(chǎn)力。','所以說科學技術是第一生產(chǎn)力。','科學技術確實是第一生產(chǎn)力。','科學技術還是第一生產(chǎn)力','科學技術是第一生產(chǎn)力對嗎?' ]總的來說,初步實現(xiàn)了任意句式的相似擴增,但問句的擴增效果優(yōu)于一般句型,這是因為訓練語料中問句的質(zhì)量就明顯高于一般句型。由于進行了仿 BART 式訓練,所以除了直接進行相似句生成外,我們還可以自行把某些部分 mask 掉,讓模型自行發(fā)散擴充,比如:
gen_synonyms(u'科學技術是第一生產(chǎn)力。',?mask_idxs=[6,?7])??#?mask掉“第一” ["科學技術是第一生產(chǎn)力","2、科學技術是第一生產(chǎn)力。","科學技術是第一生產(chǎn)力,也是第二生產(chǎn)力。","科學技術是第一生產(chǎn)力,科學發(fā)展是第二生產(chǎn)力。","9、科學技術是第一生產(chǎn)力。","第一,科學技術是一種生產(chǎn)力。","科學技術是生產(chǎn)力。","科學技術是第二生產(chǎn)力。","科學技術是第一生產(chǎn)力”現(xiàn)在提出來的。","一、科學技術是一種生產(chǎn)力。","科學技術是第一生產(chǎn)力是什么意思","科學技術是一種主要生產(chǎn)力。","一:科學技術是最高生產(chǎn)力。","指科學技術不是第一生產(chǎn)力。","科學技術是第二生產(chǎn)力,第一生產(chǎn)力又是第二生產(chǎn)力。","二、科學技術是一種生產(chǎn)力。","世界上第一種生產(chǎn)力是科學技術。","科學技術是社會主義生產(chǎn)力之一。","第二,科學技術也是第二生產(chǎn)力。","科技是一切生產(chǎn)力。" ]更多玩法,請大家自行挖掘了。
檢索
增加一般句式的語料、引入仿 BART 式訓練,這些改動都相對來說提升了生成模型的效果。然而,我們意外地發(fā)現(xiàn),檢索模型(即句子編碼模型)的效果卻降低了。估計的原因,可能是更多的語料、更大的噪聲雖然加大了生成模型的難度,但對于對比學習來說,這些不同句式的或者帶噪聲的樣本作為負樣本,反而是難度降低了。比如,如果一個 batch 同時有疑問句和陳述句,那么模型可以簡單地通過句式(而不是語義)就可以識別出不少負樣本,從而降低了對語義的理解能力。
當然,SimBERT 和 RoFormer-Sim 的本質(zhì)定位都是相似句擴增模型,檢索模型只是它的“副產(chǎn)品”,但我們?nèi)匀幌M@個“副產(chǎn)品”能盡可能好一些。為此,我們在 RoFormer-Sim 訓練完之后,進一步通過蒸餾的方式把 SimBERT 的檢索效果轉移到 RoFormer-Sim 上去,從而使得 RoFormer-Sim 的檢索效果基本持平甚至優(yōu)于 SimBERT。蒸餾的方式很簡單,假如對于同一批句子,SimBERT 出來的句向量為 ,RoFormer-Sim 出來的句向量為 ,那么就以:
為 loss 進行學習,這里 。當然,為了防止模型“遺忘”掉生成模型,蒸餾的同時還要加上生成損失,即 。蒸餾不需要很多步,大致 5000 步左右就可以訓練完成了。
跟無監(jiān)督語義相似度哪家強?我們做了個比較全面的評測一樣,我們用同樣的任務對比了 SimBERT 和 RoFormer 的檢索效果(其中每一格的三個數(shù)據(jù),分別代表“不加 whitening”、“加 whitening”、“加 whitening-256”的效果,同之前的評測):
從表中可以看出,不管加不加 whiteining,RoFormer-Sim 在大部分任務上都超過了 SimBERT,可見蒸餾之后的 RoFormer-Sim 的檢索效果確實能獲得提高,這個“副產(chǎn)品”也不至于太差了。
總結
本文介紹和發(fā)布了我們 SimBERT 的升級版—— RoFormer-Sim(SimBERTv2),它既可以用來擴充相似句子,也是語義相似度問題的一個較高的 baseline。相比 SimBERT,它最大的特點是將句型拓展到了一般類型,不再局限于相似問句。更多的玩法歡迎讀者進一步挖掘和分享。
參考文獻
[1] https://kexue.fm/archives/7427
更多閱讀
#投 稿?通 道#
?讓你的文字被更多人看到?
如何才能讓更多的優(yōu)質(zhì)內(nèi)容以更短路徑到達讀者群體,縮短讀者尋找優(yōu)質(zhì)內(nèi)容的成本呢?答案就是:你不認識的人。
總有一些你不認識的人,知道你想知道的東西。PaperWeekly 或許可以成為一座橋梁,促使不同背景、不同方向的學者和學術靈感相互碰撞,迸發(fā)出更多的可能性。?
PaperWeekly 鼓勵高校實驗室或個人,在我們的平臺上分享各類優(yōu)質(zhì)內(nèi)容,可以是最新論文解讀,也可以是學術熱點剖析、科研心得或競賽經(jīng)驗講解等。我們的目的只有一個,讓知識真正流動起來。
?????稿件基本要求:
? 文章確系個人原創(chuàng)作品,未曾在公開渠道發(fā)表,如為其他平臺已發(fā)表或待發(fā)表的文章,請明確標注?
? 稿件建議以?markdown?格式撰寫,文中配圖以附件形式發(fā)送,要求圖片清晰,無版權問題
? PaperWeekly 尊重原作者署名權,并將為每篇被采納的原創(chuàng)首發(fā)稿件,提供業(yè)內(nèi)具有競爭力稿酬,具體依據(jù)文章閱讀量和文章質(zhì)量階梯制結算
?????投稿通道:
? 投稿郵箱:hr@paperweekly.site?
? 來稿請備注即時聯(lián)系方式(微信),以便我們在稿件選用的第一時間聯(lián)系作者
? 您也可以直接添加小編微信(pwbot02)快速投稿,備注:姓名-投稿
△長按添加PaperWeekly小編
????
現(xiàn)在,在「知乎」也能找到我們了
進入知乎首頁搜索「PaperWeekly」
點擊「關注」訂閱我們的專欄吧
關于PaperWeekly
PaperWeekly 是一個推薦、解讀、討論、報道人工智能前沿論文成果的學術平臺。如果你研究或從事 AI 領域,歡迎在公眾號后臺點擊「交流群」,小助手將把你帶入 PaperWeekly 的交流群里。
總結
以上是生活随笔為你收集整理的SimBERTv2来了!融合检索和生成的RoFormer-Sim模型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 重磅新作!预训练语言模型入门必读好书 |
- 下一篇: 电脑关机后主机还在运行嗡嗡响(电脑关机后