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