ccf問(wèn)答匹配比賽

這兩周玩了一下ccf 2020 中的房產(chǎn)聊天問(wèn)答匹配比賽,雖然還沒(méi)完賽,但是先總結(jié)一下目前的收獲。

比賽說(shuō)明

首先,這個(gè)比賽的任務(wù)是在一系列回答中找到針對(duì)客戶(hù)問(wèn)題的回答。而客戶(hù)提問(wèn)前的對(duì)話及回答前的對(duì)話都是不可見(jiàn)的,即整個(gè)IM信息是不連續(xù)的,任務(wù)就是在不連續(xù)的回答中找到那些針對(duì)客戶(hù)問(wèn)題的答案。樣本示例:

query: 采荷一小是分校吧。
reply:
  是的  0
  杭州市采荷第一小學(xué)錢(qián)江苑校區(qū),杭州市錢(qián)江新城實(shí)驗(yàn)學(xué)校。  1
  這是五樓  0

可以看到,樣本中所謂的針對(duì)問(wèn)題的回答,不僅僅是直接回答問(wèn)題的答案,而是更有針對(duì)性和說(shuō)明的回答。

baseline

模型選擇上,baseline全部使用bert,鑒于相對(duì)位置編碼優(yōu)于絕對(duì)位置編碼,所以選擇NEZHA作為預(yù)訓(xùn)練權(quán)重。備選方案Roberta。

qa pair

由于回答是不連續(xù)的,所以可以將問(wèn)題和答案一一對(duì)應(yīng),組成qa pair,然后分別判斷是否是針對(duì)問(wèn)題的回答。

pair.png

point

雖然對(duì)話是不連續(xù)的,但是是同一個(gè)對(duì)話,所以不同的回答能相互支撐,提供部分信息,所以,第二種思路就是將同一個(gè)問(wèn)題的所有回答都拼接在當(dāng)前回答后面,然后同時(shí)對(duì)每一個(gè)回答進(jìn)行判斷。

point.png

pet

由于預(yù)訓(xùn)練模型使用的語(yǔ)料與當(dāng)前任務(wù)所處領(lǐng)域有一定的gap,所以一個(gè)比較簡(jiǎn)單的想法是先在任務(wù)語(yǔ)料上進(jìn)行Post-training,然后再進(jìn)行fine-tuning。不過(guò),上次我們介紹過(guò)<code>Pattern-Exploiting Training</code>,不了解的可以參考PET-文本分類(lèi)的又一種妙解。借鑒PET的方式,我們將posting-training與fine-tuning結(jié)合,即在label data上進(jìn)行pattern exploiting training,在unlable data上進(jìn)行mlm任務(wù)進(jìn)行post-traing.

pet.png

以上三種baseline的代碼放在ccf_2020_qa_match,感興趣的可以查閱。

update: concat

由于bert 不同的transformer 層提取到的語(yǔ)義粒度不同,而不同粒度的信息對(duì)分類(lèi)來(lái)說(shuō)起到的作用也不同,所以可以concat所以粒度的語(yǔ)義信息,拼接后作為特征進(jìn)行分類(lèi)。

concat.png

對(duì)比

第一種方案(pair-wise),由于缺少一定的上下文信息,加上很多回答都非常短,同時(shí)又可能會(huì)離提問(wèn)"較遠(yuǎn)",所以效果是最差的,不過(guò)線上提交單模型也有0.75左右了,所以bert確實(shí)強(qiáng)大!
第二種方案(point)中,將所有已知的上下文信息都整合到一起,所以相對(duì)上一種有所提升,不過(guò)由于這種上下文的可見(jiàn)性,所以也會(huì)帶來(lái)一定的迷惑:即對(duì)某一個(gè)reply來(lái)說(shuō),假如其他的reply中有一個(gè)是針對(duì)性的回答,就有可能會(huì)干擾對(duì)當(dāng)前reply的判斷。
第三種方案(pet)中,通過(guò)mlm進(jìn)行post-training,可以將領(lǐng)域間的gap縮小,同時(shí),由于在訓(xùn)練時(shí)"看到"了測(cè)試數(shù)據(jù),也在一定程度上減小了線上線下的差距,所以性能是最好的,單模型最好能達(dá)到0.765左右。

嘗試

Post-training

第一個(gè)想法是嘗試進(jìn)行post-training,來(lái)提升所有方案的性能。由于問(wèn)答之間是不連續(xù)的,所以在組織語(yǔ)料上進(jìn)行了不同方式:

  1. query-reply pair
  2. query-reply-list pair
  3. cut-sentence to make pair

以上文提到的樣本為例;

  1. query-reply pair:
采荷一小是分校吧。
是的

采荷一小是分校吧。
杭州市采荷第一小學(xué)錢(qián)江苑校區(qū),杭州市錢(qián)江新城實(shí)驗(yàn)學(xué)校。
...

  1. query-reply-list pair
采荷一小是分校吧。
是的 杭州市采荷第一小學(xué)錢(qián)江苑校區(qū),杭州市錢(qián)江新城實(shí)驗(yàn)學(xué)校。  這是五樓

...
  1. cut-sentence to make pair
采荷一小
是分校吧。

是
的

杭州市采荷第一小學(xué)錢(qián)江苑校區(qū),
杭州市錢(qián)江新城實(shí)驗(yàn)學(xué)校。
...

第一種,將同一對(duì)話作為同一篇文檔順序排列;第二種,將問(wèn)題作為單獨(dú)文檔,同一問(wèn)題的所有回答作為單獨(dú)文檔,第三種,將問(wèn)題和回答都作為單獨(dú)文檔,同時(shí)將其拆分為左右兩個(gè)部分來(lái)做nsp任務(wù)。
在mask選擇上,選擇動(dòng)態(tài)mask,即每個(gè)epoch都重新選擇mask的token。

最終結(jié)果是如果直接使用<code>[CLS]</code>做最終特征,以上三種都不能帶來(lái)pair-wise方案的提升,反而會(huì)帶來(lái)不小的降低,猜測(cè)原因可能與以上三種方式的nsp任務(wù)與當(dāng)前任務(wù)的模式不同,所以反而會(huì)引起降低。而在bert 后面接其他層(AttentionPooling1D,DGCNN)后能帶來(lái)大約一個(gè)點(diǎn)左右提升。

focal loss

由于針對(duì)性回答與非針對(duì)性回答在數(shù)量上有不小差距,大約3:1,所以也想到嘗試在loss上進(jìn)行調(diào)節(jié)。
最終結(jié)果是沒(méi)有多少提升,最后將普通loss訓(xùn)練后的模型在train data上進(jìn)行了predict,并借鑒之前focal loss中的方式分析了一下,畫(huà)出對(duì)應(yīng)的難易樣本分布。

focalloss.png

上圖中不難發(fā)現(xiàn)其難樣本并不多也不聚集,所以focal loss并不能帶來(lái)提升。

對(duì)抗訓(xùn)練與梯度懲罰

對(duì)抗訓(xùn)練與梯度懲罰也是兩種比較有效的提升模型泛化性能的方法。其中對(duì)抗采用的FGM。
最終實(shí)驗(yàn)后發(fā)現(xiàn)兩者都能帶來(lái)線上線下的提升,尤其是對(duì)抗,最高能提升三個(gè)點(diǎn),不過(guò)相同參數(shù)下結(jié)果也會(huì)差二個(gè)點(diǎn)左右,所以每個(gè)模型都要少不了調(diào)參的過(guò)程,所以適合后期提高時(shí)使用。

tricks

由于也是第一次做比賽,所以走了不少?gòu)澛?,也學(xué)到了一些trick:

  1. 對(duì)樣本進(jìn)行kfold然后訓(xùn)練,得到k個(gè)模型再進(jìn)行ensemble。其中k從5增加到10,也會(huì)有提升。這種方式的好處是可以讓更多的數(shù)據(jù)參與到訓(xùn)練,同時(shí)多個(gè)模型進(jìn)行投票,也會(huì)帶來(lái)或多或少的提升。
  2. 對(duì)數(shù)據(jù)進(jìn)行post-training,雖然我的嘗試暫時(shí)沒(méi)有起到提升,但是交流時(shí)有其他組的同學(xué)通過(guò)這個(gè)方法就達(dá)到單模型0.77以上。而我三種方案對(duì)比,pet的方式也是最好的,所以也在一定程度上說(shuō)明這種方式的有效性。
  3. bert后接新的層,如cnn,dgcnn等。雖然bert的特征提取能力強(qiáng)大,但是在bert后面接一些新的層,總能帶來(lái)一定的提升,尤其是DGCNN。這種方式可以看作是兩種模型的stacking,即利用bert做特征提取,后面的模型在其上做下游任務(wù)。
  4. 不同模型進(jìn)行ensemble,如將上述三種方案進(jìn)行ensemble,由于不同模型關(guān)注點(diǎn)不同,融合后會(huì)帶來(lái)一定提升。
  5. 更大的模型,如bert-xxlarge等。雖然我的顯卡沒(méi)法實(shí)驗(yàn)這種方案,但是交流后發(fā)現(xiàn)很多同學(xué)都是使用的大模型,baseline就可以達(dá)到0.77以上了,所以有時(shí)候還是需要一些"鈔能力".
  6. 數(shù)據(jù)清洗與增強(qiáng)。交流中有人提到用外部數(shù)據(jù)做增強(qiáng),所以如果有能力,先做清洗與增強(qiáng),結(jié)果也會(huì)提升很多。

總結(jié)

以上就是對(duì)當(dāng)前比賽的一些思考與總結(jié),現(xiàn)在單模型最好的成績(jī)?yōu)榫€上<code>0.7779</code>, 雖然只排到61名,不過(guò)鑒于我使用的是base模型,同時(shí)也是單模型,沒(méi)有任何其他后續(xù)處理,所以結(jié)果感覺(jué)還行。后續(xù)完賽后如果有新的收獲再更新一篇吧。最后,附上暫時(shí)排名截圖。

leadboard.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容