問題及需求
使用CNN,LSTM,Attention based model建立一個文本分類深度模型固然很好很強大,但是實際情況是,數(shù)據(jù)集和模型同等重要,到哪里去搞質(zhì)量好的打標簽的訓練樣本在短時間內(nèi)是一個問題。應對短平快,沒有數(shù)據(jù)集的情況下,能否找到一種可用的文本分類方法解決問題呢?
本文方法的切入點:快速,簡單,有效。
雖然方法比較簡單,但是作為一個trade off,在一定程度上能快速有效解決項目中實際用到的文本分類問題。
工具及方法
Tools:
- Bloom Filter(布隆過濾器)
對于原理來說很簡單,位數(shù)組+k個獨立hash函數(shù)。將hash函數(shù)對應的值的位數(shù)組置1,查找時如果發(fā)現(xiàn)所有hash函數(shù)對應位都是1說明存在,很明顯這個過程并不保證查找的結果是100%正確的。
Bloom Filter的這種高效是有一定代價的:在判斷一個元素是否屬于某個集合時,有可能會把不屬于這個集合的元素誤認為屬于這個集合(false positive)。因此,Bloom Filter不適合那些“零錯誤”的應用場合。而在能容忍低錯誤率的應用場合下,Bloom Filter通過極少的錯誤換取了存儲空間的極大節(jié)省。
- cell word bank(細胞詞庫)
可以理解為一個詞典,一系列相關的詞匯,比如“傳染病詞庫”,里面就包含了各種跟傳染病相關的詞,比如流行性感冒,狂犬病等等,搜狗輸入法有所收集。可以在網(wǎng)站上下載到。
- word2vec(詞向量)
谷歌開源的一個詞向量提取工具,在我們文本分類工作的作用是找近義詞,詞向量有很多有趣的性質(zhì),比如近義詞就是通過尋找word embedding之后得到的詞向量,其夾角較小或者歐幾里得距離較近的一組向量。在本方法中用于近義詞擴充細胞詞庫。
具體方法:
采用樸素貝葉斯的思想,分詞->統(tǒng)計文本中的詞在每個細胞詞庫中出現(xiàn)的次數(shù)。細胞詞庫及其詞的近義詞擴充(使用word2vec)在程序初始化的時候已經(jīng)在布隆過濾器中存好。這樣處理之后得到一個向量,向量的每一維度就是文本在對應細胞詞庫中出現(xiàn)的次數(shù)。最簡單的算法就是,在一個領域出現(xiàn)的詞越多,就說明我的文本屬于這個領域的可能性越大。
比如有這樣一個文本“習近平總書記出席G20杭州峰會”,其中習近平、總書記、出席、峰會都映射到了政治敏感的細胞詞庫中,那么我這個文本極有可能屬于政治敏感類。
在實際項目中發(fā)現(xiàn),這個方法的可用程度非常高。