Как поэтапно обучить классификатор nltk
Я работаю над проектом, чтобы классифицировать фрагменты текста, используя модуль python nltk и классификатор naivebayes. Я могу обучать данные о корпусе и классифицировать другой набор данных, но хотел бы поместить дополнительную обучающую информацию в классификатор после начального обучения.
Если я не ошибаюсь, похоже, нет способа сделать это, потому что метод NaiveBayesClassifier.train принимает полный набор данных обучения. Есть ли способ добавить к учебным данным, не загружая оригинальный набор функций?
Я открыт для предложений, включая другие классификаторы, которые могут принимать новые данные обучения с течением времени.
Ответы
Ответ 1
Есть два варианта, о которых я знаю:
1) Периодически переустанавливайте классификатор на новые данные. Вы накапливали новые данные обучения в корпусе (который уже содержит исходные данные обучения), затем каждые несколько часов переучивать и перезагружать классификатор. Это, вероятно, самое простое решение.
2) Извлеките внутреннюю модель, затем обновите ее вручную. NaiveBayesClassifier
можно создать напрямую, указав label_prodist
и feature_probdist
. Вы можете создать их отдельно, передать их в NaiveBayesClassifier
, а затем обновить их всякий раз, когда появятся новые данные. Классификатор будет использовать эти новые данные немедленно. Вы должны посмотреть на метод train
для получения подробной информации о том, как обновлять распределения вероятностей.
Ответ 2
Я просто изучаю NLTK, поэтому, пожалуйста, поправьте меня, если я ошибаюсь. Это использует ветвь Python 3 NLTK, которая может быть несовместимой.
Существует метод update()
для экземпляра NaiveBayesClassifier
, который, как представляется, добавляет к данным обучения:
from textblob.classifiers import NaiveBayesClassifier
train = [
('training test totally tubular', 't'),
]
cl = NaiveBayesClassifier(train)
cl.update([('super speeding special sport', 's')])
print('t', cl.classify('tubular test'))
print('s', cl.classify('super special'))
Это выдает:
t t
s s
Ответ 3
Как сказал Джейкоб, второй метод - правильный путь
И, надеюсь, кто-то напишет код
Посмотрите
https://baali.wordpress.com/2012/01/25/incrementally-training-nltk-classifier/