?文本分類指的是計(jì)算機(jī)通過算法對輸入的文本按照一定的類目體系進(jìn)行自動化歸類的過程。在人工智能浪潮席卷全球的今天,文本分類技術(shù)已經(jīng)被廣泛地應(yīng)用在文本審核、廣告過濾、情感分析和反黃識別等NLP領(lǐng)域。本文從達(dá)觀數(shù)據(jù)中文文本分類的實(shí)踐出發(fā),總結(jié)了從數(shù)據(jù)預(yù)處理到特征工程、算法選擇再到后處理和評價指標(biāo)等流程中的10項(xiàng)關(guān)鍵內(nèi)容,希望能對讀者有所幫助。
?
在實(shí)際的中文文本分類問題中,我們面對的原始中文文本數(shù)據(jù)經(jīng)常會存在許多影響最終分類效果的部分,這部分?jǐn)?shù)據(jù)或文本都需要在文本分類最開始的時候就被清洗干凈,否則很容易導(dǎo)致所謂的“Trash in,trash out”問題。除了一般分類問題的數(shù)據(jù)清洗都包含的缺失值處理、去重處理和噪聲處理等步驟之外,中文文本分類還應(yīng)該做到以下的清洗與處理以下數(shù)據(jù):
?
(1)?非文本數(shù)據(jù)
?
(2)?長串?dāng)?shù)字或字母
(3)?無意義文本
?
?
變形詞問題除了能讓我們感嘆中文博大精深之外,也時時刻刻困擾文本分類工作者,極大地增加了廣告識別、涉黃涉政等特殊的文本分類場景下的分類難度。對中文詞的變形通常采用的方法有:特殊符號替換、同音近型替換、簡繁替換等。
?
要做到變形詞的識別和替換,除了建立常見變形詞的映射表以外,還可以嘗試用拼音首字母的方法來鑒別同音替換的變形詞;以及用 Word2vec詞向量來對比變形詞與上下文的語意關(guān)聯(lián)度,從而識別出該詞是否經(jīng)過了變形。
?
?
停用詞指的是諸如代詞、介詞、連接詞等不包含或包含極少語義的詞,另外標(biāo)點(diǎn)符號也可以被認(rèn)為是一種停用詞。通常情況下,在文本中去掉這些停用詞能夠使模型更好地去擬合實(shí)際的語義特征,從而增加模型的泛化能力。
?
但值得注意的是,停用詞表并不是一成不變的。針對不同的文本分類情景,所采用的停用詞表也應(yīng)該作出針對性的調(diào)整。例如書名號“《”和“》”往往比書名本身更能代表書名的特征、冒號“:”通常出現(xiàn)在人物訪談類文章的標(biāo)題中,以及人稱代詞“他”和“她”在情感類文章標(biāo)題中的頻繁使用等。根據(jù)情景靈活地使用停用詞表,往往能夠起到意想不到的效果。
?
由于計(jì)算機(jī)無法識別自然語言,我們自然也就無法直接將原始文本直接扔到分類算法當(dāng)中得到分類結(jié)果。因此我們需要先將文本轉(zhuǎn)化為一定格式的特征編碼,文本分類區(qū)別于其他文類問題的特點(diǎn)在于此。顯然,轉(zhuǎn)化后的特征編碼能夠攜帶越多的文本特征,就越能幫助分類算法預(yù)測出對于的類別。
?
中文文本分類最常用的特征提取的方法就是分詞。區(qū)別于英文天然的存在空格符作為詞與詞之間的間隔標(biāo)志,中文文本中詞的提取必須通過基于序列預(yù)測等方法的分詞技術(shù)來實(shí)現(xiàn)。在提取了特征值之后,再采用One-hot或TF-IDF等方法將每個樣本轉(zhuǎn)化為固定長度的特征編碼作為分類算法的輸入。
?
除了分詞,N-gram模型也完全值得你去嘗試。分詞產(chǎn)生的特征丟失了原文本中詞與詞之間的的位置和順序信息,以至于對于“我愛你”、“你愛我”這樣的短語,分詞得到的特征完全相同。同樣的例子,若采用二元的Bi-gram模型則能提取出“我愛”、“愛你”以及“你愛”、“愛我”兩組完全不同的特征,更清晰得表達(dá)的原文的原意。
在在中文文本分類中,另一個N-gram模型相對分詞的優(yōu)勢在于:N-gram模型不受分詞準(zhǔn)確率的影響。并且當(dāng)N取足夠大時,字符級別的N-gram模型總是能完全覆蓋分詞+詞袋模型的特征集合,同時能極大得召回其他特征,這一點(diǎn)在短文本分類中效果格外明顯。
在工程實(shí)踐中,為了不讓特征集合過于龐大從而拖累分類速度,一般同時采用N為1到3的N-gram就能取得較好的效果。
?
另一個值得一試的模型叫做Skip-gram模型。有別于word2vec中獲得詞向量的Skip-gram模型,這里中的Skip-gram模型表示的是一種衍生自N-gram模型的語言模型。對于例句“小明去學(xué)校上自習(xí)”,常用的1-skip-bi-gram得到的特征為{“小明_學(xué)校”,“去_上”,“學(xué)校_自習(xí)”}。一般情況下,Skip-gram可以做為N-gram的補(bǔ)充,從而提取一些可能遺漏的有效特征。
?
?
前面介紹了三種不同的提取文本特征的方法,再加上舉例的長串?dāng)?shù)字布爾特征,我們已經(jīng)有了許多不同來源的特征。嘗試這些特征方法中的一種或多種,并對來自不同方法的特征進(jìn)行組合產(chǎn)生新的特征,能在特定的復(fù)雜文本分類場景下獲得意想不到的效果。
?
例如將文本特征和結(jié)構(gòu)特征進(jìn)行組合是一種常見的做法:首先將文本按一定的長度閾值劃分為兩類,假設(shè)文本長度大于20的為長文本,否則為短文本。則可以將獲得的長度結(jié)構(gòu)特征和分詞提取的文本特征進(jìn)行組合,從而得到形如“長文本_小明”、“短文本_學(xué)校”等新生成的組合特征。諸如此類的特征組合方法,能夠使得模型從非線性的角度進(jìn)行分類,大大提升模型處理復(fù)問題的能力。
?
另外,假如你同時采用了多種特征方法,不妨對這些特征進(jìn)行分桶標(biāo)記。如對分詞特征“小明”標(biāo)記為“wordseg:小明”、對skip-gram特征“小明_學(xué)校”標(biāo)記為“skipgram:小明_學(xué)校”。這樣,就能在后續(xù)的特征選擇和特征排序等步驟中,清楚的知道哪些特征方法起到了較好的效果。
?
在用上述方法對文本提取了特征之后,如果我們直接將所有特征直接丟入分類器,那么最終訓(xùn)練得到的模型的效果往往并不盡如人意。特別是在模型的訓(xùn)練和預(yù)測速度上,由于經(jīng)過多個特征提取和組合方法之后的特征空間會極度膨脹,模型需要學(xué)習(xí)的參數(shù)數(shù)量也因此暴漲,從而大大地增加了訓(xùn)練和預(yù)測過程的耗時。因此,在候選特征集合中選擇保留最有效的部分就顯得尤為重要。常用的特征選擇方法有卡方檢驗(yàn)和信息增益等。
卡方檢驗(yàn)的目的是計(jì)算每個特征對分類結(jié)果的相關(guān)性,相關(guān)性越大則越有助于分類器進(jìn)行分類,否則就可以將其作為無用特征拋棄??ǚ綑z驗(yàn)是一種常用的統(tǒng)計(jì)檢驗(yàn)方法,但是其缺點(diǎn)在于僅考慮特征是否出現(xiàn)對于分類結(jié)果的影響,而忽略了詞頻的重要性,因此卡方檢驗(yàn)往往夸大了低頻詞的作用。信息增益用來計(jì)算一個特征對整個分類系統(tǒng)帶來的信息的多少,帶來的信息越多意味著該特征對分類越重要。此外一些分類算法本身也有特征選擇的作用,例如C4.5決策樹就是采用信息增益的方法來計(jì)算最佳的劃分特征、邏輯回歸模型訓(xùn)練后可以得到特征權(quán)重等。
值得一提的是,TF-IDF并不是一種真正意義上的特征選擇方法。通過TF-IDF算法可以得到特征在每一篇文章中重要性,但是卻沒有考慮特征在類間的分布情況。也就是說,假如類別A中的所有文章都包含詞t,類別B中均不包含,但可能由于類別A樣本在總樣本中占比較極高,原本顯著的分類特征t卻因?yàn)橛?jì)算得到的TF-IDF值較小而被過濾掉了,這顯然沒有起到特征選擇的目的。
?
?
對于各種算法內(nèi)部的原理和實(shí)現(xiàn),本文并不打算深入探討。在機(jī)器學(xué)習(xí)算法庫趨于成熟的今天,無論是在單機(jī)還是分布式甚至GPU集群上,所有你需要做的就是調(diào)用和調(diào)參即可。因此,在條件允許的情況下,建議盡可能多的在各種數(shù)據(jù)集上測試不同算法,并且記錄其在各項(xiàng)指標(biāo)上的效果,從而清楚地了解各種算法的特點(diǎn)。
?
下表總結(jié)了各個常用分類算法在中文文本分類情景下的對比情況,可供參考。
*注:TextCNN和LSTM模型的訓(xùn)練一般需要通過GPU加速。
?
事實(shí)上分類算法并沒有絕對的好壞之分,在合適的場合才用適當(dāng)?shù)乃惴ú攀顷P(guān)鍵。如果是在線分類場景,那么預(yù)測速度較快的算法應(yīng)該成為首選;如果需要快速迭代,那么訓(xùn)練速度快且調(diào)參難度小的算法更合適;若不考慮時間開銷,那么嘗試對多個模型進(jìn)行集成(Ensemble)是最常用的提升分類效果的方法。
?
許多人將多標(biāo)簽分類(Multi-labelClassification)與多類分類(Multi-classClassification)混淆。后者主要區(qū)別于二分類問題,指的是在類別數(shù)大于2的候選集合中互斥地選取一個類別作為輸出,例如將一條評論按情感傾向分類到{“正面”、“中立”、“負(fù)面”}當(dāng)中的一個。而多標(biāo)簽分類則表示在類別數(shù)大于等于2的候選集合中非互斥地選取任意個類別作為輸出,例如一篇標(biāo)題為“國務(wù)院決定設(shè)立河北雄安新區(qū)”的新聞文章可以同時被分為政治、經(jīng)濟(jì)兩個類別。
多標(biāo)簽分類算法通常被分為兩類,一類將多標(biāo)簽分類問題轉(zhuǎn)化為多個單標(biāo)簽二分類問題,被成為問題轉(zhuǎn)化模型(Problem Transformation);另一類則將原來的單標(biāo)簽分類算法修改為支持多標(biāo)簽分類的算法,被稱為適應(yīng)性方法(Adapted Method)。問題轉(zhuǎn)化模型中最常用的一種叫做Binary Relevance,其思想類似于多類分類中的One-Vs-Rest,即對每一個候選類別均訓(xùn)練一個二元分類器來判別樣本是否屬于該類。因此在類別數(shù)目很大的情況下,應(yīng)盡量選擇訓(xùn)練和預(yù)測速度較快的算法來訓(xùn)練內(nèi)部的二元分類器。而在適應(yīng)性方法中,基于決策樹的算法和k最近鄰的算法都能夠較容易地修改為支持多標(biāo)簽分類的環(huán)境。
?
在面對實(shí)際中文文本分類問題時,誰都無法保證自己的模型能夠100%分類準(zhǔn)確。后處理旨在對模型輸出的預(yù)測結(jié)果進(jìn)行人工干預(yù),從而保證最后的結(jié)果的可靠性。
?
關(guān)鍵詞規(guī)則是最常用的后處理方法,其特點(diǎn)在于能夠直接地將領(lǐng)域知識引入到分類系統(tǒng)當(dāng)中。關(guān)鍵詞規(guī)則不僅可以實(shí)現(xiàn)一個或多個關(guān)鍵詞對應(yīng)一個類別,更可以在上層算法給出概率輸出的情況下實(shí)現(xiàn)一對多和多對多的規(guī)則映射。并且,我們可以根據(jù)實(shí)際情況對不同的關(guān)鍵詞規(guī)則設(shè)定作用強(qiáng)度和優(yōu)先級,從而更加靈活地調(diào)整得到預(yù)測結(jié)果。值得注意的是要控制關(guān)鍵詞規(guī)則的粒度大小,粒度過大可能導(dǎo)致其它原本正確的樣本被誤操作而使得總體的準(zhǔn)確性降低;粒度過小會使每條的作用范圍變小,極大地增加設(shè)置后處理規(guī)則的工作量。
?
在最后輸出階段,還有一個實(shí)用的后處理方法就是對概率或置信度較低的預(yù)測結(jié)果歸為“其他”類別,即讓模型學(xué)會說:“我不知道”。這樣做可以提高分類系統(tǒng)的使用體驗(yàn),而不致于讓使用者迷失在錯誤的猜測結(jié)果中。
?
?
關(guān)于評價指標(biāo),一般最先想到的就是分類準(zhǔn)確率(Precision),但準(zhǔn)確率并不是全部。如果一個分類模型的準(zhǔn)確率很高而召回率很低(Recall),那么反而意味著模型沒能把其他本該預(yù)測出來的類別給預(yù)測出來。這常常在兩種情況下發(fā)生:
?
一是在非均衡樣本中,模型由于學(xué)習(xí)不到足夠的小類的特征而傾向于把大部分小類樣本預(yù)測為大類類別,雖然預(yù)測為小類的部分準(zhǔn)確率較高,但是更多的小類樣本卻沒有被召回。面對這種情況,應(yīng)該關(guān)注小類類別的F1值情況,即準(zhǔn)確率與召回率調(diào)和平均值;
?
二是在多標(biāo)簽分類中,如果一個模型偏向于保守,那么其可能只對某個多標(biāo)簽的樣本預(yù)測出最有把握的一個標(biāo)簽,雖然保證了預(yù)測準(zhǔn)確性,但是仍然沒有召回其它的有效標(biāo)簽。此時,可以適當(dāng)降低內(nèi)部的二元分類器的預(yù)測閾值。如假設(shè)原來只有預(yù)測得分高于0.5的候選標(biāo)簽被輸出,則將閾值降低到0.3時可以得到更多的預(yù)測標(biāo)簽,從而提高分類的召回率。
在互聯(lián)網(wǎng)技術(shù)極速發(fā)展的今天,文本信息越來越多地以不同的形式出現(xiàn)在我們的視野內(nèi)。達(dá)觀數(shù)據(jù)將文本分類始終作為文本挖掘和NLP領(lǐng)域的關(guān)鍵技術(shù),應(yīng)用在廣泛的場景之中。
BOUT
關(guān)于作者
王子豪:達(dá)觀數(shù)據(jù)高級NLP算法工程師,負(fù)責(zé)達(dá)觀數(shù)據(jù)文本挖掘和NLP算法的開發(fā)及應(yīng)用,在文本分類、觀點(diǎn)挖掘和情感分析等領(lǐng)域有豐富實(shí)踐經(jīng)驗(yàn)。