日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

datafountain自然语言处理比赛的学习和总结

發布時間:2023/12/14 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 datafountain自然语言处理比赛的学习和总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ? 自轉行入坑NLP煉丹2年以來,一直沒有打過相關的比賽,究其原因一個是覺得自己NLP相關的積累太少了,參加比賽完全沒有什么用;另外一方面是公司任務安排的比較多,又是自學工作任務處理起來就比較費時間,所有就沒有多余的時間來打比賽了;最后就是稍微有些空閑的時間就用來休息談戀愛呀娛樂呀學做飯呀以及學習寫博客之類的。在新公司適應的比較快,項目也不是特別多,公司又有打比賽的需要,抓住機會參加了datafountain上面的幾個比賽。我主要打了大獎賽中的產品評論觀點提取和千言-問題匹配魯棒性評測(提交一個初版就放棄了);訓練賽中的法律領域篇章級多事件檢測(多標簽的分類任務)和機器翻譯領域適應這4個比賽。最后的成績是產品評論觀點提取A榜12名,B榜16名,遺憾沒有進入決賽;訓練賽中法律領域篇章級多事件檢測(多標簽的分類任務)暫時第一名,機器翻譯領域適應暫時第一名,示意如下。

產品評論觀點提取

A榜

B榜

法律領域篇章級多事件檢測(多標簽分類任務)

?訓練賽截止日期是2021.12.06,法律領域篇章級多事件檢測最終掉到了第四名,第一名的成績是0.99663917,領先還是很多!

機器翻譯領域適應

?訓練賽截止日期是2021.12.06,機器翻譯領域適應最終經過9次提交一微弱的優勢拿到了第一名,可以得到一個CCF會員名額和紀念獎牌。

? ?成績很差,也不太重要,重要的是在比賽過程中學習到的知識、經驗和總結。

證書如下:

產品評論觀點提取吧比賽

法律領域篇章級多事件檢測(多標簽分類任務)

?機器翻譯領域適應

?

?

?

一、賽題剖析和比賽中的嘗試

A、產品評論觀點提取比賽

????????比賽的任務分為單標簽多分類任務和命名實體識別任務,舉辦方11.01提供了訓練集和測試集,其中訓練集約7500條,測試集約2800條。分類任務是一個單標簽3分類任務,判定句子的消極、積極和中性等3中情感類別,比例8:3:64;NER任務就是提取句子中產品、評論實體、銀行和評論形容詞四種實體(PRODUCT、COMMENTS_N、BANK和COMMENTS_ADJ),其中COMMENTS_ADJ實體比例偏少。具體數據如下所示:

id,text,BIO_anno,class 0,交行14年用過,半年準備提額,卻直接被降到1K,半年期間只T過一次三千,其它全部真實消費,第六個月的時候為了增加評分提額,還特意分期兩萬,但降額后電話投訴,申請提...,B-BANK I-BANK O O O O O O O O O O B-COMMENTS_N I-COMMENTS_N O O O O O B-COMMENTS_ADJ I-COMMENTS_ADJ O O O O O O O O O O O O O O O O O O O O O B-COMMENTS_N I-COMMENTS_N O O O O O O O O O O B-COMMENTS_N I-COMMENTS_N O O B-COMMENTS_N I-COMMENTS_N O O O O B-PRODUCT I-PRODUCT O O O O B-COMMENTS_ADJ O O O O O O O O O O O O O,0 1,單標我有了,最近visa雙標返現活動好,B-PRODUCT I-PRODUCT O O O O O O B-PRODUCT I-PRODUCT I-PRODUCT I-PRODUCT B-PRODUCT I-PRODUCT B-COMMENTS_N I-COMMENTS_N I-COMMENTS_N I-COMMENTS_N B-COMMENTS_ADJ,1 2,建設銀行提額很慢的……,B-BANK I-BANK I-BANK I-BANK B-COMMENTS_N I-COMMENTS_N B-COMMENTS_ADJ I-COMMENTS_ADJ O O O,0 3,我的怎么顯示0.25費率,而且不管分多少期都一樣費率,可惜只有69k,O O O O O O O O O O B-COMMENTS_N I-COMMENTS_N O O O O O O B-COMMENTS_ADJ I-COMMENTS_ADJ O O O O B-COMMENTS_N I-COMMENTS_N O B-COMMENTS_ADJ I-COMMENTS_ADJ B-COMMENTS_ADJ I-COMMENTS_ADJ O O O,2 4,利率不錯,可以擼,B-COMMENTS_N I-COMMENTS_N B-COMMENTS_ADJ I-COMMENTS_ADJ O O O O,1 5,不能??好像房貸跟信用卡是分開審核的反正我的不得,O O O O O O O O O O O O O O O B-COMMENTS_N I-COMMENTS_N O O O O O O O,2 6,我感覺這樣才是合理的,花唄白條沒要那么多信息,照樣可以給額度。有征信威懾,沒那么多人敢借了不還。與其眉毛胡子一把抓,還不如按額度區間對客戶進行不同程度的調查,免...,O O O O O O O B-COMMENTS_ADJ I-COMMENTS_ADJ O O B-PRODUCT I-PRODUCT B-PRODUCT I-PRODUCT O O O O O O O O O O O O O B-COMMENTS_N I-COMMENTS_N O O B-PRODUCT I-PRODUCT B-COMMENTS_ADJ I-COMMENTS_ADJ O O O O O O O O O O O O O O O O O O O O O O O O O O B-COMMENTS_N I-COMMENTS_N O O O O O O O O O O O O O O O O O O O,2 7,羨慕,可能上個月申請多了。上月連續下了浦發廣發華夏交通。這個月申請建行,農業??郵儲各種秒拒,買了點建行理財,3個月后在看...,O O O O O O O O O O O O O O O O O O O B-BANK I-BANK B-BANK I-BANK B-BANK I-BANK O O O O O O O O O O O O O O O O O O O O O O O O O O O B-PRODUCT I-PRODUCT O O O O O O O O O O,0 8,這個短債只是用來提升信譽刷建行預審批的,又不是什么賺錢的基金。也只有建行有賣,我買過,不但不賺錢還會虧本的。...,O O B-PRODUCT I-PRODUCT O O O O B-COMMENTS_ADJ I-COMMENTS_ADJ O O O B-BANK I-BANK B-COMMENTS_N I-COMMENTS_N I-COMMENTS_N O O O O O O O B-COMMENTS_ADJ I-COMMENTS_ADJ O B-PRODUCT I-PRODUCT O O B-COMMENTS_ADJ I-COMMENTS_ADJ B-BANK I-BANK O O O O O O O O O B-COMMENTS_ADJ I-COMMENTS_ADJ I-COMMENTS_ADJ O O B-COMMENTS_ADJ I-COMMENTS_ADJ O O O O O,0 9,打電話問中信信用卡為啥沒批唄,O O O O B-BANK I-BANK B-PRODUCT I-PRODUCT I-PRODUCT O O O O O,2

粗略來看這個比賽其實實現難度比較低的,分類和NER都是比較經典的NLP任務,當然競爭也比較大,同時比賽中沒有組隊,一個人既要調分類,又要調NER,時間比較緊迫,好多想法都沒有來得及去嘗試。

首先數據分析

統計句長,選定句長;分析噪聲,刪除噪聲——原始數據中存在很多特殊字符等等

?

?訓練集和測試集中的句長大都集中在100以內,因此初始可以選用max_seq_length = 100

分類任務嘗試的方案

簡單的數據分析后,就是算法模型和調參了,嘗試了以下方案

1、基本模型結構

Bert+nn.Linear

import torch.nn as nn from transformers import BertModel,BertPreTrainedModel import torch import torch.nn.functional as Fclass BertClassification(BertPreTrainedModel):def __init__(self,config):super(BertClassification, self).__init__(config)self.bert = BertModel(config=config)self.classifier = nn.Linear(config.hidden_size, config.num_labels)self.dropouts = nn.ModuleList([nn.Dropout(0.2) for _ in range(5)])# self.lcm = LCM(config.num_labels,config.hidden_size)def pooling(self,token_embeddings,input):output_vectors = []# attention_maskattention_mask = input['attention_mask']# [B,L]------>[B,L,1]------>[B,L,768],矩陣的值是0或者1input_mask_expanded = attention_mask.unsqueeze(-1).expand(token_embeddings.size()).float()# 這里做矩陣點積,就是對元素相乘(序列中padding字符,通過乘以0給去掉了)[B,L,768]t = token_embeddings * input_mask_expanded# [B,768]sum_embeddings = torch.sum(t, 1)# [B,768],最大值為seq_lensum_mask = input_mask_expanded.sum(1)# 限定每個元素的最小值是1e-9,保證分母不為0sum_mask = torch.clamp(sum_mask, min=1e-9)# 得到最后的具體embedding的每一個維度的值——元素相除output_vectors.append(sum_embeddings / sum_mask)# 列拼接output_vector = torch.cat(output_vectors, 1)return output_vectordef forward(self,inputs):""":param inputs: 字典tensor,input_ids,attention_mask,token_type_ids:return:"""output = self.bert(**inputs, return_dict=True, output_hidden_states=True)embedding = output.hidden_states[-1]embedding = self.pooling(embedding,inputs)for i, dropout in enumerate(self.dropouts):if i == 0:h = self.classifier(dropout(embedding))else:hi = self.classifier(dropout(embedding))h = h + hilogists = h/len(self.dropouts)return logists,embeddingclass LCM(nn.Module):def __init__(self,num_labels,hidden_size):super(LCM,self).__init__()self.label_embeding = nn.Embedding(num_labels,hidden_size)def forward(self,token_embedding,labels):sim = torch.matmul(token_embedding, labels.T)labels = F.softmax(sim, dim=-1)return labels

當然為了減少過擬合的風險也是可以采用Bert+dropout+nn.Linear這樣的結構

baseline采用哈工大的bert預訓練權重bert-wmm-ext

Bert+dropout+nn.Linear相比Bert+nn.Linear有提升

2、損失函數

cross_entropy、LabelSmoothingLoss和FocalLoss,其中LabelSmoothingLoss提升較大,緩解了樣本不均衡

3、對比學習R-drop,提升明顯

4、滑動平均ema 無提升

5、標簽調整logit adjustment——Long-Tail Learning via Logit Adjustment? 谷歌論文新方法???沒有效果

6、標簽混淆模型 label confusion model——Label Confusion Learning to Enhance Text Classification Models 無提升

7、梯度裁剪——防止梯度爆炸的作用

torch.nn.utils.clip_grad_norm_(model.parameters(), max_grad_norm)

無提升

8、對抗訓練——embedding層進行擾動

FGM/PGD/FreeLB/SMART

僅驗證了FGM和PGD,PGD提升更大,訓練時間更多

9、半監督訓練

測試集預測以后,選擇預測概率大于一定閾值的樣本,加入訓練集中再訓練;標準的做法是給測試集樣本在訓練的時候設定一個loss的參數

實現比較麻煩,直接抽樣加入更簡單

10、多折交叉驗證

3579折交叉驗證——5折效果最好,融合的方式可以考慮概率融合也可以采取投票方式

?11、多模型融合

采用不同的隨機種子、不同的預訓練權重,例如bert、roberta、ernie、nezha等多模型融合——時間來不及未驗證

12、繼續預訓練——數據量小不建議采取,時間來不及未驗證

13、數據增強也沒有驗證——回譯、同義詞替換、隨機drop等,回譯按照經驗來說是有效的

比賽過程中的記錄?

NER任務嘗試的方案

NER任務算是比較成熟了,嵌套實體、詞匯及增強在最新的論文中都有一定的解決方案了;由于時間有限,本次比賽僅僅參考了Chinese-DeepNER-Pytorch——天池中藥說明書實體識別挑戰冠軍方案的思路和CLUENER 細粒度命名實體識別給出的基線代碼,快速的實現了NER任務,具體方案

1、bert+crf

如圖驗證了?半監督、對抗訓練、dropout、和多折交叉驗證(概率融合+投票)?

2、bert+span?

如圖驗證了?半監督、對抗訓練、dropout、和多折交叉驗證(概率融合+投票) 、不同的損失函數(labelsmoothloss效果最好,這里緩解了實體的不均衡分布)

3、bert+softmax

如圖驗證了?半監督、對抗訓練、dropout、和多折交叉驗證(概率融合+投票) 、不同的損失函數

由于時間有限,并沒有驗證MRC和邱錫鵬教授組的FLATNer,也沒有驗證滑動平均,最后選取以上3個模型最佳效果做投票融合作為最終提交結果

B、法律領域篇章級多事件檢測——多標簽分類任務

之所以想打這個比賽,主要之前沒有做過多標簽的分類任務,對相關的真實業務場景和算法進行過實戰,并不清楚算法的效果如何。在之前的一篇博客——NLP分類任務中的損失函數的選擇——中寫到過對于多標簽分類任務的一些分析,這里算是一個精細的實戰操作。

數據分析

數據質量比較好,并沒有噪聲,只是句長很長,大部分都是在500以內,句子500之外甚至5000的都有幾條,鑒于比例非常小,直接把這部分數據舍棄掉。最后max_length = 512

首先模型的結構

1、bert+nn.linear+BCEloss?

2、bert+nn.linear+MLCE(蘇劍林——將“softmax+交叉熵”推廣到多標簽分類問題)

經過驗證2效果更好,訓練模型收斂速度更快,最后提交的結果更好。

其他的方案嘗試

1、模型訓練的時候評價指標選用最佳準確率的模型保存,提交的結果要好于使用mico-f1,雖然評測結果是mico-f1

2、R-drop參數alpha 1、2、4、8 均沒有不采用R-drop的效果好

3、多折交叉驗證3折和7折均沒有5折好;

4、對抗訓練驗證了FGM/PGD/FreeLB,FGM效果最佳——還沒有驗證SMART

5、融合策略——投票優于概率融合,投票的閾值設置也是需要調試的

6、ema滑動平均很有效果,上個比賽的使用可能出現了問題

ema.apply_shadow()之后驗證模型,保存最佳模型

循環迭代的時候沒有執行

ema.restore()#恢復權重系數

每個epoch訓練的模型都是在上一個滑動平均改變系數后的模型,導致模型的系數變動過大,效果不好,比較科學的用法如下,注意一定要ema.restore(),我在上一個比賽的時候還故意不使用ema.restore(),效果不太好,當時分析有問題

for epoch in epochs:for batch in dataloader:....loss.backforward()optimizer.zero_grad()optimizer.step()ema.update()ema.apply_shadow()model.eval()#模型評估evaluate()#保存最佳的那個模型model.save()——————這里模型就是保存的影子權重ema.restore()————————這里又恢復模型參數,這一步做了效果好一些,沒有做導致模型參數變化過大......#模型推理——由于保存的是影子權重所以沒有問題model.eval()test(model)

7、對比學習的思想

batch內增加樣本數,由于同樣的樣本數據,在一個batch內有2條,經過bert類的模型輸出向量不一致,增加了模型的泛化能力和魯棒性。具體實現是直接在batch內copy一下數據

#batch:list t:tensor if args.double_copy:batch = [ t.repeat(2,1) for t in batch]

8、模型輸出后dropout

并沒有效果,可能和對抗訓練沖突了

9、多次迭代半監督訓練

不斷的修正預測的結果,和訓練集一并訓練模型,模型指標不斷上升

10、數據量小,繼續預訓練沒有提升

11、多種預訓練權重嘗試

具體嘗試結果記錄

1、v0_submition_MLCE_L512_rdrop4_logits_integrate.json——0.95749170938 2、v1_submition_MLCE_L512_rdrop0_logits_integrate.json——0.94833185710 3、v2_submition_MLCE_L512_rdrop2_logits_integrate.json——0.94275700935 4、v2_submition_MLCE_L512_rdrop2_vote_integrate.json——0.95243757432 5、v3_submition_MLCE_L512_rdrop0_logits_integrate.json——0.92826274849 6、v3_submition_MLCE_L512_rdrop0_vote_integrate.json——0.95147365287 7、v3_submition_MLCE_L512_rdrop0_logits_integrate_max3.json——0.94855115316 8、v3_submition_MLCE_L512_rdrop0_vote_integrate_max3.json——0.94814378315 模型訓練的時候采用準確率驗驗證更好!——不要用micro_f1 0、v0_submition_MLCE_L512_rdrop_0_RRL_scheduler_vote_integrate_max_all_20211114.json——0.96883509834、第一名最佳 1、v0_submition_MLCE_L512_rdrop_0_RRL_scheduler_logits_integrate_max_all_20211114.json——0.96514423077——低很多 2、v0_submition_MLCE_L512_rdrop_0_RRL_scheduler_vote_integrate_max3_20211114.json——0.96628537026——低一點點 3、v0_submition_MLCE_L512_rdrop_0_RRL_scheduler_logits_integrate_max3_20211114.json——0.96739130——低一點點 4、v1_submition_MLCE_L512_rdrop_0_linear_dropouts_RRL_scheduler_logits_integrate_max_5_20211115.json——0.96508127635——linear_dropouts無效 5、v1_submition_MLCE_L512_rdrop_0_linear_dropouts_RRL_scheduler_vote_integrate_max_5_20211115.json——0.96668685645——linear_dropouts無效 6、v2_submition_MLCE_L512_rdrop_4_RRL_scheduler_vote_integrate_max_5_20211115.json——0.96840826245、第二名rdrop-4無效 7、v2_submition_MLCE_L512_rdrop_4_RRL_scheduler_logits_integrate_max_5_20211115.json——0.96566265060、logits比vote差 8、v3_submition_MLCE_L512_rdrop_2_RRL_scheduler_vote_integrate_max_5_20211115.json——0.96783980583 9、v3_submition_MLCEL512_rdrop_2_RRL_scheduler_logits_integrate_max_5_20211115.json——0.96452194829 6789來看可以增大alpha的參數來提高性能 10、v4_submition_MLCE_L512_rdrop_8_RRL_scheduler_vote_integrate_max_5_20211115.json——0.96785930867提升一點 還是r_drop = 0最佳 11、v4_submition_MLCE_L512_rdrop_8_RRL_scheduler_vote_integrate_max_3_20211115.json——0.96443640 12、v4_submition_MLCEL512_rdrop_8_RRL_scheduler_logits_integrate_max_3_20211115.json——0.96466324 13、v4_submition_MLCEL512_rdrop_0_RRL_scheduler_FGM_logits_integrate_max_5_20211115.json——0.96566 14、v4_submition_MLCE_L512_rdrop_0_RRL_scheduler_FGM_vote_integrate_max_5_20211115.json——0.96964177292——第一名 15、v5_submition_MLCEL512_rdrop_0_RRL_scheduler_PGD_logits_integrate_max_5_20211115.json——0.96597410419 16、v5_submition_MLCEL512_rdrop_0_RRL_scheduler_PGD_vote_integrate_max_5_20211115.json——0.96962332928——第二名 17、v6_submition_BCE_L512_rdrop_0_RRL_scheduler_FGM_logits_integrate_max_5_20211116.json——0.96327513546 18、v6_submition_BCE_L512_rdrop_0_RRL_scheduler_FGM_vote_integrate_max_5_20211116.json——0.96750683268 15-18來看BCE效果不好、FGM對抗訓練更好,vote策略更好半監督訓練 19、v7_submition_MLCE_L512_rdrop_0_RRL_scheduler_semi_supervised_0_FGM_logits_integrate_max_5_20211116.json——0.96821071753 20、v7_submition_MLCE_L512_rdrop_0_RRL_scheduler_semi_supervised_0_FGM_vote_integrate_max_5_20211116.json——0.97019464720——第一名最高,加入prediact_result_BCE_0.csv概率大于0.9的樣本 21、v8_submition_MLCE_L512_rdrop_0_RRL_scheduler_semi_supervised_1FGM_logits_integrate_max_5_20211116.json——0.97017650639——第二名,加入prediact_result_MLCE_vote_2.csv概率大于0.8的樣本 22、v8_submition_MLCE_L512_rdrop_0_RRL_scheduler_semi_supervised_1FGM_vote_integrate_max_5_20211116.json——0.97074954296——第一名最高,加入prediact_result_MLCE_vote_2.csv概率大于0.8的樣本7折驗證 23、v9_submition_MLCE_L512_rdrop_0_RRL_scheduler_FGM_logits_integrate_max_5_20211122.json——0.96282973621 < 0.96566 v4_submition_MLCEL512_rdrop_0_RRL_scheduler_FGM_logits_integrate_max_5_20211115.json 24、v9_submition_MLCE_L512_rdrop_0_RRL_scheduler_FGM_vote_integrate_max_5_20211122.json——0.96701966717 < 0.96964177292 v4_submition_MLCE_L512_rdrop_0_RRL_scheduler_FGM_vote_integrate_max_5_20211115.json 25、v9_submition_MLCE_L512_rdrop_0_RRL_scheduler_FGM_logits_integrate_max_7_20211122.json——0.96456456456 < 0.96566 v4_submition_MLCEL512_rdrop_0_RRL_scheduler_FGM_logits_integrate_max_5_20211115.json 26、v9_submition_MLCE_L512_rdrop_0_RRL_scheduler_FGM_vote_integrate_max_7_20211122.json——0.96768347931 < 0.96964177292 v4_submition_MLCE_L512_rdrop_0_RRL_scheduler_FGM_vote_integrate_max_5_20211115.json 7折無效3折驗證 27、v10_submition_MLCE_L512_rdrop_0_RRL_scheduler_FGM_logits_integrate_max_3_20211123.json——0.96047904192 < 0.96566 28、v10_submition_MLCE_L512_rdrop_0_RRL_scheduler_FGM_vote_integrate_max_3_20211123.json——0.96107784431 < 0.96964177292 3折無效ema驗證decay=0.999 29、v11_submition_MLCE_L512_rdrop_0_RRL_scheduler_FGM_vote_integrate_vote_alpha_0.6_max_5_20211123.json 0.97174111212 > 0.96964177292 提升明顯 30、v11_submition_MLCE_L512_rdrop_0_RRL_scheduler_FGM_vote_integrate_vote_alpha_0.6_max_3_20211123.json 0.96649562330 < 0.96964177292 未提升 vote = 0.6 ema 有效 31、v11_submition_MLCE_L512_rdrop_0_RRL_scheduler_FGM_vote_integrate_vote_alpha_0.8_max_5_20211123.json 0.97055215 < 0.97174111212 vote 0.8 效果沒有 0.6好以上bs = 8 ; max_len = 512序列長度驗證 數據處理——訓練集中把長于600的數據直接丟棄 max_len = 384 32、v12_submition_MLCE_L384_rdrop_0_RRL_scheduler_FGM_vote_integrate_vote_alpha_0.6_max_5_20211123.json 0.96489104116 < 0.97174111212 無效 下降蠻多預訓練驗證 33、v13_submition_MLCE_L512_rdrop_0_RRL_scheduler_FGM_vote_integrate_vote_alpha_0.6_max_5_pretrained_20211123.json 0.96883509834 < 0.97174111212 下降蠻多,無效,也有可能是預訓練出了問題沒有預訓練好dropout驗證 34、v14_submition_MLCE_L512_rdrop_0_RRL_scheduler_FGM_vote_integrate_vote_alpha_0.6_max_5_dropout_20211123.json 0.97028502122 < 0.97174111212 可能是dropout和FGM對抗訓練沖突了roberta 35、v15_roberta_submition_MLCE_L512_rdrop_0_RRL_scheduler_FGM_vote_integrate_vote_alpha_0.6_max_5_20211123.json 0.97014015844 < 0.97174111212 看情況拿來融合半監督驗證 把20211124_prediact_result_MLCE_vote_0.csv > 0.9的樣本加入訓練集中 模型bert 36、v16_bert_submition_MLCE_L512_rdrop_0_RRL_scheduler_semi_supervised_FGM_vote_integrate_vote_alpha_0.6_max_5_20211124.json 0.97289064880 > 0.97174111212 第一名把20211124_prediact_result_MLCE_vote_1.csv > 0.8的樣本加入訓練集中 模型bert 37、v17_bert_submition_MLCE_L512_rdrop_0_RRL_scheduler_semi_supervised_1_FGM_vote_integrate_vote_alpha_0.6_max_5_20211124.json 0.97343511450 > 0.97289064880 第一名roberta/ernie驗證 把20211124_prediact_result_MLCE_vote_1.csv > 0.8的樣本加入訓練集中 模型roberta 38、v18_roberta_submition_MLCE_L512_rdrop_0_RRL_scheduler_semi_supervised_1_FGM_vote_integrate_vote_alpha_0.6_max_5_20211124.json 0.97251069029 < 0.97343511450 感覺可以拿來融合 39、v19_ernie_submition_MLCE_L512_rdrop_0_RRL_scheduler_semi_supervised_1_FGM_vote_integrate_vote_alpha_0.6_max_5_20211124.json 0.97158570119 < 0.97174111212 感覺有點差不過也可以拿來融合 如果效果不好 可以用bert模型多跑幾個不同的隨機種子融合雙份數據驗證——batch內復制 40、v20_bert_submition_MLCE_L512_rdrop_0_RRL_scheduler_semi_supervised_1_double_copy_FGM_vote_integrate_vote_alpha_0.6_max_5_20211124.json 0.97406164175 > 0.97343511450 batch內復制有效——借助SIMCSE對比學習的思想對抗學習 FreeLB對比FGM驗證 FGM最佳 0.97343511450 41、v21_bert_submition_MLCE_L512_rdrop_0_RRL_scheduler_semi_supervised_1_FreeLB_vote_integrate_vote_alpha_0.6_max_5_20211125.json 0.97317073171 < 0.97343511450 無效 FGM > FreeLB

C、機器翻譯領域適應

????????這是一個多領域數據的中文到英文的機器翻譯任務,機器翻譯目前來說采用神經網絡來做翻譯算是比較成熟了。NMT一般都是采用transformer——seq2seq,encoder和decoder的架構;一般是有6層;單語訓練的預訓練模型bert權重等可以在NMT上提升一個bleu;基本的一些知識理論就是transformer block的理解了,pre-layernorm、post-layernorm 、FFN 、attention機制、解碼和編碼器采用的詞表是采用獨立的還是采用統一的(個人理解統一的代碼實現起來工作量少,所有大都采用統一的詞表)、解碼策略(greedy search;beam serach;top-K;top-P等)。項目中完全沒有接觸過翻譯,這個比賽正好可以來學習一下。

直接采用huggingface?transformers中的機器翻譯?translation支持如下生成類模型:

這里采用MarianMTModel,可以找到基于雙語平行語料訓練的模型。

比賽提供的訓練數據如下:

?3個領域的雙語平行語料,還有一部分單語語料,賽題的意圖應該就是要參賽者充分的利用平行雙語料來訓練模型,同時把單語料也要利用起來,做數據增強。其他的一些方法比如對抗訓練、半監督訓練等也能提點,當然也有基礎雙語預訓練模型的選取,后處理也是可以考慮進來的。

單語料怎么利用起來?

根據論文Exploiting Monolingual Data at Scale for Neural Machine Translation以及知乎文章大規模利用單語數據提升神經機器翻譯可以得到一些提升BLEU的方案,文章中給出的方案流程如下:

????????簡單來說就是把單語料模型用平行語料訓練好的模型翻譯后,作為新的數據集添加到訓練集中,給這個新的數據集源語言端添加部分噪聲,訓練出一個新的模型,以這個模型作為基礎然后再之前的部分數據集(有一定的技巧和細節)上做微調。

這個任務數據量適中,平行語料28W、單語料30W;采用3090單卡來訓練平行語料8個epoch大概需要13個小時,所以這個比賽設備也很關鍵!看一張圖,訓練英語到中文的模型

?訓練時間還是很久的,英語到漢語的BLEU還是比較低的,沒有中文到英語的BLEU高。

這里不放模型代碼也不放代碼解讀,就列一下基本思路,最后展示一下實驗效果。

baseline利用MarianMTModel訓練8個epoch的結果,BLEU:41.98844382766

論文中的第三步:

30W偽平行語料(30W英文語料翻譯為中文構建而來)加20W平行語料的訓練結果(不加噪聲)BLEU:44.67761919329

論文的第四步:取一部分單語料使用新模型(第一步中的模型)翻譯得到新的偽平行語料5W條,做微調結果:BLEU:43.93912

比賽采用第三步的結果最后做后處理,對翻譯結果做簡單的符號調整,人工過濾最后得分BLEU:45.88338754782

比賽最后的后處理方案思路是來自第二名的交流——感謝!

以上代碼在我的github上dataFountionCompetition_translatino_ner_mutillabel_classification

二、比賽的感悟和思考

經過這次比賽發現自己的積累還是不夠,需要再這個領域更多的積累。通過這次比賽熟悉了更多的比賽技巧和煉丹知識,收獲頗多!

1、賽題解析和方案預研

針對一個賽題一定好做好預研,看看以往相關的最優方案,也需要收集更多的資料,豐富自己的方案庫。

2、細心耐心

方案的嘗試和調參的過程中,一定要能堅持到底,同時保證每一步的正確性,做好記錄,消融實驗,確認實驗方案中的正向變量和因素。

3、團隊的重要性

如果能找到志同道合的人一起參加比賽,多多討論交流,把不同的想法實現出來,融合在一起,會得到更高的提升。

期待下次比賽能有所突破,取得更好的成績!

總結

以上是生活随笔為你收集整理的datafountain自然语言处理比赛的学习和总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。