2016-04-30 6 views
0

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

У меня есть огромный набор данных для обучения, но объект-классификатор (здесь используется Python) дает ошибку памяти при использовании 3000 слов. И мне нужно тренироваться более чем на 100 тыс. Слов.

То, что я думал, делит огромный набор данных на более мелкие части и делает объект классификатора для каждого и сохраняет его в файле 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: Я использую инструментарий NLTK с помощью NaiveBayes. Мой учебный набор данных открывается и хранится в documents.

ответ

1

Есть две вещи, которые кажутся вам не хватать:

  1. Datasets для текста, как правило, крайне редки, и вы должны хранить их в качестве разреженных матриц. Для такого представления вы должны иметь возможность хранить миллионы документов в вашей памяти с помощью vocab. из 100 000.

  2. Многие современные методы обучения обучаются в мини-пакетном сценарии, а это значит, что вам никогда не нужен цельный набор данных в памяти, вместо этого вы передаете его модели со случайными подмножествами данных, но все же обучаете одну модель. Таким образом, ваш набор данных может быть произвольным большим, потребление памяти постоянным (фиксируется размером мини-бара), и только время обучения увеличивается с количеством выборок.

+0

У меня есть текстовые данные в виде документов. В каждом документе есть несколько предложений. У меня есть тысячи документов. Анализ всех этих документов не дает мне проблемы. Но количество слов, которые я выбираю для обучения, есть. Если я выберу более 3000 слов, тогда он начнет давать ошибку словаря. – Arkham

+0

ther e не такая вещь, как «ошибка словаря» - это похоже на какую-то конкретную проблему реализации, поэтому без точного кода невозможно отследить эту конкретную проблему. Как показано в ответе - таких ограничений для современных методов ML нет, поэтому проблема заключается в вашем коде, а не в методах ML. – lejlot

+0

Я разместил фрагмент кода, где я использую 3000 слов. – Arkham

Смежные вопросы