Я использую Textblob MaxEntClassifier для анализа настроений, только положительные и отрицательные классы. На довольно небольшом тренировочном наборе, 3800 коротких твитов, тренировка занимает слишком много времени, примерно час и 15 минут. TextBlob проходит «Обучение (100 итераций)», даже когда после 32 итерации логарифмическая вероятность и точность перестали меняться. (С другой стороны, у меня 12 ГБ ОЗУ и процессор 3,4 ГГц, а в фоновом режиме не так уж и много).
Я вижу, что Textblob MaxEntClassifier является оберткой вокруг NLTK. Я нашел в Textblob docs , в котором упоминалось: "train (* args, ** kwargs) - обучить классификатор с помощью маркированного набора функций и вернуть классификатор. Принимает те же аргументы, что и класс NLTK в оболочке ... "
Поскольку поезд TextBlob MaxEntClassifier принимает те же аргументы, что и обернутый класс NLTK, я просмотрел документы NLTK на предмет параметра, который может сократить время обучения. В NLTK.classify документах под классификатором MaxEnt я нашел параметр "min_lldelta = v: Завершить, если одна итерация повышает вероятность записи журнала менее чем на v". Я надеялся, что смогу передать этот параметр через TextBlob в классификатор NLTK, чтобы сократить время обучения, однако это, похоже, игнорируется.
Можно ли передать max_iter, min_ll или min_lldelta через MaxEntClassifier Textblob в NLTK, чтобы сократить время обучения? Если нет, есть ли другие способы сократить это время обучения?
Мой фрагмент ниже:
# Most code below from: https://stevenloria.com/simple-text-classification/
from textblob.classifiers import MaxEntClassifier
train = [
('I love this sandwich.', 'pos'),
('This is an amazing place!', 'pos'),
('I feel very good about these beers.', 'pos'),
('This is my best work.', 'pos'),
("What an awesome view", 'pos'),
('I do not like this restaurant', 'neg'),
('I am tired of this stuff.', 'neg'),
("I can't deal with this", 'neg'),
('He is my sworn enemy!', 'neg'),
('My boss is horrible.', 'neg')
]
test = [
('The beer was good.', 'pos'),
('I do not enjoy my job', 'neg'),
("I ain't feeling dandy today.", 'neg'),
("I feel amazing!", 'pos'),
('Gary is a friend of mine.', 'pos'),
("I can't believe I'm doing this.", 'neg')
]
print("\nTraining...")
classifier = MaxEntClassifier(train, min_lldelta = 0.5)
print("\nkwargs: ", classifier.format_kwargs)
print("\nTesting...")
results = classifier.accuracy(test)