訊飛比賽答辯結束,筆者和小夥伴們參加了一些訊飛的比賽,今年訊飛文本分類比賽相比去年更加多元化,涉及領域、任務和數據呈現多樣性,聽完各位大佬的答辯之後,結合之前經驗和以下賽題總結下文本分類比賽的實戰思路。
1 訊飛文本分類賽題總結
1.1 非標準化疾病訴求的簡單分診挑戰賽2.0 top3方案總結
賽事任務
進行簡單分診需要一定的數據和經驗知識進行支撐。本次比賽提供了部分好大夫在線的真實問診數據,經過嚴格脫敏,提供給參賽者進行單分類任務。具體爲:通過處理文字訴求,給出20個常見的就診方向之一和61個疾病方向之一
賽題特點
- 分類標籤有兩個,問診方向和疾病方向,並且評估指標分別爲macro-f1和micro-f1
- 疾病方向有不少數是缺失標籤,數據集中值爲-1
- 文本方向和疾病方向兩種標籤有一定約束關係,表現爲比如問診方向爲“小二消化疾病”,疾病方向爲“小兒消化不良”
- 數據特點
就診方向標籤中,其中內科、小兒保健、咽喉疾病數量比較多,骨科、甲狀腺疾病問診人數較少
疾病方向標籤中,其中內科其他最多,宮腔鏡疾病人數較少
數據預處理
(1) 對於文本字段,缺失值直接用空字符串“”填充
(2) 對於spo.txt文件,根據第一列疾病名稱構建聚合文本,用於文本語義增強,比如
(3)如果文本文本中含有疾病名稱,就根據拼接對應疾病的聚合文本,然後按照文本信息曝光量拼接文本,比如疾病名稱很大程度上指定了患者疾病類別歸屬, 注意:title和hopeHelp字段存在重複的情況,此時僅保留title即可
建模思路
賽題總結
- 問診疾病的知識文本,每條包含主體/(屬性)/客體的利用對標籤學習具有提升效果
- 聯合訓練問診方向與疾病方向標籤相比單獨訓練各自標籤的模型效果要好
- 僞標籤學習能夠進一步提升在疾病方向的效果
致謝隊友:我的心是冰冰的、江東、pxx_player
1.2 中文語義病句識別挑戰賽 top2方案總結
賽事任務
中文語義病句識別是一個二分類的問題,預測句子是否是語義病句。語義錯誤和拼寫錯誤、語法錯誤不同,語義錯誤更加關注句子語義層面的合法性,語義病句例子如下表所示。
賽題特點
-
本次比賽使用的數據一部分來自網絡上的中小學病句題庫,一部分來自人工標註,比賽一開始拿到數據的時候,真的讓人去做病句識別就很難
-
標籤分佈比較特殊,數據量比較大,1的數據是0的數量約3倍
數據預處理
- 在比賽過程中,選手們可以發現這個數據比較容易擬合,通過分析其中有部分數據比較相似、甚至有些是重複數據,所以需要過濾去除重複數據,減少線差
- 數據劃分採用多折分層採樣
建模思路
- 在實驗過程中,我們嘗試了一些中文預訓練模型,比如選擇macbert或者具有糾錯能力的模型,效果不錯的是macbert和electra
shibing624/macbert4csc-base-chinese
hfl/chinese-macbert-base、hfl/chinese-macbert-large
nezha-large-zh
hfl/chinese-electra-large-discriminator
hfl/chinese-roberta-wwm-ext
賽題總結
- 中文病句識別的預訓練底座基礎選型比較重要,其中electra和macbert不錯,除此看其他大佬使用了prompt learning、pert模型
- 數據去重可以減少線差
致謝隊友:江東、A08B06365ECB216A
1.3 人崗匹配挑戰賽 top2方案總結
賽題任務
智能人崗匹配需要強大的數據作爲支撐,本次大賽提供了大量的崗位JD和求職者簡歷的加密脫敏數據作爲訓練樣本,參賽選手需基於提供的樣本構建模型,預測簡歷與崗位匹配與否。
數據預處理
本次比賽爲參賽選手提供了大量的崗位JD和求職者簡歷,其中:
崗位JD數據包含4個特徵字段:job_id, 職位名稱, 職位描述, 職位要求
求職者簡歷數據包含15個特徵字段:
id, 學校類別, 第一學歷, 第一學歷學校, 第一學歷專業, 最高學歷, 最高學歷學校, 最高學歷專業, 教育經歷, 學術成果, 校園經歷, 實習經歷, 獲獎信息, 其他證書信息, job_id。
-
在訓練集中,job_id的數量分佈如下,可以看出崗位4和12數量最多,38和37崗位比較少
建模思路
- 詞表構建
由於本次比賽數據爲匿名數據,開源中文預訓練模型不適用,因此需要重新構建詞表、語料,進而重新訓練預訓練模型
第一步,構建詞彙表,根據訓練集、測試集和JD數據,按照空格分詞,對所有文本進行切分,然後構建詞彙表,另外需要加入五個特殊字符,[PAD]、[UNK]、[CLS]、[SEP]、[MASK],最後詞彙表大小爲4571 - 預訓練語料構建
由於本次比賽數據爲匿名數據,開源中文預訓練模型不適用,因此需要重新構建詞表、語料,進而重新訓練預訓練模型
第二步,構建預訓練語料,直接將學校類別, 第一學歷, 第一學歷學校, 第一學歷專業, 最高學歷, 最高學歷學校, 最高學歷專業, 教育經歷, 學術成果, 校園經歷, 實習經歷, 獲獎信息, 其他證書信息這些字段的文本拼接在一起,生成一個人的簡歷描述。
- 預訓練任務
在實驗過程中,我們選擇了兩種預訓練模型結構:Bert和Nezha,其中Nezha效果要明顯優於Bert
-
分類微調
將人崗匹配任務看做是文本分類任務,對簡歷文本進行多分類
賽題總結
- 在人崗匿名數據上微調,能夠有效地捕獲語義知識,並識別出不同崗位類型
- NEZHA基於BERT模型,並進行了多處優化,能夠在一系列中文自然語言理解任務達到先進水平
- 老肥隊伍、舉哥採用的思路都不同,給了很大啓發,統計特徵以及傳統NN網絡對文本分類進一步提升
致謝隊友:WEI Z/江東/小澤/跟大佬喝口湯
優化算法合集
下面是一些常規套路,不一定每一個任務都有作用,和數據集、預訓練模型有很大關係,大家可以酌情選擇
- FGM
- EMA
- PGD
- FreeLB
- AWP
- MultiDropout
-MixOut
微調方法總結
文本分類還有一些微調的小技巧,也歡迎大家補充
- 分層學習率
- 多折交叉驗證
- 僞標籤學習
- Freeze Embedding
- Fp16混合精度訓練
更多NLP內容,歡迎大家關注公衆號ChallengeHub