第01课:中文自然语言处理的完整机器处理流程
2016年全球矚目的圍棋大戰(zhàn)中,人類以失敗告終,更是激起了各種“機(jī)器超越、控制人類”的討論,然而機(jī)器真的懂人類嗎?機(jī)器能感受到人類的情緒嗎?機(jī)器能理解人類的語(yǔ)言嗎?如果能,那它又是如何做到呢?帶著這樣好奇心,本文將帶領(lǐng)大家熟悉和回顧一個(gè)完整的自然語(yǔ)言處理過(guò)程,后續(xù)所有章節(jié)所有示例開(kāi)發(fā)都將遵從這個(gè)處理過(guò)程。
首先我們通過(guò)一張圖(來(lái)源:網(wǎng)絡(luò))來(lái)了解 NLP 所包含的技術(shù)知識(shí)點(diǎn),這張圖從分析對(duì)象和分析內(nèi)容兩個(gè)不同的維度來(lái)進(jìn)行表達(dá),個(gè)人覺(jué)得內(nèi)容只能作為參考,對(duì)于整個(gè) AI 背景下的自然語(yǔ)言處理來(lái)說(shuō)還不夠完整。
有機(jī)器學(xué)習(xí)相關(guān)經(jīng)驗(yàn)的人都知道,中文自然語(yǔ)言處理的過(guò)程和機(jī)器學(xué)習(xí)過(guò)程大體一致,但又存在很多細(xì)節(jié)上的不同點(diǎn),下面我們就來(lái)看看中文自然語(yǔ)言處理的基本過(guò)程有哪些呢?
獲取語(yǔ)料
語(yǔ)料,即語(yǔ)言材料。語(yǔ)料是語(yǔ)言學(xué)研究的內(nèi)容。語(yǔ)料是構(gòu)成語(yǔ)料庫(kù)的基本單元。所以,人們簡(jiǎn)單地用文本作為替代,并把文本中的上下文關(guān)系作為現(xiàn)實(shí)世界中語(yǔ)言的上下文關(guān)系的替代品。我們把一個(gè)文本集合稱為語(yǔ)料庫(kù)(Corpus),當(dāng)有幾個(gè)這樣的文本集合的時(shí)候,我們稱之為語(yǔ)料庫(kù)集合(Corpora)。(定義來(lái)源:百度百科)按語(yǔ)料來(lái)源,我們將語(yǔ)料分為以下兩種:
1.已有語(yǔ)料
很多業(yè)務(wù)部門(mén)、公司等組織隨著業(yè)務(wù)發(fā)展都會(huì)積累有大量的紙質(zhì)或者電子文本資料。那么,對(duì)于這些資料,在允許的條件下我們稍加整合,把紙質(zhì)的文本全部電子化就可以作為我們的語(yǔ)料庫(kù)。
2.網(wǎng)上下載、抓取語(yǔ)料
如果現(xiàn)在個(gè)人手里沒(méi)有數(shù)據(jù)怎么辦呢?這個(gè)時(shí)候,我們可以選擇獲取國(guó)內(nèi)外標(biāo)準(zhǔn)開(kāi)放數(shù)據(jù)集,比如國(guó)內(nèi)的中文漢語(yǔ)有搜狗語(yǔ)料、人民日?qǐng)?bào)語(yǔ)料。國(guó)外的因?yàn)榇蠖际怯⑽幕蛘咄馕?#xff0c;這里暫時(shí)用不到。也可以選擇通過(guò)爬蟲(chóng)自己去抓取一些數(shù)據(jù),然后來(lái)進(jìn)行后續(xù)內(nèi)容。
語(yǔ)料預(yù)處理
這里重點(diǎn)介紹一下語(yǔ)料的預(yù)處理,在一個(gè)完整的中文自然語(yǔ)言處理工程應(yīng)用中,語(yǔ)料預(yù)處理大概會(huì)占到整個(gè)50%-70%的工作量,所以開(kāi)發(fā)人員大部分時(shí)間就在進(jìn)行語(yǔ)料預(yù)處理。下面通過(guò)數(shù)據(jù)洗清、分詞、詞性標(biāo)注、去停用詞四個(gè)大的方面來(lái)完成語(yǔ)料的預(yù)處理工作。
1.語(yǔ)料清洗
數(shù)據(jù)清洗,顧名思義就是在語(yǔ)料中找到我們感興趣的東西,把不感興趣的、視為噪音的內(nèi)容清洗刪除,包括對(duì)于原始文本提取標(biāo)題、摘要、正文等信息,對(duì)于爬取的網(wǎng)頁(yè)內(nèi)容,去除廣告、標(biāo)簽、HTML、JS 等代碼和注釋等。常見(jiàn)的數(shù)據(jù)清洗方式有:人工去重、對(duì)齊、刪除和標(biāo)注等,或者規(guī)則提取內(nèi)容、正則表達(dá)式匹配、根據(jù)詞性和命名實(shí)體提取、編寫(xiě)腳本或者代碼批處理等。
2.分詞
中文語(yǔ)料數(shù)據(jù)為一批短文本或者長(zhǎng)文本,比如:句子,文章摘要,段落或者整篇文章組成的一個(gè)集合。一般句子、段落之間的字、詞語(yǔ)是連續(xù)的,有一定含義。而進(jìn)行文本挖掘分析時(shí),我們希望文本處理的最小單位粒度是詞或者詞語(yǔ),所以這個(gè)時(shí)候就需要分詞來(lái)將文本全部進(jìn)行分詞。
常見(jiàn)的分詞算法有:基于字符串匹配的分詞方法、基于理解的分詞方法、基于統(tǒng)計(jì)的分詞方法和基于規(guī)則的分詞方法,每種方法下面對(duì)應(yīng)許多具體的算法。
當(dāng)前中文分詞算法的主要難點(diǎn)有歧義識(shí)別和新詞識(shí)別,比如:“羽毛球拍賣完了”,這個(gè)可以切分成“羽毛 球拍 賣 完 了”,也可切分成“羽毛球 拍賣 完 了”,如果不依賴上下文其他的句子,恐怕很難知道如何去理解。
3.詞性標(biāo)注
詞性標(biāo)注,就是給每個(gè)詞或者詞語(yǔ)打詞類標(biāo)簽,如形容詞、動(dòng)詞、名詞等。這樣做可以讓文本在后面的處理中融入更多有用的語(yǔ)言信息。詞性標(biāo)注是一個(gè)經(jīng)典的序列標(biāo)注問(wèn)題,不過(guò)對(duì)于有些中文自然語(yǔ)言處理來(lái)說(shuō),詞性標(biāo)注不是非必需的。比如,常見(jiàn)的文本分類就不用關(guān)心詞性問(wèn)題,但是類似情感分析、知識(shí)推理卻是需要的,下圖是常見(jiàn)的中文詞性整理。
常見(jiàn)的詞性標(biāo)注方法可以分為基于規(guī)則和基于統(tǒng)計(jì)的方法。其中基于統(tǒng)計(jì)的方法,如基于最大熵的詞性標(biāo)注、基于統(tǒng)計(jì)最大概率輸出詞性和基于 HMM 的詞性標(biāo)注。
4.去停用詞
停用詞一般指對(duì)文本特征沒(méi)有任何貢獻(xiàn)作用的字詞,比如標(biāo)點(diǎn)符號(hào)、語(yǔ)氣、人稱等一些詞。所以在一般性的文本處理中,分詞之后,接下來(lái)一步就是去停用詞。但是對(duì)于中文來(lái)說(shuō),去停用詞操作不是一成不變的,停用詞詞典是根據(jù)具體場(chǎng)景來(lái)決定的,比如在情感分析中,語(yǔ)氣詞、感嘆號(hào)是應(yīng)該保留的,因?yàn)樗麄儗?duì)表示語(yǔ)氣程度、感情色彩有一定的貢獻(xiàn)和意義。
特征工程
做完語(yǔ)料預(yù)處理之后,接下來(lái)需要考慮如何把分詞之后的字和詞語(yǔ)表示成計(jì)算機(jī)能夠計(jì)算的類型。顯然,如果要計(jì)算我們至少需要把中文分詞的字符串轉(zhuǎn)換成數(shù)字,確切的說(shuō)應(yīng)該是數(shù)學(xué)中的向量。有兩種常用的表示模型分別是詞袋模型和詞向量。
詞袋模型(Bag of Word, BOW),即不考慮詞語(yǔ)原本在句子中的順序,直接將每一個(gè)詞語(yǔ)或者符號(hào)統(tǒng)一放置在一個(gè)集合(如 list),然后按照計(jì)數(shù)的方式對(duì)出現(xiàn)的次數(shù)進(jìn)行統(tǒng)計(jì)。統(tǒng)計(jì)詞頻這只是最基本的方式,TF-IDF 是詞袋模型的一個(gè)經(jīng)典用法。
詞向量是將字、詞語(yǔ)轉(zhuǎn)換成向量矩陣的計(jì)算模型。目前為止最常用的詞表示方法是 One-hot,這種方法把每個(gè)詞表示為一個(gè)很長(zhǎng)的向量。這個(gè)向量的維度是詞表大小,其中絕大多數(shù)元素為 0,只有一個(gè)維度的值為 1,這個(gè)維度就代表了當(dāng)前的詞。還有 Google 團(tuán)隊(duì)的 Word2Vec,其主要包含兩個(gè)模型:跳字模型(Skip-Gram)和連續(xù)詞袋模型(Continuous Bag of Words,簡(jiǎn)稱 CBOW),以及兩種高效訓(xùn)練的方法:負(fù)采樣(Negative Sampling)和層序 Softmax(Hierarchical Softmax)。值得一提的是,Word2Vec 詞向量可以較好地表達(dá)不同詞之間的相似和類比關(guān)系。除此之外,還有一些詞向量的表示方式,如 Doc2Vec、WordRank 和 FastText 等。
特征選擇
同數(shù)據(jù)挖掘一樣,在文本挖掘相關(guān)問(wèn)題中,特征工程也是必不可少的。在一個(gè)實(shí)際問(wèn)題中,構(gòu)造好的特征向量,是要選擇合適的、表達(dá)能力強(qiáng)的特征。文本特征一般都是詞語(yǔ),具有語(yǔ)義信息,使用特征選擇能夠找出一個(gè)特征子集,其仍然可以保留語(yǔ)義信息;但通過(guò)特征提取找到的特征子空間,將會(huì)丟失部分語(yǔ)義信息。所以特征選擇是一個(gè)很有挑戰(zhàn)的過(guò)程,更多的依賴于經(jīng)驗(yàn)和專業(yè)知識(shí),并且有很多現(xiàn)成的算法來(lái)進(jìn)行特征的選擇。目前,常見(jiàn)的特征選擇方法主要有 DF、 MI、 IG、 CHI、WLLR、WFO 六種。
模型訓(xùn)練
在特征向量選擇好之后,接下來(lái)要做的事情當(dāng)然就是訓(xùn)練模型,對(duì)于不同的應(yīng)用需求,我們使用不同的模型,傳統(tǒng)的有監(jiān)督和無(wú)監(jiān)督等機(jī)器學(xué)習(xí)模型, 如 KNN、SVM、Naive Bayes、決策樹(shù)、GBDT、K-means 等模型;深度學(xué)習(xí)模型比如 CNN、RNN、LSTM、 Seq2Seq、FastText、TextCNN 等。這些模型在后續(xù)的分類、聚類、神經(jīng)序列、情感分析等示例中都會(huì)用到,這里不再贅述。下面是在模型訓(xùn)練時(shí)需要注意的幾個(gè)點(diǎn)。
1.注意過(guò)擬合、欠擬合問(wèn)題,不斷提高模型的泛化能力。
過(guò)擬合:模型學(xué)習(xí)能力太強(qiáng),以至于把噪聲數(shù)據(jù)的特征也學(xué)習(xí)到了,導(dǎo)致模型泛化能力下降,在訓(xùn)練集上表現(xiàn)很好,但是在測(cè)試集上表現(xiàn)很差。
常見(jiàn)的解決方法有:
- 增大數(shù)據(jù)的訓(xùn)練量;
- 增加正則化項(xiàng),如 L1 正則和 L2 正則;
- 特征選取不合理,人工篩選特征和使用特征選擇算法;
- 采用 Dropout 方法等。
欠擬合:就是模型不能夠很好地?cái)M合數(shù)據(jù),表現(xiàn)在模型過(guò)于簡(jiǎn)單。
常見(jiàn)的解決方法有:
- 添加其他特征項(xiàng);
- 增加模型復(fù)雜度,比如神經(jīng)網(wǎng)絡(luò)加更多的層、線性模型通過(guò)添加多項(xiàng)式使模型泛化能力更強(qiáng);
- 減少正則化參數(shù),正則化的目的是用來(lái)防止過(guò)擬合的,但是現(xiàn)在模型出現(xiàn)了欠擬合,則需要減少正則化參數(shù)。
2.對(duì)于神經(jīng)網(wǎng)絡(luò),注意梯度消失和梯度爆炸問(wèn)題。
評(píng)價(jià)指標(biāo)
訓(xùn)練好的模型,上線之前要對(duì)模型進(jìn)行必要的評(píng)估,目的讓模型對(duì)語(yǔ)料具備較好的泛化能力。具體有以下這些指標(biāo)可以參考。
1.錯(cuò)誤率、精度、準(zhǔn)確率、精確度、召回率、F1 衡量。
錯(cuò)誤率:是分類錯(cuò)誤的樣本數(shù)占樣本總數(shù)的比例。對(duì)樣例集 D,分類錯(cuò)誤率計(jì)算公式如下:
精度:是分類正確的樣本數(shù)占樣本總數(shù)的比例。這里的分類正確的樣本數(shù)指的不僅是正例分類正確的個(gè)數(shù)還有反例分類正確的個(gè)數(shù)。對(duì)樣例集 D,精度計(jì)算公式如下:
對(duì)于二分類問(wèn)題,可將樣例根據(jù)其真實(shí)類別與學(xué)習(xí)器預(yù)測(cè)類別的組合劃分為真正例(True Positive)、假正例(False Positive)、真反例(True Negative)、假反例(False Negative)四種情形,令 TP、FP、TN、FN 分別表示其對(duì)應(yīng)的樣例數(shù),則顯然有 TP+FP++TN+FN=樣例總數(shù)。分類結(jié)果的“混淆矩陣”(Confusion Matrix)如下:
準(zhǔn)確率,縮寫(xiě)表示用 P。準(zhǔn)確率是針對(duì)我們預(yù)測(cè)結(jié)果而言的,它表示的是預(yù)測(cè)為正的樣例中有多少是真正的正樣例。定義公式如下:
精確度,縮寫(xiě)表示用 A。精確度則是分類正確的樣本數(shù)占樣本總數(shù)的比例。Accuracy 反應(yīng)了分類器對(duì)整個(gè)樣本的判定能力(即能將正的判定為正的,負(fù)的判定為負(fù)的)。定義公式如下:
召回率,縮寫(xiě)表示用 R。召回率是針對(duì)我們?cè)瓉?lái)的樣本而言的,它表示的是樣本中的正例有多少被預(yù)測(cè)正確。定義公式如下:
F1 衡量,表達(dá)出對(duì)查準(zhǔn)率/查全率的不同偏好。定義公式如下:
2.ROC 曲線、AUC 曲線。
ROC 全稱是“受試者工作特征”(Receiver Operating Characteristic)曲線。我們根據(jù)模型的預(yù)測(cè)結(jié)果,把閾值從0變到最大,即剛開(kāi)始是把每個(gè)樣本作為正例進(jìn)行預(yù)測(cè),隨著閾值的增大,學(xué)習(xí)器預(yù)測(cè)正樣例數(shù)越來(lái)越少,直到最后沒(méi)有一個(gè)樣本是正樣例。在這一過(guò)程中,每次計(jì)算出兩個(gè)重要量的值,分別以它們?yōu)闄M、縱坐標(biāo)作圖,就得到了 ROC 曲線。
ROC 曲線的縱軸是“真正例率”(True Positive Rate, 簡(jiǎn)稱 TPR),橫軸是“假正例率”(False Positive Rate,簡(jiǎn)稱FPR),兩者分別定義為:
ROC 曲線的意義有以下幾點(diǎn):
如果兩條 ROC 曲線沒(méi)有相交,我們可以根據(jù)哪條曲線最靠近左上角哪條曲線代表的學(xué)習(xí)器性能就最好。但是實(shí)際任務(wù)中,情況很復(fù)雜,若兩個(gè)模型的 ROC 曲線發(fā)生交叉,則難以一般性的斷言兩者孰優(yōu)孰劣。此時(shí)如果一定要進(jìn)行比較,則比較合理的判斷依據(jù)是比較 ROC 曲線下的面積,即AUC(Area Under ROC Curve)。
AUC 就是 ROC 曲線下的面積,衡量學(xué)習(xí)器優(yōu)劣的一種性能指標(biāo)。AUC 是衡量二分類模型優(yōu)劣的一種評(píng)價(jià)指標(biāo),表示預(yù)測(cè)的正例排在負(fù)例前面的概率。
前面我們所講的都是針對(duì)二分類問(wèn)題,那么如果實(shí)際需要在多分類問(wèn)題中用 ROC 曲線的話,一般性的轉(zhuǎn)化為多個(gè)“一對(duì)多”的問(wèn)題。即把其中一個(gè)當(dāng)作正例,其余當(dāng)作負(fù)例來(lái)看待,畫(huà)出多個(gè) ROC 曲線。
模型上線應(yīng)用
模型線上應(yīng)用,目前主流的應(yīng)用方式就是提供服務(wù)或者將模型持久化。
第一就是線下訓(xùn)練模型,然后將模型做線上部署,發(fā)布成接口服務(wù)以供業(yè)務(wù)系統(tǒng)使用。
第二種就是在線訓(xùn)練,在線訓(xùn)練完成之后把模型 pickle 持久化,然后在線服務(wù)接口模板通過(guò)讀取 pickle 而改變接口服務(wù)。
模型重構(gòu)(非必須)
隨著時(shí)間和變化,可能需要對(duì)模型做一定的重構(gòu),包括根據(jù)業(yè)務(wù)不同側(cè)重點(diǎn)對(duì)上面提到的一至七步驟也進(jìn)行調(diào)整,重新訓(xùn)練模型進(jìn)行上線。
參考文獻(xiàn)
總結(jié)
以上是生活随笔為你收集整理的第01课:中文自然语言处理的完整机器处理流程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 第02课:简单好用的中文分词利器 jie
- 下一篇: 开篇词:中文自然语言处理——未来数据领域