基于樸素貝葉斯的自然語言分類器

概述
自然語言分類是指按照預先定義的主題類別,為文檔集合中的每個文檔確定一個類別。本文將介紹一個限定類別的自然語言分類器的原理和實現。采用Python作為編程語言,采用樸素貝葉斯作為分類器,使用jieba進行分詞,并使用scikit-learn實現分類器。
訓練數據來自于鳳凰網,最終交叉驗證的平均準確率是0.927。
一、訓練數據獲取
中文自然語言分類現成可用的有搜狗自然語言分類語料庫、北京大學建立的人民日報語料庫、清華大學建立的現代漢語語料庫等。由于語言在使用過程中會不斷演進,具有一定的時效性,我們最終決定自己開發爬蟲爬取訓練數據。經過綜合考慮,我們最終將目標選定為鳳凰網。
我們選取鳳凰網移動版開展數據獲取工作,地址為http://i.ifeng.com/ 如圖1所示。移動版的頁面布局簡單清晰,但由于文章列表采用了下拉刷新的動態更新策略,直接解析頁面源碼效率太低,最終決定直接調用網頁api獲取。比如獲取十條鳳凰“軍事”的內容,訪問http://imil.ifeng.com/20_2/data.shtml 返回結果如圖2左。最終獲取到4784條新聞,都保存到MySQL數據庫,具體數據如圖2右。從中看出,軍事類的文章相對偏少,體育類的文章偏多。


二、樸素貝葉斯介紹
1.貝葉斯定理
貝葉斯定理是關于隨機事件 A 和 B 的條件概率:

其中,P(A)是A的先驗概率,之所以稱為“先驗”是因為它不考慮任何B方面的因素。P(A|B)是已知B發生后A的條件概率,也由于得自B的取值而被稱作A 的后驗概率。P(B|A)是已知A發生后B的條件概率,也由于得自A的取值而被稱作B的后驗概率。P(B)是B的先驗概率,也稱作標淮化常量(normalizing constant)。按這些術語,貝葉斯定理可表述為:
后驗概率 = (相似度 * 先驗概率)/標淮化常量
2****.貝葉斯概率觀
一般學院派的概率觀可以稱作頻率主義。一個事件,如果重復獨立地執行多次,把發生的次數除以執行的次數,就得到一個頻率。比如說拋硬幣,拋了10000次,有4976次正面向上,頻率就是0.4976。然后如果執行的次數很多很多,頻率會趨向于一個固定的值,就是這個事件的概率。理論基礎是中心極限定理。
貝葉斯概率觀與此很不同。主觀貝葉斯主義認為,概率就是個人對某個事件發生可能性的一個估計。如果對一個事件你一無所知,那么你可以隨便猜一個概率。但因為是估計,如果有新的信息,那就必須根據新信息對概率進行修正。這樣的話,隨著經歷越來越多,對概率的估計也會越來越符合“實際情況”。
3.樸素貝葉斯分類器
分類器基本原理:
對一個多維的輸入向量x,根據貝葉斯公式,有:

條件獨立性假設:

放到自然語言分類器的應用中理解,就是在給定文本的類別的條件下,文本中出現的詞的概率是相互獨立的。樸素貝葉斯之所以“樸素”,就是因為條件獨立性假設是一個較強的假設。于是:


從自然語言分類的角度上說,一個文本屬于哪個類,要計算所有類別的先驗概率和所有詞在相應類別下的后驗概率,再一起乘起來,哪個類別對應的值最大,就歸為哪類。

三、分類器實現
1.數據預處理
文本放到分類器中分類,必須先將文本數據向量化,因為scikit-learn的分類器大多輸入的數據類型都是numpy數組和類似的類型。這一步可以通過scikit-learn中特征抽取模塊feature_extraction中text.CountVectorizer、text.TfidfVectorizer和text.HashingVectorizer實現。
特征哈希:特征哈希是一種處理高維數據的技術,并經常被應用在文本和分類數據集。特征哈希不需要像其他向量化工具一樣,需要額外對數據集做一次遍歷。特征哈希通過使用哈希方差對特征賦予向量下標,這個向量下標是通過對特征,例如,單詞“美國”計算的哈希值是342,那么向量中下標是342的那個元素,值加1。特征哈希的優勢在于不需要構建映射并把它保存到內存中,但是需要預先選擇特征向量的大小。
另外,在向量化之前,還有一步是十分必要的。上述的方法是針對英文設計實現的,因此接收的數據類型也是默認通過空格的截斷獲取分詞結果。因此要講中文向量化,必須要先分詞。這一步我們通過jieba實現。最后的輸入文本類似圖3這樣的格式。CountVectorize的轉換結果如圖4,向量的每個值代表一個詞出現的個數。HashingVectorizer的轉換結果如圖5。TfidfVectorizer的轉換結果如圖6,這里我們設置參數use_idf=False,即只使用tf,但并不等同于CountVectorize,而是相當于個數+歸一化。

2.調參
確定了模型之后,可以直接使用Scikit-learn中的GridSearchCV來尋找最佳超參數。
另外一個提高準確率的技巧是刪除停用詞。之前分詞的過程中使用的是通用的中文停用詞,比如“這”,“那”等沒有實際語義的詞。但是這里對于文章的分類來說還有一些高頻出現但是對主題沒有影響的詞,即便他們本身是有語義的。比如“時間”、“圖”等。

3.組合
組合技術即通過聚集多個分類器的預測來提高分類準確率。常用的組合分類器方法:
1)裝袋(bagging):根據均勻概率分布從數據集中重復抽樣(有放回),每個自助樣本集和原數據集一樣大,每個自助樣本集含有原數據集大約63%的數據。訓練k個分類器,測試樣本被指派到得票最高的類。
2)提升(boosting):通過給樣本設置不同的權值,每輪迭代調整權值。不同的提升算法之間的差別,一般是(1)如何更新樣本的權值;(2)如何組合每個分類器的預測。其中在Adaboost中,樣本權值是增加那些被錯誤分類的樣本的權值,分類器C_i的重要性依賴于它的錯誤率。
這里使用BaggingClassifier對原分類器進行裝袋組合,準確率有所提升。
四、分類器評估
使用scikit-learn提供的classification_report獲得分類報告如圖8。使用condusion_matrix獲得分類混淆矩陣如圖9。交叉驗證的結果如圖10。可見,取得了較理想的分類表現。圖11是部分分類結果。

關注微信公眾號“IBM數據科學家”,喜歡我們就訂閱吧!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,606評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,582評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,540評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,028評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,801評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,223評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,294評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,442評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,976評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,800評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,996評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,543評論 5 360
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,233評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,662評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,926評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,702評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,991評論 2 374

推薦閱讀更多精彩內容