2020年初,新冠疫情席卷全球。除了“待在家,不亂跑”,我想還能從哪為抗擊疫情出點微薄之力呢?
碰巧室友推送了一個天池公益賽“新冠疫情相似句對判定大賽”,秉持“重在參與”的心態參加了比賽。經過半個月的努力,最終結果勉強不錯(第6),收割了一臺Kindle。
2021年1月,疫情形勢依然嚴峻,幸運的是國家不僅及時穩住了疫情,還研發出了有效的疫苗。借助疫情主題的比賽,我希望幫助更多讀者,入門自然語言處理的基本任務——文本匹配。
開源代碼:
https://github.com/yechens/COVID-19-sentence-pair
01 數據分析任務背景非常直觀,主辦方給定了“肺炎”、“支氣管炎”、“上呼吸道感染”等醫療背景下的用戶真實提問,要求選手通過算法識別任意2個問題,是否表達同一個意思。舉例:
問題1:“輕微感冒需不需要吃藥?”
問題2:“輕微感冒需要吃什么藥?”
問題1關心“是否得吃藥”,問題2關心“該吃什么藥”,側重點不同所以意思不同。
數據集樣本都是三元組(query1, query2, label)。為了降低難度,每一個問題的長度被控制在20字以內。
比賽的訓練集、驗證集分別包含8746、2001條三元組。我們從dev中隨機保留了800條樣本作為最終dev,其余均加入訓練。
數據增強拿到數據簡單分析后,我發現數據集已經過清洗,竟然異常的干凈整齊(沒有雜亂的符號、不通順的句子),label分布幾乎也接近1:1。
再觀察數據,相同的query1總是按順序排列在一起,隨后跟著不同的query2。這種分布很容易想到一種數據增強策略:相似傳遞性。
A 《-》 B 相似 and A 《-》 C 相似 =》 B 《-》 C 相似
最終我額外獲得了5000條高質量的數據,比賽準確率因此提升了0.5%。
實體替換此外,我們也嘗試了訓練一個NER模型挖掘文本中的醫療實體,如“胸膜炎”、“肺氣腫”,再通過word2vec查找最接近的實體進行替換。
但這種方式并沒有提升最終結果。我覺得原因有2個:
1W條樣本規模偏小,NER模型識別誤差較大
詞向量沒有針對醫療場景訓練,包含的醫療實體很少
02 匹配方法實現文本匹配有非常多簡單又實用的方法,例如:
基于字符統計:字符串匹配、編輯距離、Jaccards距離
基于語言模型:word2vec/glove詞向量、BERT
基于神經網絡:孿生網絡、TextCNN、DSSM、FastText等
由于比賽需要盡可能獲得高分,這里主要介紹基于神經網絡和BERT的文本匹配算法。
BERT[1]是一種預訓練語言模型,通過海量文本、Transformer架構和MLM訓練任務在眾多NLP任務上取得了優異成果。對BERT不了解的讀者,可以參考我之前的文章“從BERT、XLNet到MPNet,細看NLP預訓練模型發展變遷史”[2]。
比賽中我們測試了5-6種不同的神經網絡方法,并最終選擇了3種在dev上表現最好的模型加權融合。具體可以參考 文件。
文本CNN(TextCNN)TextCNN是Yoon Kim[3]在2014年提出的用于句子分類的卷積神經網絡。文本匹配任務本質上可以理解成二分類任務(0:不相似,1:相似),所以一般的分類模型也能滿足匹配需求。
與圖像中的二維卷積不同,TextCNN采用的是一維卷積,每個卷積核的大小為 (h為卷積核窗口,k為詞向量維度)。文中采用了不同尺寸的卷積核,來提取不同文本長度的特征。
然后,作者對于卷積核的輸出進行最大池化操作,只保留最重要的特征。各個卷積核輸出經MaxPooling后拼接形成一個新向量,最后輸出到全連接層分類器(Dropout + Linear + Softmax)實現分類。
我們知道,文本中的關鍵詞對于判斷2個句子是否相似有很大影響,而CNN局部卷積的特效能很好的捕捉這種關鍵特征。同時TextCNN還具有參數量小,訓練穩定等優點。
文本RNN(TextRCNN)相比TextCNN,TextRCNN的模型結構看起來復雜一些。
簡單瀏覽論文后,會發現它的思路其實簡單,粗暴。
首先通過詞向量獲得字符編碼 ,隨后將其通過雙向RNN學習上下文特征,編碼得到兩個方向的特征。
再將詞向量 和 、 拼接得到新向量,輸入經tanh函數激活的全連接網絡。最后,將網絡的輸出最大池化,并輸入另一個全連接分類器完成分類。
RNN模型對于長文本有較好的上下文“記憶”能力,更適合處理文本這種包含時間序列的信息。
BERT+MLP(fine-tune)最后一種方法,直接用語言模型BERT最后一層Transformer的輸出,接一層Dense實現文本匹配。
實驗中我們發現,對最終輸出的每個token特征取平均(MeanPooling)效果好于直接使用首字符“[CLS]”的特征。
模型權重上,崔一鳴等人[5]發布的中文roberta_wwm_ext_large模型效果要好于BERT_large。
最后,我們根據這三種模型在dev上的準確率設置了不同比重,通過自動搜索找到最優權重組合,在線上測試集取得了96.26%的準確率。
讀者可以在“NLP情報局”后臺回復“文本匹配”直接下載模型論文。
03 漲分trick做一個深度學習主導的算法比賽,除了分析數據與模型,一些trick也是獲得高分的重要因素。這里羅列了一些常用策略。
數據增強[6]
標簽平滑
自蒸餾
文本對抗訓練[7]
模型融合
特征篩選
使用多個學習率[8]
針對這次文本匹配任務,數據增強、標簽平滑、模型融合、多學習率都被證明是有效的。
04 總結過去將近1年的天池“新冠疫情相似句對判定大賽”,任務并不復雜,是入門NLP項目實戰,提升編程能力的很好鍛煉機會。
比賽雖然結束了,疫情猶在。大家一定要保護好自己哦!
編輯:jq
-
神經網絡
+關注
關注
42文章
4771瀏覽量
100718 -
數據集
+關注
關注
4文章
1208瀏覽量
24689 -
nlp
+關注
關注
1文章
488瀏覽量
22033
原文標題:天池NLP賽道top指南
文章出處:【微信號:zenRRan,微信公眾號:深度學習自然語言處理】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論