自然語言學習01

中文自然語言處理入門實戰

  按照中文語料處理的過程,在獲取到語料之後開始分詞,分詞之後可以進行一些統計和關鍵字提取,並通過數據可視化手段熟悉和了解你的數據。緊接着通過詞袋或者詞向量,把文本數據轉換成計算機可以計算的矩陣向量。後續從機器學習簡單的有監督分類和無監督聚類入手,到深度學習中神經網絡的應用,以及簡易聊天機器人和知識圖譜的構建。

  結構化數據、半結構化和非結構化數據

  對於結構化數據而言:關係型數據庫以及基於 Hadoop 的 HDFS 分佈式文件系統、Hive 數據倉庫和非關係型數據庫 Hbase,以及 Elasticsearch 集羣等數據存儲的關係數據庫或者 NoSQL,可以用來管理和存儲數據。基於 MapReduce、Spark 和 Storm、Flink 等大數據處理框架可以分別處理離線和實時數據等。

  半結構化、非結構化的數據:除了以 ELK 爲代表的日誌處理流程,過去在其它限定領域基於規則和知識庫也取得了一定的成果

  圖靈測試

  自然語言處理(NLP)的研究對象是計算機和人類語言的交互,其任務是理解人類語言並將其轉換爲機器語言。在目前的商業場中,NLP 技術用於分析源自郵件、音頻、文件、網頁、論壇、社交媒體中的大量半結構化和非結構化數據、

 

 enter image description hereenter image description here

  

 

   獲取語料

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

1.已有語料

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

2.網上下載、抓取語料

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

  語料預處理

數據洗清、分詞、詞性標註、去停用詞四個大的方面來完成語料的預處理工作。

1.語料清洗

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

2.分詞

  進行文本挖掘分析時,我們希望文本處理的最小單位粒度是詞或者詞語,所以這個時候就需要分詞來將文本全部進行分詞。

  常見的分詞算法有:基於字符串匹配的分詞方法、基於理解的分詞方法、基於統計的分詞方法和基於規則的分詞方法

3.詞性標註

  是給每個詞或者詞語打詞類標籤,如形容詞、動詞、名詞等。常見的文本分類就不用關心詞性問題,但是類似情感分析、知識推理卻是需要的。

enter image description here

常見的詞性標註方法可以分爲基於規則和基於統計的方法。其中基於統計的方法,如基於最大熵的詞性標註、基於統計最大概率輸出詞性和基於 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,分類錯誤率計算公式如下:

enter image description here

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

enter image description here

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

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

enter image description here

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

enter image description here

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

enter image description here

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

enter image description here

2.ROC 曲線、AUC 曲線

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

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

enter image description here

 

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

  1. ROC 曲線能很容易的查出任意閾值對模型的泛化性能影響;
  2. 有助於選擇最佳的閾值;
  3. 可以對不同的模型比較性能,在同一座標中,靠近左上角的 ROC 曲所代表的學習器準確性最高。

若兩個模型的 ROC 曲線發生交叉,則難以一般性的斷言兩者孰優孰劣。此時如果一定要進行比較,則比較合理的判斷依據是比較 ROC 曲線下的面積,即AUC(Area Under ROC Curve)。

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

如果實際需要在多分類問題中用 ROC 曲線的話,一般性的轉化爲多個“一對多”的問題。即把其中一個當作正例,其餘當作負例來看待,畫出多個 ROC 曲線。

模型上線應用

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

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

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

模型重構(非必須)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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