Как постепенно обучать классификатор NLTK - PullRequest
17 голосов
/ 05 февраля 2011

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

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

Ответы [ 3 ]

8 голосов
/ 05 февраля 2011

Есть 2 варианта, которые я знаю:

1) Периодически переучивать классификатор на новые данные. Вы накапливаете новые тренировочные данные в корпусе (который уже содержит исходные тренировочные данные), а затем каждые несколько часов переучиваете и перезагружаете классификатор. Это, наверное, самое простое решение.

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

0 голосов
/ 05 декабря 2014

Как сказал Иаков, второй метод - верный путь И, надеюсь, кто-то напишет код

Смотри

https://baali.wordpress.com/2012/01/25/incrementally-training-nltk-classifier/

0 голосов
/ 24 марта 2014

Я только изучаю NLTK, поэтому, пожалуйста, поправьте меня, если я ошибаюсь.При этом используется ветка NLTK Python 3. Это может быть несовместимо.

Для экземпляра NaiveBayesClassifier существует метод update(), который, по-видимому, добавляет к обучающим данным:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...