2017-08-02 73 views
0

我在機器學習是一個新手,我建立一個投訴分類,我想提供一個反饋模型,以便它可以改善隨着時間的推移反饋在NaiveBayes文本分類

import numpy 
from sklearn.feature_extraction.text import CountVectorizer 
from sklearn.naive_bayes import MultinomialNB 
value=[ 
'drought', 
'robber', 
] 
targets=[ 
'water_department', 
'police_department', 
] 
classifier = MultinomialNB()   
vectorizer = CountVectorizer() 
counts = vectorizer.fit_transform(value) 

classifier.partial_fit(counts[:1], targets[:1],classes=numpy.unique(targets)) 
for c,t in zip(counts[1:],targets[1:]): 
    classifier.partial_fit(c, t.split()) 

value.append('dogs')         #new value to train 
targets.append('animal_department')     #new target 
vectorize = CountVectorizer() 
counts = vectorize.fit_transform(value) 
print counts 
print targets 
print vectorize.vocabulary_ 
####problem lies here 
classifier.partial_fit(counts["""dont know the index of new value"""], targets[-1]) 
####problem lies here 

即使我莫名其妙地找到新插入值的指數,它是給錯誤

ValueError: Number of features 3 does not match previous data 2. 

甚至認爲我做到了一次插入一個值

+0

你想把「狗」,「草稿」這樣的單詞分爲像「動物」,「水」,「警察」等目標標籤(類)嗎?那麼,爲什麼不使用字典呢? – Debasis

+0

我需要對包含這些單詞的句子進行分類。 –

+0

好吧...那麼在這種情況下......你有一個已知標籤的單詞的詳盡列表嗎?我不清楚你想通過反饋步驟實現什麼?這不是做一個真正的反饋(用戶驅動)...是你想要在你的應用程序中的東西,因此想要以編程方式模擬它?總之,如果我沒有弄錯,你會想要增量培訓嗎? – Debasis

回答

0

我會盡量回答從問題一般的觀點。有在樸素貝葉斯(NB)方法的問題,有兩種來源說明如下:

  1. 超出詞彙(OOV)的問題NB

OOV問題

  • 增量訓練:解決OOV問題最簡單的方法是將每個單詞分解爲3克字符。有多少這樣的3克是可能的?假設下殼體只有26種可能的方式填充每個地方,因此可能的字符3克的總數是26^3 = 17576,這顯着低於你可能看到的可能英文單詞的數量在文本中。因此,一般來說,在訓練NB時,一個好主意是使用字符n-gram的概率(n = 3,4,5)。這將大大減少OOV問題。

    漸進式訓練:對於漸進式訓練,給定一個新句子將其分解爲詞(字母n-gram)。更新其相應的觀察到的類別標籤的每個術語的計數。例如,如果計數(T,C)表示多少次是術語類別c觀察到如果增量訓練期間看到在0類(或類1),簡單地更新計數。更新計數也會更新最大似然概率估計值。