nlp總體框架

https://blog.csdn.net/valada/article/details/80892583

獲取語料

語料,即語言材料。語料是語言學研究的內容。語料是構成語料庫的基本單元。所以,人們簡單地用文本作爲替代,並把文本中的上下文關係作爲現實世界中語言的上下文關係的替代品。我們把一個文本集合稱爲語料庫(Corpus),當有幾個這樣的文本集合的時候,我們稱之爲語料庫集合(Corpora)。(定義來源:百度百科)按語料來源,我們將語料分爲以下兩種:

1.已有語料

很多業務部門、公司等組織隨着業務發展都會積累有大量的紙質或者電子文本資料。那麼,對於這些資料,在允許的條件下我們稍加整合,把紙質的文本全部電子化就可以作爲我們的語料庫。

2.網上下載、抓取語料

如果現在個人手裏沒有數據怎麼辦呢?這個時候,我們可以選擇獲取國內外標準開放數據集,比如國內的中文漢語有搜狗語料、人民日報語料。國外的因爲大都是英文或者外文,這裏暫時用不到。也可以選擇通過爬蟲自己去抓取一些數據,然後來進行後續內容。

語料預處理


這裏重點介紹一下語料的預處理,在一個完整的中文自然語言處理工程應用中,語料預處理大概會佔到整個50%-70%的工作量,所以開發人員大部分時間就在進行語料預處理。下面通過數據洗清、分詞、詞性標註、去停用詞四個大的方面來完成語料的預處理工作。

1.語料清洗

數據清洗,顧名思義就是在語料中找到我們感興趣的東西,把不感興趣的、視爲噪音的內容清洗刪除,包括對於原始文本提取標題、摘要、正文等信息,對於爬取的網頁內容,去除廣告、標籤、HTML、JS 等代碼和註釋等。常見的數據清洗方式有:人工去重、對齊、刪除和標註等,或者規則提取內容、正則表達式匹配、根據詞性和命名實體提取、編寫腳本或者代碼批處理等。

2.分詞

中文語料數據爲一批短文本或者長文本,比如:句子,文章摘要,段落或者整篇文章組成的一個集合。一般句子、段落之間的字、詞語是連續的,有一定含義。而進行文本挖掘分析時,我們希望文本處理的最小單位粒度是詞或者詞語,所以這個時候就需要分詞來將文本全部進行分詞。

常見的分詞算法有:基於字符串匹配的分詞方法、基於理解的分詞方法、基於統計的分詞方法和基於規則的分詞方法,每種方法下面對應許多具體的算法。

當前中文分詞算法的主要難點有歧義識別和新詞識別,比如:“羽毛球拍賣完了”,這個可以切分成“羽毛 球拍 賣 完 了”,也可切分成“羽毛球 拍賣 完 了”,如果不依賴上下文其他的句子,恐怕很難知道如何去理解。

3.詞性標註

詞性標註,就是給每個詞或者詞語打詞類標籤,如形容詞、動詞、名詞等。這樣做可以讓文本在後面的處理中融入更多有用的語言信息。詞性標註是一個經典的序列標註問題,不過對於有些中文自然語言處理來說,詞性標註不是非必需的。比如,常見的文本分類就不用關心詞性問題,但是類似情感分析、知識推理卻是需要的,下圖是常見的中文詞性整理。

常見的詞性標註方法可以分爲基於規則和基於統計的方法。其中基於統計的方法,如基於最大熵的詞性標註、基於統計最大概率輸出詞性和基於 HMM 的詞性標註。

4.去停用詞

停用詞一般指對文本特徵沒有任何貢獻作用的字詞,比如標點符號、語氣、人稱等一些詞。所以在一般性的文本處理中,分詞之後,接下來一步就是去停用詞。但是對於中文來說,去停用詞操作不是一成不變的,停用詞詞典是根據具體場景來決定的,比如在情感分析中,語氣詞、感嘆號是應該保留的,因爲他們對錶示語氣程度、感情色彩有一定的貢獻和意義。

特徵工程


做完語料預處理之後,接下來需要考慮如何把分詞之後的字和詞語表示成計算機能夠計算的類型。顯然,如果要計算我們至少需要把中文分詞的字符串轉換成數字,確切的說應該是數學中的向量。有兩種常用的表示模型分別是詞袋模型和詞向量。

詞袋模型(Bag of Word, BOW),即不考慮詞語原本在句子中的順序,直接將每一個詞語或者符號統一放置在一個集合(如 list),然後按照計數的方式對出現的次數進行統計。統計詞頻這只是最基本的方式,TF-IDF 是詞袋模型的一個經典用法。

詞向量是將字、詞語轉換成向量矩陣的計算模型。目前爲止最常用的詞表示方法是 One-hot,這種方法把每個詞表示爲一個很長的向量。這個向量的維度是詞表大小,其中絕大多數元素爲 0,只有一個維度的值爲 1,這個維度就代表了當前的詞。還有 Google 團隊的 Word2Vec,其主要包含兩個模型:跳字模型(Skip-Gram)和連續詞袋模型(Continuous Bag of Words,簡稱 CBOW),以及兩種高效訓練的方法:負採樣(Negative Sampling)和層序 Softmax(Hierarchical Softmax)。值得一提的是,Word2Vec 詞向量可以較好地表達不同詞之間的相似和類比關係。除此之外,還有一些詞向量的表示方式,如 Doc2Vec、WordRank 和 FastText 等。

特徵選擇
同數據挖掘一樣,在文本挖掘相關問題中,特徵工程也是必不可少的。在一個實際問題中,構造好的特徵向量,是要選擇合適的、表達能力強的特徵。文本特徵一般都是詞語,具有語義信息,使用特徵選擇能夠找出一個特徵子集,其仍然可以保留語義信息;但通過特徵提取找到的特徵子空間,將會丟失部分語義信息。所以特徵選擇是一個很有挑戰的過程,更多的依賴於經驗和專業知識,並且有很多現成的算法來進行特徵的選擇。目前,常見的特徵選擇方法主要有 DF、 MI、 IG、 CHI、WLLR、WFO 六種。

模型訓練


在特徵向量選擇好之後,接下來要做的事情當然就是訓練模型,對於不同的應用需求,我們使用不同的模型,傳統的有監督和無監督等機器學習模型, 如 KNN、SVM、Naive Bayes、決策樹、GBDT、K-means 等模型;深度學習模型比如 CNN、RNN、LSTM、 Seq2Seq、FastText、TextCNN 等。這些模型在後續的分類、聚類、神經序列、情感分析等示例中都會用到,這裏不再贅述。下面是在模型訓練時需要注意的幾個點。

1.注意過擬合、欠擬合問題,不斷提高模型的泛化能力。

過擬合:模型學習能力太強,以至於把噪聲數據的特徵也學習到了,導致模型泛化能力下降,在訓練集上表現很好,但是在測試集上表現很差。

常見的解決方法有:

增大數據的訓練量;
增加正則化項,如 L1 正則和 L2 正則;
特徵選取不合理,人工篩選特徵和使用特徵選擇算法;
採用 Dropout 方法等。
欠擬合:就是模型不能夠很好地擬合數據,表現在模型過於簡單。

常見的解決方法有:

添加其他特徵項;
增加模型複雜度,比如神經網絡加更多的層、線性模型通過添加多項式使模型泛化能力更強;
減少正則化參數,正則化的目的是用來防止過擬合的,但是現在模型出現了欠擬合,則需要減少正則化參數。
2.對於神經網絡,注意梯度消失和梯度爆炸問題。

評價指標
訓練好的模型,上線之前要對模型進行必要的評估,目的讓模型對語料具備較好的泛化能力。具體有以下這些指標可以參考。

1.錯誤率、精度、準確率、精確度、召回率、F1 衡量。

錯誤率:是分類錯誤的樣本數佔樣本總數的比例。對樣例集 D,分類錯誤率計算公式如下:

精度:是分類正確的樣本數佔樣本總數的比例。這裏的分類正確的樣本數指的不僅是正例分類正確的個數還有反例分類正確的個數。對樣例集 D,精度計算公式如下:

對於二分類問題,可將樣例根據其真實類別與學習器預測類別的組合劃分爲真正例(True Positive)、假正例(False Positive)、真反例(True Negative)、假反例(False Negative)四種情形,令 TP、FP、TN、FN 分別表示其對應的樣例數,則顯然有 TP+FP++TN+FN=樣例總數。分類結果的“混淆矩陣”(Confusion Matrix)如下:

準確率,縮寫表示用 P。準確率是針對我們預測結果而言的,它表示的是預測爲正的樣例中有多少是真正的正樣例。定義公式如下:

精確度,縮寫表示用 A。精確度則是分類正確的樣本數佔樣本總數的比例。Accuracy 反應了分類器對整個樣本的判定能力(即能將正的判定爲正的,負的判定爲負的)。定義公式如下:

召回率,縮寫表示用 R。召回率是針對我們原來的樣本而言的,它表示的是樣本中的正例有多少被預測正確。定義公式如下:

F1 衡量,表達出對查準率/查全率的不同偏好。定義公式如下:

2.ROC 曲線、AUC 曲線。

ROC 全稱是“受試者工作特徵”(Receiver Operating Characteristic)曲線。我們根據模型的預測結果,把閾值從0變到最大,即剛開始是把每個樣本作爲正例進行預測,隨着閾值的增大,學習器預測正樣例數越來越少,直到最後沒有一個樣本是正樣例。在這一過程中,每次計算出兩個重要量的值,分別以它們爲橫、縱座標作圖,就得到了 ROC 曲線。

ROC 曲線的縱軸是“真正例率”(True Positive Rate, 簡稱 TPR),橫軸是“假正例率”(False Positive Rate,簡稱FPR),兩者分別定義爲:

ROC 曲線的意義有以下幾點:

ROC 曲線能很容易的查出任意閾值對模型的泛化性能影響;
有助於選擇最佳的閾值;
可以對不同的模型比較性能,在同一座標中,靠近左上角的 ROC 曲所代表的學習器準確性最高。
如果兩條 ROC 曲線沒有相交,我們可以根據哪條曲線最靠近左上角哪條曲線代表的學習器性能就最好。但是實際任務中,情況很複雜,若兩個模型的 ROC 曲線發生交叉,則難以一般性的斷言兩者孰優孰劣。此時如果一定要進行比較,則比較合理的判斷依據是比較 ROC 曲線下的面積,即AUC(Area Under ROC Curve)。

AUC 就是 ROC 曲線下的面積,衡量學習器優劣的一種性能指標。AUC 是衡量二分類模型優劣的一種評價指標,表示預測的正例排在負例前面的概率。

前面我們所講的都是針對二分類問題,那麼如果實際需要在多分類問題中用 ROC 曲線的話,一般性的轉化爲多個“一對多”的問題。即把其中一個當作正例,其餘當作負例來看待,畫出多個 ROC 曲線。

模型上線應用
模型線上應用,目前主流的應用方式就是提供服務或者將模型持久化。

第一就是線下訓練模型,然後將模型做線上部署,發佈成接口服務以供業務系統使用。

第二種就是在線訓練,在線訓練完成之後把模型 pickle 持久化,然後在線服務接口模板通過讀取 pickle 而改變接口服務。

模型重構(非必須)
隨着時間和變化,可能需要對模型做一定的重構,包括根據業務不同側重點對上面提到的一至七步驟也進行調整,重新訓練模型進行上線。

參考文獻
周志華《機器學習》
李航《統計學習方法》
伊恩·古德費洛《深度學習》
 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章