自然語言處理賽流程
在NLP賽中,如今很多思路和CV賽是類似的,甚至Pipeline思路也是一致的。
簡介
隨着CV(計算機視覺)大量研究人員的涌入,相對而言,計算機視覺的發展進入了一個飽和時期,而自然語言處理的路還有很長,很多NLP科學家認爲未來十年是NLP黃金的十年。
過去幾年我們也看到了NLP領域很多突破性的成果,BERT、XLNet等模型的出現爲NLP帶來一些新的可能性,這些模型也被廣泛使用在比賽中。
NLP主要有一些任務如文本分類、文本相似度、序列標註、閱讀理解、機器翻譯、信息抽取等,目前很多數據科學競賽平臺都舉辦了NLP比賽,並且最近有愈演愈烈之勢。
賽前準備
參加NLP比賽必須要對賽題有充分的理解,也就是對賽題的背景知識有充足的瞭解。此外,可以查閱是否有過類似的任務,看看前人的解決方案,或者在其他人的baseline基礎上修改(注意,從頭開始碼一個賽題的源碼是很累且沒有必要的,有很多人會開放他們的baseline源碼,在這些baseline基礎上修改會事半功倍。這點在Kaggle上尤爲明顯,Kaggle是一個非常優秀的比賽平臺。)
到了比賽後期,如果已經沒有什麼突破了,就到了組隊的時機,一般選擇排名差不多的組隊,融合多人的結果會取得更好的效果。(前期不建議組隊是因爲一個隊伍是有提交限制的,分開是爲了更好的在一起。)
工具選擇
NLP是個複雜的任務,要想取得不錯的效果需要使用各種庫,下面推薦幾個常用的工具包。
- Gensim
- NLTK
- TextBlob
- CoreNLP
- TensorFlow
數據探索
在NLP比賽中一般不使用EDA(探索性數據分析)來稱呼自然語言任務中的數據探索,這是因爲其數據大多格式統一(文本文件配以一個說明性表格文件)沒必要進行過多的探索,達不到分析的地步(只需要示例性地探索說明文件和文本文件即可)。
-
數據集存儲信息
通過shell腳本或者Python腳本瞭解數據集中數據的基本信息,如文本格式,標註方式(文件夾名稱標註一批文本或者csv文件逐一標註每個文本,前者更加常用,適用於分佈式存儲和分類迴歸等多種任務)等。使用Python腳本更加靈活且保證整個項目的流程化。
-
文本格式
抽樣顯示文本及其標籤或者標註,確認是否需要對文本進行進一步處理,如文本分類中每個文本是給的是否爲分詞後的結果。
作爲比賽參與者,一般關係下面的信息即可。
- 文本長度
- 字頻、詞頻
- 標籤的分佈
數據預處理
數據決定了模型的上限,算法只是逼近這個上限,所以數據預處理很重要。這一部分主要介紹數據預處理的一些思路,分爲中文和英文兩種思路。
中文
- 非文本內容刪除(正則表達式)
- 處理中文編碼問題(轉爲UTF8)
- 中文分詞(Jiaba分詞、pkuseg等)
- 引入停用詞(哈工大停用詞表,停用詞取出後的效果不一定很好,特別對於RNN這種序列模型)
- 特徵工程
英文
- 非文本內容刪除
- 拼寫檢查及更正
- 詞幹提取及詞形還原(NLTK工具包)
- 大小寫轉化
- 特徵工程
Pipeline制定
目前對NLP比賽,分爲兩種方法,爲傳統方法和深度方法。不過近年來,深度方法取得了更好的效果,所以比賽中較好的表現大多都採用了深度方法,尤其是一些新模型。
文本特徵構建及建模
文本特徵的構建核心的思路就是爲每個文本(一句或者一段或者一篇文章)生成一個結構化的特徵,方便分類器的訓練。
如何生成這種文本的結構化特徵,目前主要有兩種整體思路,分別爲傳統方法(機器學習方法)和深度學習方法。
-
傳統方法
主要有LDA主題模型、LSI主題模型、TFIDF(詞頻逆文檔頻率)等文本特徵提取的方法。一般採用傳統方法進行特徵提取,也會使用傳統的機器學習模型進行建模處理,常用的機器學習模型有邏輯迴歸(LR)、支持向量機(SVM)、LightGBM等。
-
深度方法
主要採用深度網絡進行特徵提取,是一種自動進行特徵編碼的機器學習模型,主要有CNN、RNN、Transformer等。使用深度方法進行特徵提取則一般構建端到端的系統,所以不會採用其他的傳統分類器或者回歸器,會在特徵的輸出層結一個全連接層作爲分類或者回歸模型。這一步也會有很多網絡結構的設計方法,但是我們一般採用前人發明的很不錯的結構基礎上進行修改,如BERT等。
模型應用
企業提出比賽當然是希望能在業界使用,過於冗餘的模型就算metric刷得好看也是不會受到青睞的。
補充說明
本文較爲簡略的說明了自然語言處理類比賽的主要流程及方法,由於篇幅限制沒有過細展開,具體的相關問題可以查看我的其他博客。博客同步至我的個人博客網站,歡迎查看。如有錯誤,歡迎指正。