2016-04-30 77 views
0

因爲我們需要在龐大的數據集上訓練分類器,所以我們如何才能爲情感分析製作工作分類器。使用機器學習的情感分析分類器

我有龐大的數據集來訓練,但分類器對象(這裏使用Python),使用3000個單詞時出現內存錯誤。我需要訓練超過100K字。

我認爲是將大數據集分成較小的部分,併爲每個部分分別創建一個分類器對象,並將其存儲在一個pickle文件中並使用它們。但似乎使用所有的分類器對象進行測試是不可能的,因爲它在測試過程中只需要其中一個對象。

我想到的解決方案是將保存在pickle文件中的所有已保存的分類器對象(這不會發生)組合起來,或者用新的訓練集繼續添加同一對象(但同樣,它是被覆蓋並且未被附加)。

我不知道爲什麼,但即使是機器學習的基礎,我也找不到解決方案。每個機器學習項目都需要接受大量數據集的訓練,並且用於訓練這些數據集的對象大小總是會導致內存錯誤。

那麼,如何解決這個問題呢?我願意接受任何解決方案,但希望聽到做實時機器學習項目的人員後續工作。

代碼段:

documents = [(list(movie_reviews.words(fileid)), category) 
      for category in movie_reviews.categories() 
      for fileid in movie_reviews.fileids(category)] 

all_words = [] 
for w in movie_reviews.words(): 
    all_words.append(w.lower()) 
all_words = nltk.FreqDist(all_words) 
word_features = list(all_words.keys())[:3000] 

def find_features(document): 
    words = set(document) 
    features = {} 
    for w in word_features: 
     features[w] = (w in words) 
    return features 

featuresets = [(find_features(rev), category) for (rev, category) in documents] 
numtrain = int(len(documents) * 90/100) 
training_set = featuresets[:numtrain] 
testing_set = featuresets[numtrain:] 

classifier = nltk.NaiveBayesClassifier.train(training_set) 

PS:我使用使用NaiveBayes的NLTK工具包。我的訓練數據集正在打開並存儲在documents中。

回答

1

有你似乎缺少了兩兩件事:

  1. 數據集的文本通常是非常稀少的,你應該並將其作爲稀疏矩陣。對於這樣的表示,你應該能夠用詞彙在你的記憶中存儲數以百萬計的文件。 100,000。

  2. 許多現代學習方法都是在小批量情況下進行培訓的,這意味着您從不需要整個數據集在內存中,而是將其饋送到具有隨機數據子集的模型 - 但仍然需要培訓單個模型。這樣,您的數據集可以是任意大的,內存消耗是恆定的(通過小批量大小來確定),並且只有樣本數量的訓練時間比例。

+0

我有我的文本數據形式的文件。每個文件都有幾句話。像這樣我有成千上萬的文件。解析所有這些文檔並不會給我帶來任何問題。但是我選擇培訓的詞彙數量確實如此。如果我選擇超過3000個單詞,那麼它會開始提供詞典錯誤。 – Arkham

+0

它不像「字典錯誤」這樣的事情 - 這看起來像是一些特定的實現問題,因此沒有確切的代碼就不可能跟蹤這個特定的問題。正如答案中所示 - 現代ML技術沒有這樣的限制,因此問題出在你的代碼上,而不是ML中使用的方法。 – lejlot

+0

我發佈了代碼片段,我使用的是3000個單詞。 – Arkham