奮戰聊天機器人(四)自然語言處理中的文本分類

文本分類是機器學習在自然語言處理中的最常用也是最基礎的應用,機器學習相關內容可以直接看我的有關scikit-learn相關教程,本節直接涉及nltk中的機器學習相關內容

預備

機器學習的過程是訓練模型和使用模型的過程,訓練就是基於已知數據做統計學習,使用就是用統計學習好的模型來計算未知的數據。

機器學習分爲有監督學習和無監督學習,文本分類也分爲有監督的分類和無監督的分類。有監督就是訓練的樣本數據有了確定的判斷,基於這些已有的判斷來斷定新的數據,無監督就是訓練的樣本數據沒有什麼判斷,完全自發的生成結論。

無論監督學習還是無監督學習,都是通過某種算法來實現,而這種算法可以有多重選擇,貝葉斯就是其中一種。在多種算法中如何選擇最適合的,這纔是機器學習最難的事情,也是最高境界。

nltk中的貝葉斯分類器

貝葉斯是概率論的鼻祖,貝葉斯定理是關於隨機事件的條件概率的一則定理,貝葉斯公式是:

P(B|A)=P(A|B)P(B)/P(A);即,已知P(A|B),P(A)和P(B)可以計算出P(B|A)。

貝葉斯分類器就是基於貝葉斯概率理論設計的分類器算法,nltk庫中已經實現,具體用法如下:

# encoding:utf-8

import nltk

my_train_set = [
    ({'feature1': u'a'}, '1'),
    ({'feature1': u'a'}, '2'),
    ({'feature1': u'a'}, '3'),
    ({'feature1': u'a'}, '3'),
    ({'feature1': u'b'}, '2'),
    ({'feature1': u'b'}, '2'),
    ({'feature1': u'b'}, '2'),
    ({'feature1': u'b'}, '2'),
    ({'feature1': u'b'}, '2'),
    ({'feature1': u'b'}, '2'),
]
classifier = nltk.NaiveBayesClassifier.train(my_train_set)
print(classifier.classify({'feature1': u'a'}))
print(classifier.classify({'feature1': u'b'}))

文檔分類

不管是什麼分類,最重要的是要知道哪些特徵最能反映這個分類的特點,也就是特徵選取。
文檔分類使用的特徵就最能代表這個分類的詞

因爲對文檔分類要經過訓練和預測兩個過程,而特徵的提取是這兩個過程都需要的,所以,習慣上我們會把特徵提取單獨抽象出來作爲一個公共方法,比如:

from nltk.corpus import movie_reviews
all_words = nltk.FreeDist(w.lower() for w in movie_reviews.words())
word_features = all_words.keys()[:2000]
def document_features(document):
    for word in word)features:
        features['contains(%s)' % word] = (word in document_words)
    return features

這是一個簡單的特徵提取過程,前兩行找到movie_reviews語料庫中出現詞頻最高的2000個詞作爲特徵,下面定義的函數就是特徵提取函數,每個特徵都是形如contains(*)的key,value就是True或False,表示這個詞是否在文檔中出現

那麼我們訓練的過程就是:

featuresets = [(document_features(d), c) for (d,c) in documents]
classifier = nltk.NaiveBayesClassifier.train(featuresets)

要預測一個新的文檔時:

classifier.classify(document_features(d))

通過

classifier.show_most_informative_features(5)

可以找到最優信息量的特徵,這對我們選取特徵是非常有幫助的

其他文本分類

文本分類除了文檔分類外還有許多其他類型的分類,比如:

詞性標註:屬於一種文本分類,一般是基於上下文語境的文本分類

句子分割:屬於標點符號的分類任務,它的特徵一般選取爲單獨句子標識符的合併鏈表、數據特徵(下一個詞是否大寫、前一個詞是什麼、前一個詞長度……)

識別對話行爲類型:對話行爲類型是指問候、問題、回答、斷言、說明等

識別文字蘊含:即一個句子是否能得出另外一個句子的結論,這可以認爲是真假標籤的分類任務。這是一個有挑戰的事情

參考資料來源:http://www.shareditor.com/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章