【NLP】ALL in BERT:一套操作冲进排行榜首页
作者:DOTA
????好久不打比賽,周末看到“全球人工智能技術(shù)創(chuàng)新大賽”已經(jīng)開打了一段時(shí)間,前排分?jǐn)?shù)沖的有點(diǎn)兇,技癢的我看到了一道熟悉的賽題——小布助手對(duì)話短文本語義匹配,由于在搜索推薦系統(tǒng)的一些任重中,文本語義匹配子任務(wù)也是經(jīng)常會(huì)遇到的一個(gè)問題,于是乎掏出那根...咳咳..沉睡了很久的GPU,翻出了祖?zhèn)鞔a,跑了一波Baseline...
????賽題題型不新鮮,在Baseline的的基礎(chǔ)上參考了一些思路做些煉丹技巧上的操作,3次提交之后順利沖進(jìn)排行榜首頁。針對(duì)短文本語義匹配,本文幫大家梳理一波方案技巧。
P.S.?發(fā)稿之前,看了一眼排行榜,分?jǐn)?shù)已經(jīng)被大家刷上去了,參加人數(shù)還蠻多,有興趣的同學(xué)可以去戰(zhàn)一波...
賽題背景
????意圖識(shí)別是對(duì)話系統(tǒng)中的一個(gè)核心任務(wù),而對(duì)話短文本語義匹配是意圖識(shí)別的主流算法方案之一。本賽題要求參賽隊(duì)伍根據(jù)脫敏后的短文本query-pair,預(yù)測它們是否屬于同一語義,提交的結(jié)果按照指定的評(píng)價(jià)指標(biāo)使用在線評(píng)測數(shù)據(jù)進(jìn)行評(píng)測和排名,得分最優(yōu)者獲勝。
數(shù)據(jù)及評(píng)估指標(biāo)
數(shù)據(jù)
????訓(xùn)練數(shù)據(jù)包含輸入query-pair,以及對(duì)應(yīng)的真值。初賽訓(xùn)練樣本10萬,復(fù)賽訓(xùn)練樣本30萬,這份數(shù)據(jù)主要用于參賽隊(duì)伍訓(xùn)練模型,為確保數(shù)據(jù)的高質(zhì)量,每一個(gè)樣本的真值都有進(jìn)行人工標(biāo)注校驗(yàn)。每行為一個(gè)訓(xùn)練樣本,由query-pair和真值組成,每行格式如下:
query-pair格式:query以中文為主,中間可能帶有少量英文單詞(如英文縮寫、品牌詞、設(shè)備型號(hào)等),采用UTF-8編碼,未分詞,兩個(gè)query之間使用\t分割。
真值:真值可為0或1,其中1代表query-pair語義相匹配,0則代表不匹配,真值與query-pair之間也用\t分割。
評(píng)估標(biāo)準(zhǔn)
????比賽的評(píng)估標(biāo)準(zhǔn)由性能標(biāo)準(zhǔn)和效果標(biāo)準(zhǔn)兩部分組成,初賽采用效果標(biāo)準(zhǔn),AUC 指標(biāo),具體定義如下:
其中:
rank(i):表示i這個(gè)樣本的預(yù)測得分在測試集中的排序;
M:測試集中語義匹配的樣本的個(gè)數(shù);
N:測試集中語義不匹配的樣本的個(gè)數(shù)。
解決方案與技巧
????在BERT橫行的時(shí)代,解決方案大同小異,直接梭哈BERT的性價(jià)比是很高的,當(dāng)所有人都會(huì)使用這套操作時(shí),你又該怎么辦呢?首先針對(duì)此類問題,分享一波煉丹小技巧。由于本賽題開賽前,將文本替換成了加密形式,有些技巧可能無法使用,但不影響學(xué)習(xí)。
數(shù)據(jù)增強(qiáng)
1. 標(biāo)簽傳遞
根據(jù)IF A=B and A =C THEN B=C 的規(guī)則,對(duì)正樣本做了擴(kuò)充增強(qiáng)。
根據(jù)IF A=B and A!=C THEN B!=C的規(guī)則,對(duì)負(fù)樣本做了擴(kuò)充增強(qiáng)。
2. 隨機(jī)刪除,隨機(jī)替換, 隨機(jī)交換
Query比較短,大約有10-20個(gè)字的長度,隨機(jī)刪除部分。
很多query僅僅相差一個(gè)單詞, 隨機(jī)替換部分。
多數(shù)屬于問句, 隨機(jī)交換部分。
3. 同義詞替換
建模思路
????第一個(gè)Baseline我沿用了之前計(jì)算相似度的方式對(duì)問題就行了求解,也做了模型線上的第一次提交,線上0.88的水平。具體思路如下:
1. SIF Sentence Embedding
??? SIF Sentence Embedding 使用預(yù)訓(xùn)練好的詞向量,使用加權(quán)平均的方法,對(duì)句子中所有詞對(duì)應(yīng)的詞向量進(jìn)行計(jì)算,得到整個(gè)句子的embedding向量。
??? SIF的計(jì)算分為兩步:
對(duì)句子中的每個(gè)詞向量,乘以一個(gè)獨(dú)特的權(quán)重b,權(quán)重b是一個(gè)常數(shù) a除以a與該詞頻率的和,這種做法的會(huì)對(duì)出現(xiàn)頻率高詞進(jìn)行降權(quán),也就是說出現(xiàn)頻次越高,其權(quán)重也就越小;
計(jì)算句向量矩陣的第一主成分u,讓每個(gè)Sentence Embedding減去它在u上的投影;
????這里,利用該方法做召回,在驗(yàn)證集上的準(zhǔn)確性要比其他兩種方式效果好。
對(duì)句子中所有單詞求平均得到sentence embedding;
對(duì)句子中所有單詞利用IDF值加權(quán)后求平均得到sentence embedding。
2. InferSent
????InferSent相似度模型是Facebook提出了一種通過不同的encoder得到Sentence Embedding,然后計(jì)算兩個(gè)Sentence Embedding的差值、點(diǎn)乘得到交互向量,計(jì)算兩者之間的相似度。
????這里,對(duì)原始論文方法做了兩處修改:其一是針對(duì)這個(gè)問題對(duì)3-way softmax層(entailment,contradiction,neutral)做了相應(yīng)的修改變?yōu)?-way softmax;其二是中間層去掉了u和v,只使用差值和內(nèi)積兩種特征表征方式;同時(shí)在7中編碼器:1)LSTM, 2)GRU, 3)bi-GRU, 4)bi-LSTM(mean pooling), 5)bi-LSTM(max pooling), 6)self-attention, 7)CNN 中選用了Bi-LSTM MaxPooling的方式。
開源方案
????本賽題蘇劍林開源了一套方案,這套方案讓脫敏數(shù)據(jù),也能使用BERT。脫敏數(shù)據(jù)對(duì)于BERT來說,其實(shí)就是Embedding層不一樣而已,其他層還是很有價(jià)值的。所以重用BERT主要還是通過預(yù)訓(xùn)練重新對(duì)齊Embedding層。
????在這個(gè)過程中,初始化很重要。首先,我們把BERT的Embedding層中的[UNK]、[CLS]、[SEP]等特殊標(biāo)記拿出來,這部分不變;然后,我們分別統(tǒng)計(jì)密文數(shù)據(jù)和明文數(shù)據(jù)的字頻,明文數(shù)據(jù)指的是任意的開源通用語料,不一定要密文數(shù)據(jù)對(duì)應(yīng)的明文數(shù)據(jù);接著按照頻率簡單對(duì)齊明文字表和密文字表。這樣一來,我們就可以按照明文的字來取出BERT的Embedding層來作為相應(yīng)的初始化。
????簡單來說,就是蘇劍林用最高頻的明文字對(duì)應(yīng)的BERT Embedding,來初始化最高頻的密文字,依此類推來做一個(gè)基本的字表對(duì)齊。對(duì)比實(shí)驗(yàn)表明,這個(gè)操作可以明顯加快模型的收斂速度。
????我的第2次提交是對(duì)該方案增加了FGM部分進(jìn)行了提交測試,因?yàn)镕GM帶了百一的得分收益,線上0.87+的水平,跟蘇兄開源時(shí)公布的0.86+得分相對(duì)一致。
FGM對(duì)抗訓(xùn)練
????上面提到了FGM的對(duì)抗訓(xùn)練,其實(shí)也算是一個(gè)煉丹小技巧,這里做一下見到介紹。
????對(duì)抗訓(xùn)練(Adversarial Training),顧名思義,就是在訓(xùn)練過程中產(chǎn)生一些攻擊樣本,早期是FGSM和I-FGSM攻擊,目前當(dāng)前最優(yōu)的攻擊手段是PGD。對(duì)抗訓(xùn)練,相當(dāng)于是加了一層正則化,給神經(jīng)網(wǎng)絡(luò)的隨機(jī)梯度優(yōu)化限制了一個(gè)李普希茨的約束。
????傳統(tǒng)上認(rèn)為,這個(gè)訓(xùn)練方式會(huì)犧牲掉一定的測試精度,因?yàn)榫矸e模型關(guān)注局部特性,會(huì)學(xué)到一些敏感于擾動(dòng)的特征,對(duì)抗訓(xùn)練是一種去偽存真的過程,這是目前像素識(shí)別的視覺算法的局限性。這里蘇建林在kexue.fm里實(shí)現(xiàn)是很簡單的,詳情參看引用鏈接。
總結(jié)
????最后,第3次提交將前兩次的提交的結(jié)果,做了一個(gè)簡單的線性融合,線上到了當(dāng)時(shí)排行榜的首頁,Ensemble的方式其實(shí)很多,由于時(shí)間的關(guān)系并沒去堆很多模型,對(duì)此感興趣的同學(xué),可以去看一下《Kaggle競賽寶典》的系列文章。
????比賽結(jié)束還有一段時(shí)間,感興趣的同學(xué)可以去嘗試一波。數(shù)據(jù)競賽作為一種保持競技狀態(tài)(戰(zhàn)斗狀態(tài))的一種方式,在工作中直接應(yīng)用的層面的可能很少,但是它能帶給選手的更多是一種對(duì)問題的深層次思考,一種解決問題的實(shí)戰(zhàn)訓(xùn)練能力,如果你有時(shí)間,不妨一試。這次全球人工智能技術(shù)創(chuàng)新大賽是清華大學(xué)劉強(qiáng)老師負(fù)責(zé)跟的,劉老師的負(fù)責(zé)態(tài)度和對(duì)選手的正面鼓勵(lì),我想很多接觸過的人都會(huì)印象深刻。哈哈哈,依稀的記得2017年首次參賽,劉老師送的清華大學(xué)百年紀(jì)念郵票。
????工作之后,時(shí)間會(huì)過很快,考慮更多的可能是做一件事是否能有結(jié)果,考慮的事情多了,也就沒有了當(dāng)年肝肝肝的勇氣。偶爾回到賽場提醒一下自己,懷念一下過去.... ALL in BERT,便是這份高效利用自己時(shí)間的體現(xiàn),簡單、有效、奧卡姆剃刀...
參考資料
https://tianchi.aliyun.com/notebook-ai/detail?postId=101624
https://tianchi.aliyun.com/notebook-ai/detail?postId=102057
https://kexue.fm/archives/8213
https://kexue.fm/archives/7234
kaggle競賽寶典 系列文章
總結(jié)
以上是生活随笔為你收集整理的【NLP】ALL in BERT:一套操作冲进排行榜首页的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: win7系统任务管理器被禁用怎么解决
- 下一篇: 微软:Win11很受欢迎、正式版将于秋季