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

概述
自然語言分類是指按照預先定義的主題類別剑鞍,為文檔集合中的每個文檔確定一個類別弟晚。本文將介紹一個限定類別的自然語言分類器的原理和實現(xiàn)芥炭。采用Python作為編程語言晴股,采用樸素貝葉斯作為分類器调榄,使用jieba進行分詞踊赠,并使用scikit-learn實現(xiàn)分類器。
訓練數(shù)據(jù)來自于鳳凰網(wǎng)每庆,最終交叉驗證的平均準確率是0.927筐带。
一、訓練數(shù)據(jù)獲取
中文自然語言分類現(xiàn)成可用的有搜狗自然語言分類語料庫缤灵、北京大學建立的人民日報語料庫伦籍、清華大學建立的現(xiàn)代漢語語料庫等蓝晒。由于語言在使用過程中會不斷演進,具有一定的時效性帖鸦,我們最終決定自己開發(fā)爬蟲爬取訓練數(shù)據(jù)芝薇。經(jīng)過綜合考慮,我們最終將目標選定為鳳凰網(wǎng)作儿。
我們選取鳳凰網(wǎng)移動版開展數(shù)據(jù)獲取工作洛二,地址為http://i.ifeng.com/ 如圖1所示。移動版的頁面布局簡單清晰攻锰,但由于文章列表采用了下拉刷新的動態(tài)更新策略晾嘶,直接解析頁面源碼效率太低,最終決定直接調(diào)用網(wǎng)頁api獲取口注。比如獲取十條鳳凰“軍事”的內(nèi)容变擒,訪問http://imil.ifeng.com/20_2/data.shtml 返回結果如圖2左。最終獲取到4784條新聞寝志,都保存到MySQL數(shù)據(jù)庫,具體數(shù)據(jù)如圖2右策添。從中看出材部,軍事類的文章相對偏少,體育類的文章偏多唯竹。


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

其中,P(A)是A的先驗概率浸颓,之所以稱為“先驗”是因為它不考慮任何B方面的因素物臂。P(A|B)是已知B發(fā)生后A的條件概率,也由于得自B的取值而被稱作A 的后驗概率产上。P(B|A)是已知A發(fā)生后B的條件概率棵磷,也由于得自A的取值而被稱作B的后驗概率。P(B)是B的先驗概率晋涣,也稱作標淮化常量(normalizing constant)仪媒。按這些術語,貝葉斯定理可表述為:
后驗概率 = (相似度 * 先驗概率)/標淮化常量
2****.貝葉斯概率觀
一般學院派的概率觀可以稱作頻率主義谢鹊。一個事件算吩,如果重復獨立地執(zhí)行多次,把發(fā)生的次數(shù)除以執(zhí)行的次數(shù)佃扼,就得到一個頻率偎巢。比如說拋硬幣,拋了10000次兼耀,有4976次正面向上压昼,頻率就是0.4976挎扰。然后如果執(zhí)行的次數(shù)很多很多,頻率會趨向于一個固定的值巢音,就是這個事件的概率遵倦。理論基礎是中心極限定理。
貝葉斯概率觀與此很不同官撼。主觀貝葉斯主義認為梧躺,概率就是個人對某個事件發(fā)生可能性的一個估計。如果對一個事件你一無所知傲绣,那么你可以隨便猜一個概率掠哥。但因為是估計,如果有新的信息秃诵,那就必須根據(jù)新信息對概率進行修正续搀。這樣的話,隨著經(jīng)歷越來越多菠净,對概率的估計也會越來越符合“實際情況”禁舷。
3.樸素貝葉斯分類器
分類器基本原理:
對一個多維的輸入向量x,根據(jù)貝葉斯公式毅往,有:

條件獨立性假設:

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


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

三溪食、分類器實現(xiàn)
1.數(shù)據(jù)預處理
文本放到分類器中分類囊卜,必須先將文本數(shù)據(jù)向量化,因為scikit-learn的分類器大多輸入的數(shù)據(jù)類型都是numpy數(shù)組和類似的類型错沃。這一步可以通過scikit-learn中特征抽取模塊feature_extraction中text.CountVectorizer栅组、text.TfidfVectorizer和text.HashingVectorizer實現(xiàn)。
特征哈希:特征哈希是一種處理高維數(shù)據(jù)的技術枢析,并經(jīng)常被應用在文本和分類數(shù)據(jù)集玉掸。特征哈希不需要像其他向量化工具一樣,需要額外對數(shù)據(jù)集做一次遍歷醒叁。特征哈希通過使用哈希方差對特征賦予向量下標司浪,這個向量下標是通過對特征泊业,例如,單詞“美國”計算的哈希值是342啊易,那么向量中下標是342的那個元素吁伺,值加1。特征哈希的優(yōu)勢在于不需要構建映射并把它保存到內(nèi)存中租谈,但是需要預先選擇特征向量的大小篮奄。
另外,在向量化之前割去,還有一步是十分必要的窟却。上述的方法是針對英文設計實現(xiàn)的,因此接收的數(shù)據(jù)類型也是默認通過空格的截斷獲取分詞結果呻逆。因此要講中文向量化夸赫,必須要先分詞。這一步我們通過jieba實現(xiàn)咖城。最后的輸入文本類似圖3這樣的格式茬腿。CountVectorize的轉換結果如圖4,向量的每個值代表一個詞出現(xiàn)的個數(shù)酒繁。HashingVectorizer的轉換結果如圖5滓彰。TfidfVectorizer的轉換結果如圖6,這里我們設置參數(shù)use_idf=False州袒,即只使用tf,但并不等同于CountVectorize弓候,而是相當于個數(shù)+歸一化郎哭。

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

3.組合
組合技術即通過聚集多個分類器的預測來提高分類準確率衣吠。常用的組合分類器方法:
1)裝袋(bagging):根據(jù)均勻概率分布從數(shù)據(jù)集中重復抽樣(有放回)茶敏,每個自助樣本集和原數(shù)據(jù)集一樣大,每個自助樣本集含有原數(shù)據(jù)集大約63%的數(shù)據(jù)缚俏。訓練k個分類器惊搏,測試樣本被指派到得票最高的類贮乳。
2)提升(boosting):通過給樣本設置不同的權值,每輪迭代調(diào)整權值恬惯。不同的提升算法之間的差別向拆,一般是(1)如何更新樣本的權值;(2)如何組合每個分類器的預測酪耳。其中在Adaboost中浓恳,樣本權值是增加那些被錯誤分類的樣本的權值,分類器C_i的重要性依賴于它的錯誤率葡兑。
這里使用BaggingClassifier對原分類器進行裝袋組合奖蔓,準確率有所提升。
四讹堤、分類器評估
使用scikit-learn提供的classification_report獲得分類報告如圖8吆鹤。使用condusion_matrix獲得分類混淆矩陣如圖9。交叉驗證的結果如圖10洲守∫晌瘢可見,取得了較理想的分類表現(xiàn)梗醇。圖11是部分分類結果缸逃。

關注微信公眾號“IBM數(shù)據(jù)科學家”右蹦,喜歡我們就訂閱吧!

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蹂风,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌无牵,老刑警劉巖茬祷,帶你破解...
    沈念sama閱讀 222,946評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異竟终,居然都是意外死亡蝠猬,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,336評論 3 399
  • 文/潘曉璐 我一進店門统捶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來榆芦,“玉大人,你說我怎么就攤上這事喘鸟〈倚澹” “怎么了?”我有些...
    開封第一講書人閱讀 169,716評論 0 364
  • 文/不壞的土叔 我叫張陵迷守,是天一觀的道長犬绒。 經(jīng)常有香客問我,道長兑凿,這世上最難降的妖魔是什么凯力? 我笑而不...
    開封第一講書人閱讀 60,222評論 1 300
  • 正文 為了忘掉前任茵瘾,我火速辦了婚禮,結果婚禮上咐鹤,老公的妹妹穿的比我還像新娘拗秘。我一直安慰自己,他們只是感情好祈惶,可當我...
    茶點故事閱讀 69,223評論 6 398
  • 文/花漫 我一把揭開白布雕旨。 她就那樣靜靜地躺著,像睡著了一般捧请。 火紅的嫁衣襯著肌膚如雪凡涩。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,807評論 1 314
  • 那天疹蛉,我揣著相機與錄音活箕,去河邊找鬼。 笑死可款,一個胖子當著我的面吹牛育韩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播闺鲸,決...
    沈念sama閱讀 41,235評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼筋讨,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了摸恍?” 一聲冷哼從身側響起悉罕,我...
    開封第一講書人閱讀 40,189評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎立镶,沒想到半個月后蛮粮,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,712評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡谜慌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,775評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了莺奔。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片欣范。...
    茶點故事閱讀 40,926評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖令哟,靈堂內(nèi)的尸體忽然破棺而出恼琼,到底是詐尸還是另有隱情,我是刑警寧澤屏富,帶...
    沈念sama閱讀 36,580評論 5 351
  • 正文 年R本政府宣布晴竞,位于F島的核電站,受9級特大地震影響狠半,放射性物質(zhì)發(fā)生泄漏噩死。R本人自食惡果不足惜颤难,卻給世界環(huán)境...
    茶點故事閱讀 42,259評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望已维。 院中可真熱鬧行嗤,春花似錦、人聲如沸垛耳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,750評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽堂鲜。三九已至栈雳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間缔莲,已是汗流浹背哥纫。 一陣腳步聲響...
    開封第一講書人閱讀 33,867評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留酌予,地道東北人磺箕。 一個月前我還...
    沈念sama閱讀 49,368評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像抛虫,于是被迫代替她去往敵國和親松靡。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,930評論 2 361

推薦閱讀更多精彩內(nèi)容