天然語言處理之機器處理流程

來自微信公衆號人工智能頭條

爲何會有分詞

咱們知道天然語言處理中詞爲最小的處理單元,當你的語料爲句子、短文本、篇章時,咱們要作的第一步就是分詞。正則表達式

因爲英語的基本組成單位就是詞,分詞是比較容易的。其句子基本上就是由標點符號、空格和詞構成,那麼只要根據空格和標點符號將詞語分割便可。算法

中文和英文就有很大不一樣了。雖然基本組成單位也是詞,可是中文文本是由連續的字序列構成,詞與詞之間是沒有自然的分隔符,因此中文分詞相對來講困難不少。微信

首當其衝的就是歧義問題,不一樣的分割方式會致使不一樣的意思。中文分詞目前來講基本上分爲2種:網絡

  1. 基於詞典來進行分詞的。優勢是簡單有效,缺點是沒法很好的解決詞的歧義問題,尤爲在應對網絡新的流行詞彙時,表現不好機器學習

  2. 基於統計的分詞。經過人工標註對中文建模,而後將準備好的語料進行訓練。經過計算不一樣階段下出現的機率,選出機率最大的狀況做爲結果來進行分詞。這種分詞方法雖然能有效的避免分詞致使的歧義,但卻須要耗費至關大的性能性能

獲取語料

語料,即語言材料。語料是語言學研究的內容。語料是構成語料庫的基本單元。因此,人們簡單地用文本做爲替代,並把文本中的上下文關係做爲現實世界中語言的上下文關係的替代品。學習

咱們把一個文本集合稱爲語料庫(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 衡量。

錯誤率:是分類錯誤的樣本數佔樣本總數的比例。

精度:是分類正確的樣本數佔樣本總數的比例。這裏的分類正確的樣本數指的不只是正例分類正確的個數還有反例分類正確的個數。

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

準確率,縮寫表示用 P。準確率是針對咱們預測結果而言的,它表示的是預測爲正的樣例中有多少是真正的正樣例。

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

召回率,縮寫表示用 R。召回率是針對咱們原來的樣本而言的,它表示的是樣本中的正例有多少被預測正確。

F1 衡量,表達出對查準率/查全率的不一樣偏好。

2.ROC 曲線、AUC 曲線。

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

ROC 曲線的縱軸是「真正例率」(True Positive Rate, 簡稱 TPR),橫軸是「假正例率」(False Positive Rate,簡稱FPR)

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

  1. ROC 曲線能很容易的查出任意閾值對模型的泛化性能影響;

  2. 有助於選擇最佳的閾值;

  3. 能夠對不一樣的模型比較性能,在同一座標中,靠近左上角的 ROC 曲所表明的學習器準確性最高。

若是兩條 ROC 曲線沒有相交,咱們能夠根據哪條曲線最靠近左上角哪條曲線表明的學習器性能就最好。可是實際任務中,狀況很複雜,若兩個模型的 ROC 曲線發生交叉,則難以通常性的斷言二者孰優孰劣。此時若是必定要進行比較,則比較合理的判斷依據是比較 ROC 曲線下的面積,即AUC(Area Under ROC Curve)。

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

前面咱們所講的都是針對二分類問題,那麼若是實際須要在多分類問題中用 ROC 曲線的話,通常性的轉化爲多個「一對多」的問題。即把其中一個看成正例,其他看成負例來看待,畫出多個 ROC 曲線。

模型上線應用

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

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

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

模型重構(非必須)

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

相關文章
相關標籤/搜索