Подтвердить что ты не робот

Как поэтапно обучить классификатор nltk

Я работаю над проектом, чтобы классифицировать фрагменты текста, используя модуль python nltk и классификатор naivebayes. Я могу обучать данные о корпусе и классифицировать другой набор данных, но хотел бы поместить дополнительную обучающую информацию в классификатор после начального обучения.

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

Я открыт для предложений, включая другие классификаторы, которые могут принимать новые данные обучения с течением времени.

4b9b3361

Ответ 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