比賽地址https://tianchi.aliyun.com/competition/entrance/531865/introduction
賽題背景
自從2017年具有劃時(shí)代意義的Transformer模型問世以來隔嫡,短短兩年多的時(shí)間內(nèi)晾蜘,如雨后春筍般的出現(xiàn)了大量的預(yù)訓(xùn)練模型,比如:Bert,Albert,ELECTRA吗跋,RoBERta桌粉,T5,GPT3等等祭钉。然而之前的基準(zhǔn)評(píng)測(cè)體系存在兩個(gè)缺陷:評(píng)測(cè)強(qiáng)度不夠,模型不通用己沛。評(píng)測(cè)強(qiáng)度不夠指的是選手只提交結(jié)果慌核,不提交inference的代碼。模型不通用指的是預(yù)訓(xùn)練模型不能保證在相同超參數(shù)情況下在所有任務(wù)上都獲得比較好的性能申尼。以上兩點(diǎn)極大限制了預(yù)訓(xùn)練技術(shù)的應(yīng)用和發(fā)展垮卓。如果我們能通過算法實(shí)現(xiàn)泛化能力強(qiáng)的中文預(yù)訓(xùn)練模型,這將提高下游業(yè)務(wù)的準(zhǔn)確性师幕,從而提升企業(yè)的核心競(jìng)爭(zhēng)力粟按,并為企業(yè)創(chuàng)造更多的價(jià)值。
本賽題數(shù)據(jù)集來自中文語言理解測(cè)評(píng)基準(zhǔn)(CLUE), www.CLUEbenchmarks.com霹粥。為提供更好的比賽體驗(yàn)灭将,我們同時(shí)為本賽題定制了系列工具教程,其中包括EasyTransfer蒙挑、多任務(wù)baseline教程等宗侦,具體見參考資料。
賽題數(shù)據(jù)
本賽題精選了以下3個(gè)具有代表性的任務(wù)忆蚀,要求選手提交的模型能夠同時(shí)預(yù)測(cè)每個(gè)任務(wù)對(duì)應(yīng)的標(biāo)簽:
數(shù)據(jù)說明
OCNLI:是第一個(gè)非翻譯的矾利、使用原生漢語的大型中文自然語言推理數(shù)據(jù)集;?
OCEMOTION:是包含7個(gè)分類的細(xì)粒度情感性分析數(shù)據(jù)集馋袜;
TNEWS:來源于今日頭條的新聞版塊男旗,共包含15個(gè)類別的新聞;
數(shù)據(jù)格式
任務(wù)1:OCNLI–中文原版自然語言推理
0 一月份跟二月份肯定有一個(gè)月份有. 肯定有一個(gè)月份有 0
1 一月份跟二月份肯定有一個(gè)月份有. 一月份有 1
2 一月份跟二月份肯定有一個(gè)月份有. 一月二月都沒有 2
3 一點(diǎn)來鐘時(shí),張永紅卻來了 一點(diǎn)多鐘,張永紅來了 0
4 不講社會(huì)效果,信口開河,對(duì)任何事情都隨意發(fā)議論,甚至信謠傳謠,以訛傳訛,那是會(huì)渙散隊(duì)伍欣鳖、貽誤事業(yè)的 以訛傳訛是有害的 0
(注:id 句子1 句子2 標(biāo)簽)
(注:標(biāo)簽集合:[蘊(yùn)含察皇,中性,不相關(guān)])
任務(wù)2:OCEMOTION–中文情感分類
0 你知道多倫多附近有什么嗎?哈哈有破布耶...真的書上寫的你聽哦...你家那塊破布是世界上最大的破布,哈哈,騙你的啦它是說尼加拉瓜瀑布是世界上最大的瀑布啦...哈哈哈''爸爸,她的頭發(fā)耶!我們大掃除椅子都要翻上來我看到木頭縫里有頭發(fā)...一定是xx以前夾到的,你說是不是?[生病] sadness
1 平安夜,圣誕節(jié),都過了,我很難過,和媽媽吵了兩天,以死相逼才終止戰(zhàn)爭(zhēng),現(xiàn)在還處于冷戰(zhàn)中泽台。sadness
2 我只是自私了一點(diǎn),做自己想做的事情! sadness
3 讓感動(dòng)的不僅僅是雨過天晴,還有淚水流下來的迷人眼神什荣。happiness
4 好日子 happiness
(注:id 句子 標(biāo)簽)
任務(wù)3:TNEWS–今日頭條新聞標(biāo)題分類
0 上課時(shí)學(xué)生手機(jī)響個(gè)不停,老師一怒之下把手機(jī)摔了,家長(zhǎng)拿發(fā)票讓老師賠,大家怎么看待這種事? 108
1 商贏環(huán)球股份有限公司關(guān)于延期回復(fù)上海證券交易所對(duì)公司2017年年度報(bào)告的事后審核問詢函的公告 104
2 通過中介公司買了二手房,首付都付了,現(xiàn)在賣家不想賣了。怎么處理? 106
3 2018年去俄羅斯看世界杯得花多少錢? 112
4 剃須刀的個(gè)性革新,雷明登天貓定制版新品首發(fā) 109
(注:id 句子 標(biāo)簽)
Baseline
https://github.com/datawhalechina/team-learning-nlp/tree/master/PretrainModelsGeneralization 44
https://github.com/finlay-liu/tianchi-multi-task-nlp/blob/main/README.md
運(yùn)行過程
- 下載Bert全權(quán)重怀酷,下載 https://huggingface.co/bert-base-chinese/tree/main 下載config.json vocab.txt pytorch_model.bin稻爬,把這三個(gè)文件放進(jìn)tianchi-multi-task-nlp/bert_pretrain_model文件夾下。
- 下載比賽數(shù)據(jù)集蜕依,把三個(gè)數(shù)據(jù)集分別放進(jìn)
tianchi-multi-task-nlp/tianchi_datasets/數(shù)據(jù)集名字/
下面:
- OCEMOTION/total.csv: http://tianchi-competition.oss-cn-hangzhou.aliyuncs.com/531841/OCEMOTION_train1128.csv
- OCEMOTION/test.csv: http://tianchi-competition.oss-cn-hangzhou.aliyuncs.com/531841/b/ocemotion_test_B.csv
- TNEWS/total.csv: http://tianchi-competition.oss-cn-hangzhou.aliyuncs.com/531841/TNEWS_train1128.csv
- TNEWS/test.csv: http://tianchi-competition.oss-cn-hangzhou.aliyuncs.com/531841/b/tnews_test_B.csv
- OCNLI/total.csv: http://tianchi-competition.oss-cn-hangzhou.aliyuncs.com/531841/OCNLI_train1128.csv
- OCNLI/test.csv: http://tianchi-competition.oss-cn-hangzhou.aliyuncs.com/531841/b/ocnli_test_B.csv
文件目錄樣例:
tianchi-multi-task-nlp/tianchi_datasets/OCNLI/total.csv
tianchi-multi-task-nlp/tianchi_datasets/OCNLI/test.csv
- 分開訓(xùn)練集和驗(yàn)證集桅锄,默認(rèn)驗(yàn)證集是各3000條數(shù)據(jù)琉雳,參數(shù)可以自己修改:
python ./generate_data.py
- 訓(xùn)練模型,一個(gè)epoch:
python ./train.py
會(huì)保存驗(yàn)證集上平均f1分?jǐn)?shù)最高的模型到 ./saved_best.pt
- 用訓(xùn)練好的模型 ./saved_best.pt 生成結(jié)果:
python ./inference.py
- 打包預(yù)測(cè)結(jié)果友瘤。
zip -r ./result.zip ./*.json
- 生成Docker并進(jìn)行提交翠肘,參考:https://tianchi.aliyun.com/competition/entrance/231759/tab/174
- 創(chuàng)建云端鏡像倉(cāng)庫(kù):https://cr.console.aliyun.com/
- 創(chuàng)建命名空間和鏡像倉(cāng)庫(kù);
- 然后切換到
submission
文件夾下辫秧,執(zhí)行下面命令束倍;
# 用于登錄的用戶名為阿里云賬號(hào)全名,密碼為開通服務(wù)時(shí)設(shè)置的密碼茶没。
sudo docker login --username=xxx@mail.com registry.cn-hangzhou.aliyuncs.com
# 使用本地Dockefile進(jìn)行構(gòu)建肌幽,使用創(chuàng)建倉(cāng)庫(kù)的【公網(wǎng)地址】
# 如 docker build -t registry.cn-shenzhen.aliyuncs.com/test_for_tianchi/test_for_tianchi_submit:1.0 .
docker build -t registry.cn-shenzhen.aliyuncs.com/test_for_tianchi/test_for_tianchi_submit:1.0 .
輸出構(gòu)建過程:
Sending build context to Docker daemon 18.94kB
Step 1/4 : FROM registry.cn-shanghai.aliyuncs.com/tcc-public/python:3
---> a4cc999cf2aa
Step 2/4 : ADD . /
---> Using cache
---> b18fbb4425ef
Step 3/4 : WORKDIR /
---> Using cache
---> f5fcc4ca5eca
Step 4/4 : CMD ["sh", "run.sh"]
---> Using cache
---> ed0c4b0e545f
Successfully built ed0c4b0e545f
# ed0c4b0e545f 為鏡像id晚碾,上面構(gòu)建過程最后一行
sudo docker taged0c4b0e545f registry.cn-shenzhen.aliyuncs.com/test_for_tianchi/test_for_tianchi_submit:1.0
# 提交鏡像到云端
docker push registry.cn-shenzhen.aliyuncs.com/test_for_tianchi/test_for_tianchi_submit:1.0
- 比賽提交頁(yè)面抓半,填寫鏡像路徑+版本號(hào),以及用戶名和密碼則可以完成提交格嘁。
比賽改進(jìn)思路
- 修改 calculate_loss.py 改變loss的計(jì)算方式笛求,從平衡子任務(wù)難度以及各子任務(wù)類別樣本不均勻入手;
- 修改 net.py 改變模型的結(jié)構(gòu)糕簿,加入attention層探入,或者其他層;
- 使用 cleanlab 等工具對(duì)訓(xùn)練文本進(jìn)行清洗懂诗;
- 做文本數(shù)據(jù)增強(qiáng)蜂嗽,或者在預(yù)訓(xùn)練時(shí)候用其他數(shù)據(jù)集pretrain;
- 對(duì)訓(xùn)練好的模型再在完整數(shù)據(jù)集(包括驗(yàn)證集和訓(xùn)練集)上用小的學(xué)習(xí)率訓(xùn)練一個(gè)epoch殃恒;
- 調(diào)整bathSize和a_step植旧,變更梯度累計(jì)的程度,當(dāng)前是batchSize=16离唐,a_step=16病附;
- 用 chinese-roberta-wwm-ext 作為預(yù)訓(xùn)練模型;
最終結(jié)果
-
第一次提交結(jié)果
- 第二次提交結(jié)果
- 修改內(nèi)容
- 用 chinese-roberta-wwm-ext 作為預(yù)訓(xùn)練模型
-
修改batchSize=32