Nltk наивная проблема памяти байесовского классификатора - PullRequest
1 голос
/ 15 марта 2012

мой первый пост здесь!У меня проблемы с использованием nltk NaiveBayesClassifier.У меня есть тренировочный набор из 7000 предметов.Каждый учебный предмет имеет описание 2 или 3 миров и код.Я хотел бы использовать код в качестве метки класса и каждый мир описания в качестве функций.Пример:

«Меня зовут Обама», 001 ...

Набор тренировок = {[feature ['My'] = True, feature ['name'] = True, feature['is'] = True, функция [Obama] = True], 001}

К сожалению, при использовании этого подхода в учебной процедуре NaiveBayesClassifier.train используется до 3 ГБ оперативной памяти. Что не так в моем подходе?Спасибо!

def document_features(document): # feature extractor
document = set(document)
return dict((w, True) for w in document)

...
words=set()
entries = []
train_set= []
train_length = 2000
readfile = open("atcname.pl", 'r')
t = readfile.readline()
while (t!=""):
  t = t.split("'")
  code = t[0] #class
  desc = t[1] # description
  words = words.union(s) #update dictionary with the new words in the description
  entries.append((s,code))
  t = readfile.readline()
train_set = classify.util.apply_features(document_features, entries[:train_length])
classifier = NaiveBayesClassifier.train(train_set) # Training

1 Ответ

5 голосов
/ 15 марта 2012

Используйте nltk.classify.apply_features, который возвращает объект, который действует как список, но не хранит все наборы функций в памяти.

from nltk.classify import apply_features

Дополнительная информация и пример здесь

В любом случае, вы загружаете файл в память, вам нужно будет использовать ленивый метод загрузки. Который будет загружаться в соответствии с необходимостью. Подумайте о том, чтобы заглянуть в этот

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...