【NLP实战系列】朴素贝叶斯文本分类实战
實戰是學習一門技術最好的方式,也是深入了解一門技術唯一的方式。因此,NLP專欄計劃推出一個實戰專欄,讓有興趣的同學在看文章之余也可以自己動手試一試。
本篇介紹自然語言處理中一種比較簡單,但是有效的文本分類手段:樸素貝葉斯模型。
作者&編輯 | 小Dream哥
1 樸素貝葉斯介紹?
貝葉斯決策論是在統計概率框架下進行分類決策的基本方法。對于分類任務來說,在所有相關概率都已知的情況下,貝葉斯決策論考慮如何基于這些概率和誤判損失來預測分類。
樸素貝葉斯模型在訓練過程,利用數據集D,計算P(c),P(x_i|c)。在預測時,輸入樣本,利用貝葉斯公式,計算n個類別的概率,最后輸出概率最大的那個類別,作為預測的類別。
樸素貝葉斯模型分類的理論相關知識,在文章中有詳細的介紹,感興趣或者不清楚的朋友可以出門左轉,再看一下。
假如我們有語料集D,文本可分為(c_1,c_2,...,c_n)個類別,我們根據語料集D,計算每個類別出現的概率P(c_i),以及當文本類別為c_i時,詞x_i出現的概率P(x_i|c_i)。這樣一個由m個詞構成的文本(x_1,x_2,...,x_m)就可以根據上述公式預測出文本是各個類別的概率。
2 NLTK
Natural Language Toolkit,NLTK是一個開源的項目,包含:Python模塊,數據集和教程,用于NLP的研究和開發,是一個不錯的python工具包。此次我們介紹用NLTK里的NaiveBayesClassifier模塊,來進行文本分類。
3 數據集準備
因為是文本分類任務,所以數據集是按類別分好的一系列文本,如下圖所示:
這里因為只是展示,數據集比較簡單,只有3個類別。在一個類別內,每條數據之間用分號隔開。
4 數據讀取
數據讀取的代碼如下所示:
#1 進行數據讀取
def read_data(filename):# 最后返回的是一個列表,結構如下[('我要打車','get_a_taxi'),('明天天氣怎么樣','get_weather')。。。]
數據讀取過程的任務很簡單,就是從語料文件中將語料讀到內存中,組織成一個列表,列表中每一項組成為(data,label),如('明天天氣怎么樣','get_weather')。
5 特征選擇及訓練數據集構建
利用分詞后的詞性作為訓練數據特征。最后喂給模型的數據是一個類似這樣的列表:
[({“t”:“明天”,“n”:“天氣”,“r”:“怎么樣” }, 'get_weather') ,... ]
#2.1 停用詞處理#2 進行特征選擇,這里利用分詞后的詞性作為特征
#3 構建訓練數據集
6 訓練及預測
訓練及預測的過程很簡單,就是調用NLTK的NaiveBayesClassifier模塊,代碼如下:
#訓練模型
classifier = nltk.NaiveBayesClassifier.train(? ? ??
? ? ? ? ? ? ? ? ? ?get_features_sets('data.txt') )
#預測某一個文本的類別
print(predict_label) ? ?## get_weather
#預測某一個文本為某一個類別的概率print(classifier.prob_classify(get_word_features('請問明天的天氣怎么樣?')).prob(predict_label)) # 0.995154
我們展示一下預測的結果:
至此,介紹了如何利用NLTK的NaiveBayesClassifier模塊進行文本分類,代碼在我們有三AI的github可以下載:
https://github.com/longpeng2008/yousan.ai/tree/master/natural_language_processing
找到intention文件夾,執行python3 intent_recognition.py就可以運行了。
總結
文本分類常常用于情感分析、意圖識別等NLP相關的任務中,是一個非常常見的任務,樸素貝葉斯本質上統計語料中對應類別中相關詞出現的頻率,并依此來預測測試文本。總的來說,它是一種非常便捷,效果可以接受的方法。
我們也會在知識星球討論其他文本分類方法,感興趣掃描下面的二維碼了解。
讀者們可以留言,或者加入我們的NLP群進行討論。感興趣的同學可以微信搜索jen104,備注"加入有三AI NLP群"。
下期預告:命名實體識別實踐
知識星球推薦
掃描上面的二維碼,就可以加入我們的星球,助你成長為一名合格的自然語言處理算法工程師。
知識星球主要有以下內容:
(1) 聊天機器人??紤]到聊天機器人是一個非常復雜的NLP應用場景,幾乎涵蓋了所有的NLP任務及應用。所以小Dream哥計劃以聊天機器人作為切入點,通過介紹聊天機器人的原理和實踐,逐步系統的更新到大部分NLP的知識,會包括語義匹配,文本分類,意圖識別,語義匹配命名實體識別、對話管理以及分詞等。
(2) 知識圖譜。知識圖譜對于NLP各項任務效果好壞的重要性,就好比基礎知識對于一個學生成績好壞的重要性。他是NLP最重要的基礎設施,目前各大公司都在著力打造知識圖譜,作為一個NLP工程師,必須要熟悉和了解他。
(3) NLP預訓練模型。基于海量數據,進行超大規模網絡的無監督預訓練。具體的任務再通過少量的樣本進行Fine-Tune。這樣模式是目前NLP領域最火熱的模式,很有可能引領NLP進入一個全新發展高度。你怎么不深入的了解?
轉載文章請后臺聯系
侵權必究
往期精選
總結
以上是生活随笔為你收集整理的【NLP实战系列】朴素贝叶斯文本分类实战的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【每周CV论文推荐】 初学深度学习人脸关
- 下一篇: 【NLP-ChatBot】能干活的聊天机